diff options
-rw-r--r-- | vcl/inc/svdata.hxx | 2 | ||||
-rw-r--r-- | vcl/inc/unx/gtk/gtkgdi.hxx | 8 | ||||
-rw-r--r-- | vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx | 9 | ||||
-rw-r--r-- | vcl/unx/gtk/window/gtkframe.cxx | 116 | ||||
-rw-r--r-- | vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx | 93 |
5 files changed, 106 insertions, 122 deletions
diff --git a/vcl/inc/svdata.hxx b/vcl/inc/svdata.hxx index 5918380b8a8e..c27636c2a5fd 100644 --- a/vcl/inc/svdata.hxx +++ b/vcl/inc/svdata.hxx @@ -306,7 +306,7 @@ struct ImplSVNWFData // toolbox dropdown buttons int mnMenuFormatExtraBorder; // inner popup menu border bool mbFlatMenu; // no popup 3D border - Color maMenuBarHighlightTextColor; // override higlight text color + ::Color maMenuBarHighlightTextColor; // override higlight text color // in menubar if not transparent bool mbOpenMenuOnF10; // on gnome the first menu opens on F10 bool mbNoFocusRects; // on Aqua focus rects are not used diff --git a/vcl/inc/unx/gtk/gtkgdi.hxx b/vcl/inc/unx/gtk/gtkgdi.hxx index e00808934006..b08fcf738ed0 100644 --- a/vcl/inc/unx/gtk/gtkgdi.hxx +++ b/vcl/inc/unx/gtk/gtkgdi.hxx @@ -41,9 +41,6 @@ #include <unx/headless/svpgdi.hxx> -// Disabled for gtk3 - use legacy theming code -#define GTK_GRAPHICS_DISABLED - class GtkSalFrame; class GtkSalGraphics : public SvpSalGraphics { @@ -65,10 +62,7 @@ class GtkSalGraphics : public X11SalGraphics Region m_aClipRegion; public: - GtkSalGraphics( GtkSalFrame *, GtkWidget *window ) - : m_pWindow( window ), - m_aClipRegion( REGION_NULL ) - {} + GtkSalGraphics( GtkSalFrame *, GtkWidget *window ); virtual ~GtkSalGraphics(); inline GtkWidget* GetGtkWidget() const { return m_pWindow; } diff --git a/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx b/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx index 95e756b696ca..d168917842a2 100644 --- a/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx +++ b/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx @@ -56,6 +56,15 @@ sal_Bool GtkSalGraphics::bGlobalNeedPixmapPaint = sal_False; sal_Bool GtkSalGraphics::bToolbarGripWorkaround = sal_False; sal_Bool GtkSalGraphics::bNeedButtonStyleAsEditBackgroundWorkaround = sal_False; +GtkSalGraphics::GtkSalGraphics( GtkSalFrame *pFrame, GtkWidget *pWindow ) + : X11SalGraphics(), + m_pWindow( pWindow ), + m_aClipRegion( REGION_NULL ) +{ + Init( pFrame, GDK_WINDOW_XID( widget_get_window( pWindow ) ), + gdk_x11_screen_get_screen_number( gtk_widget_get_screen( pWindow ) ) ); +} + GtkSalGraphics::~GtkSalGraphics() { } diff --git a/vcl/unx/gtk/window/gtkframe.cxx b/vcl/unx/gtk/window/gtkframe.cxx index 614af44ecdc1..e48aa15cbfea 100644 --- a/vcl/unx/gtk/window/gtkframe.cxx +++ b/vcl/unx/gtk/window/gtkframe.cxx @@ -2570,9 +2570,7 @@ void GtkSalFrame::createNewWindow( XLIB_Window aNewParent, bool bXEmbed, int nSc if( m_aGraphics[i].bInUse ) { m_aGraphics[i].pGraphics->SetDrawable( GDK_WINDOW_XWINDOW(widget_get_window(m_pWindow)), m_nScreen ); -#ifndef GTK_GRAPHICS_DISABLED m_aGraphics[i].pGraphics->SetWindow( m_pWindow ); -#endif } } #endif @@ -3513,9 +3511,6 @@ void GtkSalFrame::signalStyleSet( GtkWidget*, GtkStyle* pPrevious, gpointer fram aWin, pThis->m_hBackgroundPixmap ); } -#endif - -#ifndef GTK_GRAPHICS_DISABLED if( ! pThis->m_pParent ) { // signalize theme changed for NWF caches @@ -4140,115 +4135,6 @@ gboolean GtkSalFrame::IMHandler::signalIMDeleteSurrounding( GtkIMContext*, gint return sal_False; } -#ifdef GTK_GRAPHICS_DISABLED - -void GtkData::initNWF() {} -void GtkData::deInitNWF() {} - -#if !GTK_CHECK_VERSION(3,0,0) - -GtkSalGraphics::GtkSalGraphics( GtkSalFrame *pFrame, GtkWidget *pWindow ) - : X11SalGraphics() -{ - Init( pFrame, GDK_WINDOW_XID( widget_get_window( pWindow ) ), - gdk_x11_screen_get_screen_number( gtk_widget_get_screen( pWindow ) ) ); -} - -#else - -GtkSalGraphics::GtkSalGraphics( GtkSalFrame *pFrame, GtkWidget *pWindow ) - : SvpSalGraphics(), - mpFrame( pFrame ) -{ -} - -void GtkSalGraphics::updateSettings( AllSettings& rSettings ) -{ - g_warning ("unimplemented GtkSalGraphics update"); -} - -static void print_cairo_region (cairo_region_t *region, const char *msg) -{ - if (!region) { - fprintf (stderr, "%s - NULL\n", msg); - return; - } - int numrect = cairo_region_num_rectangles (region); - fprintf (stderr, "%s - %d rects\n", msg, numrect); - for (int i = 0; i < numrect; i++) { - cairo_rectangle_int_t rect; - cairo_region_get_rectangle (region, i, &rect); - fprintf( stderr, "\t%d -> %d,%d %dx%d\n", i, - rect.x, rect.y, rect.width, rect.height ); - } -} - -static void print_update_area (GdkWindow *window, const char *msg) -{ - print_cairo_region (gdk_window_get_update_area (window), msg); -} - -void GtkSalGraphics::copyArea( long nDestX, long nDestY, - long nSrcX, long nSrcY, - long nSrcWidth, long nSrcHeight, - sal_uInt16 nFlags ) -{ - mpFrame->pushIgnoreDamage(); - SvpSalGraphics::copyArea( nDestX, nDestY, nSrcX, nSrcY, nSrcWidth, nSrcHeight, nFlags ); - mpFrame->popIgnoreDamage(); - - cairo_rectangle_int_t rect = { (int)nSrcX, (int)nSrcY, (int)nSrcWidth, (int)nSrcHeight }; - cairo_region_t *region = cairo_region_create_rectangle( &rect ); - - print_update_area( gtk_widget_get_window( mpFrame->getWindow() ), "before copy area" ); - -// print_cairo_region( mpFrame->m_pRegion, "extremely odd SalFrame: shape combine region! - "); - - g_warning( "FIXME: copy area delta: %d %d needs clip intersect\n", - nDestX - nSrcX, nDestY - nSrcY ); - - // get clip region and translate it in the opposite direction & intersect ... - cairo_region_t *clip_region; - - if( m_aClipRegion.GetRectCount() <= 0) - { - basegfx::B2IVector aSize = GetSize(); - cairo_rectangle_int_t aCairoSize = { 0, 0, aSize.getX(), aSize.getY() }; - clip_region = cairo_region_create_rectangle( &aCairoSize ); - } - else - { - clip_region = cairo_region_create(); - Rectangle aClipRect; - RegionHandle aHnd = m_aClipRegion.BeginEnumRects(); - while( m_aClipRegion.GetNextEnumRect( aHnd, aClipRect ) ) - { - cairo_rectangle_int_t aRect = { aClipRect.Left(), aClipRect.Top(), - aClipRect.Right(), aClipRect.Bottom() }; - cairo_region_union_rectangle( clip_region, &aRect ); - } - m_aClipRegion.EndEnumRects (aHnd); - } - print_cairo_region( clip_region, "pristine clip region" ); - cairo_region_translate( clip_region, - (nDestX - nSrcX), - (nDestY - nSrcY) ); - print_cairo_region( clip_region, "translated clip region" ); - cairo_region_intersect( region, clip_region ); - print_cairo_region( region, "reduced copy area region" ); - - // FIXME: this will queue (duplicate) gtk+ re-rendering for the exposed area, c'est la vie - gdk_window_move_region( gtk_widget_get_window( mpFrame->getWindow() ), - region, nDestX - nSrcX, nDestY - nSrcY ); - - print_update_area( gtk_widget_get_window( mpFrame->getWindow() ), "after copy area" ); - cairo_region_destroy( clip_region ); - cairo_region_destroy( region ); -} - -#endif - -#endif -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ - Size GtkSalDisplay::GetScreenSize( int nScreen ) { GdkScreen *pScreen = gdk_display_get_screen (m_pGdkDisplay, nScreen); @@ -4258,3 +4144,5 @@ Size GtkSalDisplay::GetScreenSize( int nScreen ) return Size( gdk_screen_get_width (pScreen), gdk_screen_get_height (pScreen) ); } + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx b/vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx index c07cb44ab4ae..5a6179ad3ea7 100644 --- a/vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx +++ b/vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx @@ -30,5 +30,98 @@ #include "../../headless/svpgdi.cxx" +void GtkData::initNWF() {} +void GtkData::deInitNWF() {} + +GtkSalGraphics::GtkSalGraphics( GtkSalFrame *pFrame, GtkWidget *pWindow ) + : SvpSalGraphics(), + mpFrame( pFrame ), + mpWindow( pWindow ), + mpButtonStyle( NULL ) +{ +} + +void GtkSalGraphics::updateSettings( AllSettings& rSettings ) +{ + g_warning ("unimplemented GtkSalGraphics update"); +} + +static void print_cairo_region (cairo_region_t *region, const char *msg) +{ + if (!region) { + fprintf (stderr, "%s - NULL\n", msg); + return; + } + int numrect = cairo_region_num_rectangles (region); + fprintf (stderr, "%s - %d rects\n", msg, numrect); + for (int i = 0; i < numrect; i++) { + cairo_rectangle_int_t rect; + cairo_region_get_rectangle (region, i, &rect); + fprintf( stderr, "\t%d -> %d,%d %dx%d\n", i, + rect.x, rect.y, rect.width, rect.height ); + } +} + +static void print_update_area (GdkWindow *window, const char *msg) +{ + print_cairo_region (gdk_window_get_update_area (window), msg); +} + +void GtkSalGraphics::copyArea( long nDestX, long nDestY, + long nSrcX, long nSrcY, + long nSrcWidth, long nSrcHeight, + sal_uInt16 nFlags ) +{ + mpFrame->pushIgnoreDamage(); + SvpSalGraphics::copyArea( nDestX, nDestY, nSrcX, nSrcY, nSrcWidth, nSrcHeight, nFlags ); + mpFrame->popIgnoreDamage(); + + cairo_rectangle_int_t rect = { (int)nSrcX, (int)nSrcY, (int)nSrcWidth, (int)nSrcHeight }; + cairo_region_t *region = cairo_region_create_rectangle( &rect ); + + print_update_area( gtk_widget_get_window( mpFrame->getWindow() ), "before copy area" ); + +// print_cairo_region( mpFrame->m_pRegion, "extremely odd SalFrame: shape combine region! - "); + + g_warning( "FIXME: copy area delta: %d %d needs clip intersect\n", + nDestX - nSrcX, nDestY - nSrcY ); + + // get clip region and translate it in the opposite direction & intersect ... + cairo_region_t *clip_region; + + if( m_aClipRegion.GetRectCount() <= 0) + { + basegfx::B2IVector aSize = GetSize(); + cairo_rectangle_int_t aCairoSize = { 0, 0, aSize.getX(), aSize.getY() }; + clip_region = cairo_region_create_rectangle( &aCairoSize ); + } + else + { + clip_region = cairo_region_create(); + Rectangle aClipRect; + RegionHandle aHnd = m_aClipRegion.BeginEnumRects(); + while( m_aClipRegion.GetNextEnumRect( aHnd, aClipRect ) ) + { + cairo_rectangle_int_t aRect = { aClipRect.Left(), aClipRect.Top(), + aClipRect.Right(), aClipRect.Bottom() }; + cairo_region_union_rectangle( clip_region, &aRect ); + } + m_aClipRegion.EndEnumRects (aHnd); + } + print_cairo_region( clip_region, "pristine clip region" ); + cairo_region_translate( clip_region, - (nDestX - nSrcX), - (nDestY - nSrcY) ); + print_cairo_region( clip_region, "translated clip region" ); + cairo_region_intersect( region, clip_region ); + print_cairo_region( region, "reduced copy area region" ); + + // FIXME: this will queue (duplicate) gtk+ re-rendering for the exposed area, c'est la vie + gdk_window_move_region( gtk_widget_get_window( mpFrame->getWindow() ), + region, nDestX - nSrcX, nDestY - nSrcY ); + + print_update_area( gtk_widget_get_window( mpFrame->getWindow() ), "after copy area" ); + cairo_region_destroy( clip_region ); + cairo_region_destroy( region ); +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |