1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski #ifndef _VCL_GTKGDI_HXX 25*b1cdbd2cSJim Jagielski #define _VCL_GTKGDI_HXX 26*b1cdbd2cSJim Jagielski 27*b1cdbd2cSJim Jagielski #include <tools/prex.h> 28*b1cdbd2cSJim Jagielski #include <gtk/gtk.h> 29*b1cdbd2cSJim Jagielski #include <gdk/gdkx.h> 30*b1cdbd2cSJim Jagielski #include <gdk/gdkkeysyms.h> 31*b1cdbd2cSJim Jagielski #include <tools/postx.h> 32*b1cdbd2cSJim Jagielski 33*b1cdbd2cSJim Jagielski #include <unx/salgdi.h> 34*b1cdbd2cSJim Jagielski 35*b1cdbd2cSJim Jagielski class GtkSalGraphics : public X11SalGraphics 36*b1cdbd2cSJim Jagielski { 37*b1cdbd2cSJim Jagielski GtkWidget *m_pWindow; 38*b1cdbd2cSJim Jagielski Region m_aClipRegion; 39*b1cdbd2cSJim Jagielski 40*b1cdbd2cSJim Jagielski public: GtkSalGraphics(GtkWidget * window)41*b1cdbd2cSJim Jagielski GtkSalGraphics( GtkWidget *window ) 42*b1cdbd2cSJim Jagielski : m_pWindow( window ), 43*b1cdbd2cSJim Jagielski m_aClipRegion(true) 44*b1cdbd2cSJim Jagielski {} 45*b1cdbd2cSJim Jagielski virtual ~GtkSalGraphics(); 46*b1cdbd2cSJim Jagielski GetGtkWidget() const47*b1cdbd2cSJim Jagielski inline GtkWidget* GetGtkWidget() const { return m_pWindow; } GetGdkWindow() const48*b1cdbd2cSJim Jagielski inline GdkWindow* GetGdkWindow() const { return m_pWindow->window; } GetGtkFrame() const49*b1cdbd2cSJim Jagielski inline GtkSalFrame* GetGtkFrame() const { return static_cast<GtkSalFrame*>(m_pFrame); } SetWindow(GtkWidget * window)50*b1cdbd2cSJim Jagielski void SetWindow( GtkWidget* window ) { m_pWindow = window; } 51*b1cdbd2cSJim Jagielski 52*b1cdbd2cSJim Jagielski 53*b1cdbd2cSJim Jagielski // will be set when UI theme was changed 54*b1cdbd2cSJim Jagielski static sal_Bool bThemeChanged; 55*b1cdbd2cSJim Jagielski static sal_Bool bNeedPixmapPaint; 56*b1cdbd2cSJim Jagielski static sal_Bool bGlobalNeedPixmapPaint; 57*b1cdbd2cSJim Jagielski static sal_Bool bToolbarGripWorkaround; 58*b1cdbd2cSJim Jagielski static sal_Bool bNeedButtonStyleAsEditBackgroundWorkaround; 59*b1cdbd2cSJim Jagielski 60*b1cdbd2cSJim Jagielski // native widget methods 61*b1cdbd2cSJim Jagielski virtual sal_Bool IsNativeControlSupported( ControlType nType, ControlPart nPart ); 62*b1cdbd2cSJim Jagielski virtual sal_Bool hitTestNativeControl( ControlType nType, ControlPart nPart, const Rectangle& rControlRegion, 63*b1cdbd2cSJim Jagielski const Point& aPos, sal_Bool& rIsInside ); 64*b1cdbd2cSJim Jagielski virtual sal_Bool drawNativeControl( ControlType nType, ControlPart nPart, const Rectangle& rControlRegion, 65*b1cdbd2cSJim Jagielski ControlState nState, const ImplControlValue& aValue, 66*b1cdbd2cSJim Jagielski const rtl::OUString& rCaption ); 67*b1cdbd2cSJim Jagielski virtual sal_Bool drawNativeControlText( ControlType nType, ControlPart nPart, const Rectangle& rControlRegion, 68*b1cdbd2cSJim Jagielski ControlState nState, const ImplControlValue& aValue, 69*b1cdbd2cSJim Jagielski const rtl::OUString& rCaption ); 70*b1cdbd2cSJim Jagielski virtual sal_Bool getNativeControlRegion( ControlType nType, ControlPart nPart, const Rectangle& rControlRegion, ControlState nState, 71*b1cdbd2cSJim Jagielski const ImplControlValue& aValue, const rtl::OUString& rCaption, 72*b1cdbd2cSJim Jagielski Rectangle &rNativeBoundingRegion, Rectangle &rNativeContentRegion ); 73*b1cdbd2cSJim Jagielski 74*b1cdbd2cSJim Jagielski //helper methods for frame's UpdateSettings 75*b1cdbd2cSJim Jagielski void updateSettings( AllSettings& rSettings ); 76*b1cdbd2cSJim Jagielski 77*b1cdbd2cSJim Jagielski virtual bool setClipRegion( const Region& ); 78*b1cdbd2cSJim Jagielski virtual void ResetClipRegion(); 79*b1cdbd2cSJim Jagielski 80*b1cdbd2cSJim Jagielski // some themes set the background pixmap of our window EVERY time 81*b1cdbd2cSJim Jagielski // a control is painted; but presentation effects need 82*b1cdbd2cSJim Jagielski // the background set to None; workaround: set the background 83*b1cdbd2cSJim Jagielski // before copyBits 84*b1cdbd2cSJim Jagielski virtual void copyBits( const SalTwoRect& rPosAry, 85*b1cdbd2cSJim Jagielski SalGraphics* pSrcGraphics ); 86*b1cdbd2cSJim Jagielski 87*b1cdbd2cSJim Jagielski protected: 88*b1cdbd2cSJim Jagielski typedef std::list< Rectangle > clipList; 89*b1cdbd2cSJim Jagielski 90*b1cdbd2cSJim Jagielski GdkPixmap* NWGetPixmapFromScreen( Rectangle srcRect ); 91*b1cdbd2cSJim Jagielski sal_Bool NWRenderPixmapToScreen( GdkPixmap* pPixmap, Rectangle dstRect ); 92*b1cdbd2cSJim Jagielski 93*b1cdbd2cSJim Jagielski sal_Bool NWPaintGTKButton( GdkDrawable* gdkDrawable, ControlType nType, ControlPart nPart, 94*b1cdbd2cSJim Jagielski const Rectangle& rControlRectangle, 95*b1cdbd2cSJim Jagielski const clipList& rClipList, 96*b1cdbd2cSJim Jagielski ControlState nState, const ImplControlValue& aValue, 97*b1cdbd2cSJim Jagielski const OUString& rCaption ); 98*b1cdbd2cSJim Jagielski sal_Bool NWPaintGTKRadio( GdkDrawable* gdkDrawable, ControlType nType, ControlPart nPart, 99*b1cdbd2cSJim Jagielski const Rectangle& rControlRectangle, 100*b1cdbd2cSJim Jagielski const clipList& rClipList, 101*b1cdbd2cSJim Jagielski ControlState nState, const ImplControlValue& aValue, 102*b1cdbd2cSJim Jagielski const OUString& rCaption ); 103*b1cdbd2cSJim Jagielski sal_Bool NWPaintGTKCheck( GdkDrawable* gdkDrawable, ControlType nType, ControlPart nPart, 104*b1cdbd2cSJim Jagielski const Rectangle& rControlRectangle, 105*b1cdbd2cSJim Jagielski const clipList& rClipList, 106*b1cdbd2cSJim Jagielski ControlState nState, const ImplControlValue& aValue, 107*b1cdbd2cSJim Jagielski const OUString& rCaption ); 108*b1cdbd2cSJim Jagielski sal_Bool NWPaintGTKScrollbar( ControlType nType, ControlPart nPart, 109*b1cdbd2cSJim Jagielski const Rectangle& rControlRectangle, 110*b1cdbd2cSJim Jagielski const clipList& rClipList, 111*b1cdbd2cSJim Jagielski ControlState nState, const ImplControlValue& aValue, 112*b1cdbd2cSJim Jagielski const OUString& rCaption ); 113*b1cdbd2cSJim Jagielski sal_Bool NWPaintGTKEditBox( GdkDrawable* gdkDrawable, ControlType nType, ControlPart nPart, 114*b1cdbd2cSJim Jagielski const Rectangle& rControlRectangle, 115*b1cdbd2cSJim Jagielski const clipList& rClipList, 116*b1cdbd2cSJim Jagielski ControlState nState, const ImplControlValue& aValue, 117*b1cdbd2cSJim Jagielski const OUString& rCaption ); 118*b1cdbd2cSJim Jagielski sal_Bool NWPaintGTKSpinBox( ControlType nType, ControlPart nPart, 119*b1cdbd2cSJim Jagielski const Rectangle& rControlRectangle, 120*b1cdbd2cSJim Jagielski const clipList& rClipList, 121*b1cdbd2cSJim Jagielski ControlState nState, const ImplControlValue& aValue, 122*b1cdbd2cSJim Jagielski const OUString& rCaption ); 123*b1cdbd2cSJim Jagielski sal_Bool NWPaintGTKComboBox( GdkDrawable* gdkDrawable, ControlType nType, ControlPart nPart, 124*b1cdbd2cSJim Jagielski const Rectangle& rControlRectangle, 125*b1cdbd2cSJim Jagielski const clipList& rClipList, 126*b1cdbd2cSJim Jagielski ControlState nState, const ImplControlValue& aValue, 127*b1cdbd2cSJim Jagielski const OUString& rCaption ); 128*b1cdbd2cSJim Jagielski sal_Bool NWPaintGTKTabItem( ControlType nType, ControlPart nPart, 129*b1cdbd2cSJim Jagielski const Rectangle& rControlRectangle, 130*b1cdbd2cSJim Jagielski const clipList& rClipList, 131*b1cdbd2cSJim Jagielski ControlState nState, const ImplControlValue& aValue, 132*b1cdbd2cSJim Jagielski const OUString& rCaption ); 133*b1cdbd2cSJim Jagielski sal_Bool NWPaintGTKListBox( GdkDrawable* gdkDrawable, ControlType nType, ControlPart nPart, 134*b1cdbd2cSJim Jagielski const Rectangle& rControlRectangle, 135*b1cdbd2cSJim Jagielski const clipList& rClipList, 136*b1cdbd2cSJim Jagielski ControlState nState, const ImplControlValue& aValue, 137*b1cdbd2cSJim Jagielski const OUString& rCaption ); 138*b1cdbd2cSJim Jagielski 139*b1cdbd2cSJim Jagielski sal_Bool NWPaintGTKToolbar( GdkDrawable* gdkDrawable, ControlType nType, ControlPart nPart, 140*b1cdbd2cSJim Jagielski const Rectangle& rControlRectangle, 141*b1cdbd2cSJim Jagielski const clipList& rClipList, 142*b1cdbd2cSJim Jagielski ControlState nState, const ImplControlValue& aValue, 143*b1cdbd2cSJim Jagielski const OUString& rCaption ); 144*b1cdbd2cSJim Jagielski sal_Bool NWPaintGTKMenubar( GdkDrawable* gdkDrawable, ControlType nType, ControlPart nPart, 145*b1cdbd2cSJim Jagielski const Rectangle& rControlRectangle, 146*b1cdbd2cSJim Jagielski const clipList& rClipList, 147*b1cdbd2cSJim Jagielski ControlState nState, const ImplControlValue& aValue, 148*b1cdbd2cSJim Jagielski const OUString& rCaption ); 149*b1cdbd2cSJim Jagielski sal_Bool NWPaintGTKPopupMenu( GdkDrawable* gdkDrawable, ControlType nType, ControlPart nPart, 150*b1cdbd2cSJim Jagielski const Rectangle& rControlRectangle, 151*b1cdbd2cSJim Jagielski const clipList& rClipList, 152*b1cdbd2cSJim Jagielski ControlState nState, const ImplControlValue& aValue, 153*b1cdbd2cSJim Jagielski const OUString& rCaption ); 154*b1cdbd2cSJim Jagielski sal_Bool NWPaintGTKTooltip( GdkDrawable* gdkDrawable, ControlType nType, ControlPart nPart, 155*b1cdbd2cSJim Jagielski const Rectangle& rControlRectangle, 156*b1cdbd2cSJim Jagielski const clipList& rClipList, 157*b1cdbd2cSJim Jagielski ControlState nState, const ImplControlValue& aValue, 158*b1cdbd2cSJim Jagielski const OUString& rCaption ); 159*b1cdbd2cSJim Jagielski sal_Bool NWPaintGTKProgress( GdkDrawable* gdkDrawable, ControlType nType, ControlPart nPart, 160*b1cdbd2cSJim Jagielski const Rectangle& rControlRectangle, 161*b1cdbd2cSJim Jagielski const clipList& rClipList, 162*b1cdbd2cSJim Jagielski ControlState nState, const ImplControlValue& aValue, 163*b1cdbd2cSJim Jagielski const OUString& rCaption ); 164*b1cdbd2cSJim Jagielski sal_Bool NWPaintGTKSlider( GdkDrawable* gdkDrawable, ControlType nType, ControlPart nPart, 165*b1cdbd2cSJim Jagielski const Rectangle& rControlRectangle, 166*b1cdbd2cSJim Jagielski const clipList& rClipList, 167*b1cdbd2cSJim Jagielski ControlState nState, const ImplControlValue& aValue, 168*b1cdbd2cSJim Jagielski const OUString& rCaption ); 169*b1cdbd2cSJim Jagielski sal_Bool NWPaintGTKListNode( GdkDrawable* gdkDrawable, ControlType nType, ControlPart nPart, 170*b1cdbd2cSJim Jagielski const Rectangle& rControlRectangle, 171*b1cdbd2cSJim Jagielski const clipList& rClipList, 172*b1cdbd2cSJim Jagielski ControlState nState, const ImplControlValue& aValue, 173*b1cdbd2cSJim Jagielski const OUString& rCaption ); 174*b1cdbd2cSJim Jagielski }; 175*b1cdbd2cSJim Jagielski 176*b1cdbd2cSJim Jagielski #endif // _VCL_GTKGDI_HXX 177