void ToolBarResizer::OnMotion( wxMouseEvent & event ) { // Go ahead and set the event to propagate event.Skip(); // Retrieve the mouse position wxPoint raw_pos = event.GetPosition(); wxPoint pos = ClientToScreen( raw_pos ); if( event.Dragging() ) { wxRect r = mBar->GetRect(); wxSize msz = mBar->GetMinSize(); wxSize psz = mBar->GetParent()->GetClientSize(); // Adjust the size by the difference between the // last mouse and current mouse positions. r.width += ( pos.x - mResizeStart.x ); // Constrain if( r.width < msz.x ) { // Don't allow resizing to go too small r.width = msz.x; } else if( r.GetRight() > psz.x - 3 ) { // Don't allow resizing to go too large // // The 3 magic pixels are because I'm too chicken to change the // calculations in ToolDock::LayoutToolBars() even though I'm // the one that set them up. :-) r.SetRight( psz.x - 3 ); } else { // Remember for next go round mResizeStart = pos; } // Resize the bar mBar->SetSize( r.GetSize() ); // Tell everyone we've changed sizes mBar->Updated(); // Refresh our world mBar->GetParent()->Refresh(); mBar->GetParent()->Update(); } }