summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2015-03-04 13:30:08 +0000
committerCaolán McNamara <caolanm@redhat.com>2015-03-04 13:36:17 +0000
commitc26e2c8794651120e644ab5b1e1de15bb113c4f0 (patch)
treea7fc6e9960739611a9ebb0ea207ef3817336dfc6 /vcl
parentf462c9800299f3fa2a7e7f5c718197acc37bbac2 (diff)
move getCairoContext to GtkSalFrame and reuse
Change-Id: I8c50e6dd51299214ad622b253ffc401244653225
Diffstat (limited to 'vcl')
-rw-r--r--vcl/inc/unx/gtk/gtkframe.hxx1
-rw-r--r--vcl/inc/unx/gtk/gtkgdi.hxx1
-rw-r--r--vcl/unx/gtk/window/gtksalframe.cxx37
-rw-r--r--vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx13
4 files changed, 22 insertions, 30 deletions
diff --git a/vcl/inc/unx/gtk/gtkframe.hxx b/vcl/inc/unx/gtk/gtkframe.hxx
index a11f1fa8b144..5cb0d9c64b9a 100644
--- a/vcl/inc/unx/gtk/gtkframe.hxx
+++ b/vcl/inc/unx/gtk/gtkframe.hxx
@@ -341,6 +341,7 @@ public:
#if GTK_CHECK_VERSION(3,0,0)
// only for gtk3 ...
+ cairo_t* getCairoContext();
void pushIgnoreDamage();
void popIgnoreDamage();
bool isDuringRender();
diff --git a/vcl/inc/unx/gtk/gtkgdi.hxx b/vcl/inc/unx/gtk/gtkgdi.hxx
index a984f1bb1b70..66aa0e0539bf 100644
--- a/vcl/inc/unx/gtk/gtkgdi.hxx
+++ b/vcl/inc/unx/gtk/gtkgdi.hxx
@@ -58,6 +58,7 @@ public:
static void signalSettingsNotify( GObject*, GParamSpec *pSpec, gpointer );
cairo_t* getCairoContext();
+
void clipRegion(cairo_t* cr);
private:
diff --git a/vcl/unx/gtk/window/gtksalframe.cxx b/vcl/unx/gtk/window/gtksalframe.cxx
index 16d86533b32e..0418f179c896 100644
--- a/vcl/unx/gtk/window/gtksalframe.cxx
+++ b/vcl/unx/gtk/window/gtksalframe.cxx
@@ -3334,6 +3334,24 @@ gboolean GtkSalFrame::signalCrossing( GtkWidget*, GdkEventCrossing* pEvent, gpoi
}
#if GTK_CHECK_VERSION(3,0,0)
+
+cairo_t* GtkSalFrame::getCairoContext()
+{
+ basebmp::RawMemorySharedArray data = m_aFrame->getBuffer();
+ basegfx::B2IVector size = m_aFrame->getSize();
+ sal_Int32 nStride = m_aFrame->getScanlineStride();
+ assert(cairo_format_stride_for_width(CAIRO_FORMAT_RGB24, size.getX()) == nStride);
+ cairo_surface_t *target =
+ cairo_image_surface_create_for_data(data.get(),
+ CAIRO_FORMAT_RGB24,
+ size.getX(), size.getY(),
+ nStride);
+ cairo_t* cr = cairo_create(target);
+ cairo_surface_destroy(target);
+ return cr;
+// return gdk_cairo_create(gtk_widget_get_window(mpFrame->getWindow()));
+}
+
void GtkSalFrame::pushIgnoreDamage()
{
m_nDuringRender++;
@@ -3393,7 +3411,6 @@ void GtkSalFrame::renderArea( cairo_t *cr, cairo_rectangle_t *area )
basebmp::RawMemorySharedArray data = m_aFrame->getBuffer();
basegfx::B2IVector size = m_aFrame->getSize();
- sal_Int32 nStride = m_aFrame->getScanlineStride();
long ax = area->x;
long ay = area->y;
@@ -3422,28 +3439,12 @@ void GtkSalFrame::renderArea( cairo_t *cr, cairo_rectangle_t *area )
cairo_save( cr );
- unsigned char *src = data.get();
- assert(cairo_format_stride_for_width(CAIRO_FORMAT_RGB24, size.getX()) == nStride);
- cairo_surface_t *pSurface =
- cairo_image_surface_create_for_data(src,
- CAIRO_FORMAT_RGB24,
- size.getX(), size.getY(),
- nStride);
- /*
- int cairo_stride = cairo_format_stride_for_width(CAIRO_FORMAT_RGB24, size.getX());
- g_warning( "Fixed cairo status %d %d strides: %d vs %d, mask %d\n",
- (int) cairo_status( cr ),
- (int) cairo_surface_status( pSurface ),
- (int) nStride,
- (int) cairo_stride,
- (int) (cairo_stride & (sizeof (uint32_t)-1)) );
- */
+ cairo_surface_t *pSurface = cairo_get_target(getCairoContext());
cairo_set_operator( cr, CAIRO_OPERATOR_OVER );
cairo_set_source_surface( cr, pSurface, 0, 0 );
cairo_rectangle( cr, ax, ay, awidth, aheight );
cairo_fill( cr );
- cairo_surface_destroy( pSurface );
cairo_restore( cr );
// Render red rectangles to show what was re-rendered ...
diff --git a/vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx b/vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx
index 966f96408264..1f4f3a83d051 100644
--- a/vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx
+++ b/vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx
@@ -1586,18 +1586,7 @@ void GtkSalGraphics::copyArea( long nDestX, long nDestY,
cairo_t* GtkSalGraphics::getCairoContext()
{
- basebmp::RawMemorySharedArray data = mpFrame->m_aFrame->getBuffer();
- basegfx::B2IVector size = mpFrame->m_aFrame->getSize();
- sal_Int32 nStride = mpFrame->m_aFrame->getScanlineStride();
- cairo_surface_t *target =
- cairo_image_surface_create_for_data(data.get(),
- CAIRO_FORMAT_RGB24,
- size.getX(), size.getY(),
- nStride);
- cairo_t* cr = cairo_create(target);
- cairo_surface_destroy(target);
- return cr;
-// return gdk_cairo_create(gtk_widget_get_window(mpFrame->getWindow()));
+ return mpFrame->getCairoContext();
}
void GtkSalGraphics::clipRegion(cairo_t* cr)