Date: prev next · Thread: first prev next last
2019 Archives by date, by thread · List index


On 8 Jul 2019, at 9:06 pm, Tomaž Vajngerl <quikee@gmail.com> wrote:

Hi,

On 06.07.19 19:59, Adrien Ollier wrote:
....

Well IMHO the problem that you even have to think about this is that OutputDevice is a enormous 
class, and then you have to deal with another even more enormous subclass vcl::Window, which 
should never be a subclass of OutputDevice in the first place. However the work to change that is 
quite big and non-trivial. Once that is done I'm sure the need that a user needs to know with 
what subclass of OutputDevice it deals with will be mostly gone. Until then I'm also comfortable 
with the status quo and still have the enum and work with conditions for the outside use. From 
inside the hierarchy of course it is better to use polymorphism. 

Regards, Tomaž

I have to agree with this. In actual fact, I have long thought that OutputDevice is a misnomer 
anyway, because:

1. It’s not a “device”
2. It deals with things other than output - it also handles input!

I like the idea of gradually moving it to RenderContext.

The class definitely needs splitting up, but it’s very difficult to do as so many other classes use 
it and rely on it. 

But getting back to the bug: I have been looking at each area and I’m starting with some 
low-hanging fruit to start with:

https://gerrit.libreoffice.org/#/c/75521/ <https://gerrit.libreoffice.org/#/c/75521/> - changes 
GetBackground().GetColor() to GetBackgroundColor() - turns out that this allows us to remove at 
least one area that removes the need for GetOutDevType in SmTmpDevice::Impl_GetColor()

https://gerrit.libreoffice.org/#/c/75524/ <https://gerrit.libreoffice.org/#/c/75524/> - further 
follows this up by introducing a new function GetReadableFontColor() and overrides this for Printer

https://gerrit.libreoffice.org/#/c/75556/ <https://gerrit.libreoffice.org/#/c/75556/> - moves some 
code into Window::SaveBackground() and creates an OutputDevice::SaveBackground() for all other 
cases. 

https://gerrit.libreoffice.org/#/c/75616/ <https://gerrit.libreoffice.org/#/c/75616/> - makes 
Flush() a virtual function introduced in OutputDevice - it’s a noop as there is no need to do any 
flushes in OutputDevice but if any subclasses need to flush their buffers then it can be 
overridden. 

https://gerrit.libreoffice.org/#/c/75641/ <https://gerrit.libreoffice.org/#/c/75641/> makes 
ExpandPaintClipRegion() and virtual function of OutputDevice

These are all small changes, I’m hoping that they are reasonable!

I’m fairly confident that we can actually start to eliminate GetOutDevType() without resorting to 
dynamic_cast<> hackiness. 

There are a few hairy bits of the code (in particular svx) that are going to be harder to refactor, 
but again, in time I think we can resolve this. 

Ultimately, if we can seperate OutputDevice from Window, VirtualDevice and Printer then I’m pretty 
certain we can make OutputDevice smaller and more focussed, and eventually even get to the Holy 
Grail of making it a true RenderContext. 

Chris




Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.