X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/463c4d7193481ac27626b282ccf0ac178f029abd..94c09a19ec0406118b51b60657232ea3b14d6c4f:/src/motif/dcclient.cpp diff --git a/src/motif/dcclient.cpp b/src/motif/dcclient.cpp index 0b0941a8e7..51919e9a08 100644 --- a/src/motif/dcclient.cpp +++ b/src/motif/dcclient.cpp @@ -36,10 +36,6 @@ // headers // ---------------------------------------------------------------------------- -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) - #pragma implementation "dcclient.h" -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" @@ -153,7 +149,6 @@ void wxWindowDC::Init() m_display = (WXDisplay*) NULL; m_pixmap = (WXPixmap) 0; m_autoSetting = 0; - m_oldFont = (WXFont) 0; m_ok = false; m_clipRegion = (WXRegion) 0; } @@ -199,24 +194,11 @@ wxWindowDC::wxWindowDC( wxWindow *window ) m_backgroundPixel = (int) gcvalues.background; - // Get the current Font so we can set it back later - XGCValues valReturn; - XGetGCValues((Display*) m_display, (GC) m_gc, GCFont, &valReturn); - m_oldFont = (WXFont) valReturn.font; - SetBackground(wxBrush(m_window->GetBackgroundColour(), wxSOLID)); } wxWindowDC::~wxWindowDC() { - if (m_gc && (m_oldFont != (WXFont) 0) && ((long) m_oldFont != -1)) - { - XSetFont ((Display*) m_display, (GC) m_gc, (Font) m_oldFont); - - if (m_window && m_window->GetBackingPixmap()) - XSetFont ((Display*) m_display,(GC) m_gcBacking, (Font) m_oldFont); - } - if (m_gc) XFreeGC ((Display*) m_display, (GC) m_gc); m_gc = (WXGC) 0; @@ -410,7 +392,7 @@ void wxWindowDC::DoDrawEllipticArc( wxCoord x, wxCoord y, wxCoord width, wxCoord if (m_brush.Ok() && m_brush.GetStyle () != wxTRANSPARENT) { - m_autoSetting = TRUE; // must be reset + m_autoSetting = true; // must be reset SetBrush (m_brush); XFillArc ((Display*) m_display, (Pixmap) m_pixmap, (GC) m_gc, xd, yd, wd, hd, start, end); @@ -898,7 +880,7 @@ bool wxWindowDC::DoBlit( wxCoord xdest, wxCoord ydest, source->LogicalToDeviceXRel(width), source->LogicalToDeviceYRel(height), XLOG2DEV_2 (xdest), YLOG2DEV_2 (ydest), - TRUE, &cache); + True, &cache); if ( useMask && source->IsKindOf(CLASSINFO(wxMemoryDC)) ) { @@ -917,7 +899,7 @@ bool wxWindowDC::DoBlit( wxCoord xdest, wxCoord ydest, source->LogicalToDeviceXRel(width), source->LogicalToDeviceYRel(height), XLOG2DEV (xdest), YLOG2DEV (ydest), - FALSE, &cache); + False, &cache); if ( useMask ) { @@ -1035,7 +1017,7 @@ void wxWindowDC::DoDrawText( const wxString &text, wxCoord x, wxCoord y ) int cx = 0; int cy = 0; int ascent = 0; - int slen; + int slen = text.length(); // Set FillStyle, otherwise X will use current stipple! XGCValues gcV, gcBackingV; @@ -1049,27 +1031,9 @@ void wxWindowDC::DoDrawText( const wxString &text, wxCoord x, wxCoord y ) XSetFillStyle ((Display*) m_display, (GC) m_gcBacking, FillSolid); } - slen = strlen(text); - if (m_font.Ok()) - { - WXFontStructPtr pFontStruct = m_font.GetFontStruct(m_userScaleY*m_logicalScaleY, m_display); - int direction, descent; - XCharStruct overall_return; -#if 0 - if (use16) - (void)XTextExtents16((XFontStruct*) pFontStruct, (XChar2b *)(const char*) text, slen, &direction, - &ascent, &descent, &overall_return); - else -#endif // 0 - (void)XTextExtents((XFontStruct*) pFontStruct, - wxConstCast(text.c_str(), char), - slen, &direction, - &ascent, &descent, &overall_return); - - cx = overall_return.width; - cy = ascent + descent; - } + wxGetTextExtent (m_display, m_font, m_userScaleY * m_logicalScaleY, + text, &cx, &cy, &ascent, NULL); // First draw a rectangle representing the text background, if a text // background is specified @@ -1145,7 +1109,12 @@ void wxWindowDC::DoDrawText( const wxString &text, wxCoord x, wxCoord y ) (XChar2b *)(char*) (const char*) text, slen); else #endif // 0 +#if wxMOTIF_NEW_FONT_HANDLING + XFontSet fset = (XFontSet) m_font.GetFontSet (m_userScaleY * m_logicalScaleY, m_display); + XmbDrawString((Display*) m_display, (Pixmap) m_pixmap, fset, (GC) m_gc, XLOG2DEV (x), YLOG2DEV (y) + ascent, text, slen); +#else XDrawString((Display*) m_display, (Pixmap) m_pixmap, (GC) m_gc, XLOG2DEV (x), YLOG2DEV (y) + ascent, text, slen); +#endif if (m_window && m_window->GetBackingPixmap()) { #if 0 @@ -1155,9 +1124,15 @@ void wxWindowDC::DoDrawText( const wxString &text, wxCoord x, wxCoord y ) (XChar2b *)(char*) (const char*) text, slen); else #endif // 0 +#if wxMOTIF_NEW_FONT_HANDLING + XmbDrawString((Display*) m_display, (Pixmap) m_window->GetBackingPixmap(), fset, (GC) m_gcBacking, + XLOG2DEV_2 (x), YLOG2DEV_2 (y) + ascent, + wxConstCast(text.c_str(), char), slen); +#else XDrawString((Display*) m_display, (Pixmap) m_window->GetBackingPixmap(), (GC) m_gcBacking, XLOG2DEV_2 (x), YLOG2DEV_2 (y) + ascent, wxConstCast(text.c_str(), char), slen); +#endif } // restore fill style @@ -1208,31 +1183,10 @@ void wxWindowDC::DoDrawRotatedText( const wxString &text, wxCoord x, wxCoord y, int cx = 0; int cy = 0; int ascent = 0; - int slen = text.length(); if (m_font.Ok()) - { - // Calculate text extent. - WXFontStructPtr pFontStruct = - m_font.GetFontStruct(m_userScaleY*m_logicalScaleY, m_display); - int direction, descent; - XCharStruct overall_return; -#if 0 - if (use16) - (void)XTextExtents16((XFontStruct*) pFontStruct, - (XChar2b *)(const char*) text, - slen, &direction, - &ascent, &descent, &overall_return); - else -#endif // 0 - (void)XTextExtents((XFontStruct*) pFontStruct, - wxConstCast(text.c_str(), char), - slen, &direction, - &ascent, &descent, &overall_return); - - cx = overall_return.width; - cy = ascent + descent; - } + wxGetTextExtent (m_display, m_font, m_userScaleY * m_logicalScaleY, + text, &cx, &cy, &ascent, NULL); wxBitmap src(cx, cy); wxMemoryDC dc; @@ -1340,9 +1294,7 @@ void wxWindowDC::DoGetTextExtent( const wxString &string, wxCoord *width, wxCoor { wxCHECK_RET( Ok(), "invalid dc" ); - wxFont* theFont = font; - if (!theFont) - theFont = (wxFont *)&m_font; // const_cast + const wxFont* theFont = font ? font : &m_font; if (!theFont->Ok()) { @@ -1354,33 +1306,11 @@ void wxWindowDC::DoGetTextExtent( const wxString &string, wxCoord *width, wxCoor return; } - WXFontStructPtr pFontStruct = theFont->GetFontStruct(m_userScaleY*m_logicalScaleY, m_display); - - int direction, ascent, descent2; - XCharStruct overall; - int slen; - -#if 0 - if (use16) - slen = str16len(string); - else -#endif // 0 - slen = strlen(string); + wxGetTextExtent(m_display, *theFont, m_userScaleY * m_logicalScaleY, + string, width, height, NULL, descent); -#if 0 - if (use16) - XTextExtents16((XFontStruct*) pFontStruct, (XChar2b *) (char*) (const char*) string, slen, &direction, - &ascent, &descent2, &overall); - else -#endif // 0 - XTextExtents((XFontStruct*) pFontStruct, - wxConstCast(string.c_str(), char), slen, &direction, - &ascent, &descent2, &overall); - - if (width) *width = XDEV2LOGREL (overall.width); - if (height) *height = YDEV2LOGREL (ascent + descent2); - if (descent) - *descent = descent2; + if (width) *width = XDEV2LOGREL (*width); + if (height) *height = YDEV2LOGREL (*height); if (externalLeading) *externalLeading = 0; } @@ -1389,14 +1319,13 @@ wxCoord wxWindowDC::GetCharWidth() const { wxCHECK_MSG( Ok(), 0, "invalid dc" ); wxCHECK_MSG( m_font.Ok(), 0, "invalid font" ); + + int width; - WXFontStructPtr pFontStruct = m_font.GetFontStruct(m_userScaleY * m_logicalScaleY, m_display); + wxGetTextExtent (m_display, m_font, m_userScaleY * m_logicalScaleY, + "x", &width, NULL, NULL, NULL); - int direction, ascent, descent; - XCharStruct overall; - XTextExtents ((XFontStruct*) pFontStruct, "x", 1, &direction, &ascent, - &descent, &overall); - return XDEV2LOGREL(overall.width); + return XDEV2LOGREL(width); } wxCoord wxWindowDC::GetCharHeight() const @@ -1404,14 +1333,12 @@ wxCoord wxWindowDC::GetCharHeight() const wxCHECK_MSG( Ok(), 0, "invalid dc" ); wxCHECK_MSG( m_font.Ok(), 0, "invalid font" ); - WXFontStructPtr pFontStruct = m_font.GetFontStruct(m_userScaleY*m_logicalScaleY, m_display); + int height; + + wxGetTextExtent (m_display, m_font, m_userScaleY * m_logicalScaleY, + "x", NULL, &height, NULL, NULL); - int direction, ascent, descent; - XCharStruct overall; - XTextExtents ((XFontStruct*) pFontStruct, "x", 1, &direction, &ascent, - &descent, &overall); - // return XDEV2LOGREL(overall.ascent + overall.descent); - return XDEV2LOGREL(ascent + descent); + return XDEV2LOGREL(height); } void wxWindowDC::DoGetSize( int *width, int *height ) const @@ -1470,16 +1397,10 @@ void wxWindowDC::SetFont( const wxFont &font ) if (!m_font.Ok()) { - if ((m_oldFont != (WXFont) 0) && ((wxCoord) m_oldFont != -1)) - { - XSetFont ((Display*) m_display, (GC) m_gc, (Font) m_oldFont); - - if (m_window && m_window->GetBackingPixmap()) - XSetFont ((Display*) m_display,(GC) m_gcBacking, (Font) m_oldFont); - } return; } +#if !wxMOTIF_NEW_FONT_HANDLING WXFontStructPtr pFontStruct = m_font.GetFontStruct(m_userScaleY*m_logicalScaleY, m_display); Font fontId = ((XFontStruct*)pFontStruct)->fid; @@ -1487,6 +1408,7 @@ void wxWindowDC::SetFont( const wxFont &font ) if (m_window && m_window->GetBackingPixmap()) XSetFont ((Display*) m_display,(GC) m_gcBacking, fontId); +#endif } void wxWindowDC::SetForegroundPixelWithLogicalFunction(int pixel) @@ -2261,7 +2183,7 @@ static void XCopyRemote(Display *src_display, Display *dest_display, destcm = (Colormap) wxTheApp->GetMainColormap((WXDisplay*) dest_display); cache_pos = 0; - all_cache = FALSE; + all_cache = False; for (i = 0; i < w; i++) for (j = 0; j < h; j++) { @@ -2289,7 +2211,7 @@ static void XCopyRemote(Display *src_display, Display *dest_display, if (++cache_pos >= CACHE_SIZE) { cache_pos = 0; - all_cache = TRUE; + all_cache = true; } install: