/*! Resizes the top-level widget containing this widget. The event is in \a e. */ void QSizeGrip::mouseMoveEvent( QMouseEvent * e ) { if ( e->state() != LeftButton ) return; QWidget* tlw = qt_sizegrip_topLevelWidget(this); if ( tlw->testWState(WState_ConfigPending) ) return; QPoint np( e->globalPos() ); QWidget* ws = qt_sizegrip_workspace( this ); if ( ws ) { QPoint tmp( ws->mapFromGlobal( np ) ); if ( tmp.x() > ws->width() ) tmp.setX( ws->width() ); if ( tmp.y() > ws->height() ) tmp.setY( ws->height() ); np = ws->mapToGlobal( tmp ); } int w; int h = np.y() - p.y() + s.height(); if ( QApplication::reverseLayout() ) w = s.width() - ( np.x() - p.x() ); else w = np.x() - p.x() + s.width(); if ( w < 1 ) w = 1; if ( h < 1 ) h = 1; QSize ms( tlw->minimumSizeHint() ); ms = ms.expandedTo( minimumSize() ); if ( w < ms.width() ) w = ms.width(); if ( h < ms.height() ) h = ms.height(); if (QApplication::reverseLayout()) { tlw->resize( w, h ); if (tlw->size() == QSize(w,h)) tlw->move( tlw->x() + ( np.x()-p.x() ), tlw->y() ); } else { tlw->resize( w, h ); } #ifdef Q_WS_WIN MSG msg; while( PeekMessage( &msg, winId(), WM_MOUSEMOVE, WM_MOUSEMOVE, PM_REMOVE ) ) ; #endif QApplication::syncX(); if ( QApplication::reverseLayout() && tlw->size() == QSize(w,h) ) { s.rwidth() = tlw->size().width(); p.rx() = np.x(); } }
/*! Constructs a resize corner called \a name, as a child widget of \a parent. */ QSizeGrip::QSizeGrip( QWidget * parent, const char* name ) : QWidget( parent, name ) { #ifndef QT_NO_CURSOR #ifndef Q_WS_MAC if ( QApplication::reverseLayout() ) setCursor( sizeBDiagCursor ); else setCursor( sizeFDiagCursor ); #endif #endif setSizePolicy( QSizePolicy( QSizePolicy::Minimum, QSizePolicy::Fixed ) ); #if defined(Q_WS_X11) if ( !qt_sizegrip_workspace( this ) ) { WId id = winId(); XChangeProperty(qt_xdisplay(), topLevelWidget()->winId(), qt_sizegrip, XA_WINDOW, 32, PropModeReplace, (unsigned char *)&id, 1); } #endif tlw = qt_sizegrip_topLevelWidget( this ); if ( tlw ) tlw->installEventFilter( this ); installEventFilter( this ); //for binary compatibility fix in 4.0 with an event() ### }
/*! Construct a resize corner as a child widget of \a parent. */ QSizeGrip::QSizeGrip( QWidget * parent, const char* name ) : QWidget( parent, name ) { #ifndef QT_NO_CURSOR setCursor( sizeFDiagCursor ); #endif setSizePolicy( QSizePolicy( QSizePolicy::Minimum, QSizePolicy::Fixed ) ); #if defined(_WS_X11_) if ( !qt_sizegrip_workspace( this ) ) { WId id = winId(); XChangeProperty(qt_xdisplay(), topLevelWidget()->winId(), qt_sizegrip, XA_WINDOW, 32, PropModeReplace, (unsigned char *)&id, 1); } #endif }
/*! \reimp */ bool QSizeGrip::eventFilter( QObject *o, QEvent *e ) { if ( o == tlw ) { switch ( e->type() ) { #ifndef Q_WS_MAC /* The size grip goes no where on Mac OS X when you maximize! --Sam */ case QEvent::ShowMaximized: #endif case QEvent::ShowFullScreen: hide(); break; case QEvent::ShowNormal: show(); break; default: break; } } else if(o == this) { #if defined(Q_WS_MAC) switch(e->type()) { case QEvent::Hide: case QEvent::Show: if(!QApplication::closingDown() && parentWidget() && !qt_sizegrip_workspace(this)) { if(QWidget *w = qt_sizegrip_topLevelWidget(this)) { if(w->isTopLevel()) qt_mac_update_sizer(w, e->type() == QEvent::Hide ? -1 : 1); } } break; default: break; } #endif } return FALSE; }