]> git.saurik.com Git - wxWidgets.git/blobdiff - src/motif/dcclient.cpp
*** empty log message ***
[wxWidgets.git] / src / motif / dcclient.cpp
index 7ef4bf61efe252cb5ab883e87ce4c459da0894cb..1a9b9abb6a947303dee35c59aaa91b5ec7f5db0d 100644 (file)
@@ -89,6 +89,7 @@ wxWindowDC::wxWindowDC(void)
     m_userRegion = (WXRegion) 0;
     m_pixmap = (WXPixmap) 0;
     m_autoSetting = 0;
+    m_oldFont = (WXFont) 0;
 };
 
 wxWindowDC::wxWindowDC( wxWindow *window )
@@ -136,10 +137,23 @@ 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;
 };
 
 wxWindowDC::~wxWindowDC(void)
 {
+    if ((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;
@@ -1067,7 +1081,7 @@ void wxWindowDC::DrawText( const wxString &text, long x, long y, bool use16 )
 
   if (m_font.Ok())
     {
-      WXFontStructPtr pFontStruct = m_font.FindOrCreateFontStruct(m_userScaleY*m_logicalScaleY);
+      WXFontStructPtr pFontStruct = m_font.GetFontStruct(m_userScaleY*m_logicalScaleY, m_display);
       int direction, descent;
       XCharStruct overall_return;
       if (use16)
@@ -1221,7 +1235,7 @@ void wxWindowDC::GetTextExtent( const wxString &string, long *width, long *heigh
     return;
   }
 
-  WXFontStructPtr pFontStruct = theFont->FindOrCreateFontStruct(m_userScaleY*m_logicalScaleY);
+  WXFontStructPtr pFontStruct = theFont->GetFontStruct(m_userScaleY*m_logicalScaleY, m_display);
 
   int direction, ascent, descent2;
   XCharStruct overall;
@@ -1251,7 +1265,7 @@ long wxWindowDC::GetCharWidth(void)
   if (!m_font.Ok())
     return 0;
 
-  WXFontStructPtr pFontStruct = m_font.FindOrCreateFontStruct(m_userScaleY * m_logicalScaleY);
+  WXFontStructPtr pFontStruct = m_font.GetFontStruct(m_userScaleY * m_logicalScaleY, m_display);
 
   int direction, ascent, descent;
   XCharStruct overall;
@@ -1267,7 +1281,7 @@ long wxWindowDC::GetCharHeight(void)
   if (!m_font.Ok())
     return 0;
 
-  WXFontStructPtr pFontStruct = m_font.FindOrCreateFontStruct(m_userScaleY*m_logicalScaleY);
+  WXFontStructPtr pFontStruct = m_font.GetFontStruct(m_userScaleY*m_logicalScaleY, m_display);
 
   int direction, ascent, descent;
   XCharStruct overall;
@@ -1323,9 +1337,18 @@ void wxWindowDC::SetFont( const wxFont &font )
   m_font = font;
 
   if (!m_font.Ok())
+  {
+    if ((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);
+    }
     return;
+  }
 
-  WXFontStructPtr pFontStruct = m_font.FindOrCreateFontStruct(m_userScaleY*m_logicalScaleY);
+  WXFontStructPtr pFontStruct = m_font.GetFontStruct(m_userScaleY*m_logicalScaleY, m_display);
 
   Font fontId = ((XFontStruct*)pFontStruct)->fid;
   XSetFont ((Display*) m_display, (GC) m_gc, fontId);
@@ -1339,7 +1362,7 @@ void wxWindowDC::SetPen( const wxPen &pen )
   if (!Ok()) return;
 
   m_pen = pen;
-  if (m_pen.Ok())
+  if (!m_pen.Ok())
     return;
 
   wxBitmap oldStipple = m_currentStipple;
@@ -2151,7 +2174,7 @@ static void wx_spline_draw_point_array(wxDC *dc)
   }
 }
 
-void wxWindowDC::DrawOpenSpline( wxList *points )
+void wxWindowDC::DrawSpline( wxList *points )
 {
     wxPoint *p;
     double           cx1, cy1, cx2, cy2, cx3, cy3, cx4, cy4;