X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a909ef16ad346c40e478593a23113b20fa0ad88e..b85b06e13d22e7fc1604ec1a49caa1227a1b3d36:/src/gtk/dcclient.cpp diff --git a/src/gtk/dcclient.cpp b/src/gtk/dcclient.cpp index 943b9b3b02..234a38f278 100644 --- a/src/gtk/dcclient.cpp +++ b/src/gtk/dcclient.cpp @@ -1,6 +1,6 @@ ///////////////////////////////////////////////////////////////////////////// // Name: src/gtk/dcclient.cpp -// Purpose: +// Purpose: wxWindowDCImpl implementation // Author: Robert Roebling // RCS-ID: $Id$ // Copyright: (c) 1998 Robert Roebling, Chris Breeze @@ -216,7 +216,7 @@ static GdkGC* wxGetPoolGC( GdkWindow *window, wxPoolGCType type ) // The realloc failed. Fall through to error. wxFAIL_MSG( wxT("No GC available") ); - return (GdkGC*) NULL; + return NULL; } static void wxFreePoolGC( GdkGC *gc ) @@ -242,16 +242,16 @@ IMPLEMENT_ABSTRACT_CLASS(wxWindowDCImpl, wxGTKDCImpl) wxWindowDCImpl::wxWindowDCImpl( wxDC *owner ) : wxGTKDCImpl( owner ) { - m_gdkwindow = (GdkWindow*) NULL; - m_penGC = (GdkGC *) NULL; - m_brushGC = (GdkGC *) NULL; - m_textGC = (GdkGC *) NULL; - m_bgGC = (GdkGC *) NULL; - m_cmap = (GdkColormap *) NULL; + m_gdkwindow = NULL; + m_penGC = NULL; + m_brushGC = NULL; + m_textGC = NULL; + m_bgGC = NULL; + m_cmap = NULL; m_isScreenDC = false; - m_context = (PangoContext *)NULL; - m_layout = (PangoLayout *)NULL; - m_fontdesc = (PangoFontDescription *)NULL; + m_context = NULL; + m_layout = NULL; + m_fontdesc = NULL; } wxWindowDCImpl::wxWindowDCImpl( wxDC *owner, wxWindow *window ) : @@ -259,29 +259,30 @@ wxWindowDCImpl::wxWindowDCImpl( wxDC *owner, wxWindow *window ) : { wxASSERT_MSG( window, wxT("DC needs a window") ); - m_gdkwindow = (GdkWindow*) NULL; - m_penGC = (GdkGC *) NULL; - m_brushGC = (GdkGC *) NULL; - m_textGC = (GdkGC *) NULL; - m_bgGC = (GdkGC *) NULL; - m_cmap = (GdkColormap *) NULL; + m_gdkwindow = NULL; + m_penGC = NULL; + m_brushGC = NULL; + m_textGC = NULL; + m_bgGC = NULL; + m_cmap = NULL; m_isScreenDC = false; m_font = window->GetFont(); GtkWidget *widget = window->m_wxwindow; // Some controls don't have m_wxwindow - like wxStaticBox, but the user - // code should still be able to create wxClientDCs for them, so we will - // use the parent window here then. + // code should still be able to create wxClientDCs for them if ( !widget ) { - window = window->GetParent(); - widget = window->m_wxwindow; - } + widget = window->m_widget; + + wxCHECK_RET(widget, "DC needs a widget"); - wxASSERT_MSG( widget, wxT("DC needs a widget") ); + if (GTK_WIDGET_NO_WINDOW(widget)) + SetDeviceLocalOrigin(widget->allocation.x, widget->allocation.y); + } - m_context = window->GtkGetPangoDefaultContext(); + m_context = window->GTKGetPangoDefaultContext(); m_layout = pango_layout_new( m_context ); m_fontdesc = pango_font_description_copy( widget->style->font_desc ); @@ -296,7 +297,7 @@ wxWindowDCImpl::wxWindowDCImpl( wxDC *owner, wxWindow *window ) : return; } - m_cmap = gtk_widget_get_colormap( widget ? widget : window->m_widget ); + m_cmap = gtk_widget_get_colormap(widget); SetUpDC(); @@ -309,7 +310,7 @@ wxWindowDCImpl::wxWindowDCImpl( wxDC *owner, wxWindow *window ) : m_window = window; - if (m_window && m_window->m_wxwindow && + if (m_window && m_window->m_wxwindow && (m_window->GetLayoutDirection() == wxLayout_RightToLeft)) { // reverse sense @@ -351,7 +352,7 @@ void wxWindowDCImpl::SetUpDC( bool isMemDC ) } if (!done) - { + { if (m_isScreenDC) { m_penGC = wxGetPoolGC( m_gdkwindow, wxPEN_SCREEN ); @@ -410,10 +411,10 @@ void wxWindowDCImpl::SetUpDC( bool isMemDC ) gdk_gc_set_function( m_penGC, GDK_COPY ); /* clipping */ - gdk_gc_set_clip_rectangle( m_penGC, (GdkRectangle *) NULL ); - gdk_gc_set_clip_rectangle( m_brushGC, (GdkRectangle *) NULL ); - gdk_gc_set_clip_rectangle( m_textGC, (GdkRectangle *) NULL ); - gdk_gc_set_clip_rectangle( m_bgGC, (GdkRectangle *) NULL ); + gdk_gc_set_clip_rectangle( m_penGC, NULL ); + gdk_gc_set_clip_rectangle( m_brushGC, NULL ); + gdk_gc_set_clip_rectangle( m_textGC, NULL ); + gdk_gc_set_clip_rectangle( m_bgGC, NULL ); } void wxWindowDCImpl::DoGetSize( int* width, int* height ) const @@ -424,11 +425,11 @@ void wxWindowDCImpl::DoGetSize( int* width, int* height ) const } bool wxWindowDCImpl::DoFloodFill(wxCoord x, wxCoord y, - const wxColour& col, int style) + const wxColour& col, wxFloodFillStyle style) { #if wxUSE_IMAGE extern bool wxDoFloodFill(wxDC *dc, wxCoord x, wxCoord y, - const wxColour & col, int style); + const wxColour & col, wxFloodFillStyle style); return wxDoFloodFill( GetOwner(), x, y, col, style); #else @@ -475,7 +476,7 @@ bool wxWindowDCImpl::DoGetPixel( wxCoord x1, wxCoord y1, wxColour *col ) const void wxWindowDCImpl::DoDrawLine( wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2 ) { wxCHECK_RET( IsOk(), wxT("invalid window dc") ); - + if (m_pen.GetStyle() != wxPENSTYLE_TRANSPARENT) { if (m_gdkwindow) @@ -698,7 +699,9 @@ void wxWindowDCImpl::DoDrawLines( int n, wxPoint points[], wxCoord xoffset, wxCo delete[] gpts; } -void wxWindowDCImpl::DoDrawPolygon( int n, wxPoint points[], wxCoord xoffset, wxCoord yoffset, int WXUNUSED(fillStyle) ) +void wxWindowDCImpl::DoDrawPolygon( int n, wxPoint points[], + wxCoord xoffset, wxCoord yoffset, + wxPolygonFillMode WXUNUSED(fillStyle) ) { wxCHECK_RET( IsOk(), wxT("invalid window dc") ); @@ -1158,7 +1161,7 @@ bool wxWindowDCImpl::DoBlit( wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height, wxDC *source, wxCoord xsrc, wxCoord ysrc, - int logical_func, + wxRasterOperationMode logical_func, bool useMask, wxCoord xsrcMask, wxCoord ysrcMask ) { @@ -1299,7 +1302,7 @@ bool wxWindowDCImpl::DoBlit( wxCoord xdest, wxCoord ydest, src_y = 0; } - const int logical_func_save = m_logicalFunction; + const wxRasterOperationMode logical_func_save = m_logicalFunction; SetLogicalFunction(logical_func); if (memDC == NULL) gdk_gc_set_subwindow(use_gc, GDK_INCLUDE_INFERIORS); @@ -1437,9 +1440,9 @@ void wxWindowDCImpl::DoDrawText( const wxString &text, wxCoord x, wxCoord y ) x_rtl -= w; const GdkColor* bg_col = NULL; - if (m_backgroundMode == wxBRUSHSTYLE_SOLID) + if (m_backgroundMode == wxBRUSHSTYLE_SOLID) bg_col = m_textBackgroundColour.GetColor(); - + gdk_draw_layout_with_colors(m_gdkwindow, m_textGC, x_rtl, y, m_layout, NULL, bg_col); if (isScaled) @@ -1460,7 +1463,7 @@ void wxWindowDCImpl::DoDrawText( const wxString &text, wxCoord x, wxCoord y ) CalcBoundingBox(x, y); } -// TODO: When GTK2.6 is required, merge DoDrawText and DoDrawRotatedText to +// TODO: When GTK2.6 is required, merge DoDrawText and DoDrawRotatedText to // avoid code duplication void wxWindowDCImpl::DoDrawRotatedText( const wxString &text, wxCoord x, wxCoord y, double angle ) { @@ -1506,7 +1509,7 @@ void wxWindowDCImpl::DoDrawRotatedText( const wxString &text, wxCoord x, wxCoord pango_layout_get_pixel_size(m_layout, &w, &h); const GdkColor* bg_col = NULL; - if (m_backgroundMode == wxBRUSHSTYLE_SOLID) + if (m_backgroundMode == wxBRUSHSTYLE_SOLID) bg_col = m_textBackgroundColour.GetColor(); // rotate the text @@ -1515,13 +1518,13 @@ void wxWindowDCImpl::DoDrawRotatedText( const wxString &text, wxCoord x, wxCoord pango_context_set_matrix (m_context, &matrix); pango_layout_context_changed (m_layout); - // To be compatible with MSW, the rotation axis must be in the old + // To be compatible with MSW, the rotation axis must be in the old // top-left corner. - // Calculate the vertices of the rotated rectangle containing the text, + // Calculate the vertices of the rotated rectangle containing the text, // relative to the old top-left vertex. - // We could use the matrix for this, but it's simpler with trignonometry. + // We could use the matrix for this, but it's simpler with trignonometry. double rad = DegToRad(angle); - // the rectangle vertices are counted clockwise with the first one + // the rectangle vertices are counted clockwise with the first one // being at (0, 0) double x2 = w * cos(rad); double y2 = -w * sin(rad); // y axis points to the bottom, hence minus @@ -1535,7 +1538,7 @@ void wxWindowDCImpl::DoDrawRotatedText( const wxString &text, wxCoord x, wxCoord minX = (wxCoord)(dmin(dmin(0, x2), dmin(x3, x4)) - 0.5), minY = (wxCoord)(dmin(dmin(0, y2), dmin(y3, y4)) - 0.5); - gdk_draw_layout_with_colors(m_gdkwindow, m_textGC, x+minX, y+minY, + gdk_draw_layout_with_colors(m_gdkwindow, m_textGC, x+minX, y+minY, m_layout, NULL, bg_col); if (m_font.GetUnderlined()) @@ -1778,7 +1781,7 @@ wxCoord wxWindowDCImpl::GetCharHeight() const wxCHECK_MSG( metrics, -1, _T("failed to get pango font metrics") ); wxCoord h = PANGO_PIXELS (pango_font_metrics_get_descent (metrics) + - pango_font_metrics_get_ascent (metrics)); + pango_font_metrics_get_ascent (metrics)); pango_font_metrics_unref (metrics); return h; } @@ -1810,7 +1813,7 @@ void wxWindowDCImpl::SetFont( const wxFont &font ) { PangoContext *oldContext = m_context; - m_context = m_window->GtkGetPangoDefaultContext(); + m_context = m_window->GTKGetPangoDefaultContext(); // If we switch back/forth between different contexts // we also have to create a new layout. I think so, @@ -1902,7 +1905,7 @@ void wxWindowDCImpl::SetPen( const wxPen &pen ) case wxPENSTYLE_SOLID: default: lineStyle = GDK_LINE_SOLID; - req_dash = (wxGTKDash*)NULL; + req_dash = NULL; req_nb_dash = 0; break; } @@ -2048,7 +2051,7 @@ void wxWindowDCImpl::SetBackground( const wxBrush &brush ) } } -void wxWindowDCImpl::SetLogicalFunction( int function ) +void wxWindowDCImpl::SetLogicalFunction( wxRasterOperationMode function ) { wxCHECK_RET( IsOk(), wxT("invalid window dc") ); @@ -2079,8 +2082,8 @@ void wxWindowDCImpl::SetLogicalFunction( int function ) case wxSRC_INVERT: mode = GDK_COPY_INVERT; break; case wxNOR: mode = GDK_NOR; break; default: - wxFAIL_MSG( wxT("unsupported logical function") ); - mode = GDK_COPY; + wxFAIL_MSG("unknown mode"); + return; } m_logicalFunction = function; @@ -2154,7 +2157,7 @@ void wxWindowDCImpl::DoSetClippingRegion( wxCoord x, wxCoord y, wxCoord width, w rect.width = XLOG2DEVREL(width); rect.height = YLOG2DEVREL(height); - if (m_window && m_window->m_wxwindow && + if (m_window && m_window->m_wxwindow && (m_window->GetLayoutDirection() == wxLayout_RightToLeft)) { rect.x -= rect.width; @@ -2224,13 +2227,13 @@ void wxWindowDCImpl::DestroyClippingRegion() void wxWindowDCImpl::Destroy() { if (m_penGC) wxFreePoolGC( m_penGC ); - m_penGC = (GdkGC*) NULL; + m_penGC = NULL; if (m_brushGC) wxFreePoolGC( m_brushGC ); - m_brushGC = (GdkGC*) NULL; + m_brushGC = NULL; if (m_textGC) wxFreePoolGC( m_textGC ); - m_textGC = (GdkGC*) NULL; + m_textGC = NULL; if (m_bgGC) wxFreePoolGC( m_bgGC ); - m_bgGC = (GdkGC*) NULL; + m_bgGC = NULL; } void wxWindowDCImpl::SetDeviceOrigin( wxCoord x, wxCoord y ) @@ -2246,7 +2249,7 @@ void wxWindowDCImpl::SetAxisOrientation( bool xLeftRight, bool yBottomUp ) m_signX = (xLeftRight ? 1 : -1); m_signY = (yBottomUp ? -1 : 1); - if (m_window && m_window->m_wxwindow && + if (m_window && m_window->m_wxwindow && (m_window->GetLayoutDirection() == wxLayout_RightToLeft)) m_signX = -m_signX; @@ -2303,7 +2306,7 @@ wxClientDCImpl::wxClientDCImpl( wxDC *owner, wxWindow *win ) SetDeviceOrigin(ptOrigin.x, ptOrigin.y); wxSize size = win->GetClientSize(); DoSetClippingRegion(0, 0, size.x, size.y); -#endif +#endif // __WXUNIVERSAL__ } @@ -2369,7 +2372,7 @@ wxPaintDCImpl::wxPaintDCImpl( wxDC *owner, wxWindow *win ) gdk_gc_set_clip_region( m_textGC, region ); gdk_gc_set_clip_region( m_bgGC, region ); } -#endif +#endif } // ----------------------------------------------------------------------------