New attempt to implement wxNO_FULL_REDRAW_ON_REPAINT.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14663 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -1524,6 +1524,8 @@ void wxMenuBar::Init()
|
|||||||
m_menuShown = NULL;
|
m_menuShown = NULL;
|
||||||
|
|
||||||
m_shouldShowMenu = FALSE;
|
m_shouldShowMenu = FALSE;
|
||||||
|
|
||||||
|
// m_windowStyle |= wxNO_FULL_REPAINT_ON_RESIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxMenuBar::Attach(wxFrame *frame)
|
void wxMenuBar::Attach(wxFrame *frame)
|
||||||
|
@@ -180,7 +180,7 @@ void wxWindow::OnErase(wxEraseEvent& event)
|
|||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
DoDrawBackground(*event.GetDC());
|
DoDrawBackground(*event.GetDC());
|
||||||
|
|
||||||
// if we have both scrollbars, we also have a square in the corner between
|
// if we have both scrollbars, we also have a square in the corner between
|
||||||
|
142
src/x11/app.cpp
142
src/x11/app.cpp
@@ -476,6 +476,60 @@ bool wxApp::ProcessXEvent(WXEvent* _event)
|
|||||||
|
|
||||||
switch (event->type)
|
switch (event->type)
|
||||||
{
|
{
|
||||||
|
case Expose:
|
||||||
|
{
|
||||||
|
//wxLogDebug("Expose: %s", windowClass.c_str());
|
||||||
|
win->GetUpdateRegion().Union( XExposeEventGetX(event), XExposeEventGetY(event),
|
||||||
|
XExposeEventGetWidth(event), XExposeEventGetHeight(event));
|
||||||
|
|
||||||
|
win->GetClearRegion().Union( XExposeEventGetX(event), XExposeEventGetY(event),
|
||||||
|
XExposeEventGetWidth(event), XExposeEventGetHeight(event));
|
||||||
|
|
||||||
|
#if !wxUSE_NANOX
|
||||||
|
XEvent tmp_event;
|
||||||
|
wxExposeInfo info;
|
||||||
|
info.window = event->xexpose.window;
|
||||||
|
info.found_non_matching = FALSE;
|
||||||
|
while (XCheckIfEvent( wxGlobalDisplay(), &tmp_event, expose_predicate, (XPointer) &info ))
|
||||||
|
{
|
||||||
|
win->GetUpdateRegion().Union( tmp_event.xexpose.x, tmp_event.xexpose.y,
|
||||||
|
tmp_event.xexpose.width, tmp_event.xexpose.height );
|
||||||
|
|
||||||
|
win->GetClearRegion().Union( tmp_event.xexpose.x, tmp_event.xexpose.y,
|
||||||
|
tmp_event.xexpose.width, tmp_event.xexpose.height );
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Only erase background, paint in idle time.
|
||||||
|
win->SendEraseEvents();
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if !wxUSE_NANOX
|
||||||
|
case GraphicsExpose:
|
||||||
|
{
|
||||||
|
// wxLogDebug( "GraphicsExpose from %s", win->GetName().c_str(),
|
||||||
|
// event->xgraphicsexpose.x, event->xgraphicsexpose.y,
|
||||||
|
// event->xgraphicsexpose.width, event->xgraphicsexpose.height);
|
||||||
|
|
||||||
|
win->GetUpdateRegion().Union( event->xgraphicsexpose.x, event->xgraphicsexpose.y,
|
||||||
|
event->xgraphicsexpose.width, event->xgraphicsexpose.height);
|
||||||
|
|
||||||
|
win->GetClearRegion().Union( event->xgraphicsexpose.x, event->xgraphicsexpose.y,
|
||||||
|
event->xgraphicsexpose.width, event->xgraphicsexpose.height);
|
||||||
|
|
||||||
|
if (event->xgraphicsexpose.count == 0)
|
||||||
|
{
|
||||||
|
// Only erase background, paint in idle time.
|
||||||
|
win->SendEraseEvents();
|
||||||
|
//win->Update();
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
case KeyPress:
|
case KeyPress:
|
||||||
{
|
{
|
||||||
if (!win->IsEnabled())
|
if (!win->IsEnabled())
|
||||||
@@ -526,7 +580,7 @@ bool wxApp::ProcessXEvent(WXEvent* _event)
|
|||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
//wxLogDebug("ConfigureNotify: %s", windowClass.c_str());
|
//wxLogDebug("ConfigureNotify: %s", windowClass.c_str());
|
||||||
if (win->IsTopLevel())
|
if (win->IsTopLevel() && win->IsShown())
|
||||||
{
|
{
|
||||||
wxTopLevelWindowX11 *tlw = (wxTopLevelWindowX11 *) win;
|
wxTopLevelWindowX11 *tlw = (wxTopLevelWindowX11 *) win;
|
||||||
tlw->SetNeedResizeInIdle();
|
tlw->SetNeedResizeInIdle();
|
||||||
@@ -566,14 +620,26 @@ bool wxApp::ProcessXEvent(WXEvent* _event)
|
|||||||
}
|
}
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
#if 1
|
#if 0
|
||||||
|
case DestroyNotify:
|
||||||
|
{
|
||||||
|
printf( "destroy from %s\n", win->GetName().c_str() );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case CreateNotify:
|
||||||
|
{
|
||||||
|
printf( "create from %s\n", win->GetName().c_str() );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case MapRequest:
|
||||||
|
{
|
||||||
|
printf( "map request from %s\n", win->GetName().c_str() );
|
||||||
|
break;
|
||||||
|
}
|
||||||
case ResizeRequest:
|
case ResizeRequest:
|
||||||
{
|
{
|
||||||
/*
|
printf( "resize request from %s\n", win->GetName().c_str() );
|
||||||
* If resize event, don't resize until the last resize event for this
|
|
||||||
* window is recieved. Prevents flicker as windows are resized.
|
|
||||||
*/
|
|
||||||
|
|
||||||
Display *disp = (Display*) wxGetDisplay();
|
Display *disp = (Display*) wxGetDisplay();
|
||||||
XEvent report;
|
XEvent report;
|
||||||
|
|
||||||
@@ -600,59 +666,6 @@ bool wxApp::ProcessXEvent(WXEvent* _event)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
case Expose:
|
|
||||||
{
|
|
||||||
//wxLogDebug("Expose: %s", windowClass.c_str());
|
|
||||||
win->GetUpdateRegion().Union( XExposeEventGetX(event), XExposeEventGetY(event),
|
|
||||||
XExposeEventGetWidth(event), XExposeEventGetHeight(event));
|
|
||||||
|
|
||||||
win->GetClearRegion().Union( XExposeEventGetX(event), XExposeEventGetY(event),
|
|
||||||
XExposeEventGetWidth(event), XExposeEventGetHeight(event));
|
|
||||||
|
|
||||||
|
|
||||||
#if !wxUSE_NANOX
|
|
||||||
XEvent tmp_event;
|
|
||||||
wxExposeInfo info;
|
|
||||||
info.window = event->xexpose.window;
|
|
||||||
info.found_non_matching = FALSE;
|
|
||||||
while (XCheckIfEvent( wxGlobalDisplay(), &tmp_event, expose_predicate, (XPointer) &info ))
|
|
||||||
{
|
|
||||||
win->GetUpdateRegion().Union( tmp_event.xexpose.x, tmp_event.xexpose.y,
|
|
||||||
tmp_event.xexpose.width, tmp_event.xexpose.height );
|
|
||||||
|
|
||||||
win->GetClearRegion().Union( tmp_event.xexpose.x, tmp_event.xexpose.y,
|
|
||||||
tmp_event.xexpose.width, tmp_event.xexpose.height );
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Only erase background, paint in idle time.
|
|
||||||
win->SendEraseEvents();
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
#if !wxUSE_NANOX
|
|
||||||
case GraphicsExpose:
|
|
||||||
{
|
|
||||||
// wxLogDebug( "GraphicsExpose from %s", win->GetName().c_str(),
|
|
||||||
// event->xgraphicsexpose.x, event->xgraphicsexpose.y,
|
|
||||||
// event->xgraphicsexpose.width, event->xgraphicsexpose.height);
|
|
||||||
|
|
||||||
win->GetUpdateRegion().Union( event->xgraphicsexpose.x, event->xgraphicsexpose.y,
|
|
||||||
event->xgraphicsexpose.width, event->xgraphicsexpose.height);
|
|
||||||
|
|
||||||
win->GetClearRegion().Union( event->xgraphicsexpose.x, event->xgraphicsexpose.y,
|
|
||||||
event->xgraphicsexpose.width, event->xgraphicsexpose.height);
|
|
||||||
|
|
||||||
if (event->xgraphicsexpose.count == 0)
|
|
||||||
{
|
|
||||||
// Only erase background, paint in idle time.
|
|
||||||
win->SendEraseEvents();
|
|
||||||
//win->Update();
|
|
||||||
}
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
case EnterNotify:
|
case EnterNotify:
|
||||||
case LeaveNotify:
|
case LeaveNotify:
|
||||||
@@ -733,15 +746,6 @@ bool wxApp::ProcessXEvent(WXEvent* _event)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#ifndef wxUSE_NANOX
|
|
||||||
case DestroyNotify:
|
|
||||||
{
|
|
||||||
// Do we want to process this (for top-level windows)?
|
|
||||||
// But we want to be able to veto closes, anyway
|
|
||||||
return FALSE;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
#ifdef __WXDEBUG__
|
#ifdef __WXDEBUG__
|
||||||
|
@@ -118,40 +118,47 @@ bool wxTopLevelWindowX11::Create(wxWindow *parent,
|
|||||||
XSizeHints size_hints;
|
XSizeHints size_hints;
|
||||||
|
|
||||||
long xattributes_mask =
|
long xattributes_mask =
|
||||||
CWOverrideRedirect |
|
|
||||||
CWBorderPixel | CWBackPixel;
|
CWBorderPixel | CWBackPixel;
|
||||||
|
|
||||||
xattributes.background_pixel = m_backgroundColour.GetPixel();
|
xattributes.background_pixel = m_backgroundColour.GetPixel();
|
||||||
xattributes.border_pixel = BlackPixel( xdisplay, xscreen );
|
xattributes.border_pixel = BlackPixel( xdisplay, xscreen );
|
||||||
|
|
||||||
|
if (HasFlag( wxNO_FULL_REPAINT_ON_RESIZE ))
|
||||||
|
{
|
||||||
|
xattributes_mask |= CWBitGravity;
|
||||||
|
xattributes.bit_gravity = StaticGravity;
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: if we want no border, caption etc.,
|
// TODO: if we want no border, caption etc.,
|
||||||
// I think we set this to True to remove decorations
|
// I think we set this to True to remove decorations
|
||||||
// No. RR.
|
// No. RR.
|
||||||
// Yes :-) JACS (because some WMs don't respect
|
// Yes :-) JACS (because some WMs don't respect
|
||||||
// the hints)
|
// the hints)
|
||||||
xattributes.override_redirect = (style & wxNO_BORDER) ? True : False;
|
// xattributes.override_redirect = (style & wxNO_BORDER) ? True : False;
|
||||||
#endif
|
|
||||||
|
|
||||||
#if wxUSE_NANOX
|
xattributes_mask |= CWEventMask;
|
||||||
|
xattributes.event_mask =
|
||||||
|
ExposureMask | KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask |
|
||||||
|
ButtonMotionMask | EnterWindowMask | LeaveWindowMask | PointerMotionMask |
|
||||||
|
KeymapStateMask | FocusChangeMask | ColormapChangeMask | StructureNotifyMask |
|
||||||
|
PropertyChangeMask;
|
||||||
|
|
||||||
|
Window xwindow = XCreateWindow( xdisplay, xparent, pos2.x, pos2.y, size2.x, size2.y,
|
||||||
|
0, DefaultDepth(xdisplay,xscreen), InputOutput, xvisual, xattributes_mask, &xattributes );
|
||||||
|
#else
|
||||||
long backColor, foreColor;
|
long backColor, foreColor;
|
||||||
backColor = GR_RGB(m_backgroundColour.Red(), m_backgroundColour.Green(), m_backgroundColour.Blue());
|
backColor = GR_RGB(m_backgroundColour.Red(), m_backgroundColour.Green(), m_backgroundColour.Blue());
|
||||||
foreColor = GR_RGB(m_foregroundColour.Red(), m_foregroundColour.Green(), m_foregroundColour.Blue());
|
foreColor = GR_RGB(m_foregroundColour.Red(), m_foregroundColour.Green(), m_foregroundColour.Blue());
|
||||||
|
|
||||||
Window xwindow = XCreateWindowWithColor( xdisplay, xparent, pos2.x, pos2.y, size2.x, size2.y,
|
Window xwindow = XCreateWindowWithColor( xdisplay, xparent, pos2.x, pos2.y, size2.x, size2.y,
|
||||||
0, 0, InputOutput, xvisual, backColor, foreColor);
|
0, 0, InputOutput, xvisual, backColor, foreColor);
|
||||||
#else
|
|
||||||
Window xwindow = XCreateWindow( xdisplay, xparent, pos2.x, pos2.y, size2.x, size2.y,
|
|
||||||
0, DefaultDepth(xdisplay,xscreen), InputOutput, xvisual, xattributes_mask, &xattributes );
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
m_mainWidget = (WXWindow) xwindow;
|
m_mainWidget = (WXWindow) xwindow;
|
||||||
|
|
||||||
int extraFlags = 0;
|
|
||||||
#if wxUSE_NANOX
|
#if wxUSE_NANOX
|
||||||
extraFlags |= GR_EVENT_MASK_CLOSE_REQ;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
XSelectInput( xdisplay, xwindow,
|
XSelectInput( xdisplay, xwindow,
|
||||||
extraFlags |
|
GR_EVENT_MASK_CLOSE_REQ |
|
||||||
ExposureMask |
|
ExposureMask |
|
||||||
KeyPressMask |
|
KeyPressMask |
|
||||||
KeyReleaseMask |
|
KeyReleaseMask |
|
||||||
@@ -167,6 +174,7 @@ bool wxTopLevelWindowX11::Create(wxWindow *parent,
|
|||||||
StructureNotifyMask |
|
StructureNotifyMask |
|
||||||
PropertyChangeMask
|
PropertyChangeMask
|
||||||
);
|
);
|
||||||
|
#endif
|
||||||
|
|
||||||
wxAddWindowToTable( xwindow, (wxWindow*) this );
|
wxAddWindowToTable( xwindow, (wxWindow*) this );
|
||||||
|
|
||||||
|
@@ -140,23 +140,6 @@ bool wxWindowX11::Create(wxWindow *parent, wxWindowID id,
|
|||||||
m_foregroundColour.CalcPixel( (WXColormap) cm );
|
m_foregroundColour.CalcPixel( (WXColormap) cm );
|
||||||
|
|
||||||
Window xparent = (Window) parent->GetMainWindow();
|
Window xparent = (Window) parent->GetMainWindow();
|
||||||
|
|
||||||
#if !wxUSE_NANOX
|
|
||||||
XSetWindowAttributes xattributes;
|
|
||||||
|
|
||||||
long xattributes_mask =
|
|
||||||
CWEventMask |
|
|
||||||
CWBorderPixel | CWBackPixel;
|
|
||||||
|
|
||||||
xattributes.background_pixel = m_backgroundColour.GetPixel();
|
|
||||||
xattributes.border_pixel = BlackPixel( xdisplay, xscreen );
|
|
||||||
|
|
||||||
xattributes.event_mask =
|
|
||||||
ExposureMask | KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask |
|
|
||||||
ButtonMotionMask | EnterWindowMask | LeaveWindowMask | PointerMotionMask |
|
|
||||||
KeymapStateMask | FocusChangeMask | ColormapChangeMask | StructureNotifyMask |
|
|
||||||
PropertyChangeMask;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
wxSize size2(size);
|
wxSize size2(size);
|
||||||
if (size2.x == -1)
|
if (size2.x == -1)
|
||||||
@@ -170,7 +153,32 @@ bool wxWindowX11::Create(wxWindow *parent, wxWindowID id,
|
|||||||
if (pos2.y == -1)
|
if (pos2.y == -1)
|
||||||
pos2.y = 0;
|
pos2.y = 0;
|
||||||
|
|
||||||
#if wxUSE_NANOX
|
#if !wxUSE_NANOX
|
||||||
|
XSetWindowAttributes xattributes;
|
||||||
|
|
||||||
|
long xattributes_mask =
|
||||||
|
CWBorderPixel | CWBackPixel;
|
||||||
|
|
||||||
|
xattributes.background_pixel = m_backgroundColour.GetPixel();
|
||||||
|
xattributes.border_pixel = BlackPixel( xdisplay, xscreen );
|
||||||
|
|
||||||
|
xattributes_mask |= CWEventMask;
|
||||||
|
xattributes.event_mask =
|
||||||
|
ExposureMask | KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask |
|
||||||
|
ButtonMotionMask | EnterWindowMask | LeaveWindowMask | PointerMotionMask |
|
||||||
|
KeymapStateMask | FocusChangeMask | ColormapChangeMask | StructureNotifyMask |
|
||||||
|
PropertyChangeMask | VisibilityChangeMask ;
|
||||||
|
|
||||||
|
if (HasFlag( wxNO_FULL_REPAINT_ON_RESIZE ))
|
||||||
|
{
|
||||||
|
xattributes_mask |= CWBitGravity;
|
||||||
|
xattributes.bit_gravity = StaticGravity;
|
||||||
|
}
|
||||||
|
|
||||||
|
Window xwindow = XCreateWindow( xdisplay, xparent, pos2.x, pos2.y, size2.x, size2.y,
|
||||||
|
0, DefaultDepth(xdisplay,xscreen), InputOutput, xvisual, xattributes_mask, &xattributes );
|
||||||
|
#else
|
||||||
|
|
||||||
int extraFlags = GR_EVENT_MASK_CLOSE_REQ;
|
int extraFlags = GR_EVENT_MASK_CLOSE_REQ;
|
||||||
|
|
||||||
long backColor, foreColor;
|
long backColor, foreColor;
|
||||||
@@ -184,12 +192,6 @@ bool wxWindowX11::Create(wxWindow *parent, wxWindowID id,
|
|||||||
ButtonMotionMask | EnterWindowMask | LeaveWindowMask | PointerMotionMask |
|
ButtonMotionMask | EnterWindowMask | LeaveWindowMask | PointerMotionMask |
|
||||||
KeymapStateMask | FocusChangeMask | ColormapChangeMask | StructureNotifyMask |
|
KeymapStateMask | FocusChangeMask | ColormapChangeMask | StructureNotifyMask |
|
||||||
PropertyChangeMask );
|
PropertyChangeMask );
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
Window xwindow = XCreateWindow( xdisplay, xparent, pos2.x, pos2.y, size2.x, size2.y,
|
|
||||||
0, DefaultDepth(xdisplay,xscreen), InputOutput, xvisual, xattributes_mask, &xattributes );
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
m_mainWidget = (WXWindow) xwindow;
|
m_mainWidget = (WXWindow) xwindow;
|
||||||
@@ -781,14 +783,12 @@ void wxWindowX11::DoSetClientSize(int width, int height)
|
|||||||
|
|
||||||
wxCHECK_RET( xwindow, wxT("invalid window") );
|
wxCHECK_RET( xwindow, wxT("invalid window") );
|
||||||
|
|
||||||
XWindowChanges windowChanges;
|
#if 1
|
||||||
windowChanges.width = width;
|
|
||||||
windowChanges.height = height;
|
XResizeWindow( wxGlobalDisplay(), xwindow, width, height );
|
||||||
windowChanges.stack_mode = 0;
|
|
||||||
int valueMask = CWWidth | CWHeight;
|
#else
|
||||||
|
|
||||||
XConfigureWindow( wxGlobalDisplay(), xwindow, valueMask, &windowChanges );
|
|
||||||
#if 0
|
|
||||||
XWindowAttributes attr;
|
XWindowAttributes attr;
|
||||||
Status status = XGetWindowAttributes( wxGlobalDisplay(), xwindow, &attr );
|
Status status = XGetWindowAttributes( wxGlobalDisplay(), xwindow, &attr );
|
||||||
wxCHECK_RET( status, wxT("invalid window attributes") );
|
wxCHECK_RET( status, wxT("invalid window attributes") );
|
||||||
@@ -805,6 +805,7 @@ void wxWindowX11::DoSetClientSize(int width, int height)
|
|||||||
new_h = height;
|
new_h = height;
|
||||||
|
|
||||||
DoMoveWindow( new_x, new_y, new_w, new_h );
|
DoMoveWindow( new_x, new_y, new_w, new_h );
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -855,6 +856,28 @@ void wxWindowX11::DoMoveWindow(int x, int y, int width, int height)
|
|||||||
|
|
||||||
wxCHECK_RET( xwindow, wxT("invalid window") );
|
wxCHECK_RET( xwindow, wxT("invalid window") );
|
||||||
|
|
||||||
|
#if 1
|
||||||
|
|
||||||
|
XWindowAttributes attr;
|
||||||
|
Status status = XGetWindowAttributes( wxGlobalDisplay(), xwindow, &attr );
|
||||||
|
wxCHECK_RET( status, wxT("invalid window attributes") );
|
||||||
|
|
||||||
|
if (attr.width == width && attr.height == height)
|
||||||
|
{
|
||||||
|
XMoveWindow( wxGlobalDisplay(), xwindow, x, y );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (attr.x == x && attr.y == y)
|
||||||
|
{
|
||||||
|
XResizeWindow( wxGlobalDisplay(), xwindow, width, height );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
XMoveResizeWindow( wxGlobalDisplay(), xwindow, x, y, width, height );
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
XWindowChanges windowChanges;
|
XWindowChanges windowChanges;
|
||||||
windowChanges.x = x;
|
windowChanges.x = x;
|
||||||
windowChanges.y = y;
|
windowChanges.y = y;
|
||||||
@@ -864,6 +887,8 @@ void wxWindowX11::DoMoveWindow(int x, int y, int width, int height)
|
|||||||
int valueMask = CWX | CWY | CWWidth | CWHeight;
|
int valueMask = CWX | CWY | CWWidth | CWHeight;
|
||||||
|
|
||||||
XConfigureWindow( wxGlobalDisplay(), xwindow, valueMask, &windowChanges );
|
XConfigureWindow( wxGlobalDisplay(), xwindow, valueMask, &windowChanges );
|
||||||
|
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
@@ -998,39 +1023,34 @@ void wxWindowX11::Clear()
|
|||||||
|
|
||||||
void wxWindowX11::SendEraseEvents()
|
void wxWindowX11::SendEraseEvents()
|
||||||
{
|
{
|
||||||
if (!m_clearRegion.IsEmpty())
|
if (m_clearRegion.IsEmpty()) return;
|
||||||
|
|
||||||
|
wxWindowDC dc( (wxWindow*)this );
|
||||||
|
dc.SetClippingRegion( m_clearRegion );
|
||||||
|
|
||||||
|
wxEraseEvent erase_event( GetId(), &dc );
|
||||||
|
erase_event.SetEventObject( this );
|
||||||
|
|
||||||
|
if (!GetEventHandler()->ProcessEvent(erase_event))
|
||||||
{
|
{
|
||||||
m_clipPaintRegion = TRUE;
|
Window xwindow = (Window) GetMainWindow();
|
||||||
|
Display *xdisplay = wxGlobalDisplay();
|
||||||
wxWindowDC dc( (wxWindow*)this );
|
GC xgc = XCreateGC( xdisplay, xwindow, 0, NULL );
|
||||||
dc.SetClippingRegion( m_clearRegion );
|
XSetFillStyle( xdisplay, xgc, FillSolid );
|
||||||
|
XSetForeground( xdisplay, xgc, m_backgroundColour.GetPixel() );
|
||||||
wxEraseEvent erase_event( GetId(), &dc );
|
wxRegionIterator upd( m_clearRegion );
|
||||||
erase_event.SetEventObject( this );
|
while (upd)
|
||||||
|
|
||||||
if (!GetEventHandler()->ProcessEvent(erase_event))
|
|
||||||
{
|
{
|
||||||
Window xwindow = (Window) GetMainWindow();
|
XFillRectangle( xdisplay, xwindow, xgc,
|
||||||
Display *xdisplay = wxGlobalDisplay();
|
upd.GetX(), upd.GetY(), upd.GetWidth(), upd.GetHeight() );
|
||||||
GC xgc = XCreateGC( xdisplay, xwindow, 0, NULL );
|
upd ++;
|
||||||
XSetFillStyle( xdisplay, xgc, FillSolid );
|
|
||||||
XSetForeground( xdisplay, xgc, m_backgroundColour.GetPixel() );
|
|
||||||
wxRegionIterator upd( m_clearRegion );
|
|
||||||
while (upd)
|
|
||||||
{
|
|
||||||
XFillRectangle( xdisplay, xwindow, xgc,
|
|
||||||
upd.GetX(), upd.GetY(), upd.GetWidth(), upd.GetHeight() );
|
|
||||||
upd ++;
|
|
||||||
}
|
|
||||||
XFreeGC( xdisplay, xgc );
|
|
||||||
}
|
}
|
||||||
m_clearRegion.Clear();
|
XFreeGC( xdisplay, xgc );
|
||||||
|
|
||||||
m_clipPaintRegion = FALSE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_clearRegion.Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void wxWindowX11::SendPaintEvents()
|
void wxWindowX11::SendPaintEvents()
|
||||||
{
|
{
|
||||||
m_clipPaintRegion = TRUE;
|
m_clipPaintRegion = TRUE;
|
||||||
@@ -1044,6 +1064,7 @@ void wxWindowX11::SendPaintEvents()
|
|||||||
GetEventHandler()->ProcessEvent( paint_event );
|
GetEventHandler()->ProcessEvent( paint_event );
|
||||||
|
|
||||||
m_updateRegion.Clear();
|
m_updateRegion.Clear();
|
||||||
|
|
||||||
m_clipPaintRegion = FALSE;
|
m_clipPaintRegion = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user