canvas/source/cairo/cairo_devicehelper.cxx | 12 +-- canvas/source/cairo/cairo_xlib_cairo.cxx | 102 +++++++++++++++++++++++--- canvas/source/cairo/cairo_xlib_cairo.hxx | 23 +++++ icon-themes/breeze/links.txt | 6 - include/vcl/outdev.hxx | 4 + vcl/generic/print/genpspgraphics.cxx | 14 +++ vcl/headless/svpgdi.cxx | 14 +++ vcl/inc/generic/genpspgraphics.h | 4 + vcl/inc/headless/svpgdi.hxx | 4 + vcl/inc/quartz/salgdi.h | 3 vcl/inc/salgdi.hxx | 3 vcl/inc/unx/gtk/gtkgdi.hxx | 6 + vcl/inc/unx/salgdi.h | 3 vcl/inc/win/salgdi.h | 3 vcl/quartz/salgdicommon.cxx | 5 + vcl/source/outdev/outdev.cxx | 33 ++++++++ vcl/unx/generic/gdi/salgdi.cxx | 14 +++ vcl/unx/gtk3/gdi/gtk3cairotextrender.cxx | 2 vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx | 15 +++ vcl/win/source/gdi/salgdi.cxx | 5 + 20 files changed, 253 insertions(+), 22 deletions(-)
New commits: commit 4e46370938b1fde8cea5e8123d88a2290e60de8a Author: Caolán McNamara <[email protected]> Date: Wed Mar 18 17:32:37 2015 +0000 more flawed links Change-Id: Ida9321e44c31ec694ee3c3ba035eb1c8662634bf diff --git a/icon-themes/breeze/links.txt b/icon-themes/breeze/links.txt index 33e1fa8..3f86330 100644 --- a/icon-themes/breeze/links.txt +++ b/icon-themes/breeze/links.txt @@ -264,10 +264,10 @@ sw/imglst/sc20234.png sw/imglst/sc20244.png sw/imglst/sr20011.png sw/imglst/nc20000.png sw/imglst/sr20014.png sw/imglst/sc20183.png sw/imglst/sr20007.png cmd/sc_insertsection.png -sw/imglst/sr20009.png sw/imglst/nc20011.png +sw/imglst/sr20009.png cmd/sc_toggleobjectbeziermode.png sw/imglst/sr20010.png cmd/sc_insertobject.png -sw/imglst/sr20005.png sw/imglst/sc20245.png -sw/imglst/sr20002.png sw/imglst/nc20001.png +sw/imglst/sr20005.png cmd/sc_editdoc.png +sw/imglst/sr20002.png cmd/sc_inserttable.png sw/imglst/sr20012.png cmd/sc_insertreferencefield sw/imglst/sr20003.png cmd/sc_inserttextframe.png sw/imglst/sr20006.png cmd/sc_choosecontrols.png commit 2beb8b2e6aef50b8a35da37a5d0caf2ee33d174d Author: Caolán McNamara <[email protected]> Date: Wed Mar 18 14:53:53 2015 +0000 more thinking Change-Id: Ie349bd35b1fc92b77cc15f51eb886a1c9c92cbe1 diff --git a/canvas/source/cairo/cairo_xlib_cairo.cxx b/canvas/source/cairo/cairo_xlib_cairo.cxx index 24063a4..fe82cea 100644 --- a/canvas/source/cairo/cairo_xlib_cairo.cxx +++ b/canvas/source/cairo/cairo_xlib_cairo.cxx @@ -335,6 +335,7 @@ namespace cairo **/ Gtk3Surface::Gtk3Surface(const OutputDevice& rRefDevice, int x, int y, int width, int height) : mpSurface(cairo_get_target(rRefDevice.GetCairoContext()), &cairo_surface_flush) + , mpDevice(&rRefDevice) , mnWidth(width) , mnHeight(height) { @@ -353,6 +354,7 @@ namespace cairo **/ Gtk3Surface::Gtk3Surface(const CairoSurfaceSharedPtr& pSurface, int width, int height) : mpSurface(pSurface) + , mpDevice(NULL) , mnWidth(width) , mnHeight(height) { @@ -406,6 +408,8 @@ namespace cairo void Gtk3Surface::flush() const { cairo_surface_flush(mpSurface.get()); + if (mpDevice) + mpDevice->FlushCairoContext(NULL); } boost::shared_ptr<VirtualDevice> Gtk3Surface::createVirtualDevice() const diff --git a/canvas/source/cairo/cairo_xlib_cairo.hxx b/canvas/source/cairo/cairo_xlib_cairo.hxx index babebde..0cc4212 100644 --- a/canvas/source/cairo/cairo_xlib_cairo.hxx +++ b/canvas/source/cairo/cairo_xlib_cairo.hxx @@ -101,6 +101,7 @@ namespace cairo { class Gtk3Surface : public Surface { CairoSurfaceSharedPtr mpSurface; + const OutputDevice* mpDevice; int mnWidth; int mnHeight; public: diff --git a/include/vcl/outdev.hxx b/include/vcl/outdev.hxx index 91dab6c..2019fcb 100644 --- a/include/vcl/outdev.hxx +++ b/include/vcl/outdev.hxx @@ -380,6 +380,7 @@ public: bool SupportsCairo() const; bool CanResizeCairoSurface() const; cairo_t* GetCairoContext() const; + void FlushCairoContext(cairo_t *cr) const; css::uno::Any GetSystemGfxDataAny() const; void SetRefPoint(); diff --git a/vcl/generic/print/genpspgraphics.cxx b/vcl/generic/print/genpspgraphics.cxx index d43e725b..53f6a57 100644 --- a/vcl/generic/print/genpspgraphics.cxx +++ b/vcl/generic/print/genpspgraphics.cxx @@ -1224,6 +1224,10 @@ cairo_t* GenPspGraphics::GetCairoContext() const return NULL; } +void GenPspGraphics::FlushCairoContext(cairo_t*) const +{ +} + SystemFontData GenPspGraphics::GetSysFontData( int /* nFallbacklevel */ ) const { return SystemFontData(); diff --git a/vcl/headless/svpgdi.cxx b/vcl/headless/svpgdi.cxx index de56306..d2822eb 100644 --- a/vcl/headless/svpgdi.cxx +++ b/vcl/headless/svpgdi.cxx @@ -748,4 +748,8 @@ cairo_t* SvpSalGraphics::GetCairoContext() const return NULL; } +void SvpSalGraphics::FlushCairoContext(cairo_t *) const +{ +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/inc/generic/genpspgraphics.h b/vcl/inc/generic/genpspgraphics.h index b4a683c..094504c 100644 --- a/vcl/inc/generic/genpspgraphics.h +++ b/vcl/inc/generic/genpspgraphics.h @@ -204,6 +204,7 @@ public: virtual bool SupportsCairo() const SAL_OVERRIDE; virtual bool CanResizeCairoSurface() const SAL_OVERRIDE; virtual cairo_t* GetCairoContext() const SAL_OVERRIDE; + virtual void FlushCairoContext(cairo_t *) const SAL_OVERRIDE; virtual SystemFontData GetSysFontData( int nFallbacklevel ) const SAL_OVERRIDE; diff --git a/vcl/inc/headless/svpgdi.hxx b/vcl/inc/headless/svpgdi.hxx index e4ff74d..b6d2a74 100644 --- a/vcl/inc/headless/svpgdi.hxx +++ b/vcl/inc/headless/svpgdi.hxx @@ -200,7 +200,8 @@ public: virtual SystemGraphicsData GetGraphicsData() const SAL_OVERRIDE; virtual bool SupportsCairo() const SAL_OVERRIDE; - cairo_t* GetCairoContext() const SAL_OVERRIDE; + virtual cairo_t* GetCairoContext() const SAL_OVERRIDE; + virtual void FlushCairoContext(cairo_t *cr) const SAL_OVERRIDE; virtual bool CanResizeCairoSurface() const SAL_OVERRIDE; virtual SystemFontData GetSysFontData( int nFallbacklevel ) const SAL_OVERRIDE; diff --git a/vcl/inc/quartz/salgdi.h b/vcl/inc/quartz/salgdi.h index 451c582..7958af2 100644 --- a/vcl/inc/quartz/salgdi.h +++ b/vcl/inc/quartz/salgdi.h @@ -421,6 +421,7 @@ public: virtual bool SupportsCairo() const SAL_OVERRIDE; virtual bool CanResizeCairoSurface() const SAL_OVERRIDE; virtual cairo_t* GetCairoContext() const SAL_OVERRIDE; + virtual void FlushCairoContext(cairo_t*) const SAL_OVERRIDE; virtual SystemFontData GetSysFontData( int /* nFallbacklevel */ ) const SAL_OVERRIDE; virtual void BeginPaint() SAL_OVERRIDE { }; diff --git a/vcl/inc/salgdi.hxx b/vcl/inc/salgdi.hxx index 87971fd..1beebfa 100644 --- a/vcl/inc/salgdi.hxx +++ b/vcl/inc/salgdi.hxx @@ -442,6 +442,7 @@ public: virtual bool SupportsCairo() const = 0; virtual bool CanResizeCairoSurface() const = 0; virtual cairo_t* GetCairoContext() const = 0; + virtual void FlushCairoContext(cairo_t *cr) const = 0; virtual SystemFontData GetSysFontData( int nFallbacklevel ) const = 0; diff --git a/vcl/inc/unx/gtk/gtkgdi.hxx b/vcl/inc/unx/gtk/gtkgdi.hxx index 731b7f0..1a63e74 100644 --- a/vcl/inc/unx/gtk/gtkgdi.hxx +++ b/vcl/inc/unx/gtk/gtkgdi.hxx @@ -51,6 +51,7 @@ public: Rectangle &rNativeContentRegion ) SAL_OVERRIDE; virtual bool SupportsCairo() const SAL_OVERRIDE; virtual cairo_t* GetCairoContext() const SAL_OVERRIDE; + virtual void FlushCairoContext(cairo_t *cr) const SAL_OVERRIDE; void updateSettings( AllSettings& rSettings ); static void refreshFontconfig( GtkSettings *pSettings ); diff --git a/vcl/inc/unx/salgdi.h b/vcl/inc/unx/salgdi.h index 74ba77d..7851ca3 100644 --- a/vcl/inc/unx/salgdi.h +++ b/vcl/inc/unx/salgdi.h @@ -264,6 +264,7 @@ public: virtual SystemGraphicsData GetGraphicsData() const SAL_OVERRIDE; virtual bool SupportsCairo() const SAL_OVERRIDE; virtual cairo_t* GetCairoContext() const SAL_OVERRIDE; + virtual void FlushCairoContext(cairo_t*) const SAL_OVERRIDE; virtual bool CanResizeCairoSurface() const SAL_OVERRIDE; virtual SystemFontData GetSysFontData( int nFallbackLevel ) const SAL_OVERRIDE; diff --git a/vcl/inc/win/salgdi.h b/vcl/inc/win/salgdi.h index a4800ea..6502dac 100644 --- a/vcl/inc/win/salgdi.h +++ b/vcl/inc/win/salgdi.h @@ -448,6 +448,7 @@ public: virtual bool SupportsCairo() const SAL_OVERRIDE; virtual bool CanResizeCairoSurface() const SAL_OVERRIDE; virtual cairo_t* GetCairoContext() const SAL_OVERRIDE; + virtual void FlushCairoContext(cairo_t *) const SAL_OVERRIDE; virtual SystemFontData GetSysFontData( int nFallbacklevel ) const SAL_OVERRIDE; virtual void BeginPaint() SAL_OVERRIDE; diff --git a/vcl/source/outdev/outdev.cxx b/vcl/source/outdev/outdev.cxx index 1ffa228..8c3820f 100644 --- a/vcl/source/outdev/outdev.cxx +++ b/vcl/source/outdev/outdev.cxx @@ -330,6 +330,17 @@ cairo_t* OutputDevice::GetCairoContext() const return mpGraphics->GetCairoContext(); } +void OutputDevice::FlushCairoContext(cairo_t* cr) const +{ + if (!mpGraphics) + { + if (!AcquireGraphics()) + return; + } + + mpGraphics->FlushCairoContext(cr); +} + css::uno::Any OutputDevice::GetSystemGfxDataAny() const { const SystemGraphicsData aSysData = GetSystemGfxData(); diff --git a/vcl/unx/generic/gdi/salgdi.cxx b/vcl/unx/generic/gdi/salgdi.cxx index 91bfa59..1f70e9a 100644 --- a/vcl/unx/generic/gdi/salgdi.cxx +++ b/vcl/unx/generic/gdi/salgdi.cxx @@ -472,6 +472,10 @@ cairo_t* X11SalGraphics::GetCairoContext() const return NULL; } +void X11SalGraphics::FlushCairoContext(cairo_t*) const +{ +} + // draw a poly-polygon bool X11SalGraphics::drawPolyPolygon( const ::basegfx::B2DPolyPolygon& rOrigPolyPoly, double fTransparency ) { diff --git a/vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx b/vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx index eaf56ea..9123e58 100644 --- a/vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx +++ b/vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx @@ -1561,6 +1561,12 @@ cairo_t* GtkSalGraphics::GetCairoContext() const return mpFrame->getCairoContext(); } +void GtkSalGraphics::FlushCairoContext(cairo_t *) const +{ + //request gtk to sync the entire contents + gtk_widget_queue_draw(mpWindow); +} + void GtkSalGraphics::clipRegion(cairo_t* cr) { if (!m_aClipRegion.IsEmpty()) commit dce032e3ac528cfe3b2199a7998ddc349b4a2eb4 Author: Caolán McNamara <[email protected]> Date: Wed Mar 18 14:23:52 2015 +0000 thinking Change-Id: Ib1a086bed7f70e244db2a0bd32819560c6949d51 diff --git a/canvas/source/cairo/cairo_xlib_cairo.cxx b/canvas/source/cairo/cairo_xlib_cairo.cxx index a4665e1..24063a4 100644 --- a/canvas/source/cairo/cairo_xlib_cairo.cxx +++ b/canvas/source/cairo/cairo_xlib_cairo.cxx @@ -324,17 +324,99 @@ namespace cairo return X11SysData( rVirDev.GetSystemGfxData() ); } + /** + * Surface::Surface: Create Canvas surface from Window reference. + * @param x horizontal location of the new surface + * @param y vertical location of the new surface + * @param width width of the new surface + * @param height height of the new surface + * + * Set the mpSurface to the new surface or NULL + **/ + Gtk3Surface::Gtk3Surface(const OutputDevice& rRefDevice, int x, int y, int width, int height) + : mpSurface(cairo_get_target(rRefDevice.GetCairoContext()), &cairo_surface_flush) + , mnWidth(width) + , mnHeight(height) + { + cairo_surface_set_device_offset(mpSurface.get(), x, y ); + } + + /** + * Surface::Surface: Create generic Canvas surface using given Cairo Surface + * + * @param pSurface Cairo Surface + * + * This constructor only stores data, it does no processing. + * It is used with e.g. cairo_image_surface_create_for_data() + * + * Set the mpSurface as pSurface + **/ + Gtk3Surface::Gtk3Surface(const CairoSurfaceSharedPtr& pSurface, int width, int height) + : mpSurface(pSurface) + , mnWidth(width) + , mnHeight(height) + { + } + + /** + * Surface::getCairo: Create Cairo (drawing object) for the Canvas surface + * + * @return new Cairo or NULL + **/ + CairoSharedPtr Gtk3Surface::getCairo() const + { + return CairoSharedPtr(cairo_create(mpSurface.get()), + &cairo_destroy); + } + + /** + * Surface::getSimilar: Create new similar Canvas surface + * @param aContent format of the new surface (cairo_content_t from cairo/src/cairo.h) + * @param width width of the new surface + * @param height height of the new surface + * + * Creates a new Canvas surface. + * + * Cairo surface from aContent (cairo_content_t) + * + * @return new surface or NULL + **/ + SurfaceSharedPtr Gtk3Surface::getSimilar( Content aContent, int width, int height ) const + { + return SurfaceSharedPtr( + new Gtk3Surface(CairoSurfaceSharedPtr( + cairo_surface_create_similar( mpSurface.get(), aContent, width, height ), + &cairo_surface_destroy ), width, height)); + } + + /** + * Surface::Resize: Resizes the Canvas surface. + * @param width new width of the surface + * @param height new height of the surface + * + * Only used on X11. + * + * @return The new surface or NULL + **/ + void Gtk3Surface::Resize( int /*width*/, int /*height*/ ) + { + assert(false && "not supposed to be called!"); + } + + void Gtk3Surface::flush() const + { + cairo_surface_flush(mpSurface.get()); + } + + boost::shared_ptr<VirtualDevice> Gtk3Surface::createVirtualDevice() const + { + return boost::shared_ptr<VirtualDevice>(new VirtualDevice(NULL, Size(mnWidth, mnHeight), 0)); + } + SurfaceSharedPtr createSurface( const OutputDevice& rRefDevice, int x, int y, int width, int height ) { - if( rRefDevice.GetOutDevType() == OUTDEV_WINDOW ) - return SurfaceSharedPtr(new X11Surface(getSysData(static_cast<const vcl::Window&>(rRefDevice)), - x,y,width,height)); - else if( rRefDevice.GetOutDevType() == OUTDEV_VIRDEV ) - return SurfaceSharedPtr(new X11Surface(getSysData(static_cast<const VirtualDevice&>(rRefDevice)), - x,y,width,height)); - else - return SurfaceSharedPtr(); + return SurfaceSharedPtr(new Gtk3Surface(rRefDevice, x, y, width, height)); } SurfaceSharedPtr createBitmapSurface( const OutputDevice& rRefDevice, diff --git a/canvas/source/cairo/cairo_xlib_cairo.hxx b/canvas/source/cairo/cairo_xlib_cairo.hxx index f040b9b..babebde 100644 --- a/canvas/source/cairo/cairo_xlib_cairo.hxx +++ b/canvas/source/cairo/cairo_xlib_cairo.hxx @@ -97,6 +97,28 @@ namespace cairo { void* getRenderFormat() const { return maSysData.pRenderFormat; } long getDrawable() const { return mpPixmap ? mpPixmap->mhDrawable : maSysData.hDrawable; } }; + + class Gtk3Surface : public Surface + { + CairoSurfaceSharedPtr mpSurface; + int mnWidth; + int mnHeight; + public: + /// takes over ownership of passed cairo_surface + explicit Gtk3Surface(const CairoSurfaceSharedPtr& pSurface, int width, int height); + /// create surface on subarea of given drawable + explicit Gtk3Surface(const OutputDevice& rRefDevice, int x, int y, int width, int height); + + // Surface interface + virtual CairoSharedPtr getCairo() const SAL_OVERRIDE; + virtual CairoSurfaceSharedPtr getCairoSurface() const SAL_OVERRIDE { return mpSurface; } + virtual SurfaceSharedPtr getSimilar( Content aContent, int width, int height ) const SAL_OVERRIDE; + + virtual boost::shared_ptr<VirtualDevice> createVirtualDevice() const SAL_OVERRIDE; + + virtual void Resize(int width, int height) SAL_OVERRIDE; + virtual void flush() const SAL_OVERRIDE; + }; } #endif diff --git a/include/vcl/outdev.hxx b/include/vcl/outdev.hxx index 6e90d45..91dab6c 100644 --- a/include/vcl/outdev.hxx +++ b/include/vcl/outdev.hxx @@ -235,6 +235,7 @@ class VCLXGraphics; class OutDevStateStack; typedef boost::intrusive_ptr< FontCharMap > FontCharMapPtr; +typedef struct _cairo cairo_t; namespace vcl { class FontInfo; @@ -378,6 +379,7 @@ public: SystemGraphicsData GetSystemGfxData() const; bool SupportsCairo() const; bool CanResizeCairoSurface() const; + cairo_t* GetCairoContext() const; css::uno::Any GetSystemGfxDataAny() const; void SetRefPoint(); diff --git a/vcl/generic/print/genpspgraphics.cxx b/vcl/generic/print/genpspgraphics.cxx index ea76cd3..d43e725b 100644 --- a/vcl/generic/print/genpspgraphics.cxx +++ b/vcl/generic/print/genpspgraphics.cxx @@ -1219,6 +1219,11 @@ bool GenPspGraphics::CanResizeCairoSurface() const return false; } +cairo_t* GenPspGraphics::GetCairoContext() const +{ + return NULL; +} + SystemFontData GenPspGraphics::GetSysFontData( int /* nFallbacklevel */ ) const { return SystemFontData(); diff --git a/vcl/headless/svpgdi.cxx b/vcl/headless/svpgdi.cxx index 3dee490..de56306 100644 --- a/vcl/headless/svpgdi.cxx +++ b/vcl/headless/svpgdi.cxx @@ -743,4 +743,9 @@ bool SvpSalGraphics::CanResizeCairoSurface() const return false; } +cairo_t* SvpSalGraphics::GetCairoContext() const +{ + return NULL; +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/inc/generic/genpspgraphics.h b/vcl/inc/generic/genpspgraphics.h index e682e3a..b4a683c 100644 --- a/vcl/inc/generic/genpspgraphics.h +++ b/vcl/inc/generic/genpspgraphics.h @@ -203,6 +203,7 @@ public: virtual SystemGraphicsData GetGraphicsData() const SAL_OVERRIDE; virtual bool SupportsCairo() const SAL_OVERRIDE; virtual bool CanResizeCairoSurface() const SAL_OVERRIDE; + virtual cairo_t* GetCairoContext() const SAL_OVERRIDE; virtual SystemFontData GetSysFontData( int nFallbacklevel ) const SAL_OVERRIDE; diff --git a/vcl/inc/headless/svpgdi.hxx b/vcl/inc/headless/svpgdi.hxx index 855dfff..e4ff74d 100644 --- a/vcl/inc/headless/svpgdi.hxx +++ b/vcl/inc/headless/svpgdi.hxx @@ -200,6 +200,7 @@ public: virtual SystemGraphicsData GetGraphicsData() const SAL_OVERRIDE; virtual bool SupportsCairo() const SAL_OVERRIDE; + cairo_t* GetCairoContext() const SAL_OVERRIDE; virtual bool CanResizeCairoSurface() const SAL_OVERRIDE; virtual SystemFontData GetSysFontData( int nFallbacklevel ) const SAL_OVERRIDE; diff --git a/vcl/inc/quartz/salgdi.h b/vcl/inc/quartz/salgdi.h index 8ee3ccf..451c582 100644 --- a/vcl/inc/quartz/salgdi.h +++ b/vcl/inc/quartz/salgdi.h @@ -420,6 +420,7 @@ public: GetGraphicsData() const SAL_OVERRIDE; virtual bool SupportsCairo() const SAL_OVERRIDE; virtual bool CanResizeCairoSurface() const SAL_OVERRIDE; + virtual cairo_t* GetCairoContext() const SAL_OVERRIDE; virtual SystemFontData GetSysFontData( int /* nFallbacklevel */ ) const SAL_OVERRIDE; virtual void BeginPaint() SAL_OVERRIDE { }; diff --git a/vcl/inc/salgdi.hxx b/vcl/inc/salgdi.hxx index 6d7d787..87971fd 100644 --- a/vcl/inc/salgdi.hxx +++ b/vcl/inc/salgdi.hxx @@ -441,6 +441,7 @@ public: /// Check whether cairo will work virtual bool SupportsCairo() const = 0; virtual bool CanResizeCairoSurface() const = 0; + virtual cairo_t* GetCairoContext() const = 0; virtual SystemFontData GetSysFontData( int nFallbacklevel ) const = 0; diff --git a/vcl/inc/unx/gtk/gtkgdi.hxx b/vcl/inc/unx/gtk/gtkgdi.hxx index 2d00216..731b7f0 100644 --- a/vcl/inc/unx/gtk/gtkgdi.hxx +++ b/vcl/inc/unx/gtk/gtkgdi.hxx @@ -50,13 +50,12 @@ public: Rectangle &rNativeBoundingRegion, Rectangle &rNativeContentRegion ) SAL_OVERRIDE; virtual bool SupportsCairo() const SAL_OVERRIDE; + virtual cairo_t* GetCairoContext() const SAL_OVERRIDE; void updateSettings( AllSettings& rSettings ); static void refreshFontconfig( GtkSettings *pSettings ); static void signalSettingsNotify( GObject*, GParamSpec *pSpec, gpointer ); - cairo_t* getCairoContext(); - void clipRegion(cairo_t* cr); private: diff --git a/vcl/inc/unx/salgdi.h b/vcl/inc/unx/salgdi.h index 7f9bff6..74ba77d 100644 --- a/vcl/inc/unx/salgdi.h +++ b/vcl/inc/unx/salgdi.h @@ -263,6 +263,7 @@ public: virtual SystemGraphicsData GetGraphicsData() const SAL_OVERRIDE; virtual bool SupportsCairo() const SAL_OVERRIDE; + virtual cairo_t* GetCairoContext() const SAL_OVERRIDE; virtual bool CanResizeCairoSurface() const SAL_OVERRIDE; virtual SystemFontData GetSysFontData( int nFallbackLevel ) const SAL_OVERRIDE; diff --git a/vcl/inc/win/salgdi.h b/vcl/inc/win/salgdi.h index 107140b..a4800ea 100644 --- a/vcl/inc/win/salgdi.h +++ b/vcl/inc/win/salgdi.h @@ -447,6 +447,7 @@ public: virtual SystemGraphicsData GetGraphicsData() const SAL_OVERRIDE; virtual bool SupportsCairo() const SAL_OVERRIDE; virtual bool CanResizeCairoSurface() const SAL_OVERRIDE; + virtual cairo_t* GetCairoContext() const SAL_OVERRIDE; virtual SystemFontData GetSysFontData( int nFallbacklevel ) const SAL_OVERRIDE; virtual void BeginPaint() SAL_OVERRIDE; diff --git a/vcl/source/outdev/outdev.cxx b/vcl/source/outdev/outdev.cxx index c2ec14b..1ffa228 100644 --- a/vcl/source/outdev/outdev.cxx +++ b/vcl/source/outdev/outdev.cxx @@ -319,6 +319,17 @@ bool OutputDevice::CanResizeCairoSurface() const return mpGraphics->CanResizeCairoSurface(); } +cairo_t* OutputDevice::GetCairoContext() const +{ + if (!mpGraphics) + { + if (!AcquireGraphics()) + return NULL; + } + + return mpGraphics->GetCairoContext(); +} + css::uno::Any OutputDevice::GetSystemGfxDataAny() const { const SystemGraphicsData aSysData = GetSystemGfxData(); diff --git a/vcl/unx/generic/gdi/salgdi.cxx b/vcl/unx/generic/gdi/salgdi.cxx index 29366ca..91bfa59 100644 --- a/vcl/unx/generic/gdi/salgdi.cxx +++ b/vcl/unx/generic/gdi/salgdi.cxx @@ -467,6 +467,11 @@ bool X11SalGraphics::CanResizeCairoSurface() const return true; } +cairo_t* X11SalGraphics::GetCairoContext() const +{ + return NULL; +} + // draw a poly-polygon bool X11SalGraphics::drawPolyPolygon( const ::basegfx::B2DPolyPolygon& rOrigPolyPoly, double fTransparency ) { diff --git a/vcl/unx/gtk3/gdi/gtk3cairotextrender.cxx b/vcl/unx/gtk3/gdi/gtk3cairotextrender.cxx index f2f044e..032f20a 100644 --- a/vcl/unx/gtk3/gdi/gtk3cairotextrender.cxx +++ b/vcl/unx/gtk3/gdi/gtk3cairotextrender.cxx @@ -21,7 +21,7 @@ GlyphCache& GtkCairoTextRender::getPlatformGlyphCache() cairo_t* GtkCairoTextRender::getCairoContext() { - return mrParent.getCairoContext(); + return mrParent.GetCairoContext(); } void GtkCairoTextRender::getSurfaceOffset(double& nDX, double& nDY) diff --git a/vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx b/vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx index 2554562..eaf56ea 100644 --- a/vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx +++ b/vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx @@ -922,7 +922,7 @@ bool GtkSalGraphics::drawNativeControl( ControlType nType, ControlPart nPart, co return false; } - cairo_t *cr = getCairoContext(); + cairo_t *cr = GetCairoContext(); clipRegion(cr); cairo_translate(cr, rControlRegion.Left(), rControlRegion.Top()); @@ -1556,7 +1556,7 @@ GtkSalGraphics::GtkSalGraphics( GtkSalFrame *pFrame, GtkWidget *pWindow ) gtk_widget_path_free(path); } -cairo_t* GtkSalGraphics::getCairoContext() +cairo_t* GtkSalGraphics::GetCairoContext() const { return mpFrame->getCairoContext(); } commit 98d2e1aaa22fb5e9aeb86750038b6a0bf96bdaf2 Author: Caolán McNamara <[email protected]> Date: Wed Mar 18 09:57:41 2015 +0000 claim gtk3 can handle cairo canvas Change-Id: Ie6edf155288d1514ce7a0c859ba751cdebc93391 diff --git a/vcl/inc/unx/gtk/gtkgdi.hxx b/vcl/inc/unx/gtk/gtkgdi.hxx index 26f2efb..2d00216 100644 --- a/vcl/inc/unx/gtk/gtkgdi.hxx +++ b/vcl/inc/unx/gtk/gtkgdi.hxx @@ -49,6 +49,8 @@ public: const OUString& rCaption, Rectangle &rNativeBoundingRegion, Rectangle &rNativeContentRegion ) SAL_OVERRIDE; + virtual bool SupportsCairo() const SAL_OVERRIDE; + void updateSettings( AllSettings& rSettings ); static void refreshFontconfig( GtkSettings *pSettings ); static void signalSettingsNotify( GObject*, GParamSpec *pSpec, gpointer ); diff --git a/vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx b/vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx index 3006d62..2554562 100644 --- a/vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx +++ b/vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx @@ -1447,6 +1447,11 @@ bool GtkSalGraphics::IsNativeControlSupported( ControlType nType, ControlPart nP return false; } +bool GtkSalGraphics::SupportsCairo() const +{ + return true; +} + static GtkWidget* gCacheWindow; static GtkWidget* gDumbContainer; commit f59345721b1731c0fd5ed052f2dee99042bd7f4c Author: Caolán McNamara <[email protected]> Date: Wed Mar 18 13:38:11 2015 +0000 move the cairo resize hack into vcl Change-Id: Ifd1817a28f4fb7ddcc85447fd3388fd0efd86476 diff --git a/canvas/source/cairo/cairo_devicehelper.cxx b/canvas/source/cairo/cairo_devicehelper.cxx index fab8b1b..05266e4 100644 --- a/canvas/source/cairo/cairo_devicehelper.cxx +++ b/canvas/source/cairo/cairo_devicehelper.cxx @@ -17,8 +17,6 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#include <config_features.h> - #include <canvas/debug.hxx> #include <canvas/verbosetrace.hxx> #include <canvas/canvastools.hxx> @@ -94,18 +92,20 @@ namespace cairocanvas OutputDevice* pOutDev=getOutputDevice(); -#if HAVE_FEATURE_X11 - // X11 only - if( mpSurface ) + if (mpSurface && pOutDev->CanResizeCairoSurface()) + { + // X11 only mpSurface->Resize( rSize.getX() + pOutDev->GetOutOffXPixel(), rSize.getY() + pOutDev->GetOutOffYPixel() ); + } else -#endif + { mpSurface = cairo::createSurface( *pOutDev, pOutDev->GetOutOffXPixel(), pOutDev->GetOutOffYPixel(), rSize.getX(), rSize.getY() ); + } } geometry::RealSize2D DeviceHelper::getPhysicalResolution() diff --git a/include/vcl/outdev.hxx b/include/vcl/outdev.hxx index 30c8c83..6e90d45 100644 --- a/include/vcl/outdev.hxx +++ b/include/vcl/outdev.hxx @@ -377,6 +377,7 @@ public: SystemGraphicsData GetSystemGfxData() const; bool SupportsCairo() const; + bool CanResizeCairoSurface() const; css::uno::Any GetSystemGfxDataAny() const; void SetRefPoint(); diff --git a/vcl/generic/print/genpspgraphics.cxx b/vcl/generic/print/genpspgraphics.cxx index a5457ce..ea76cd3 100644 --- a/vcl/generic/print/genpspgraphics.cxx +++ b/vcl/generic/print/genpspgraphics.cxx @@ -1214,6 +1214,11 @@ bool GenPspGraphics::SupportsCairo() const return false; } +bool GenPspGraphics::CanResizeCairoSurface() const +{ + return false; +} + SystemFontData GenPspGraphics::GetSysFontData( int /* nFallbacklevel */ ) const { return SystemFontData(); diff --git a/vcl/headless/svpgdi.cxx b/vcl/headless/svpgdi.cxx index f63ae47..3dee490 100644 --- a/vcl/headless/svpgdi.cxx +++ b/vcl/headless/svpgdi.cxx @@ -738,4 +738,9 @@ bool SvpSalGraphics::SupportsCairo() const return false; } +bool SvpSalGraphics::CanResizeCairoSurface() const +{ + return false; +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/inc/generic/genpspgraphics.h b/vcl/inc/generic/genpspgraphics.h index 25de868..e682e3a 100644 --- a/vcl/inc/generic/genpspgraphics.h +++ b/vcl/inc/generic/genpspgraphics.h @@ -202,6 +202,8 @@ public: virtual SystemGraphicsData GetGraphicsData() const SAL_OVERRIDE; virtual bool SupportsCairo() const SAL_OVERRIDE; + virtual bool CanResizeCairoSurface() const SAL_OVERRIDE; + virtual SystemFontData GetSysFontData( int nFallbacklevel ) const SAL_OVERRIDE; virtual void BeginPaint() SAL_OVERRIDE { }; diff --git a/vcl/inc/headless/svpgdi.hxx b/vcl/inc/headless/svpgdi.hxx index 5bbf816..855dfff 100644 --- a/vcl/inc/headless/svpgdi.hxx +++ b/vcl/inc/headless/svpgdi.hxx @@ -200,6 +200,8 @@ public: virtual SystemGraphicsData GetGraphicsData() const SAL_OVERRIDE; virtual bool SupportsCairo() const SAL_OVERRIDE; + virtual bool CanResizeCairoSurface() const SAL_OVERRIDE; + virtual SystemFontData GetSysFontData( int nFallbacklevel ) const SAL_OVERRIDE; virtual void BeginPaint() SAL_OVERRIDE { }; diff --git a/vcl/inc/quartz/salgdi.h b/vcl/inc/quartz/salgdi.h index 54bd2a9..8ee3ccf 100644 --- a/vcl/inc/quartz/salgdi.h +++ b/vcl/inc/quartz/salgdi.h @@ -419,6 +419,7 @@ public: virtual SystemGraphicsData GetGraphicsData() const SAL_OVERRIDE; virtual bool SupportsCairo() const SAL_OVERRIDE; + virtual bool CanResizeCairoSurface() const SAL_OVERRIDE; virtual SystemFontData GetSysFontData( int /* nFallbacklevel */ ) const SAL_OVERRIDE; virtual void BeginPaint() SAL_OVERRIDE { }; diff --git a/vcl/inc/salgdi.hxx b/vcl/inc/salgdi.hxx index ef18120..6d7d787 100644 --- a/vcl/inc/salgdi.hxx +++ b/vcl/inc/salgdi.hxx @@ -440,6 +440,7 @@ public: /// Check whether cairo will work virtual bool SupportsCairo() const = 0; + virtual bool CanResizeCairoSurface() const = 0; virtual SystemFontData GetSysFontData( int nFallbacklevel ) const = 0; diff --git a/vcl/inc/unx/salgdi.h b/vcl/inc/unx/salgdi.h index b8a2a60..7f9bff6 100644 --- a/vcl/inc/unx/salgdi.h +++ b/vcl/inc/unx/salgdi.h @@ -263,6 +263,7 @@ public: virtual SystemGraphicsData GetGraphicsData() const SAL_OVERRIDE; virtual bool SupportsCairo() const SAL_OVERRIDE; + virtual bool CanResizeCairoSurface() const SAL_OVERRIDE; virtual SystemFontData GetSysFontData( int nFallbackLevel ) const SAL_OVERRIDE; virtual void BeginPaint() SAL_OVERRIDE; diff --git a/vcl/inc/win/salgdi.h b/vcl/inc/win/salgdi.h index 287daf4..107140b 100644 --- a/vcl/inc/win/salgdi.h +++ b/vcl/inc/win/salgdi.h @@ -446,6 +446,7 @@ public: virtual SystemGraphicsData GetGraphicsData() const SAL_OVERRIDE; virtual bool SupportsCairo() const SAL_OVERRIDE; + virtual bool CanResizeCairoSurface() const SAL_OVERRIDE; virtual SystemFontData GetSysFontData( int nFallbacklevel ) const SAL_OVERRIDE; virtual void BeginPaint() SAL_OVERRIDE; diff --git a/vcl/quartz/salgdicommon.cxx b/vcl/quartz/salgdicommon.cxx index b982dd4..e04b558 100644 --- a/vcl/quartz/salgdicommon.cxx +++ b/vcl/quartz/salgdicommon.cxx @@ -1450,6 +1450,11 @@ bool AquaSalGraphics::SupportsCairo() const return true; } +bool AquaSalGraphics::CanResizeCairoSurface() const +{ + return false; +} + long AquaSalGraphics::GetGraphicsWidth() const { long w = 0; diff --git a/vcl/source/outdev/outdev.cxx b/vcl/source/outdev/outdev.cxx index c64fbff..c2ec14b 100644 --- a/vcl/source/outdev/outdev.cxx +++ b/vcl/source/outdev/outdev.cxx @@ -308,6 +308,17 @@ bool OutputDevice::SupportsCairo() const return mpGraphics->SupportsCairo(); } +bool OutputDevice::CanResizeCairoSurface() const +{ + if (!mpGraphics) + { + if (!AcquireGraphics()) + return false; + } + + return mpGraphics->CanResizeCairoSurface(); +} + css::uno::Any OutputDevice::GetSystemGfxDataAny() const { const SystemGraphicsData aSysData = GetSystemGfxData(); diff --git a/vcl/unx/generic/gdi/salgdi.cxx b/vcl/unx/generic/gdi/salgdi.cxx index 2a76110..29366ca 100644 --- a/vcl/unx/generic/gdi/salgdi.cxx +++ b/vcl/unx/generic/gdi/salgdi.cxx @@ -462,6 +462,11 @@ bool X11SalGraphics::SupportsCairo() const return XQueryExtension(pDisplay, "RENDER", &nDummy, &nDummy, &nDummy); } +bool X11SalGraphics::CanResizeCairoSurface() const +{ + return true; +} + // draw a poly-polygon bool X11SalGraphics::drawPolyPolygon( const ::basegfx::B2DPolyPolygon& rOrigPolyPoly, double fTransparency ) { diff --git a/vcl/win/source/gdi/salgdi.cxx b/vcl/win/source/gdi/salgdi.cxx index fc74d05..614ec27 100644 --- a/vcl/win/source/gdi/salgdi.cxx +++ b/vcl/win/source/gdi/salgdi.cxx @@ -1077,6 +1077,11 @@ bool WinSalGraphics::SupportsCairo() const return true; } +bool WinSalGraphics::CanResizeCairoSurface() const +{ + return false; +} + void WinSalGraphics::BeginPaint() { return mpImpl->beginPaint();
_______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
