• Armin Le Grand's avatar
    Support buffering SystemDependent GraphicData · b9fa01a8
    Armin Le Grand yazdı
    This is a first step to allow buffering of system
    dependent data, especially (but not only) for the
    system-dependent implementations of graphic output.
    For example, for B2DPolygon and Win output, it allows
    buffering the Gdiplus::GraphicsPath instead of re-
    creating it all the time.
    To support that, the change includes forwarding the
    current transformation to the renderers in SalGraphics.
    The current state in VCL is to transform all and
    everything to device coordinates at every single
    paint.
    I have currently started to do this for ::drawPolyLine
    implementations. The fallbacks for all systems will
    at the start of that method just transform the data
    to device coordinates, so all works as before.
    This may also be done for FilledPolygon paint in a later
    step, but most urgent is FatLine painting.
    An arrangement of shared_ptr/weak_ptr is used so that
    either the instance buffering (in the example B2DPolygon)
    or the instance managing it can delete it. The instance
    managing it currently uses a 1s Timer and a cycle-lifetime
    management, but that can be extended in the future
    to e.g. include size hints, too.
    The mechanism it designed to support multiple Data per
    buffering element, e.g. for B2DPolygon at the same time
    system-dependent instances of Gdiplus and Cairo can be
    buffered, but also PDF-data.
    This is achieved semi-automatic by using
    typeid(class).hash_code() as key for organization.
    The mechanism will be used for now at B2DPolygon, but
    is not limited to. There is already a similar but less
    general buffer (see GdiPlusBuffer) that can and will
    be converted to use this new mechanism.
    
    Added vcl/headless Cairo renderer to support given
    ObjectToDevice transformation (not to transform given
    B2DPolygon)
    Added support for CairoPath buffered at B2DPolygon,
    seems to work well. Need to do more tests
    
    Moved usage to templates suggested by Noel Grandin
    (Noel Grandin <noelgrandin@gmail.com>), thanks for
    these suggestions. Adapted Win usage to that, too.
    
    Converted Win-specific GdiPlus BitmapBuffer to new
    mechanism, works well. Checked, the manager holds
    now a mix of bitmap and path data under Win
    
    Added a cleanup mechanism to flush all buffered data
    at DeInitVCL() using flushAll() at
    SystemDependentDataBuffer
    
    Adapted Linux-versions of ::drawPolyLine to support
    PixelSnapHairline, for now in a simplified version
    that still allows buffering. This will also be used
    (and use buffering) for the Cairo-fallback in
    X11SalGraphics
    
    Change-Id: I88d7e438a20b96ddab7707050893bdd590c098c7
    Reviewed-on: https://gerrit.libreoffice.org/59555Tested-by: 's avatarArmin Le Grand <Armin.Le.Grand@cib.de>
    Reviewed-by: 's avatarArmin Le Grand <Armin.Le.Grand@cib.de>
    b9fa01a8
Library_basegfx.mk 3.05 KB