if ( !w )
return FALSE;
+ // Rationale: a lot of common operations (including but not
+ // limited to moving, resizing and appending items to a listbox)
+ // unmamange the widget, do their work, then manage it again.
+ // This means that, for example adding an item to a listbox will show it,
+ // or that most controls are shown every time they are moved or resized!
+ XtSetMappedWhenManaged( w, domap );
+
// if the widget is not unmanaged, it still intercepts
// mouse events, even if it is not mapped (and hence invisible)
if ( domap )
{
XtManageChild(w);
- XtMapWidget(w);
+ // XtMapWidget(w);
}
else
{
- XtUnmapWidget(w);
XtUnmanageChild(w);
+ // XtUnmapWidget(w);
}
- // Rationale: a lot of common operations (including but not
- // limited to moving, resizing and appending items to a listbox)
- // unmamange the widget, do their work, then manage it again.
- // This means that, for example adding an item to a listbox will show it,
- // or that most controls are shown every time they are moved or resized!
- XtSetMappedWhenManaged( w, domap );
-
return TRUE;
}
DetachWidget(wMain);
}
- ClearUpdateRects();
-
if ( m_parent )
m_parent->RemoveChild( this );
// scrollbar management
// ----------------------------------------------------------------------------
+WXWidget wxWindow::DoCreateScrollBar(WXWidget parent,
+ wxOrientation orientation,
+ void (*callback)())
+{
+ int orient = ( orientation & wxHORIZONTAL ) ? XmHORIZONTAL : XmVERTICAL;
+ Widget sb =
+ XtVaCreateManagedWidget( "scrollBarWidget",
+ xmScrollBarWidgetClass, (Widget)parent,
+ XmNorientation, orient,
+ XmNincrement, 1,
+ XmNvalue, 0,
+ NULL );
+
+ XtPointer o = (XtPointer)orientation;
+ XtCallbackProc cb = (XtCallbackProc)callback;
+
+ XtAddCallback( sb, XmNvalueChangedCallback, cb, o );
+ XtAddCallback( sb, XmNdragCallback, cb, o );
+ XtAddCallback( sb, XmNincrementCallback, cb, o );
+ XtAddCallback( sb, XmNdecrementCallback, cb, o );
+ XtAddCallback( sb, XmNpageIncrementCallback, cb, o );
+ XtAddCallback( sb, XmNpageDecrementCallback, cb, o );
+ XtAddCallback( sb, XmNtoTopCallback, cb, o );
+ XtAddCallback( sb, XmNtoBottomCallback, cb, o );
+
+ return (WXWidget)sb;
+}
+
// Helper function
void wxWindow::CreateScrollbar(wxOrientation orientation)
{
wxCHECK_RET( m_drawingArea, "this window can't have scrollbars" );
- XtVaSetValues((Widget) m_scrolledWindow, XmNresizePolicy, XmRESIZE_NONE, NULL);
+ XtVaSetValues( (Widget) m_scrolledWindow,
+ XmNresizePolicy, XmRESIZE_NONE,
+ NULL );
+ wxColour backgroundColour = wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE);
// Add scrollbars if required
if (orientation == wxHORIZONTAL)
{
- Widget hScrollBar = XtVaCreateManagedWidget ("hsb",
- xmScrollBarWidgetClass, (Widget) m_scrolledWindow,
- XmNorientation, XmHORIZONTAL,
- NULL);
- XtAddCallback (hScrollBar, XmNvalueChangedCallback, (XtCallbackProc) wxScrollBarCallback, (XtPointer) XmHORIZONTAL);
- XtAddCallback (hScrollBar, XmNdragCallback, (XtCallbackProc) wxScrollBarCallback, (XtPointer) XmHORIZONTAL);
- XtAddCallback (hScrollBar, XmNincrementCallback, (XtCallbackProc) wxScrollBarCallback, (XtPointer) XmHORIZONTAL);
- XtAddCallback (hScrollBar, XmNdecrementCallback, (XtCallbackProc) wxScrollBarCallback, (XtPointer) XmHORIZONTAL);
- XtAddCallback (hScrollBar, XmNpageIncrementCallback, (XtCallbackProc) wxScrollBarCallback, (XtPointer) XmHORIZONTAL);
- XtAddCallback (hScrollBar, XmNpageDecrementCallback, (XtCallbackProc) wxScrollBarCallback, (XtPointer) XmHORIZONTAL);
- XtAddCallback (hScrollBar, XmNtoTopCallback, (XtCallbackProc) wxScrollBarCallback, (XtPointer) XmHORIZONTAL);
- XtAddCallback (hScrollBar, XmNtoBottomCallback, (XtCallbackProc) wxScrollBarCallback, (XtPointer) XmHORIZONTAL);
-
- XtVaSetValues (hScrollBar,
- XmNincrement, 1,
- XmNvalue, 0,
- NULL);
+ m_hScrollBar = DoCreateScrollBar( m_scrolledWindow, wxHORIZONTAL,
+ (void (*)())wxScrollBarCallback );
- m_hScrollBar = (WXWidget) hScrollBar;
-
- wxColour backgroundColour = wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE);
wxDoChangeBackgroundColour(m_hScrollBar, backgroundColour, TRUE);
- XtRealizeWidget(hScrollBar);
+ XtRealizeWidget( (Widget)m_hScrollBar );
XtVaSetValues((Widget) m_scrolledWindow,
XmNhorizontalScrollBar, (Widget) m_hScrollBar,
NULL);
- wxAddWindowToTable( hScrollBar, this );
+ wxAddWindowToTable( (Widget)m_hScrollBar, this );
}
-
- if (orientation == wxVERTICAL)
+ else if (orientation == wxVERTICAL)
{
- Widget vScrollBar = XtVaCreateManagedWidget ("vsb",
- xmScrollBarWidgetClass, (Widget) m_scrolledWindow,
- XmNorientation, XmVERTICAL,
- NULL);
- XtAddCallback (vScrollBar, XmNvalueChangedCallback, (XtCallbackProc) wxScrollBarCallback, (XtPointer) XmVERTICAL);
- XtAddCallback (vScrollBar, XmNdragCallback, (XtCallbackProc) wxScrollBarCallback, (XtPointer) XmVERTICAL);
- XtAddCallback (vScrollBar, XmNincrementCallback, (XtCallbackProc) wxScrollBarCallback, (XtPointer) XmVERTICAL);
- XtAddCallback (vScrollBar, XmNdecrementCallback, (XtCallbackProc) wxScrollBarCallback, (XtPointer) XmVERTICAL);
- XtAddCallback (vScrollBar, XmNpageIncrementCallback, (XtCallbackProc) wxScrollBarCallback, (XtPointer) XmVERTICAL);
- XtAddCallback (vScrollBar, XmNpageDecrementCallback, (XtCallbackProc) wxScrollBarCallback, (XtPointer) XmVERTICAL);
- XtAddCallback (vScrollBar, XmNtoTopCallback, (XtCallbackProc) wxScrollBarCallback, (XtPointer) XmVERTICAL);
- XtAddCallback (vScrollBar, XmNtoBottomCallback, (XtCallbackProc) wxScrollBarCallback, (XtPointer) XmVERTICAL);
-
- XtVaSetValues (vScrollBar,
- XmNincrement, 1,
- XmNvalue, 0,
- NULL);
+ m_vScrollBar = DoCreateScrollBar( m_scrolledWindow, wxVERTICAL,
+ (void (*)())wxScrollBarCallback );
- m_vScrollBar = (WXWidget) vScrollBar;
- wxColour backgroundColour = wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE);
wxDoChangeBackgroundColour(m_vScrollBar, backgroundColour, TRUE);
- XtRealizeWidget(vScrollBar);
+ XtRealizeWidget((Widget)m_vScrollBar);
XtVaSetValues((Widget) m_scrolledWindow,
XmNverticalScrollBar, (Widget) m_vScrollBar,
NULL);
- wxAddWindowToTable( vScrollBar, this );
+ wxAddWindowToTable( (Widget)m_vScrollBar, this );
}
- XtVaSetValues((Widget) m_scrolledWindow, XmNresizePolicy, XmRESIZE_ANY, NULL);
+ XtVaSetValues( (Widget) m_scrolledWindow,
+ XmNresizePolicy, XmRESIZE_ANY,
+ NULL );
}
void wxWindow::DestroyScrollbar(wxOrientation orientation)
{
wxCHECK_RET( m_drawingArea, "this window can't have scrollbars" );
- XtVaSetValues((Widget) m_scrolledWindow, XmNresizePolicy, XmRESIZE_NONE, NULL);
- // Add scrollbars if required
- if (orientation == wxHORIZONTAL)
- {
- if (m_hScrollBar)
- {
- wxDeleteWindowFromTable((Widget)m_hScrollBar);
- XtDestroyWidget((Widget) m_hScrollBar);
- }
- m_hScrollBar = (WXWidget) 0;
+ XtVaSetValues((Widget) m_scrolledWindow,
+ XmNresizePolicy, XmRESIZE_NONE,
+ NULL);
+ String stringSB = orientation == wxHORIZONTAL ?
+ XmNhorizontalScrollBar : XmNverticalScrollBar;
+ WXWidget* widgetSB = orientation == wxHORIZONTAL ?
+ &m_hScrollBar : &m_vScrollBar;
- XtVaSetValues((Widget) m_scrolledWindow,
- XmNhorizontalScrollBar, (Widget) 0,
- NULL);
-
- }
-
- if (orientation == wxVERTICAL)
+ if( *widgetSB )
{
- if (m_vScrollBar)
- {
- wxDeleteWindowFromTable((Widget)m_vScrollBar);
- XtDestroyWidget((Widget) m_vScrollBar);
- }
- m_vScrollBar = (WXWidget) 0;
+ wxDeleteWindowFromTable( (Widget)*widgetSB );
+ XtDestroyWidget( (Widget)*widgetSB );
+ *widgetSB = (WXWidget)NULL;
+ }
- XtVaSetValues((Widget) m_scrolledWindow,
- XmNverticalScrollBar, (Widget) 0,
- NULL);
+ XtVaSetValues( (Widget)m_scrolledWindow,
+ stringSB, (Widget) 0,
+ NULL );
- }
- XtVaSetValues((Widget) m_scrolledWindow, XmNresizePolicy, XmRESIZE_ANY, NULL);
+ XtVaSetValues((Widget) m_scrolledWindow,
+ XmNresizePolicy, XmRESIZE_ANY,
+ NULL);
}
// ---------------------------------------------------------------------------
if (m_borderWidget || m_scrolledWindow)
{
- MapOrUnmap(m_drawingArea, show);
MapOrUnmap(m_borderWidget ? m_borderWidget : m_scrolledWindow, show);
+ // MapOrUnmap(m_drawingArea, show);
}
else
{
// painting
// ----------------------------------------------------------------------------
+void wxWindow::AddUpdateRect(int x, int y, int w, int h)
+{
+ m_updateRegion.Union( x, y, w, h );
+}
+
void wxWindow::Refresh(bool eraseBack, const wxRect *rect)
{
m_needsRefresh = TRUE;
dc.Clear();
}
-void wxWindow::ClearUpdateRects()
-{
- wxRectList::Node* node = m_updateRects.GetFirst();
- while (node)
- {
- wxRect* rect = node->GetData();
- delete rect;
- node = node->GetNext();
- }
-
- m_updateRects.Clear();
-}
-
void wxWindow::DoPaint()
{
//TODO : make a temporary gc so we can do the XCopyArea below
{
win->AddUpdateRect(event->xexpose.x, event->xexpose.y,
event->xexpose.width, event->xexpose.height);
-
+
if (event -> xexpose.count == 0)
{
win->DoPaint();
- win->ClearUpdateRects();
}
break;
}
XmScrollBarCallbackStruct *cbs)
{
wxWindow *win = wxGetWindowFromTable(scrollbar);
- int orientation = (int) clientData;
+ wxOrientation orientation = (wxOrientation)(int)clientData;
wxEventType eventType = wxEVT_NULL;
switch (cbs->reason)
wxScrollWinEvent event(eventType,
cbs->value,
- ((orientation == XmHORIZONTAL) ?
- wxHORIZONTAL : wxVERTICAL));
+ orientation);
event.SetEventObject( win );
win->GetEventHandler()->ProcessEvent(event);
}
window = (Window) win -> GetXWindow();
display = (Display *) win -> GetXDisplay();
+ win->AddUpdateRect(event->xexpose.x, event->xexpose.y,
+ event->xexpose.width, event->xexpose.height);
+
if (event -> xexpose.count == 0)
{
win->DoPaint();
-
- win->ClearUpdateRects();
- }
- else
- {
- win->AddUpdateRect(event->xexpose.x, event->xexpose.y,
- event->xexpose.width, event->xexpose.height);
}
break;