Hey Kohei,

On Thu, Aug 28, 2025 at 10:26 AM Kohei Yoshida <ko...@libreoffice.org>
wrote:

> Hi Markus,
>
> Good to see you again after a long hiatus. :-)
>

Great to see you too.


> On 8/10/25 16:55, Markus Mohrhard wrote:
>
> Attached are two screenshots showing a comparison between the MSO Excel
> rendering of my test document and the current Calc rendering.
>
> I think the rendering looks decent, even without font handling.
>
>
>    - font formatting is not implemented at all. Font handling is a lot
>    more complicated than background and border handling
>
> Indeed.  I just looked through the code in question, and the complexity is
> quite high there. Lots of special case handling...
>
>
>    - unit tests are completely missing
>
> I don't think that's a big deal especially for rendering features.
>
>
>    - link between table style and DB goes through the name instead of a
>    reference to the actual table definition
>
> I think that's fine as well. If we decide later that there is a better way
> we can switch to that.
>
>
>    - The autoformat feature should be removed and folded into the table
>    style implementation which would also provide a UI for modifying table
>    styles.
>
> Auto format is such an outdated concept that I don't think anyone would
> miss it. Now, a UI for modifying table styles, that can be done in a
> separate step at least initially especially when availability of time (your
> time) is limited.
>

As far as I know there is a GSOC project that will implement a new UI for
table styles/autoformat. I would reuse that UI and just replace the
existing autoformat feature.


>
>    - merged cells are not handled at all right now
>
> A corner case that can be handled later, if it's really needed.
>
>
>    - some UNO interfaces to interact with this feature
>
> ... can definitely wait. :-)
>
>
> Additionally, I might fix the following database range related issues
> before merging if I continue with the current design:
>
> No objections from me.
>
> Now to the part that I'm not happy with and why I think someone else might
> want to have a second look at the ideas behind this change:
>
>
>    - Storing the table style information purely on the ScDBData makes
>    some operations quite easy but at the same time makes the code in
>    ScDocument::FillInfo a lot more complicated. At the same time I have
>    not come up with a design that would allow us to avoid the position
>    dependent property lookup during FillInfo. We could store a reference to
>    the table style in the ScPatternAttr but then we need to keep the ScDBData
>    range and the ScPatternAttr in sync. In my mind the table style information
>    is not a cell attribute until the rendering stage.
>
> Table style information IMO is definitely not a cell attribute as you
> say.  In terms of how to store the table style information, I don't have a
> strong opinion, but maybe you can try storing it outside of ScDBData and
> use ScDBData's name as a way to reference it.  I would personally avoid
> touching ScPatternAttr for this feature, unless you absolutely have to.
>
>
>    - Adding font handling is going to be painful as the font lookup is
>    delayed until the actual drawing
>       - My current idea would be to store a reference to the table style
>       and a struct storing the style lookup information, e.g. this cell looks 
> at
>       first column stripe, second row stripe and whole table item sets. This 
> way
>       the information only needs to be computed once and the lookup for all 
> the
>       font properties can be done reasonably quickly.
>       - Potentially this could also be done by combining the handling of
>       conditional formatting and table styles. In theory a slightly cleaner
>       approach would be to have a list of SfxItemSet instances that are 
> checked
>       in order until an explicitly set item was found. That way there is no 
> need
>       to encode application layer information into the rendering code.
>
> Sounds sensible to me.  Conditional formatting is probably the closest
> feature in terms of applying extra font attributes, so it makes sense to
> keep the new logic close to it.
>
>
>    - The fix for the border drawing issue mentioned above requires the
>    dynamic generation of new border items that can be passed through
>    ScDocument::FillInfo to the rendering code or a rework of the border
>    rendering.
>
> I think FillInfo itself could use some rework. ;-)  It's screaming for
> rework every time I look at it...  Way too much logic is lumped into one
> function body... But honestly I haven't spent that much time struggling
> with this part of the Calc code, so take this with a grain of salt.
>
> I'd appreciate feedback from some other Calc developers about the design
> and whether it is worth continuing with this design.
>
> I think it's well worth pursuing, if you are willing.
>

Thanks for the kind words.

Cheers,
Markus

My 2 cents.
> Kohei
>

Reply via email to