- (yPos != m_yScrollPosition) ||
- (pixelsPerUnitX != m_xScrollPixelsPerLine) ||
- (pixelsPerUnitY != m_yScrollPixelsPerLine)
- );
-
- m_xScrollPixelsPerLine = pixelsPerUnitX;
- m_yScrollPixelsPerLine = pixelsPerUnitY;
- m_xScrollLines = noUnitsX;
- m_yScrollLines = noUnitsY;
-
- AdjustScrollbars();
-
- if (do_refresh && !noRefresh) Refresh();
-
-#ifdef __WINDOWS__
- UpdateWindow ((HWND) GetHWND());
+ (yPos != m_yScrollPosition)
+// (pixelsPerUnitX != m_xScrollPixelsPerLine) ||
+// (pixelsPerUnitY != m_yScrollPixelsPerLine)
+ );
+
+ m_xScrollPixelsPerLine = pixelsPerUnitX;
+ m_yScrollPixelsPerLine = pixelsPerUnitY;
+ m_xScrollPosition = xPos;
+ m_yScrollPosition = yPos;
+ m_xScrollLines = noUnitsX;
+ m_yScrollLines = noUnitsY;
+
+#ifdef __WXMOTIF__
+ // Sorry, some Motif-specific code to implement a backing pixmap
+ // for the wxRETAINED style. Implementing a backing store can't
+ // be entirely generic because it relies on the wxWindowDC implementation
+ // to duplicate X drawing calls for the backing pixmap.
+
+ if ((m_windowStyle & wxRETAINED) == wxRETAINED)
+ {
+ Display* dpy = XtDisplay((Widget) GetMainWidget());
+
+ int totalPixelWidth = m_xScrollLines * m_xScrollPixelsPerLine;
+ int totalPixelHeight = m_yScrollLines * m_yScrollPixelsPerLine;
+ if (m_backingPixmap &&
+ !((m_pixmapWidth == totalPixelWidth) &&
+ (m_pixmapHeight == totalPixelHeight)))
+ {
+ XFreePixmap (dpy, (Pixmap) m_backingPixmap);
+ m_backingPixmap = (WXPixmap) 0;
+ }
+
+ if (!m_backingPixmap &&
+ (noUnitsX != 0) && (noUnitsY != 0))
+ {
+ int depth = wxDisplayDepth();
+ m_pixmapWidth = totalPixelWidth;
+ m_pixmapHeight = totalPixelHeight;
+ m_backingPixmap = (WXPixmap) XCreatePixmap (dpy, RootWindow (dpy, DefaultScreen (dpy)),
+ m_pixmapWidth, m_pixmapHeight, depth);
+ }
+
+ }
+#endif // Motif
+
+ AdjustScrollbars();
+
+ if (do_refresh && !noRefresh)
+ m_targetWindow->Refresh();
+
+#ifdef __WXMSW__
+ // GRG: if this turns out to be really necessary, we could
+ // at least move it to the above if { ... } so that it is
+ // only done if noRefresh = FALSE (the default). OTOH, if
+ // this doesn't break anything, which seems to be the
+ // case, we could just leave it out.
+
+ // Necessary?
+ // UpdateWindow ((HWND) m_targetWindow->GetHWND());
+#endif
+#ifdef __WXMAC__
+ m_targetWindow->MacUpdateImmediately() ;