void ScrollZoomer::layoutScrollBars(const QRect &rect) { int hPos = xAxis(); if (hScrollBarPosition() == OppositeToScale) hPos = oppositeAxis(hPos); int vPos = yAxis(); if (vScrollBarPosition() == OppositeToScale) vPos = oppositeAxis(vPos); ScrollBar *hScrollBar = horizontalScrollBar(); ScrollBar *vScrollBar = verticalScrollBar(); const int hdim = hScrollBar ? hScrollBar->extent() : 0; const int vdim = vScrollBar ? vScrollBar->extent() : 0; if (hScrollBar && hScrollBar->isVisible()) { int x = rect.x(); int y = (hPos == QwtPlot::xTop) ? rect.top() : rect.bottom() - hdim + 1; int w = rect.width(); if (vScrollBar && vScrollBar->isVisible()) { if (vPos == QwtPlot::yLeft) x += vdim; w -= vdim; } hScrollBar->setGeometry(x, y, w, hdim); } if (vScrollBar && vScrollBar->isVisible()) { int pos = yAxis(); if (vScrollBarPosition() == OppositeToScale) pos = oppositeAxis(pos); int x = (vPos == QwtPlot::yLeft) ? rect.left() : rect.right() - vdim + 1; int y = rect.y(); int h = rect.height(); if (hScrollBar && hScrollBar->isVisible()) { if (hPos == QwtPlot::xTop) y += hdim; h -= hdim; } vScrollBar->setGeometry(x, y, vdim, h); } if (hScrollBar && hScrollBar->isVisible() && vScrollBar && vScrollBar->isVisible()) { if (d_cornerWidget) { QRect cornerRect(vScrollBar->pos().x(), hScrollBar->pos().y(), vdim, hdim); d_cornerWidget->setGeometry(cornerRect); } } }
TEST(FloatRoundedRectTest, radiusCenterRect) { FloatSize cornerRect(10, 10); FloatRoundedRect r0(FloatRect(0, 0, 100, 50), FloatRoundedRect::Radii(cornerRect, cornerRect, cornerRect, cornerRect)); EXPECT_EQ(FloatRect(10, 10, 80, 30), r0.radiusCenterRect()); // "Degenerate" cases all return an empty rectangle. FloatRect collapsedRect(0, 0, 100, 50); collapsedRect.expand(FloatRectOutsets(-200, -200, -200, -200)); FloatRoundedRect r1(collapsedRect); EXPECT_TRUE(r1.radiusCenterRect().isEmpty()); FloatRoundedRect::Radii radiiWithTooLargeCorner(FloatSize(55, 55), FloatSize(), FloatSize(), FloatSize()); FloatRoundedRect r2(FloatRect(0, 0, 100, 50), radiiWithTooLargeCorner); EXPECT_TRUE(r2.radiusCenterRect().isEmpty()); }
ResizeType ResizeLogic::DeterminePotentialResize(CPoint cursorPoint) const { // Topleft corner long actualSensitivity = 0; long targetWidth = m_targetLocation.Width(); long targetHeight = m_targetLocation.Height(); // FIXME: should use GetSystemMetrics(SM_CXSIZEFRAME) ? if (targetWidth <= 35 || targetHeight <= 25) { actualSensitivity = DECORATOR_MINSENSITIVITYDISTANCE; } else if (targetWidth >= 80 && targetHeight >= 40) { actualSensitivity = DECORATOR_MAXSENSITIVITYDISTANCE; } else { long actualSensitivityByWidth = ((targetWidth - 35) * 6 + (80 - targetWidth) * 2) / targetWidth; long actualSensitivityByHeight = ((targetHeight - 25) * 6 + (40 - targetHeight) * 2) / targetHeight; actualSensitivity = min(actualSensitivityByWidth, actualSensitivityByHeight); actualSensitivity = min(max(actualSensitivity, DECORATOR_MINSENSITIVITYDISTANCE), DECORATOR_MAXSENSITIVITYDISTANCE); } CRect cornerRect(m_targetLocation.left, m_targetLocation.top, m_targetLocation.left + 1, m_targetLocation.top + 1); cornerRect.InflateRect(actualSensitivity, actualSensitivity); if (cornerRect.PtInRect(cursorPoint)) return TopLeftCornerResize; // Topright corner cornerRect.SetRect(m_targetLocation.right - 1, m_targetLocation.top, m_targetLocation.right, m_targetLocation.top + 1); cornerRect.InflateRect(actualSensitivity, actualSensitivity); if (cornerRect.PtInRect(cursorPoint)) return TopRightCornerResize; // Bottomright corner cornerRect.SetRect(m_targetLocation.right - 1, m_targetLocation.bottom - 1, m_targetLocation.right, m_targetLocation.bottom); cornerRect.InflateRect(actualSensitivity, actualSensitivity); if (cornerRect.PtInRect(cursorPoint)) return BottomRightCornerResize; // Bottomleft corner cornerRect.SetRect(m_targetLocation.left, m_targetLocation.bottom - 1, m_targetLocation.left + 1, m_targetLocation.bottom); cornerRect.InflateRect(actualSensitivity, actualSensitivity); if (cornerRect.PtInRect(cursorPoint)) return BottomLeftCornerResize; // Left edge cornerRect.SetRect(m_targetLocation.left, m_targetLocation.top, m_targetLocation.left + 1, m_targetLocation.bottom); cornerRect.InflateRect(actualSensitivity, actualSensitivity); if (cornerRect.PtInRect(cursorPoint)) return LeftEdgeResize; // Top edge cornerRect.SetRect(m_targetLocation.left, m_targetLocation.top, m_targetLocation.right, m_targetLocation.top + 1); cornerRect.InflateRect(actualSensitivity, actualSensitivity); if (cornerRect.PtInRect(cursorPoint)) return TopEdgeResize; // Right edge cornerRect.SetRect(m_targetLocation.right - 1, m_targetLocation.top, m_targetLocation.right, m_targetLocation.bottom); cornerRect.InflateRect(actualSensitivity, actualSensitivity); if (cornerRect.PtInRect(cursorPoint)) return RightEdgeResize; // Bottom edge cornerRect.SetRect(m_targetLocation.left, m_targetLocation.bottom - 1, m_targetLocation.right, m_targetLocation.bottom); cornerRect.InflateRect(actualSensitivity, actualSensitivity); if (cornerRect.PtInRect(cursorPoint)) return BottomEdgeResize; // Inside rect: move operation possible if ((m_resizeFeatures & Movable) != 0) { cornerRect = m_targetLocation; cornerRect.InflateRect(-actualSensitivity, -actualSensitivity); if (cornerRect.PtInRect(cursorPoint)) return MoveOperation; } return NotInResize; }