]> git.saurik.com Git - wxWidgets.git/commitdiff
Solved wxMotif scrolling display problem; added wxImageModule;
authorJulian Smart <julian@anthemion.co.uk>
Thu, 11 Feb 1999 16:00:33 +0000 (16:00 +0000)
committerJulian Smart <julian@anthemion.co.uk>
Thu, 11 Feb 1999 16:00:33 +0000 (16:00 +0000)
added wxRETAINED support in wxMotif; changed wxDC::SetBackground behaviour;
changed OnKeyDown/OnChar behaviour; fixed wxToolBar toggle bugs; fixed
wxImage on wxMotif bug whereby new was used to allocate XImage data

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1677 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

24 files changed:
distrib/msw/generic.rsp
docs/bugs.txt
docs/changes.txt
docs/motif/issues.txt
docs/motif/todo.txt
include/wx/motif/dcclient.h
include/wx/motif/window.h
samples/image/image.cpp
src/common/image.cpp
src/generic/scrolwin.cpp
src/motif/app.cpp
src/motif/dcclient.cpp
src/motif/dialog.cpp
src/motif/filedlg.cpp
src/motif/listbox.cpp
src/motif/makefile.unx
src/motif/toolbar.cpp
src/motif/window.cpp
src/msw/dc.cpp
src/msw/dcclient.cpp
src/msw/makefile.twn
src/stubs/makefile.unx
utils/ogl/samples/studio/studio.cpp
utils/ogl/samples/studio/studio.xpm

index 2f88a7e3243a588443155b7621ed96357d7815ab..80bc591f87b3b4a9015c78a718fbe05e88d3c919 100644 (file)
@@ -647,6 +647,18 @@ samples/thread/*.png
 samples/thread/*.ico
 samples/thread/*.txt
 
+samples/forty/*.cpp
+samples/forty/*.h
+samples/forty/makefile*
+samples/forty/*.rc
+samples/forty/*.def
+samples/forty/*.bmp
+samples/forty/*.xpm
+samples/forty/*.xbm
+samples/forty/*.png
+samples/forty/*.ico
+samples/forty/*.txt
+
 samples/dde/*.cpp
 samples/dde/*.h
 samples/dde/makefile*
index b2d9feee5c7fa1a0f377a9e605990540dbff1261..78abe19b55e3cbc2967354bc9a087c1ff5b210ba 100644 (file)
@@ -25,7 +25,8 @@ wxMotif:
 
 - wxRadioBox sometimes doesn't show (e.g. in controls sample).
 
-- wxStaticText doesn't wrap.
+- Can't set the colours for the buttons in the file selector, for
+  some reason.
 
 General:
 --------
index 3dda75dc07266bb8c64a8e80b20b50c27869e4a0..f0140f39e3e8de3261dad57e865cfbc1fdb8c738 100644 (file)
@@ -12,16 +12,26 @@ wxMSW:
 
 - Makefiles for more compilers and samples; Cygwin makefiles
   rationalised.
-- Added DLL support to VC++ makefiles.
+- Added VC++ project file for compiling as DLL.
 
 wxMotif:
 
+- Added OnEraseBackground invocation.
+- Added wxRETAINED implementation for wxScrolledWindow.
+- Cured scrolling display problem by adding XmUpdateDisplay.
+- Tried to make lex-ing in the makefile more generic (command line
+  syntax should apply to both lex and flex).
+- Changed file selector colours for consistency (except for buttons:
+  crashes for some reason).
+- Fixed wxMotif version of wxImage::ConvertToBitmap (used new instead
+  of malloc, which causes memory problems).
 
 General:
 
 - Further doc improvements.
 - wxGenericValidator added.
-
+- Added wxImageModule to image.cpp, so adds/cleans up standard handlers
+  automatically.
 
 Beta 3, January 31st 1999
 -------------------------
index de016c58c932f13d787b7f6872bedd29eb15be10..bb4c54218ed0266cce74ed16d284112c0d0a5ab3 100644 (file)
@@ -6,4 +6,8 @@ Outstanding issues
 - wxTextCtrl doesn't work as a stream buffer in Linux/gcc
 - No wxSpinButton
 - Need a way of specifying default settings for colour/font/etc.
-- More optimisation could be done to reduce X server traffic, etc.
\ No newline at end of file
+- More optimisation could be done to reduce X server traffic, etc.
+- Should scrollbars take on the background colour? Not right for
+  e.g. wxScrolledWindows, so maybe have wxSystemSettings value for
+  scrollbar colour, and/or ability to set scrollbar colour independently.
+
index 1be398bf41fe0c505d41a3f16f6041d21c227485..6417d0a520fb0b1f92ca1abd243f69dc6068f8b8 100644 (file)
@@ -1,7 +1,7 @@
 wxMotif TODO
 ------------
 
-Updated: 28/12/98
+Updated: 11/02/99
 
          -------------------------------o-------------------------
 
@@ -16,24 +16,10 @@ High Priority
 - Have a central/per app file for colour settings, with a wxWin
   app to allow changing settings interactively.
 
-- Colour setting in widgets (almost done). Should scrollbars take
-  on the background colour? Not right for e.g. wxScrolledWindows,
-  so maybe have wxSystemSettings value for scrollbar colour, and/or
-  ability to set scrollbar colour independently.
-
-- Optimize wxWindow OnPaint to avoid flicker, collapsing Expose events
-  as per flicker fix in 1.68. It will be tricky to avoid
-  interfering with non-wxScrolledWindow widgets except by
-  explicitly testing for wxScrolledWindow.
-
-- Implementation of OnEraseBackground. How? Call OnEraseBackground
-  just before OnPaint? Will duplicate Xlib's own erase of the background.
-  However, this is usually OK, because the default wxWindow::OnEraseBackground
-  can do nothing (SetBackgroundColour will make the background look OK).
-  And if a custom OnEraseBackground uses the same colour as the window
-  background, no flicker will be seen. If it does something else, such as
-  painting a tiled bitmap, then a slight flicker might be seen unless
-  X can be persuaded not to repaint the window background by default.
+- Implementation of default event processing (i.e. passing on an intercepted
+  event such as OnChar to the system). Currently, such events are processed
+  anyway, so for example intercepting left-click in a widget doesn't disable
+  the default behaviour. See TODOs in window.cpp.
 
 - wxRadioBox doesn't show up in the controls sample, though it's
   OK on other dialogs (e.g. printing sample).
@@ -46,11 +32,12 @@ High Priority
 
 - Use wxImage to load other formats into wxBitmaps, such as PNG, BMP.
 
-- Implement scaled Blit as per John Price's impementation for 1.68.
-
 Low Priority
 ------------
 
+- Painting a retained window could be optimized further (see
+  wxWindow::DoPaint).
+
 - Visuals: how to select an appropriate one? See Thomas Runge's
   visual patch for 1.68 -- should be straightforward to port to 2.0.
 
@@ -64,11 +51,7 @@ Low Priority
   when implemented as extra bitmap handlers, the code won't be linked
   unless needed. Update: see if wxImage can handle these formats.
 
-- Enhance event handling such that you override e.g. left-click
-  and unless you call the base OnMouseEvent, the click won't be
-  sent to the button. Required for Dialog Editor.
-
-- Get Dialog Editor working under Motif.
+- Get Dialog Editor working (better) under Motif.
 
 - New wxHelp version: try using the XmHTML widget at
   http://www.xs4all.nl/~ripley/XmHTML/.
@@ -107,8 +90,6 @@ Low Priority
 - Miscellaneous classes e.g. wxJoystick (identical to GTK's one for
   Linux)
 
-- Blit scaling
-
 - Get ODBC classes and sample working.
 
 - Work out why wxTextCtrl doesn't work as a stream buffer under
index 2eef5da0124177b7a9035173978552773724db72..7ea3f3068190bc3fcb4b841b39d11e6d8a318150 100644 (file)
@@ -176,6 +176,7 @@ class WXDLLEXPORT wxWindowDC: public wxDC
     void SetDCClipping (); // Helper function for setting clipping
 
     inline WXGC GetGC() const { return m_gc; }
+    inline WXGC GetBackingGC() const { return m_gcBacking; }
     inline WXDisplay* GetDisplay() const { return m_display; }
     inline bool GetAutoSetting() const { return m_autoSetting; }
     inline void SetAutoSetting(bool flag) { m_autoSetting = flag; }
index b8bd87a2798550f59155b456c4264ff408698f95..81c51482c08728dc69b11399abf6177fb0651fba 100644 (file)
@@ -634,6 +634,7 @@ public:
 
 public:
   /// Motif-specific
+  bool                  m_needsRefresh; // Do we need to repaint the backing store?
   bool                  m_canAddEventHandler;
   bool                  m_button1Pressed;
   bool                  m_button2Pressed;
index 33e4408a763fee57faddd418ddb74edf951d8caa..7b17838bd525c529a2afa16b04103564669444ed 100644 (file)
@@ -84,6 +84,10 @@ MyCanvas::MyCanvas( wxWindow *parent, wxWindowID id,
                     const wxPoint &pos, const wxSize &size )
         : wxScrolledWindow( parent, id, pos, size, wxSUNKEN_BORDER )
 {
+  my_horse = (wxBitmap*) NULL;
+  my_square = (wxBitmap*) NULL;
+  my_anti = (wxBitmap*) NULL;
+
   SetBackgroundColour(* wxWHITE);
 
   wxBitmap bitmap( 100, 100 );
@@ -109,7 +113,7 @@ MyCanvas::MyCanvas( wxWindow *parent, wxWindowID id,
   
   image.LoadFile( dir + wxString("test.png"), wxBITMAP_TYPE_PNG );
   my_square = new wxBitmap( image.ConvertToBitmap() );
-  
+
   CreateAntiAliasedBitmap();
 }
 
@@ -124,26 +128,28 @@ void MyCanvas::OnPaint( wxPaintEvent &WXUNUSED(event) )
 {
   wxPaintDC dc( this );
   PrepareDC( dc );
-  
+
   dc.DrawText( "Loaded image", 30, 10 );
-  if (my_square->Ok()) dc.DrawBitmap( *my_square, 30, 30 );
+  if (my_square && my_square->Ok()) dc.DrawBitmap( *my_square, 30, 30 );
 
   dc.DrawText( "Drawn directly", 150, 10 );
   dc.SetBrush( wxBrush( "orange", wxSOLID ) );
   dc.SetPen( *wxWHITE_PEN );
   dc.DrawRectangle( 150, 30, 100, 100 );
 
-  if (my_anti->Ok()) dc.DrawBitmap( *my_anti, 250, 140 );
+  if (my_anti && my_anti->Ok()) dc.DrawBitmap( *my_anti, 250, 140 );
   
-  if (my_horse->Ok()) dc.DrawBitmap( *my_horse, 30, 140 );
+  if (my_horse && my_horse->Ok()) dc.DrawBitmap( *my_horse, 30, 140 );
 }
 
 void MyCanvas::CreateAntiAliasedBitmap()
 {
   wxBitmap bitmap( 300, 300 );
+
   wxMemoryDC dc;
+
   dc.SelectObject( bitmap );
-  
+
   dc.Clear();
   
   dc.SetFont( wxFont( 24, wxDECORATIVE, wxDEFAULT, wxDEFAULT ) );
@@ -156,7 +162,7 @@ void MyCanvas::CreateAntiAliasedBitmap()
   
   wxImage original( bitmap );
   wxImage anti( 150, 150 );
-  
+
   /* This is quite slow, but safe. Use wxImage::GetData() for speed instead. */
   
   for (int y = 1; y < 149; y++)
@@ -235,8 +241,6 @@ void MyFrame::OnAbout( wxCommandEvent &WXUNUSED(event) )
 
 bool MyApp::OnInit()
 {
-  wxImage::AddHandler( new wxPNGHandler );
-
   wxFrame *frame = new MyFrame();
   frame->Show( TRUE );
 
index 0b4956dad2f4b30195f3574e6521a8c13732043f..3bd976b987744bc8319c473d5099b635cf4dbd18 100644 (file)
@@ -34,6 +34,7 @@ extern "C" {
 #include "wx/filefn.h"
 #include "wx/wfstream.h"
 #include "wx/intl.h"
+#include "wx/module.h"
 
 #ifdef __SALFORDC__
 #ifdef FAR
@@ -1957,7 +1958,7 @@ wxBitmap wxImage::ConvertToBitmap() const
     wxBitmap bitmap;
     
     wxCHECK_MSG( Ok(), bitmap, "invalid image" );
-    
+
     int width = GetWidth();
     int height = GetHeight();
     
@@ -1971,10 +1972,10 @@ wxBitmap wxImage::ConvertToBitmap() const
     // Create image
     
     XImage *data_image = XCreateImage( dpy, vis, bpp, ZPixmap, 0, 0, width, height, 32, 0 );
-    data_image->data = new char[ data_image->bytes_per_line * data_image->height ];
+    data_image->data = (char*) malloc( data_image->bytes_per_line * data_image->height );
     
     bitmap.Create( width, height, bpp );
-    
+
     /*
     // Create mask
     
@@ -2012,7 +2013,7 @@ wxBitmap wxImage::ConvertToBitmap() const
     }
     
     XFree( vi );
-    
+
     if ((bpp == 16) && (vi->red_mask != 0xf800)) bpp = 15;
     if (bpp < 8) bpp = 8;
     
@@ -2278,3 +2279,19 @@ wxImage::wxImage( const wxBitmap &bitmap )
     */
 }
 #endif
+
+// A module to allow wxImage initialization/cleanup
+// without calling these functions from app.cpp or from
+// the user's application.
+
+class wxImageModule: public wxModule
+{
+DECLARE_DYNAMIC_CLASS(wxImageModule)
+public:
+    wxImageModule() {}
+    bool OnInit() { wxImage::InitStandardHandlers(); return TRUE; };
+    void OnExit() { wxImage::CleanUpHandlers(); };
+};
+
+IMPLEMENT_DYNAMIC_CLASS(wxImageModule, wxModule)
+
index 2a2eeb014c51fcc5192b5b2498dbc3612ead05b5..139f45ed39c9b19343dedca259e1dffb903e8e48 100644 (file)
@@ -40,6 +40,11 @@ IMPLEMENT_DYNAMIC_CLASS(wxScrolledWindow, wxWindow)
 #include "windows.h"
 #endif
 
+#ifdef __WXMOTIF__
+// For wxRETAINED implementation
+#include <Xm/Xm.h>
+#endif
+
 wxScrolledWindow::wxScrolledWindow(void)
 {
     m_xScrollPixelsPerLine = 0;
@@ -104,6 +109,39 @@ void wxScrolledWindow::SetScrollbars (int pixelsPerUnitX, int pixelsPerUnitY,
     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
       
     AdjustScrollbars();
    
index 2c179d7a2d903466c13a83415c0e97baf2b1e6d9..7836a95070695d2ff58b0d0542f133300c055d13 100644 (file)
@@ -538,10 +538,11 @@ WXColormap wxApp::GetMainColormap(WXDisplay* display)
 {
     if (!display) /* Must be called first with non-NULL display */
         return m_mainColormap;
+
+    int defaultScreen = DefaultScreen((Display*) display);
+    Screen* screen = XScreenOfDisplay((Display*) display, defaultScreen);
     
-    Colormap c =
-        DefaultColormapOfScreen(XScreenOfDisplay((Display*) display,
-        DefaultScreen((Display*) display)));
+    Colormap c = DefaultColormapOfScreen(screen);
     
     if (!m_mainColormap)
         m_mainColormap = (WXColormap) c;
index d46aa227ff59b1ff904360fb4150593235e9a7ee..7d0d99e08f2acd49c43e2854b1f99bf57158a852 100644 (file)
@@ -37,6 +37,8 @@ About pens, brushes, and the autoSetting flag:
 #include "wx/dcmemory.h"
 #include "wx/window.h"
 #include "wx/app.h"
+#include "wx/image.h"
+
 #include <math.h>
 
 #include <Xm/Xm.h>
@@ -144,6 +146,8 @@ wxWindowDC::wxWindowDC( wxWindow *window )
     XGCValues valReturn;
     XGetGCValues((Display*) m_display, (GC) m_gc, GCFont, &valReturn);
     m_oldFont = (WXFont) valReturn.font;
+
+    SetBackground(wxBrush(m_window->GetBackgroundColour(), wxSOLID));
 };
 
 wxWindowDC::~wxWindowDC(void)
@@ -935,8 +939,41 @@ bool wxWindowDC::Blit( long xdest, long ydest, long width, long height,
     // last selected background color. [::SetBackground]
     if (m_pen.Ok() && m_autoSetting)
         SetPen (m_pen);
-    
-    if (m_pixmap && sourceDC->m_pixmap)
+
+    // Do bitmap scaling if necessary
+
+    wxBitmap *scaledBitmap = (wxBitmap*) NULL;
+    Pixmap sourcePixmap = (Pixmap) NULL;
+    double scaleX, scaleY;
+    GetUserScale(& scaleX, & scaleY);
+
+    // Sorry, can't scale masks just yet
+    if (!useMask && (scaleX != 1.0 || scaleY != 1.0) && sourceDC->IsKindOf(CLASSINFO(wxMemoryDC)))
+    {
+        wxMemoryDC* memDC = (wxMemoryDC*) sourceDC;
+        wxBitmap& bitmap = memDC->GetBitmap();
+
+        wxASSERT_MSG( (bitmap.Ok()), "Bad source bitmap in wxWindowDC::Blit");
+
+        wxImage image(bitmap);
+        if (!image.Ok())
+        {
+            sourcePixmap = (Pixmap) bitmap.GetPixmap();
+        }
+        else
+        {
+            int scaledW = (int) (bitmap.GetWidth() * scaleX);
+            int scaledH = (int) (bitmap.GetHeight() * scaleY);
+               
+            image = image.Scale(scaledW, scaledH);
+            scaledBitmap = new wxBitmap(image.ConvertToBitmap());
+            sourcePixmap = (Pixmap) scaledBitmap->GetPixmap();
+       }
+    }
+    else
+        sourcePixmap = (Pixmap) sourceDC->m_pixmap;
+
+    if (m_pixmap && sourcePixmap)
     {
         /* MATTHEW: [9] */
         int orig = m_logicalFunction;
@@ -949,7 +986,7 @@ bool wxWindowDC::Blit( long xdest, long ydest, long width, long height,
             
             if (m_window && m_window->GetBackingPixmap())
                 XCopyRemote((Display*) sourceDC->m_display, (Display*) m_display,
-                (Pixmap) sourceDC->m_pixmap, (Pixmap) m_window->GetBackingPixmap(),
+                (Pixmap) sourcePixmap, (Pixmap) m_window->GetBackingPixmap(),
                 (GC) m_gcBacking,
                 source->LogicalToDeviceX (xsrc),
                 source->LogicalToDeviceY (ysrc),
@@ -969,7 +1006,7 @@ bool wxWindowDC::Blit( long xdest, long ydest, long width, long height,
                 }
             }
             
-            XCopyRemote((Display*) sourceDC->m_display, (Display*) m_display, (Pixmap) sourceDC->m_pixmap, (Pixmap) m_pixmap, (GC) m_gc,
+            XCopyRemote((Display*) sourceDC->m_display, (Display*) m_display, (Pixmap) sourcePixmap, (Pixmap) m_pixmap, (GC) m_gc,
                 source->LogicalToDeviceX (xsrc),
                 source->LogicalToDeviceY (ysrc),
                 source->LogicalToDeviceXRel(width),
@@ -990,7 +1027,7 @@ bool wxWindowDC::Blit( long xdest, long ydest, long width, long height,
                 // +++ MARKUS (mho@comnets.rwth-aachen): error on blitting bitmaps with depth 1
                 if (source->IsKindOf(CLASSINFO(wxMemoryDC)) && ((wxMemoryDC*) source)->GetBitmap().GetDepth() == 1)
                 {
-                    XCopyPlane ((Display*) m_display, (Pixmap) sourceDC->m_pixmap, (Pixmap) m_window->GetBackingPixmap(),(GC) m_gcBacking,
+                    XCopyPlane ((Display*) m_display, (Pixmap) sourcePixmap, (Pixmap) m_window->GetBackingPixmap(),(GC) m_gcBacking,
                         source->LogicalToDeviceX (xsrc),
                         source->LogicalToDeviceY (ysrc),
                         source->LogicalToDeviceXRel(width),
@@ -999,7 +1036,7 @@ bool wxWindowDC::Blit( long xdest, long ydest, long width, long height,
                 }
                 else
                 {
-                    XCopyArea ((Display*) m_display, (Pixmap) sourceDC->m_pixmap, (Pixmap) m_window->GetBackingPixmap(),(GC) m_gcBacking,
+                    XCopyArea ((Display*) m_display, (Pixmap) sourcePixmap, (Pixmap) m_window->GetBackingPixmap(),(GC) m_gcBacking,
                         source->LogicalToDeviceX (xsrc),
                         source->LogicalToDeviceY (ysrc),
                         source->LogicalToDeviceXRel(width),
@@ -1022,7 +1059,7 @@ bool wxWindowDC::Blit( long xdest, long ydest, long width, long height,
             if (source->IsKindOf(CLASSINFO(wxMemoryDC)) &&
                 ((wxMemoryDC*)source)->GetBitmap().Ok() && (((wxMemoryDC*)source)->GetBitmap().GetDepth () == 1))
             {
-                XCopyPlane ((Display*) m_display, (Pixmap) sourceDC->m_pixmap, (Pixmap) m_pixmap, (GC) m_gc,
+                XCopyPlane ((Display*) m_display, (Pixmap) sourcePixmap, (Pixmap) m_pixmap, (GC) m_gc,
                     source->LogicalToDeviceX (xsrc),
                     source->LogicalToDeviceY (ysrc),
                     source->LogicalToDeviceXRel(width),
@@ -1031,7 +1068,7 @@ bool wxWindowDC::Blit( long xdest, long ydest, long width, long height,
             }
             else
             {
-                XCopyArea ((Display*) m_display, (Pixmap) sourceDC->m_pixmap, (Pixmap) m_pixmap, (GC) m_gc,
+                XCopyArea ((Display*) m_display, (Pixmap) sourcePixmap, (Pixmap) m_pixmap, (GC) m_gc,
                     source->LogicalToDeviceX (xsrc),
                     source->LogicalToDeviceY (ysrc),
                     source->LogicalToDeviceXRel(width),
@@ -1050,9 +1087,13 @@ bool wxWindowDC::Blit( long xdest, long ydest, long width, long height,
         CalcBoundingBox (xdest + width, ydest + height);
         
         SetLogicalFunction(orig);
+
+        if (scaledBitmap) delete scaledBitmap;
         
         return TRUE;
   }
+  if (scaledBitmap) delete scaledBitmap;
+
   return FALSE;
 };
 
@@ -1878,10 +1919,14 @@ void wxWindowDC::SetBackground( const wxBrush &brush )
         return;
     
     int pixel = m_backgroundBrush.GetColour().AllocColour(m_display);
-    
+
+    // New behaviour, 10/2/99: setting the background brush of a DC
+    // doesn't affect the window background colour.
+/*
     // XSetWindowBackground doesn't work for non-Window pixmaps
     if (!this->IsKindOf(CLASSINFO(wxMemoryDC)))
         XSetWindowBackground ((Display*) m_display, (Pixmap) m_pixmap, pixel);
+*/
     
     // Necessary for ::DrawIcon, which use fg/bg pixel or the GC.
     // And Blit,... (Any fct that use XCopyPlane, in fact.)
index 84712cd4e1cf962806ef53833d3f30da4547d5f7..8cb958e77a8765a9179a93e5c0bd841f4fb5af5e 100644 (file)
@@ -649,9 +649,7 @@ static void wxDialogBoxRepaintProc(Widget w, XtPointer WXUNUSED(c_data), XEvent
             
             if (event -> xexpose.count == 0)
             {
-                wxPaintEvent event(win->GetId());
-                event.SetEventObject(win);
-                win->GetEventHandler()->ProcessEvent(event);
+                win->DoPaint();
                 
                 win->ClearUpdateRects();
             }
@@ -699,8 +697,16 @@ static void wxDialogBoxEventHandler (Widget    wid,
                 }
                 else
                 {
-                    keyEvent.SetEventType(wxEVT_CHAR);
-                    dialog->GetEventHandler()->ProcessEvent(keyEvent);
+                    // For simplicity, OnKeyDown is the same as OnChar
+                    // TODO: filter modifier key presses from OnChar
+                    keyEvent.SetEventType(wxEVT_KEY_DOWN);
+
+                    // Only process OnChar if OnKeyDown didn't swallow it
+                    if (!dialog->GetEventHandler()->ProcessEvent (keyEvent))
+                    {
+                        keyEvent.SetEventType(wxEVT_CHAR);
+                        dialog->GetEventHandler()->ProcessEvent(keyEvent);
+                   }
                 }
             }
         }
index 0f22a05299713fd9af9e145ae444c70c7db3f661..ed6a27f8754dd6c51e713af953935ccc60ef2480 100644 (file)
@@ -19,6 +19,7 @@
 #include "wx/filedlg.h"
 #include "wx/intl.h"
 #include "wx/app.h"
+#include "wx/settings.h"
 
 #include <Xm/Xm.h>
 #include <Xm/MwmUtil.h>
@@ -142,6 +143,38 @@ wxFileDialog::wxFileDialog(wxWindow *parent, const wxString& message,
     m_pos = pos;
 }
 
+static void wxChangeListBoxColours(wxWindow* win, Widget widget)
+{
+    win->DoChangeBackgroundColour((WXWidget) widget, *wxWHITE);
+
+    // Change colour of the scrolled areas of the listboxes
+    Widget listParent = XtParent (widget);
+    win->DoChangeBackgroundColour((WXWidget) listParent, *wxWHITE, TRUE);
+
+    Widget hsb = (Widget) 0;
+    Widget vsb = (Widget) 0;
+    XtVaGetValues (listParent,
+        XmNhorizontalScrollBar, &hsb,
+        XmNverticalScrollBar, &vsb,
+        NULL);
+    
+   /* TODO: should scrollbars be affected? Should probably have separate
+    * function to change them (by default, taken from wxSystemSettings)
+    */
+    wxColour backgroundColour = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE);
+    win->DoChangeBackgroundColour((WXWidget) hsb, backgroundColour, TRUE);
+    win->DoChangeBackgroundColour((WXWidget) vsb, backgroundColour, TRUE);
+
+    if (hsb)
+      XtVaSetValues (hsb,
+        XmNtroughColor, backgroundColour.AllocColour(XtDisplay(hsb)),
+        NULL);
+    if (vsb)
+      XtVaSetValues (vsb,
+        XmNtroughColor, backgroundColour.AllocColour(XtDisplay(vsb)),
+        NULL);
+}
+
 int wxFileDialog::ShowModal()
 {
     wxBeginBusyCursor();
@@ -157,6 +190,15 @@ int wxFileDialog::ShowModal()
     
     Widget fileSel = XmCreateFileSelectionDialog(parentWidget, "file_selector", NULL, 0);
     XtUnmanageChild(XmFileSelectionBoxGetChild(fileSel, XmDIALOG_HELP_BUTTON));
+
+    Widget filterWidget = XmFileSelectionBoxGetChild(fileSel, XmDIALOG_FILTER_TEXT);
+    Widget selectionWidget = XmFileSelectionBoxGetChild(fileSel, XmDIALOG_TEXT);
+    Widget dirListWidget = XmFileSelectionBoxGetChild(fileSel, XmDIALOG_DIR_LIST);
+    Widget fileListWidget = XmFileSelectionBoxGetChild(fileSel, XmDIALOG_LIST);
+    Widget okWidget = XmFileSelectionBoxGetChild(fileSel, XmDIALOG_OK_BUTTON);
+    Widget applyWidget = XmFileSelectionBoxGetChild(fileSel, XmDIALOG_APPLY_BUTTON);
+    Widget cancelWidget = XmFileSelectionBoxGetChild(fileSel, XmDIALOG_CANCEL_BUTTON);
+
     
     Widget shell = XtParent(fileSel);
     
@@ -180,7 +222,6 @@ int wxFileDialog::ShowModal()
     
     if (entirePath != "")
     {
-        Widget selectionWidget = XmFileSelectionBoxGetChild(fileSel, XmDIALOG_TEXT);
         XmTextSetString(selectionWidget, (char*) (const char*) entirePath);
     }
     
@@ -192,7 +233,6 @@ int wxFileDialog::ShowModal()
         else
             filter = m_wildCard;
         
-        Widget filterWidget = XmFileSelectionBoxGetChild(fileSel, XmDIALOG_FILTER_TEXT);
         XmTextSetString(filterWidget, (char*) (const char*) filter);
         XmFileSelectionDoSearch(fileSel, NULL);
     }
@@ -229,9 +269,21 @@ int wxFileDialog::ShowModal()
         XmNresizePolicy, XmRESIZE_NONE,
         NULL);
 #endif
+    DoChangeBackgroundColour((WXWidget) fileSel, m_backgroundColour);
+    DoChangeBackgroundColour((WXWidget) filterWidget, *wxWHITE);
+    DoChangeBackgroundColour((WXWidget) selectionWidget, *wxWHITE);
+
+    /* For some reason this crashes
+    DoChangeBackgroundColour((WXWidget) okWidget, m_backgroundColour, TRUE);
+    DoChangeBackgroundColour((WXWidget) cancelWidget, m_backgroundColour, TRUE);
+    DoChangeBackgroundColour((WXWidget) applyWidget, m_backgroundColour, TRUE);
+    */
+
+    wxChangeListBoxColours(this, dirListWidget);
+    wxChangeListBoxColours(this, fileListWidget);
     
     XtManageChild(fileSel);
-    
+
     m_fileSelectorAnswer = "";
     m_fileSelectorReturned = FALSE;
     
index b409201903fc6dae8cd42ec7ac591827cb6a1a10..8bf42b0cf663070cbd34fe34e9a3a509cf420121 100644 (file)
@@ -760,8 +760,8 @@ void wxListBox::ChangeBackgroundColour()
         XmNverticalScrollBar, &vsb,
         NULL);
     
-        /* TODO: should scrollbars be affected? Should probably have separate
-        * function to change them (by default, taken from wxSystemSettings)
+   /* TODO: should scrollbars be affected? Should probably have separate
+    * function to change them (by default, taken from wxSystemSettings)
     */
     wxColour backgroundColour = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE);
     DoChangeBackgroundColour((WXWidget) hsb, backgroundColour, TRUE);
index 27fc8a76a86f940cf63a3a6a483880944ec5c253..c172156bbca3c0175ad103f0ec7248c51155c1e6 100644 (file)
@@ -201,14 +201,19 @@ $(WXLIB) : $(OBJECTS)
 # problems with lex_yy.c. See also note about LEX_SCANNER
 # above.
 ../common/lex_yy.c:    ../common/lexer.l
-       $(LEX) -o../common/lex.yy.c ../common/lexer.l 
-       sed -e "s/BUFSIZ/5000/g" < ../common/lex.yy.c | \
+       $(LEX) ../common/lexer.l
+       sed -e "s/BUFSIZ/5000/g" < lex.yy.c | \
        sed -e "s/yyoutput(c)/void yyoutput(c)/g" | \
         sed -e "s/YYLMAX 200/YYLMAX 5000/g" > ../common/lex_yy.c
-       /bin/rm -f ../common/lex.yy.c
+       /bin/rm -f lex.yy.c
 
-# N.B. if you have lex instead of flex, replace the $(LEX) line above
-# with the following:
+# The above should work with both lex and flex, but just in case not,
+# here are alternative syntaxes.
+#
+# Flex-style syntax:
+# $(LEX) -olex.yy.c ../common/lexer.l 
+
+# Lex-style syntax:
 #    $(LEX) ../common/lexer.l
 
 # Replace yacc with bison if you run into compilation
index 8b3a4d47a16997dd461531fc6b2f6a10a2bce119..319e564d81774caacb3cd68e39269b186deb29a4 100644 (file)
@@ -167,6 +167,10 @@ bool wxToolBar::CreateTools()
                    NULL);
                 XtAddCallback ((Widget) button, XmNvalueChangedCallback, (XtCallbackProc) wxToolButtonCallback,
                 (XtPointer) this);
+
+                XtVaSetValues ((Widget) button,
+                      XmNselectColor, m_backgroundColour.AllocColour(XtDisplay((Widget) button)),
+                      NULL);
             }
             else
             {
@@ -318,190 +322,6 @@ bool wxToolBar::CreateTools()
     return TRUE;
 }
 
-// Old version, assuming we use a form. Now we use
-// a bulletin board, so we can create controls on the toolbar.
-#if 0
-bool wxToolBar::CreateTools()
-{
-    if (m_tools.Number() == 0)
-        return FALSE;
-
-    // Separator spacing
-    const int separatorSize = GetToolSeparation(); // 8;
-
-    int currentSpacing = 0;
-
-    m_widgets.Clear();
-    Widget prevButton = (Widget) 0;
-    wxNode* node = m_tools.First();
-    while (node)
-    {
-        wxToolBarTool *tool = (wxToolBarTool *)node->Data();
-
-        if (tool->m_toolStyle == wxTOOL_STYLE_SEPARATOR)
-            currentSpacing = separatorSize;
-        else if (tool->m_bitmap1.Ok())
-        {
-            Widget button = (Widget) 0;
-
-            if (tool->m_isToggle)
-            {
-                button = XtVaCreateManagedWidget("toggleButton", 
-                   xmToggleButtonWidgetClass, (Widget) m_mainWidget,
-                   XmNleftAttachment, (prevButton == (Widget) 0) ? XmATTACH_FORM : XmATTACH_WIDGET,
-                   XmNleftWidget, (prevButton == (Widget) 0) ? NULL : prevButton,
-                   XmNleftOffset, currentSpacing,
-                   XmNtopAttachment, XmATTACH_FORM,
-                                                //                   XmNpushButtonEnabled, True,
-                   XmNmultiClick, XmMULTICLICK_KEEP,
-                   XmNlabelType, XmPIXMAP,
-                   NULL);
-                XtAddCallback ((Widget) button, XmNvalueChangedCallback, (XtCallbackProc) wxToolButtonCallback,
-                (XtPointer) this);
-            }
-            else
-            {
-                button = XtVaCreateManagedWidget("button", 
-                   xmPushButtonWidgetClass, (Widget) m_mainWidget,
-                   XmNleftAttachment, (prevButton == (Widget) 0) ? XmATTACH_FORM : XmATTACH_WIDGET,
-                   XmNleftWidget, (prevButton == (Widget) 0) ? NULL : prevButton,
-                   XmNleftOffset, currentSpacing,
-                   XmNtopAttachment, XmATTACH_FORM,
-                   XmNpushButtonEnabled, True,
-                   XmNmultiClick, XmMULTICLICK_KEEP,
-                   XmNlabelType, XmPIXMAP,
-                   NULL);
-                XtAddCallback (button,
-                   XmNactivateCallback, (XtCallbackProc) wxToolButtonCallback,
-                   (XtPointer) this);
-            }
-
-            // For each button, if there is a mask, we must create
-            // a new wxBitmap that has the correct background colour
-            // for the button. Otherwise the background will just be
-            // e.g. black if a transparent XPM has been loaded.
-            wxBitmap originalBitmap = tool->m_bitmap1;
-
-            if (tool->m_bitmap1.GetMask())
-            {
-                int backgroundPixel;
-                XtVaGetValues(button, XmNbackground, &backgroundPixel,
-                             NULL);
-
-
-                wxColour col;
-                col.SetPixel(backgroundPixel);
-                
-                wxBitmap newBitmap = wxCreateMaskedBitmap(tool->m_bitmap1, col);
-
-                tool->m_bitmap1 = newBitmap;
-            }
-
-            // Create a selected/toggled bitmap. If there isn't a m_bitmap2,
-            // we need to create it (with a darker, selected background)
-            int backgroundPixel;
-            if (tool->m_isToggle)
-                XtVaGetValues(button, XmNselectColor, &backgroundPixel,
-                     NULL);
-            else
-                XtVaGetValues(button, XmNarmColor, &backgroundPixel,
-                     NULL);
-
-            wxColour col;
-            col.SetPixel(backgroundPixel);
-
-            if (tool->m_bitmap2.Ok() && tool->m_bitmap2.GetMask())
-            {
-                // Use what's there
-                wxBitmap newBitmap = wxCreateMaskedBitmap(tool->m_bitmap2, col);
-                tool->m_bitmap2 = newBitmap;
-            }
-            else
-            {
-                // Use unselected bitmap
-                if (originalBitmap.GetMask())
-                {
-                    wxBitmap newBitmap = wxCreateMaskedBitmap(originalBitmap, col);
-                    tool->m_bitmap2 = newBitmap;
-               }
-                else
-                    tool->m_bitmap2 = tool->m_bitmap1;
-            }
-
-            Pixmap pixmap = (Pixmap) tool->m_bitmap1.GetPixmap();
-            Pixmap insensPixmap = (Pixmap) tool->m_bitmap1.GetInsensPixmap();
-
-            if (tool->m_isToggle)
-            {
-                // Toggle button
-                Pixmap pixmap2 = (Pixmap) 0;
-                Pixmap insensPixmap2 = (Pixmap) 0;
-
-                // If there's a bitmap for the toggled state, use it,
-                // otherwise generate one.
-                if (tool->m_bitmap2.Ok())
-                {
-                    pixmap2 = (Pixmap) tool->m_bitmap2.GetPixmap();
-                    insensPixmap2 = (Pixmap) tool->m_bitmap2.GetInsensPixmap();
-                }
-                else
-                {
-                    pixmap2 = (Pixmap) tool->m_bitmap1.GetArmPixmap(button);
-                    insensPixmap2 = XCreateInsensitivePixmap((Display*) wxGetDisplay(), pixmap2);
-                    m_pixmaps.Append((wxObject*) insensPixmap2); // Store for later deletion
-                }
-                XtVaSetValues (button,
-                    XmNindicatorOn, False,
-                   XmNshadowThickness, 2,
-                              //                   XmNborderWidth, 0,
-                              //                   XmNspacing, 0,
-                   XmNmarginWidth, 0,
-                   XmNmarginHeight, 0,
-                    XmNfillOnSelect, True,
-                    XmNlabelPixmap, pixmap,
-                    XmNselectPixmap, pixmap2,
-                    XmNlabelInsensitivePixmap, insensPixmap,
-                    XmNselectInsensitivePixmap, insensPixmap2,
-                    XmNlabelType, XmPIXMAP,
-                    NULL);
-            }
-            else
-            {
-                Pixmap pixmap2 = (Pixmap) 0;
-
-                // If there's a bitmap for the armed state, use it,
-                // otherwise generate one.
-                if (tool->m_bitmap2.Ok())
-                {
-                    pixmap2 = (Pixmap) tool->m_bitmap2.GetPixmap();
-                }
-                else
-                {
-                    pixmap2 = (Pixmap) tool->m_bitmap1.GetArmPixmap(button);
-
-                }
-                // Normal button
-                XtVaSetValues(button,
-                   XmNlabelPixmap, pixmap,
-                   XmNlabelInsensitivePixmap, insensPixmap,
-                   XmNarmPixmap, pixmap2,
-                   NULL);
-            }
-
-            XtAddEventHandler (button, EnterWindowMask | LeaveWindowMask, 
-                       False, wxToolButtonPopupCallback, (XtPointer) this);
-            m_widgets.Append(tool->m_index, (wxObject*) button);
-
-            prevButton = button;
-            currentSpacing = 0;
-        }
-        node = node->Next();
-    }
-
-    return TRUE;
-}
-#endif
-
 void wxToolBar::SetToolBitmapSize(const wxSize& size)
 {
     // TODO not necessary?
@@ -605,7 +425,7 @@ wxToolBarTool *wxToolBar::AddTool(int index, const wxBitmap& bitmap, const wxBit
   else
     tool->m_y = m_yMargin;
 
-  wxSize& size = GetToolSize();
+  wxSize size = GetToolSize();
   tool->SetSize(size.x, size.y);
 
   m_tools.Append((long)index, tool);
@@ -663,7 +483,7 @@ void wxToolButtonCallback (Widget w, XtPointer clientData,
             return;
         wxToolBarTool *tool = (wxToolBarTool *)node->Data();
         if (tool->m_isToggle)
-            tool->m_toggleState = toolBar->GetToolState(index);
+            tool->m_toggleState = !tool->m_toggleState;
 
         (void) toolBar->OnLeftClick(index, tool->m_toggleState);
     }
index e654d4aad02996711db5db568ae3a88f462c7812..8ec4c0d3b5d2d5e2b69c67851df8b0a8bf101801 100644 (file)
@@ -27,6 +27,7 @@
 #include "wx/settings.h"
 #include "wx/msgdlg.h"
 #include "wx/frame.h"
+#include "wx/scrolwin.h"
 
 #include "wx/menuitem.h"
 #include "wx/log.h"
@@ -114,6 +115,7 @@ wxWindow::wxWindow()
     m_clientData = NULL;
     
     /// Motif-specific
+    m_needsRefresh = TRUE;
     m_mainWidget = (WXWidget) 0;
     m_button1Pressed = FALSE;
     m_button2Pressed = FALSE;
@@ -295,6 +297,7 @@ bool wxWindow::Create(wxWindow *parent, wxWindowID id,
     m_clientData = NULL;
     
     // Motif-specific
+    m_needsRefresh = TRUE;
     m_canAddEventHandler = FALSE;
     m_mainWidget = (WXWidget) 0;
     m_button1Pressed = FALSE;
@@ -991,6 +994,7 @@ void wxWindow::GetTextExtent(const wxString& string, int *x, int *y,
 
 void wxWindow::Refresh(bool eraseBack, const wxRect *rect)
 {
+    m_needsRefresh = TRUE;
     Display *display = XtDisplay((Widget) GetMainWidget());
     Window thisWindow = XtWindow((Widget) GetMainWidget());
     
@@ -1477,11 +1481,13 @@ void wxWindow::ScrollWindow(int dx, int dy, const wxRect *rect)
         delete rect;
         node = node->Next();
     }
-    
+
+    XmUpdateDisplay((Widget) GetMainWidget());
 }
 
 void wxWindow::OnChar(wxKeyEvent& event)
 {
+    event.Skip();
 /* ??
 if ( event.KeyCode() == WXK_TAB ) {
 // propagate the TABs to the parent - it's up to it to decide what
@@ -1496,12 +1502,12 @@ return;
 
 void wxWindow::OnKeyDown(wxKeyEvent& event)
 {
-    Default();
+    event.Skip();
 }
 
 void wxWindow::OnKeyUp(wxKeyEvent& event)
 {
-    Default();
+    event.Skip();
 }
 
 void wxWindow::OnPaint(wxPaintEvent& event)
@@ -2359,10 +2365,13 @@ void wxCanvasRepaintProc (Widget drawingArea, XtPointer clientData,
             
             if (event -> xexpose.count == 0)
             {
+             /*
                 wxPaintEvent event(win->GetId());
                 event.SetEventObject(win);
                 win->GetEventHandler()->ProcessEvent(event);
+               */
                 
+                win->DoPaint();
                 win->ClearUpdateRects();
             }
             break;
@@ -2617,10 +2626,6 @@ void wxCanvasInputEvent (Widget drawingArea, XtPointer data, XmDrawingAreaCallba
 
             wxEventType eventType = wxEVT_CHAR;
 
-            // TODO: Is this the correct criterion for wxEVT_KEY_DOWN down versus wxEVT_CHAR?
-            if (id > WXK_START) // Non-ASCII values
-                eventType = wxEVT_KEY_DOWN;
-            
             wxKeyEvent event (eventType);
             
             if (local_event.xkey.state & ShiftMask)
@@ -2647,10 +2652,18 @@ void wxCanvasInputEvent (Widget drawingArea, XtPointer data, XmDrawingAreaCallba
                     event.SetEventType(wxEVT_CHAR_HOOK);
                     if (parent->GetEventHandler()->ProcessEvent(event))
                         return;
-                    event.SetEventType(wxEVT_CHAR);
                 }
-                
-                canvas->GetEventHandler()->ProcessEvent (event);
+
+                // For simplicity, OnKeyDown is the same as OnChar
+                // TODO: filter modifier key presses from OnChar
+                event.SetEventType(wxEVT_KEY_DOWN);
+
+                // Only process OnChar if OnKeyDown didn't swallow it
+                if (!canvas->GetEventHandler()->ProcessEvent (event))
+                {
+                  event.SetEventType(wxEVT_CHAR);
+                  canvas->GetEventHandler()->ProcessEvent (event);
+               }
             }
             break;
         }
@@ -2708,28 +2721,68 @@ void wxCanvasInputEvent (Widget drawingArea, XtPointer data, XmDrawingAreaCallba
 void wxWindow::DoPaint()
 {
     //TODO : make a temporary gc so we can do the XCopyArea below
-    if (0) // m_backingPixmap)
+    if (m_backingPixmap && !m_needsRefresh)
     {
-    /*
-    Widget drawingArea = (Widget) m_drawingArea;
-    //      int orig = GetDC()->GetLogicalFunction();
-    //      GetDC()->SetLogicalFunction (wxCOPY);
-    
-      // TODO: it may not be necessary to store m_pixmapOffsetX/Y; we
-      // should be able to calculate them.
-      XCopyArea (XtDisplay (drawingArea), m_backingPixmap, XtWindow (drawingArea), GetDC ()->gc,
-      m_pixmapOffsetX, m_pixmapOffsetY,
-      m_pixmapWidth, m_pixmapHeight,
-      0, 0);
-      
-        //      GetDC()->SetLogicalFunction (orig);
-        */
+      wxPaintDC dc(this);
+
+      GC tempGC = (GC) dc.GetBackingGC();
+
+      Widget widget = (Widget) GetMainWidget();
+
+      int scrollPosX = 0;
+      int scrollPosY = 0;
+
+      // We have to test whether it's a wxScrolledWindow (hack!)
+      // because otherwise we don't know how many pixels have been
+      // scrolled. We might solve this in the future by defining
+      // virtual wxWindow functions to get the scroll position in pixels.
+      // Or, each kind of scrolled window has to implement backing
+      // stores itself, using generic wxWindows code.
+      if (this->IsKindOf(CLASSINFO(wxScrolledWindow)))
+      {
+          wxScrolledWindow* scrolledWindow = (wxScrolledWindow*) this;
+          int x, y;
+          scrolledWindow->CalcScrolledPosition(0, 0, & x, & y);
+
+          scrollPosX = - x;
+          scrollPosY = - y;
+      }
+
+      // TODO: This could be optimized further by only copying the
+      // areas in the current update region.
+
+      // Only blit the part visible in the client area. The backing pixmap
+      // always starts at 0, 0 but we may be looking at only a portion of it.
+      wxSize clientArea = GetClientSize();
+      int toBlitX = m_pixmapWidth - scrollPosX;
+      int toBlitY = m_pixmapHeight - scrollPosY;
+
+      // Copy whichever is samller, the amount of pixmap we have to copy,
+      // or the size of the client area.
+      toBlitX = wxMin(toBlitX, clientArea.x);
+      toBlitY = wxMin(toBlitY, clientArea.y);
+
+      // Make sure we're not negative
+      toBlitX = wxMax(0, toBlitX);
+      toBlitY = wxMax(0, toBlitY);
+    
+      XCopyArea (XtDisplay (widget), (Pixmap) m_backingPixmap, XtWindow (widget), tempGC,
+        scrollPosX, scrollPosY, // Start at the scroll position
+        toBlitX, toBlitY,       // How much of the pixmap to copy
+        0, 0);                  // Destination
     }
     else
     {
+        // Set an erase event first
+        wxEraseEvent eraseEvent(GetId());
+        eraseEvent.SetEventObject(this);
+        GetEventHandler()->ProcessEvent(eraseEvent);
+
         wxPaintEvent event(GetId());
         event.SetEventObject(this);
         GetEventHandler()->ProcessEvent(event);
+
+        m_needsRefresh = FALSE;
     }
 }
 
index 45e37fc9a2c63bd552ba64ead296bd16c43ca3cf..970a074492b8f92ca23c2885a7dbd0395eeb7389 100644 (file)
@@ -808,7 +808,14 @@ void wxDC::SetBackground(const wxBrush& brush)
       }
       else
       {
-        m_canvas->SetBackgroundColour(m_backgroundBrush.GetColour());
+        // New behaviour, 10/2/99: setting the background brush of a DC
+        // doesn't affect the window background colour. However,
+        // I'm leaving in the transparency setting because it's needed by
+        // various controls (e.g. wxStaticText) to determine whether to draw
+        // transparently or not. TODO: maybe this should be a new function
+        // wxWindow::SetTransparency(). Should that apply to the child itself, or the
+        // parent?
+//        m_canvas->SetBackgroundColour(m_backgroundBrush.GetColour());
         m_canvas->m_backgroundTransparent = FALSE;
       }
     }
index e1cd97a1ada06bf8ec37eef6bf7cb2734a342f6d..50fd1ad86e647a5dc506b00ed0cd587bc717b2f4 100644 (file)
@@ -49,6 +49,8 @@ wxWindowDC::wxWindowDC(wxWindow *the_canvas)
 //  m_hDC = (WXHDC) ::GetDCEx((HWND) the_canvas->GetHWND(), NULL, DCX_WINDOW);
   m_hDC = (WXHDC) ::GetWindowDC((HWND) the_canvas->GetHWND() );
   m_hDCCount ++;
+
+  SetBackground(wxBrush(m_canvas->GetBackgroundColour(), wxSOLID));
 }
 
 wxWindowDC::~wxWindowDC(void)
@@ -77,6 +79,8 @@ wxClientDC::wxClientDC(wxWindow *the_canvas)
   m_canvas = the_canvas;
 //  BeginDrawing();
   m_hDC = (WXHDC) ::GetDC((HWND) the_canvas->GetHWND());
+
+  SetBackground(wxBrush(m_canvas->GetBackgroundColour(), wxSOLID));
 }
 
 wxClientDC::~wxClientDC(void)
@@ -128,6 +132,8 @@ wxPaintDC::wxPaintDC(wxWindow *canvas)
     ms_PaintCount = 1;
     m_hDCCount++;
   }
+
+  SetBackground(wxBrush(m_canvas->GetBackgroundColour(), wxSOLID));
 }
 
 wxPaintDC::~wxPaintDC()
index 2e1918fc4ac9e45214e0df1688eb2a06f853d586..4046a4ca6f2d3c5c298d3a29484a635d0a06f584 100644 (file)
@@ -279,7 +279,8 @@ $(COMMDIR)/y_tab.$(OBJSUFF):    $(COMMDIR)/y_tab.c $(COMMDIR)/lex_yy.c
 # problems with lex_yy.c. See also note about LEX_SCANNER
 # above.
 $(COMMDIR)/lex_yy.c:   $(COMMDIR)/lexer.l
-       $(LEX) $(COMMDIR)/lexer.l > $(COMMDIR)/lex_yy.c
+       $(LEX) $(COMMDIR)/lexer.l
+        mv lex.yy.c $(COMMDIR)/lex_yy.c
 
 # The following may be required for FLEX
 #      $(LEX) -o$(COMMDIR)/lex_yy.c $(COMMDIR)/lexer.l
index 365042e45f2f9003721451fb2838169d07b1bad9..a834d05b4a83ce10175df7a58b33c6dbc6580a88 100644 (file)
@@ -186,7 +186,7 @@ $(WXLIB) : $(OBJECTS)
 # problems with lex_yy.c. See also note about LEX_SCANNER
 # above.
 ../common/lex_yy.c:    ../common/lexer.l
-       $(LEX) -o../common/lex.yy.c ../common/lexer.l 
+       $(LEX) ../common/lexer.l
        sed -e "s/BUFSIZ/5000/g" < ../common/lex.yy.c | \
        sed -e "s/yyoutput(c)/void yyoutput(c)/g" | \
         sed -e "s/YYLMAX 200/YYLMAX 5000/g" > ../common/lex_yy.c
index 76a6135e23ccfa465bdd1e4662514465cc3d3559..0fce92efe8facdc0580369eee58b8340133d7e9d 100644 (file)
@@ -500,8 +500,8 @@ bool csApp::WriteOptions()
     config.Write("mainY", m_mainFramePos.y);
     config.Write("mainWidth", m_mainFrameSize.x);
     config.Write("mainHeight", m_mainFrameSize.y);
-    config.Write("gridStyle", m_gridStyle);
-    config.Write("gridSpacing", m_gridSpacing);
+    config.Write("gridStyle", (long) m_gridStyle);
+    config.Write("gridSpacing", (long) m_gridSpacing);
 
     m_docManager->FileHistorySave(config);
 
index bf5ddebcc8733eed659c87c3cc704f8e4f1adc9c..cd5b1cbc1427178f52a93e0d7cd83bb9973768d7 100644 (file)
@@ -1,5 +1,5 @@
 /* XPM */
-static char *clipstudio_xpm[] = {
+static char *studio_xpm[] = {
 /* columns rows colors chars-per-pixel */
 "32 32 6 1",
 "  c Black",