- if ( (ControlHandle) m_macControl )
- {
- Rect contrlRect ;
- GetControlBounds( (ControlHandle) m_macControl , &contrlRect ) ;
- int former_mac_x = contrlRect.left ;
- int former_mac_y = contrlRect.top ;
- int mac_x = m_x ;
- int mac_y = m_y ;
- GetParent()->MacWindowToRootWindow( & mac_x , & mac_y ) ;
-
- WindowRef rootwindow = (WindowRef) MacGetRootWindow() ;
-
- if ( mac_x + m_macHorizontalBorder != former_mac_x ||
- mac_y + m_macVerticalBorder != former_mac_y )
- {
- {
- Rect inval = { former_mac_y , former_mac_x , former_mac_y + m_height , former_mac_x + m_width } ;
- InvalWindowRect( rootwindow , &inval ) ;
- }
- UMAMoveControl( (ControlHandle) m_macControl , mac_x + m_macHorizontalBorder , mac_y + m_macVerticalBorder ) ;
- {
- Rect inval = { mac_y , mac_x , mac_y + m_height , mac_x + m_width } ;
- InvalWindowRect( rootwindow , &inval ) ;
- }
- }
- }
+ // actually in the current systems this should never be possible, but later reparenting
+ // may become a reality
+
+ if ( (ControlHandle) m_macControl == NULL )
+ return ;
+
+ if ( GetParent() == NULL )
+ return ;
+
+ WindowRef rootwindow = (WindowRef) MacGetRootWindow() ;
+ if ( rootwindow == NULL )
+ return ;
+
+ Rect oldBounds ;
+ GetControlBounds( (ControlHandle) m_macControl , &oldBounds ) ;
+
+ int new_x = m_x + MacGetLeftBorderSize() + m_macHorizontalBorder ;
+ int new_y = m_y + MacGetTopBorderSize() + m_macVerticalBorder ;
+ int new_width = m_width - MacGetLeftBorderSize() - MacGetRightBorderSize() - 2 * m_macHorizontalBorder ;
+ int new_height = m_height - MacGetTopBorderSize() - MacGetBottomBorderSize() - 2 * m_macVerticalBorder ;
+
+ GetParent()->MacWindowToRootWindow( & new_x , & new_y ) ;
+ bool doMove = new_x != oldBounds.left || new_y != oldBounds.top ;
+ bool doResize = ( oldBounds.right - oldBounds.left ) != new_width || (oldBounds.bottom - oldBounds.top ) != new_height ;
+ if ( doMove || doResize )
+ {
+ InvalWindowRect( rootwindow, &oldBounds ) ;
+ if ( doMove )
+ {
+ UMAMoveControl( (ControlHandle) m_macControl , new_x , new_y ) ;
+ }
+ if ( doResize )
+ {
+ UMASizeControl( (ControlHandle) m_macControl , new_width , new_height ) ;
+ }
+ }
+}