Solved wxMotif scrolling display problem; added wxImageModule;

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
This commit is contained in:
Julian Smart
1999-02-11 16:00:33 +00:00
parent b4b92fa660
commit a91b47e800
24 changed files with 353 additions and 288 deletions

View File

@@ -647,6 +647,18 @@ samples/thread/*.png
samples/thread/*.ico samples/thread/*.ico
samples/thread/*.txt 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/*.cpp
samples/dde/*.h samples/dde/*.h
samples/dde/makefile* samples/dde/makefile*

View File

@@ -25,7 +25,8 @@ wxMotif:
- wxRadioBox sometimes doesn't show (e.g. in controls sample). - 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: General:
-------- --------

View File

@@ -12,16 +12,26 @@ wxMSW:
- Makefiles for more compilers and samples; Cygwin makefiles - Makefiles for more compilers and samples; Cygwin makefiles
rationalised. rationalised.
- Added DLL support to VC++ makefiles. - Added VC++ project file for compiling as DLL.
wxMotif: 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: General:
- Further doc improvements. - Further doc improvements.
- wxGenericValidator added. - wxGenericValidator added.
- Added wxImageModule to image.cpp, so adds/cleans up standard handlers
automatically.
Beta 3, January 31st 1999 Beta 3, January 31st 1999
------------------------- -------------------------

View File

@@ -7,3 +7,7 @@ Outstanding issues
- No wxSpinButton - No wxSpinButton
- Need a way of specifying default settings for colour/font/etc. - Need a way of specifying default settings for colour/font/etc.
- More optimisation could be done to reduce X server traffic, etc. - 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.

View File

@@ -1,7 +1,7 @@
wxMotif TODO wxMotif TODO
------------ ------------
Updated: 28/12/98 Updated: 11/02/99
-------------------------------o------------------------- -------------------------------o-------------------------
@@ -16,24 +16,10 @@ High Priority
- Have a central/per app file for colour settings, with a wxWin - Have a central/per app file for colour settings, with a wxWin
app to allow changing settings interactively. app to allow changing settings interactively.
- Colour setting in widgets (almost done). Should scrollbars take - Implementation of default event processing (i.e. passing on an intercepted
on the background colour? Not right for e.g. wxScrolledWindows, event such as OnChar to the system). Currently, such events are processed
so maybe have wxSystemSettings value for scrollbar colour, and/or anyway, so for example intercepting left-click in a widget doesn't disable
ability to set scrollbar colour independently. the default behaviour. See TODOs in window.cpp.
- 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.
- wxRadioBox doesn't show up in the controls sample, though it's - wxRadioBox doesn't show up in the controls sample, though it's
OK on other dialogs (e.g. printing sample). 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. - 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 Low Priority
------------ ------------
- Painting a retained window could be optimized further (see
wxWindow::DoPaint).
- Visuals: how to select an appropriate one? See Thomas Runge's - Visuals: how to select an appropriate one? See Thomas Runge's
visual patch for 1.68 -- should be straightforward to port to 2.0. 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 when implemented as extra bitmap handlers, the code won't be linked
unless needed. Update: see if wxImage can handle these formats. unless needed. Update: see if wxImage can handle these formats.
- Enhance event handling such that you override e.g. left-click - Get Dialog Editor working (better) under Motif.
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.
- New wxHelp version: try using the XmHTML widget at - New wxHelp version: try using the XmHTML widget at
http://www.xs4all.nl/~ripley/XmHTML/. http://www.xs4all.nl/~ripley/XmHTML/.
@@ -107,8 +90,6 @@ Low Priority
- Miscellaneous classes e.g. wxJoystick (identical to GTK's one for - Miscellaneous classes e.g. wxJoystick (identical to GTK's one for
Linux) Linux)
- Blit scaling
- Get ODBC classes and sample working. - Get ODBC classes and sample working.
- Work out why wxTextCtrl doesn't work as a stream buffer under - Work out why wxTextCtrl doesn't work as a stream buffer under

View File

@@ -176,6 +176,7 @@ class WXDLLEXPORT wxWindowDC: public wxDC
void SetDCClipping (); // Helper function for setting clipping void SetDCClipping (); // Helper function for setting clipping
inline WXGC GetGC() const { return m_gc; } inline WXGC GetGC() const { return m_gc; }
inline WXGC GetBackingGC() const { return m_gcBacking; }
inline WXDisplay* GetDisplay() const { return m_display; } inline WXDisplay* GetDisplay() const { return m_display; }
inline bool GetAutoSetting() const { return m_autoSetting; } inline bool GetAutoSetting() const { return m_autoSetting; }
inline void SetAutoSetting(bool flag) { m_autoSetting = flag; } inline void SetAutoSetting(bool flag) { m_autoSetting = flag; }

View File

@@ -634,6 +634,7 @@ public:
public: public:
/// Motif-specific /// Motif-specific
bool m_needsRefresh; // Do we need to repaint the backing store?
bool m_canAddEventHandler; bool m_canAddEventHandler;
bool m_button1Pressed; bool m_button1Pressed;
bool m_button2Pressed; bool m_button2Pressed;

View File

@@ -84,6 +84,10 @@ MyCanvas::MyCanvas( wxWindow *parent, wxWindowID id,
const wxPoint &pos, const wxSize &size ) const wxPoint &pos, const wxSize &size )
: wxScrolledWindow( parent, id, pos, size, wxSUNKEN_BORDER ) : wxScrolledWindow( parent, id, pos, size, wxSUNKEN_BORDER )
{ {
my_horse = (wxBitmap*) NULL;
my_square = (wxBitmap*) NULL;
my_anti = (wxBitmap*) NULL;
SetBackgroundColour(* wxWHITE); SetBackgroundColour(* wxWHITE);
wxBitmap bitmap( 100, 100 ); wxBitmap bitmap( 100, 100 );
@@ -126,22 +130,24 @@ void MyCanvas::OnPaint( wxPaintEvent &WXUNUSED(event) )
PrepareDC( dc ); PrepareDC( dc );
dc.DrawText( "Loaded image", 30, 10 ); 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.DrawText( "Drawn directly", 150, 10 );
dc.SetBrush( wxBrush( "orange", wxSOLID ) ); dc.SetBrush( wxBrush( "orange", wxSOLID ) );
dc.SetPen( *wxWHITE_PEN ); dc.SetPen( *wxWHITE_PEN );
dc.DrawRectangle( 150, 30, 100, 100 ); 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() void MyCanvas::CreateAntiAliasedBitmap()
{ {
wxBitmap bitmap( 300, 300 ); wxBitmap bitmap( 300, 300 );
wxMemoryDC dc; wxMemoryDC dc;
dc.SelectObject( bitmap ); dc.SelectObject( bitmap );
dc.Clear(); dc.Clear();
@@ -235,8 +241,6 @@ void MyFrame::OnAbout( wxCommandEvent &WXUNUSED(event) )
bool MyApp::OnInit() bool MyApp::OnInit()
{ {
wxImage::AddHandler( new wxPNGHandler );
wxFrame *frame = new MyFrame(); wxFrame *frame = new MyFrame();
frame->Show( TRUE ); frame->Show( TRUE );

View File

@@ -34,6 +34,7 @@ extern "C" {
#include "wx/filefn.h" #include "wx/filefn.h"
#include "wx/wfstream.h" #include "wx/wfstream.h"
#include "wx/intl.h" #include "wx/intl.h"
#include "wx/module.h"
#ifdef __SALFORDC__ #ifdef __SALFORDC__
#ifdef FAR #ifdef FAR
@@ -1971,7 +1972,7 @@ wxBitmap wxImage::ConvertToBitmap() const
// Create image // Create image
XImage *data_image = XCreateImage( dpy, vis, bpp, ZPixmap, 0, 0, width, height, 32, 0 ); 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 ); bitmap.Create( width, height, bpp );
@@ -2278,3 +2279,19 @@ wxImage::wxImage( const wxBitmap &bitmap )
*/ */
} }
#endif #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)

View File

@@ -40,6 +40,11 @@ IMPLEMENT_DYNAMIC_CLASS(wxScrolledWindow, wxWindow)
#include "windows.h" #include "windows.h"
#endif #endif
#ifdef __WXMOTIF__
// For wxRETAINED implementation
#include <Xm/Xm.h>
#endif
wxScrolledWindow::wxScrolledWindow(void) wxScrolledWindow::wxScrolledWindow(void)
{ {
m_xScrollPixelsPerLine = 0; m_xScrollPixelsPerLine = 0;
@@ -105,6 +110,39 @@ void wxScrolledWindow::SetScrollbars (int pixelsPerUnitX, int pixelsPerUnitY,
m_xScrollLines = noUnitsX; m_xScrollLines = noUnitsX;
m_yScrollLines = noUnitsY; 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(); AdjustScrollbars();
if (do_refresh && !noRefresh) Refresh(); if (do_refresh && !noRefresh) Refresh();

View File

@@ -539,9 +539,10 @@ WXColormap wxApp::GetMainColormap(WXDisplay* display)
if (!display) /* Must be called first with non-NULL display */ if (!display) /* Must be called first with non-NULL display */
return m_mainColormap; return m_mainColormap;
Colormap c = int defaultScreen = DefaultScreen((Display*) display);
DefaultColormapOfScreen(XScreenOfDisplay((Display*) display, Screen* screen = XScreenOfDisplay((Display*) display, defaultScreen);
DefaultScreen((Display*) display)));
Colormap c = DefaultColormapOfScreen(screen);
if (!m_mainColormap) if (!m_mainColormap)
m_mainColormap = (WXColormap) c; m_mainColormap = (WXColormap) c;

View File

@@ -37,6 +37,8 @@ About pens, brushes, and the autoSetting flag:
#include "wx/dcmemory.h" #include "wx/dcmemory.h"
#include "wx/window.h" #include "wx/window.h"
#include "wx/app.h" #include "wx/app.h"
#include "wx/image.h"
#include <math.h> #include <math.h>
#include <Xm/Xm.h> #include <Xm/Xm.h>
@@ -144,6 +146,8 @@ wxWindowDC::wxWindowDC( wxWindow *window )
XGCValues valReturn; XGCValues valReturn;
XGetGCValues((Display*) m_display, (GC) m_gc, GCFont, &valReturn); XGetGCValues((Display*) m_display, (GC) m_gc, GCFont, &valReturn);
m_oldFont = (WXFont) valReturn.font; m_oldFont = (WXFont) valReturn.font;
SetBackground(wxBrush(m_window->GetBackgroundColour(), wxSOLID));
}; };
wxWindowDC::~wxWindowDC(void) wxWindowDC::~wxWindowDC(void)
@@ -936,7 +940,40 @@ bool wxWindowDC::Blit( long xdest, long ydest, long width, long height,
if (m_pen.Ok() && m_autoSetting) if (m_pen.Ok() && m_autoSetting)
SetPen (m_pen); 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] */ /* MATTHEW: [9] */
int orig = m_logicalFunction; 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()) if (m_window && m_window->GetBackingPixmap())
XCopyRemote((Display*) sourceDC->m_display, (Display*) m_display, 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, (GC) m_gcBacking,
source->LogicalToDeviceX (xsrc), source->LogicalToDeviceX (xsrc),
source->LogicalToDeviceY (ysrc), 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->LogicalToDeviceX (xsrc),
source->LogicalToDeviceY (ysrc), source->LogicalToDeviceY (ysrc),
source->LogicalToDeviceXRel(width), 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 // +++ MARKUS (mho@comnets.rwth-aachen): error on blitting bitmaps with depth 1
if (source->IsKindOf(CLASSINFO(wxMemoryDC)) && ((wxMemoryDC*) source)->GetBitmap().GetDepth() == 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->LogicalToDeviceX (xsrc),
source->LogicalToDeviceY (ysrc), source->LogicalToDeviceY (ysrc),
source->LogicalToDeviceXRel(width), source->LogicalToDeviceXRel(width),
@@ -999,7 +1036,7 @@ bool wxWindowDC::Blit( long xdest, long ydest, long width, long height,
} }
else 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->LogicalToDeviceX (xsrc),
source->LogicalToDeviceY (ysrc), source->LogicalToDeviceY (ysrc),
source->LogicalToDeviceXRel(width), source->LogicalToDeviceXRel(width),
@@ -1022,7 +1059,7 @@ bool wxWindowDC::Blit( long xdest, long ydest, long width, long height,
if (source->IsKindOf(CLASSINFO(wxMemoryDC)) && if (source->IsKindOf(CLASSINFO(wxMemoryDC)) &&
((wxMemoryDC*)source)->GetBitmap().Ok() && (((wxMemoryDC*)source)->GetBitmap().GetDepth () == 1)) ((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->LogicalToDeviceX (xsrc),
source->LogicalToDeviceY (ysrc), source->LogicalToDeviceY (ysrc),
source->LogicalToDeviceXRel(width), source->LogicalToDeviceXRel(width),
@@ -1031,7 +1068,7 @@ bool wxWindowDC::Blit( long xdest, long ydest, long width, long height,
} }
else 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->LogicalToDeviceX (xsrc),
source->LogicalToDeviceY (ysrc), source->LogicalToDeviceY (ysrc),
source->LogicalToDeviceXRel(width), source->LogicalToDeviceXRel(width),
@@ -1051,8 +1088,12 @@ bool wxWindowDC::Blit( long xdest, long ydest, long width, long height,
SetLogicalFunction(orig); SetLogicalFunction(orig);
if (scaledBitmap) delete scaledBitmap;
return TRUE; return TRUE;
} }
if (scaledBitmap) delete scaledBitmap;
return FALSE; return FALSE;
}; };
@@ -1879,9 +1920,13 @@ void wxWindowDC::SetBackground( const wxBrush &brush )
int pixel = m_backgroundBrush.GetColour().AllocColour(m_display); 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 // XSetWindowBackground doesn't work for non-Window pixmaps
if (!this->IsKindOf(CLASSINFO(wxMemoryDC))) if (!this->IsKindOf(CLASSINFO(wxMemoryDC)))
XSetWindowBackground ((Display*) m_display, (Pixmap) m_pixmap, pixel); XSetWindowBackground ((Display*) m_display, (Pixmap) m_pixmap, pixel);
*/
// Necessary for ::DrawIcon, which use fg/bg pixel or the GC. // Necessary for ::DrawIcon, which use fg/bg pixel or the GC.
// And Blit,... (Any fct that use XCopyPlane, in fact.) // And Blit,... (Any fct that use XCopyPlane, in fact.)

View File

@@ -649,9 +649,7 @@ static void wxDialogBoxRepaintProc(Widget w, XtPointer WXUNUSED(c_data), XEvent
if (event -> xexpose.count == 0) if (event -> xexpose.count == 0)
{ {
wxPaintEvent event(win->GetId()); win->DoPaint();
event.SetEventObject(win);
win->GetEventHandler()->ProcessEvent(event);
win->ClearUpdateRects(); win->ClearUpdateRects();
} }
@@ -698,6 +696,13 @@ static void wxDialogBoxEventHandler (Widget wid,
return; return;
} }
else else
{
// 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); keyEvent.SetEventType(wxEVT_CHAR);
dialog->GetEventHandler()->ProcessEvent(keyEvent); dialog->GetEventHandler()->ProcessEvent(keyEvent);
@@ -705,6 +710,7 @@ static void wxDialogBoxEventHandler (Widget wid,
} }
} }
} }
}
*continueToDispatch = True; *continueToDispatch = True;
} }

View File

@@ -19,6 +19,7 @@
#include "wx/filedlg.h" #include "wx/filedlg.h"
#include "wx/intl.h" #include "wx/intl.h"
#include "wx/app.h" #include "wx/app.h"
#include "wx/settings.h"
#include <Xm/Xm.h> #include <Xm/Xm.h>
#include <Xm/MwmUtil.h> #include <Xm/MwmUtil.h>
@@ -142,6 +143,38 @@ wxFileDialog::wxFileDialog(wxWindow *parent, const wxString& message,
m_pos = pos; 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() int wxFileDialog::ShowModal()
{ {
wxBeginBusyCursor(); wxBeginBusyCursor();
@@ -158,6 +191,15 @@ int wxFileDialog::ShowModal()
Widget fileSel = XmCreateFileSelectionDialog(parentWidget, "file_selector", NULL, 0); Widget fileSel = XmCreateFileSelectionDialog(parentWidget, "file_selector", NULL, 0);
XtUnmanageChild(XmFileSelectionBoxGetChild(fileSel, XmDIALOG_HELP_BUTTON)); 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); Widget shell = XtParent(fileSel);
if (!m_message.IsNull()) if (!m_message.IsNull())
@@ -180,7 +222,6 @@ int wxFileDialog::ShowModal()
if (entirePath != "") if (entirePath != "")
{ {
Widget selectionWidget = XmFileSelectionBoxGetChild(fileSel, XmDIALOG_TEXT);
XmTextSetString(selectionWidget, (char*) (const char*) entirePath); XmTextSetString(selectionWidget, (char*) (const char*) entirePath);
} }
@@ -192,7 +233,6 @@ int wxFileDialog::ShowModal()
else else
filter = m_wildCard; filter = m_wildCard;
Widget filterWidget = XmFileSelectionBoxGetChild(fileSel, XmDIALOG_FILTER_TEXT);
XmTextSetString(filterWidget, (char*) (const char*) filter); XmTextSetString(filterWidget, (char*) (const char*) filter);
XmFileSelectionDoSearch(fileSel, NULL); XmFileSelectionDoSearch(fileSel, NULL);
} }
@@ -229,6 +269,18 @@ int wxFileDialog::ShowModal()
XmNresizePolicy, XmRESIZE_NONE, XmNresizePolicy, XmRESIZE_NONE,
NULL); NULL);
#endif #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); XtManageChild(fileSel);

View File

@@ -201,14 +201,19 @@ $(WXLIB) : $(OBJECTS)
# problems with lex_yy.c. See also note about LEX_SCANNER # problems with lex_yy.c. See also note about LEX_SCANNER
# above. # above.
../common/lex_yy.c: ../common/lexer.l ../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/BUFSIZ/5000/g" < lex.yy.c | \
sed -e "s/yyoutput(c)/void yyoutput(c)/g" | \ sed -e "s/yyoutput(c)/void yyoutput(c)/g" | \
sed -e "s/YYLMAX 200/YYLMAX 5000/g" > ../common/lex_yy.c 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 # The above should work with both lex and flex, but just in case not,
# with the following: # here are alternative syntaxes.
#
# Flex-style syntax:
# $(LEX) -olex.yy.c ../common/lexer.l
# Lex-style syntax:
# $(LEX) ../common/lexer.l # $(LEX) ../common/lexer.l
# Replace yacc with bison if you run into compilation # Replace yacc with bison if you run into compilation

View File

@@ -167,6 +167,10 @@ bool wxToolBar::CreateTools()
NULL); NULL);
XtAddCallback ((Widget) button, XmNvalueChangedCallback, (XtCallbackProc) wxToolButtonCallback, XtAddCallback ((Widget) button, XmNvalueChangedCallback, (XtCallbackProc) wxToolButtonCallback,
(XtPointer) this); (XtPointer) this);
XtVaSetValues ((Widget) button,
XmNselectColor, m_backgroundColour.AllocColour(XtDisplay((Widget) button)),
NULL);
} }
else else
{ {
@@ -318,190 +322,6 @@ bool wxToolBar::CreateTools()
return TRUE; 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) void wxToolBar::SetToolBitmapSize(const wxSize& size)
{ {
// TODO not necessary? // TODO not necessary?
@@ -605,7 +425,7 @@ wxToolBarTool *wxToolBar::AddTool(int index, const wxBitmap& bitmap, const wxBit
else else
tool->m_y = m_yMargin; tool->m_y = m_yMargin;
wxSize& size = GetToolSize(); wxSize size = GetToolSize();
tool->SetSize(size.x, size.y); tool->SetSize(size.x, size.y);
m_tools.Append((long)index, tool); m_tools.Append((long)index, tool);
@@ -663,7 +483,7 @@ void wxToolButtonCallback (Widget w, XtPointer clientData,
return; return;
wxToolBarTool *tool = (wxToolBarTool *)node->Data(); wxToolBarTool *tool = (wxToolBarTool *)node->Data();
if (tool->m_isToggle) if (tool->m_isToggle)
tool->m_toggleState = toolBar->GetToolState(index); tool->m_toggleState = !tool->m_toggleState;
(void) toolBar->OnLeftClick(index, tool->m_toggleState); (void) toolBar->OnLeftClick(index, tool->m_toggleState);
} }

View File

@@ -27,6 +27,7 @@
#include "wx/settings.h" #include "wx/settings.h"
#include "wx/msgdlg.h" #include "wx/msgdlg.h"
#include "wx/frame.h" #include "wx/frame.h"
#include "wx/scrolwin.h"
#include "wx/menuitem.h" #include "wx/menuitem.h"
#include "wx/log.h" #include "wx/log.h"
@@ -114,6 +115,7 @@ wxWindow::wxWindow()
m_clientData = NULL; m_clientData = NULL;
/// Motif-specific /// Motif-specific
m_needsRefresh = TRUE;
m_mainWidget = (WXWidget) 0; m_mainWidget = (WXWidget) 0;
m_button1Pressed = FALSE; m_button1Pressed = FALSE;
m_button2Pressed = FALSE; m_button2Pressed = FALSE;
@@ -295,6 +297,7 @@ bool wxWindow::Create(wxWindow *parent, wxWindowID id,
m_clientData = NULL; m_clientData = NULL;
// Motif-specific // Motif-specific
m_needsRefresh = TRUE;
m_canAddEventHandler = FALSE; m_canAddEventHandler = FALSE;
m_mainWidget = (WXWidget) 0; m_mainWidget = (WXWidget) 0;
m_button1Pressed = FALSE; 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) void wxWindow::Refresh(bool eraseBack, const wxRect *rect)
{ {
m_needsRefresh = TRUE;
Display *display = XtDisplay((Widget) GetMainWidget()); Display *display = XtDisplay((Widget) GetMainWidget());
Window thisWindow = XtWindow((Widget) GetMainWidget()); Window thisWindow = XtWindow((Widget) GetMainWidget());
@@ -1478,10 +1482,12 @@ void wxWindow::ScrollWindow(int dx, int dy, const wxRect *rect)
node = node->Next(); node = node->Next();
} }
XmUpdateDisplay((Widget) GetMainWidget());
} }
void wxWindow::OnChar(wxKeyEvent& event) void wxWindow::OnChar(wxKeyEvent& event)
{ {
event.Skip();
/* ?? /* ??
if ( event.KeyCode() == WXK_TAB ) { if ( event.KeyCode() == WXK_TAB ) {
// propagate the TABs to the parent - it's up to it to decide what // propagate the TABs to the parent - it's up to it to decide what
@@ -1496,12 +1502,12 @@ return;
void wxWindow::OnKeyDown(wxKeyEvent& event) void wxWindow::OnKeyDown(wxKeyEvent& event)
{ {
Default(); event.Skip();
} }
void wxWindow::OnKeyUp(wxKeyEvent& event) void wxWindow::OnKeyUp(wxKeyEvent& event)
{ {
Default(); event.Skip();
} }
void wxWindow::OnPaint(wxPaintEvent& event) void wxWindow::OnPaint(wxPaintEvent& event)
@@ -2359,10 +2365,13 @@ void wxCanvasRepaintProc (Widget drawingArea, XtPointer clientData,
if (event -> xexpose.count == 0) if (event -> xexpose.count == 0)
{ {
/*
wxPaintEvent event(win->GetId()); wxPaintEvent event(win->GetId());
event.SetEventObject(win); event.SetEventObject(win);
win->GetEventHandler()->ProcessEvent(event); win->GetEventHandler()->ProcessEvent(event);
*/
win->DoPaint();
win->ClearUpdateRects(); win->ClearUpdateRects();
} }
break; break;
@@ -2617,10 +2626,6 @@ void wxCanvasInputEvent (Widget drawingArea, XtPointer data, XmDrawingAreaCallba
wxEventType eventType = wxEVT_CHAR; 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); wxKeyEvent event (eventType);
if (local_event.xkey.state & ShiftMask) if (local_event.xkey.state & ShiftMask)
@@ -2647,11 +2652,19 @@ void wxCanvasInputEvent (Widget drawingArea, XtPointer data, XmDrawingAreaCallba
event.SetEventType(wxEVT_CHAR_HOOK); event.SetEventType(wxEVT_CHAR_HOOK);
if (parent->GetEventHandler()->ProcessEvent(event)) if (parent->GetEventHandler()->ProcessEvent(event))
return; return;
event.SetEventType(wxEVT_CHAR);
} }
// 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); canvas->GetEventHandler()->ProcessEvent (event);
} }
}
break; break;
} }
case KeyRelease: case KeyRelease:
@@ -2708,28 +2721,68 @@ void wxCanvasInputEvent (Widget drawingArea, XtPointer data, XmDrawingAreaCallba
void wxWindow::DoPaint() void wxWindow::DoPaint()
{ {
//TODO : make a temporary gc so we can do the XCopyArea below //TODO : make a temporary gc so we can do the XCopyArea below
if (0) // m_backingPixmap) if (m_backingPixmap && !m_needsRefresh)
{ {
/* wxPaintDC dc(this);
Widget drawingArea = (Widget) m_drawingArea;
// int orig = GetDC()->GetLogicalFunction();
// GetDC()->SetLogicalFunction (wxCOPY);
// TODO: it may not be necessary to store m_pixmapOffsetX/Y; we GC tempGC = (GC) dc.GetBackingGC();
// 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); 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 else
{ {
// Set an erase event first
wxEraseEvent eraseEvent(GetId());
eraseEvent.SetEventObject(this);
GetEventHandler()->ProcessEvent(eraseEvent);
wxPaintEvent event(GetId()); wxPaintEvent event(GetId());
event.SetEventObject(this); event.SetEventObject(this);
GetEventHandler()->ProcessEvent(event); GetEventHandler()->ProcessEvent(event);
m_needsRefresh = FALSE;
} }
} }

View File

@@ -808,7 +808,14 @@ void wxDC::SetBackground(const wxBrush& brush)
} }
else 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; m_canvas->m_backgroundTransparent = FALSE;
} }
} }

View File

@@ -49,6 +49,8 @@ wxWindowDC::wxWindowDC(wxWindow *the_canvas)
// m_hDC = (WXHDC) ::GetDCEx((HWND) the_canvas->GetHWND(), NULL, DCX_WINDOW); // m_hDC = (WXHDC) ::GetDCEx((HWND) the_canvas->GetHWND(), NULL, DCX_WINDOW);
m_hDC = (WXHDC) ::GetWindowDC((HWND) the_canvas->GetHWND() ); m_hDC = (WXHDC) ::GetWindowDC((HWND) the_canvas->GetHWND() );
m_hDCCount ++; m_hDCCount ++;
SetBackground(wxBrush(m_canvas->GetBackgroundColour(), wxSOLID));
} }
wxWindowDC::~wxWindowDC(void) wxWindowDC::~wxWindowDC(void)
@@ -77,6 +79,8 @@ wxClientDC::wxClientDC(wxWindow *the_canvas)
m_canvas = the_canvas; m_canvas = the_canvas;
// BeginDrawing(); // BeginDrawing();
m_hDC = (WXHDC) ::GetDC((HWND) the_canvas->GetHWND()); m_hDC = (WXHDC) ::GetDC((HWND) the_canvas->GetHWND());
SetBackground(wxBrush(m_canvas->GetBackgroundColour(), wxSOLID));
} }
wxClientDC::~wxClientDC(void) wxClientDC::~wxClientDC(void)
@@ -128,6 +132,8 @@ wxPaintDC::wxPaintDC(wxWindow *canvas)
ms_PaintCount = 1; ms_PaintCount = 1;
m_hDCCount++; m_hDCCount++;
} }
SetBackground(wxBrush(m_canvas->GetBackgroundColour(), wxSOLID));
} }
wxPaintDC::~wxPaintDC() wxPaintDC::~wxPaintDC()

View 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 # problems with lex_yy.c. See also note about LEX_SCANNER
# above. # above.
$(COMMDIR)/lex_yy.c: $(COMMDIR)/lexer.l $(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 # The following may be required for FLEX
# $(LEX) -o$(COMMDIR)/lex_yy.c $(COMMDIR)/lexer.l # $(LEX) -o$(COMMDIR)/lex_yy.c $(COMMDIR)/lexer.l

View File

@@ -186,7 +186,7 @@ $(WXLIB) : $(OBJECTS)
# problems with lex_yy.c. See also note about LEX_SCANNER # problems with lex_yy.c. See also note about LEX_SCANNER
# above. # above.
../common/lex_yy.c: ../common/lexer.l ../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/BUFSIZ/5000/g" < ../common/lex.yy.c | \
sed -e "s/yyoutput(c)/void yyoutput(c)/g" | \ sed -e "s/yyoutput(c)/void yyoutput(c)/g" | \
sed -e "s/YYLMAX 200/YYLMAX 5000/g" > ../common/lex_yy.c sed -e "s/YYLMAX 200/YYLMAX 5000/g" > ../common/lex_yy.c

View File

@@ -500,8 +500,8 @@ bool csApp::WriteOptions()
config.Write("mainY", m_mainFramePos.y); config.Write("mainY", m_mainFramePos.y);
config.Write("mainWidth", m_mainFrameSize.x); config.Write("mainWidth", m_mainFrameSize.x);
config.Write("mainHeight", m_mainFrameSize.y); config.Write("mainHeight", m_mainFrameSize.y);
config.Write("gridStyle", m_gridStyle); config.Write("gridStyle", (long) m_gridStyle);
config.Write("gridSpacing", m_gridSpacing); config.Write("gridSpacing", (long) m_gridSpacing);
m_docManager->FileHistorySave(config); m_docManager->FileHistorySave(config);

View File

@@ -1,5 +1,5 @@
/* XPM */ /* XPM */
static char *clipstudio_xpm[] = { static char *studio_xpm[] = {
/* columns rows colors chars-per-pixel */ /* columns rows colors chars-per-pixel */
"32 32 6 1", "32 32 6 1",
" c Black", " c Black",