void RenderWidget::setWidget(Widget* widget) { if (widget != m_widget) { if (m_widget) { // removeFromParent is a no-op on Mac. m_widget->removeFromParent(); widgetRendererMap().remove(m_widget); deleteWidget(); } m_widget = widget; if (m_widget) { widgetRendererMap().add(m_widget, this); // if we've already received a layout, apply the calculated space to the // widget immediately, but we have to have really been full constructed (with a non-null // style pointer). if (!needsLayout() && style()) resizeWidget(m_widget, m_width - borderLeft() - borderRight() - paddingLeft() - paddingRight(), m_height - borderTop() - borderBottom() - paddingTop() - paddingBottom()); if (style()) { if (style()->visibility() != VISIBLE) m_widget->hide(); else m_widget->show(); } m_view->addChild(m_widget); } } }
void NcWidgetData::handleMouseMoveEvent( QMouseEvent* event ) { if ( mLeftButtonPressed ) { if ( d->mWidgetResizable && mPressedMousePos.onEdges ) { resizeWidget( event->globalPos() ); } else if ( d->mWidgetMovable ) { moveWidget( event->globalPos() ); } } else if ( d->mWidgetResizable ) { updateCursorShape( event->globalPos() ); } }
void KCommonDecoration::updateLayout() const { QRect r = widget()->rect(); int r_x, r_y, r_x2, r_y2; r.coords(&r_x, &r_y, &r_x2, &r_y2); // layout preview widget if (m_previewWidget) { const int borderLeft = layoutMetric(LM_BorderLeft); const int borderRight = layoutMetric(LM_BorderRight); const int borderBottom = layoutMetric(LM_BorderBottom); const int titleHeight = layoutMetric(LM_TitleHeight); const int titleEdgeTop = layoutMetric(LM_TitleEdgeTop); const int titleEdgeBottom = layoutMetric(LM_TitleEdgeBottom); int left = r_x+borderLeft; int top = r_y+titleEdgeTop+titleHeight+titleEdgeBottom; int width = r_x2-borderRight-left+1; int height = r_y2-borderBottom-top+1; m_previewWidget->setGeometry(left, top, width, height); moveWidget(left,top, m_previewWidget); resizeWidget(width, height, m_previewWidget); } // resize buttons... for (int n=0; n<NumButtons; n++) { if (m_button[n]) { QSize newSize = QSize(layoutMetric(LM_ButtonWidth, true, m_button[n]), layoutMetric(LM_ButtonHeight, true, m_button[n]) ); if (newSize != m_button[n]->size() ) m_button[n]->setSize(newSize); } } // layout buttons int y = r_y + layoutMetric(LM_TitleEdgeTop) + layoutMetric(LM_ButtonMarginTop); if (m_buttonsLeft.count() > 0) { const int buttonSpacing = layoutMetric(LM_ButtonSpacing); int x = r_x + layoutMetric(LM_TitleEdgeLeft); for (ButtonContainer::const_iterator it = m_buttonsLeft.begin(); it != m_buttonsLeft.end(); ++it) { bool elementLayouted = false; if (*it) { if (!(*it)->isHidden() ) { moveWidget(x,y, *it); x += layoutMetric(LM_ButtonWidth, true, ::qt_cast<KCommonDecorationButton*>(*it) ); elementLayouted = true; } } else { x+= layoutMetric(LM_ExplicitButtonSpacer); elementLayouted = true; } if (elementLayouted && it != m_buttonsLeft.end() ) x += buttonSpacing; } } if (m_buttonsRight.count() > 0) { const int titleEdgeRightLeft = r_x2-layoutMetric(LM_TitleEdgeRight)+1; const int buttonSpacing = layoutMetric(LM_ButtonSpacing); int x = titleEdgeRightLeft - buttonContainerWidth(m_buttonsRight); for (ButtonContainer::const_iterator it = m_buttonsRight.begin(); it != m_buttonsRight.end(); ++it) { bool elementLayouted = false; if (*it) { if (!(*it)->isHidden() ) { moveWidget(x,y, *it); x += layoutMetric(LM_ButtonWidth, true, ::qt_cast<KCommonDecorationButton*>(*it) );; elementLayouted = true; } } else { x += layoutMetric(LM_ExplicitButtonSpacer); elementLayouted = true; } if (elementLayouted && it != m_buttonsRight.end() ) x += buttonSpacing; } } }