implement propert background style semantics for OS X
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@61114 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -131,8 +131,6 @@ public:
|
|||||||
// event handlers
|
// event handlers
|
||||||
// --------------
|
// --------------
|
||||||
|
|
||||||
void OnNcPaint( wxNcPaintEvent& event );
|
|
||||||
void OnEraseBackground(wxEraseEvent& event );
|
|
||||||
void OnMouseEvent( wxMouseEvent &event );
|
void OnMouseEvent( wxMouseEvent &event );
|
||||||
|
|
||||||
void MacOnScroll( wxScrollEvent&event );
|
void MacOnScroll( wxScrollEvent&event );
|
||||||
|
@@ -83,8 +83,6 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
BEGIN_EVENT_TABLE(wxWindowMac, wxWindowBase)
|
BEGIN_EVENT_TABLE(wxWindowMac, wxWindowBase)
|
||||||
EVT_NC_PAINT(wxWindowMac::OnNcPaint)
|
|
||||||
EVT_ERASE_BACKGROUND(wxWindowMac::OnEraseBackground)
|
|
||||||
EVT_MOUSE_EVENTS(wxWindowMac::OnMouseEvent)
|
EVT_MOUSE_EVENTS(wxWindowMac::OnMouseEvent)
|
||||||
END_EVENT_TABLE()
|
END_EVENT_TABLE()
|
||||||
|
|
||||||
@@ -1182,39 +1180,6 @@ void wxWindowMac::WarpPointer(int WXUNUSED(x_pos), int WXUNUSED(y_pos))
|
|||||||
// We really don't move the mouse programmatically under Mac.
|
// We really don't move the mouse programmatically under Mac.
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxWindowMac::OnEraseBackground(wxEraseEvent& event)
|
|
||||||
{
|
|
||||||
if ( MacGetTopLevelWindow() == NULL )
|
|
||||||
return ;
|
|
||||||
/*
|
|
||||||
#if TARGET_API_MAC_OSX
|
|
||||||
if ( !m_backgroundColour.Ok() || GetBackgroundStyle() == wxBG_STYLE_TRANSPARENT )
|
|
||||||
{
|
|
||||||
}
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
*/
|
|
||||||
if ( GetBackgroundStyle() == wxBG_STYLE_COLOUR )
|
|
||||||
{
|
|
||||||
event.GetDC()->Clear() ;
|
|
||||||
}
|
|
||||||
else if ( GetBackgroundStyle() == wxBG_STYLE_CUSTOM )
|
|
||||||
{
|
|
||||||
// don't skip the event here, custom background means that the app
|
|
||||||
// is drawing it itself in its OnPaint(), so don't draw it at all
|
|
||||||
// now to avoid flicker
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
event.Skip() ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void wxWindowMac::OnNcPaint( wxNcPaintEvent& event )
|
|
||||||
{
|
|
||||||
event.Skip() ;
|
|
||||||
}
|
|
||||||
|
|
||||||
int wxWindowMac::GetScrollPos(int orient) const
|
int wxWindowMac::GetScrollPos(int orient) const
|
||||||
{
|
{
|
||||||
if ( orient == wxHORIZONTAL )
|
if ( orient == wxHORIZONTAL )
|
||||||
@@ -1784,33 +1749,40 @@ bool wxWindowMac::MacDoRedraw( long time )
|
|||||||
wxRegion formerUpdateRgn = m_updateRegion;
|
wxRegion formerUpdateRgn = m_updateRegion;
|
||||||
wxRegion clientUpdateRgn = formerUpdateRgn;
|
wxRegion clientUpdateRgn = formerUpdateRgn;
|
||||||
|
|
||||||
wxSize sz = GetClientSize() ;
|
const wxRect clientRect = GetClientRect();
|
||||||
wxPoint origin = GetClientAreaOrigin() ;
|
|
||||||
|
|
||||||
clientUpdateRgn.Intersect(origin.x , origin.y , origin.x + sz.x , origin.y + sz.y);
|
clientUpdateRgn.Intersect(clientRect);
|
||||||
|
|
||||||
// first send an erase event to the entire update area
|
// first send an erase event to the entire update area
|
||||||
|
const wxBackgroundStyle bgStyle = GetBackgroundStyle();
|
||||||
|
if ( bgStyle == wxBG_STYLE_ERASE )
|
||||||
{
|
{
|
||||||
// for the toplevel window this really is the entire area
|
// for the toplevel window this really is the entire area
|
||||||
// for all the others only their client area, otherwise they
|
// for all the others only their client area, otherwise they
|
||||||
// might be drawing with full alpha and eg put blue into
|
// might be drawing with full alpha and eg put blue into
|
||||||
// the grow-box area of a scrolled window (scroll sample)
|
// the grow-box area of a scrolled window (scroll sample)
|
||||||
wxDC* dc = new wxWindowDC(this);
|
wxWindowDC dc(this);
|
||||||
if ( IsTopLevel() )
|
if ( IsTopLevel() )
|
||||||
dc->SetDeviceClippingRegion(formerUpdateRgn);
|
dc.SetDeviceClippingRegion(formerUpdateRgn);
|
||||||
else
|
else
|
||||||
dc->SetDeviceClippingRegion(clientUpdateRgn);
|
dc.SetDeviceClippingRegion(clientUpdateRgn);
|
||||||
|
|
||||||
wxEraseEvent eevent( GetId(), dc );
|
wxEraseEvent eevent( GetId(), &dc );
|
||||||
eevent.SetEventObject( this );
|
eevent.SetEventObject( this );
|
||||||
HandleWindowEvent( eevent );
|
if ( !ProcessWindowEvent( eevent ) )
|
||||||
delete dc ;
|
{
|
||||||
|
if ( bgStyle == wxBG_STYLE_SYSTEM && MacGetTopLevelWindow() )
|
||||||
|
{
|
||||||
|
dc.Clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
MacPaintGrowBox();
|
MacPaintGrowBox();
|
||||||
|
|
||||||
// calculate a client-origin version of the update rgn and set m_updateRegion to that
|
// calculate a client-origin version of the update rgn and set
|
||||||
clientUpdateRgn.Offset( -origin.x , -origin.y );
|
// m_updateRegion to that
|
||||||
|
clientUpdateRgn.Offset(-clientRect.GetPosition());
|
||||||
m_updateRegion = clientUpdateRgn ;
|
m_updateRegion = clientUpdateRgn ;
|
||||||
|
|
||||||
if ( !m_updateRegion.Empty() )
|
if ( !m_updateRegion.Empty() )
|
||||||
|
Reference in New Issue
Block a user