sc/source/ui/inc/tabsplit.hxx | 1 sc/source/ui/view/gridwin.cxx | 82 +++++++++++++++++++++++++++++++---------- sc/source/ui/view/tabsplit.cxx | 56 +++++----------------------- sc/source/ui/view/tabview.cxx | 6 ++- 4 files changed, 78 insertions(+), 67 deletions(-)
New commits: commit 8c693312f211a2046e433079cddaca811cae4a78 Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> Date: Mon Feb 23 23:47:12 2015 +0900 simplify drawing of splitter, add more flat look Change-Id: Ie5040c2932715b2505635ff3cb909ccfeb4b7fa0 diff --git a/sc/source/ui/view/tabsplit.cxx b/sc/source/ui/view/tabsplit.cxx index 073aaf1..cebbeb0 100644 --- a/sc/source/ui/view/tabsplit.cxx +++ b/sc/source/ui/view/tabsplit.cxx @@ -65,17 +65,10 @@ void ScTabSplitter::Paint( const Rectangle& rRect ) { case SC_SPLIT_NONE: { - // Draw 3D border SetLineColor(GetSettings().GetStyleSettings().GetShadowColor()); - DrawLine(rRect.TopRight(), rRect.BottomRight()); - DrawLine(rRect.BottomLeft(), rRect.BottomRight()); - SetLineColor(GetSettings().GetStyleSettings().GetLightColor()); - DrawLine(rRect.TopLeft(), rRect.TopRight()); - DrawLine(rRect.TopLeft(), rRect.BottomLeft()); - // Fill internal rectangle - SetLineColor(); - SetFillColor(GetSettings().GetStyleSettings().GetFaceColor()); - DrawRect(Rectangle(rRect.Left()+1, rRect.Top()+1, rRect.Right()-1, rRect.Bottom()-1)); + SetFillColor(GetSettings().GetStyleSettings().GetShadowColor()); + DrawRect(Rectangle(rRect.Left(), rRect.Top(), rRect.Right(), rRect.Bottom())); + // Draw handle SetLineColor(Color(COL_BLACK)); SetFillColor(Color(COL_BLACK)); @@ -87,13 +80,9 @@ void ScTabSplitter::Paint( const Rectangle& rRect ) break; } case SC_SPLIT_NORMAL: - SetLineColor(GetSettings().GetStyleSettings().GetLightColor()); - DrawLine(rRect.TopLeft(), rRect.BottomLeft()); SetLineColor(GetSettings().GetStyleSettings().GetShadowColor()); - DrawLine(rRect.TopRight(), rRect.BottomRight()); - SetLineColor(); - SetFillColor(GetSettings().GetStyleSettings().GetFaceColor()); - DrawRect(Rectangle(Point(rRect.Left()+1, rRect.Top()), Point(rRect.Right()-1, rRect.Bottom()))); + SetFillColor(GetSettings().GetStyleSettings().GetShadowColor()); + DrawRect(Rectangle(rRect.Left(), rRect.Top(), rRect.Right(), rRect.Bottom())); break; case SC_SPLIT_FIX: // Nothing to draw @@ -106,18 +95,11 @@ void ScTabSplitter::Paint( const Rectangle& rRect ) { case SC_SPLIT_NONE: { - // Draw 3D border SetLineColor(GetSettings().GetStyleSettings().GetShadowColor()); - DrawLine(rRect.TopRight(), rRect.BottomRight()); - DrawLine(rRect.BottomLeft(), rRect.BottomRight()); - SetLineColor(GetSettings().GetStyleSettings().GetLightColor()); - DrawLine(rRect.TopLeft(), rRect.TopRight()); - DrawLine(rRect.TopLeft(), rRect.BottomLeft()); - // Fill internal rectangle - SetLineColor(); - SetFillColor(GetSettings().GetStyleSettings().GetFaceColor()); - DrawRect(Rectangle(rRect.Left()+1, rRect.Top()+1, rRect.Right()-1, rRect.Bottom()-1)); - // Draw handle + SetFillColor(GetSettings().GetStyleSettings().GetShadowColor()); + DrawRect(Rectangle(rRect.Left(), rRect.Top(), rRect.Right(), rRect.Bottom())); + + // Draw handle SetLineColor(Color(COL_BLACK)); SetFillColor(Color(COL_BLACK)); const long yc = rRect.Top()+rRect.Bottom(); @@ -128,13 +110,9 @@ void ScTabSplitter::Paint( const Rectangle& rRect ) break; } case SC_SPLIT_NORMAL: - SetLineColor(GetSettings().GetStyleSettings().GetLightColor()); - DrawLine(rRect.TopLeft(), rRect.TopRight()); SetLineColor(GetSettings().GetStyleSettings().GetShadowColor()); - DrawLine(rRect.BottomLeft(), rRect.BottomRight()); - SetLineColor(); - SetFillColor(GetSettings().GetStyleSettings().GetFaceColor()); - DrawRect(Rectangle(Point(rRect.Left(), rRect.Top()+1), Point(rRect.Right(), rRect.Bottom()-1))); + SetFillColor(GetSettings().GetStyleSettings().GetShadowColor()); + DrawRect(Rectangle(rRect.Left(), rRect.Top(), rRect.Right(), rRect.Bottom())); break; case SC_SPLIT_FIX: // Nothing to draw commit c750e1a92bad68c3518c1836f6a258a19be8b68c Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> Date: Mon Feb 23 23:15:07 2015 +0900 Remove changing the splitter position as it can cause an inf. loop Changing the splitter position can cause an infinite loop which is most likely a cause of a rounding error. This happens constantly when in HiDPI mode so remove it for now until a better solution is found. Change-Id: Id3551b41ea61c36a78f38a51a1fddfcfd104265a diff --git a/sc/source/ui/inc/tabsplit.hxx b/sc/source/ui/inc/tabsplit.hxx index a81e803..e2a5cb5 100644 --- a/sc/source/ui/inc/tabsplit.hxx +++ b/sc/source/ui/inc/tabsplit.hxx @@ -32,7 +32,6 @@ private: protected: virtual void MouseButtonDown( const MouseEvent& rMEvt ) SAL_OVERRIDE; - virtual void Splitting( Point& rSplitPos ) SAL_OVERRIDE; public: ScTabSplitter( vcl::Window* pParent, WinBits nWinStyle, diff --git a/sc/source/ui/view/tabsplit.cxx b/sc/source/ui/view/tabsplit.cxx index 755aeef..073aaf1 100644 --- a/sc/source/ui/view/tabsplit.cxx +++ b/sc/source/ui/view/tabsplit.cxx @@ -43,18 +43,6 @@ void ScTabSplitter::MouseButtonDown( const MouseEvent& rMEvt ) Splitter::MouseButtonDown( rMEvt ); } -void ScTabSplitter::Splitting( Point& rSplitPos ) -{ - vcl::Window* pParent = GetParent(); - Point aScreenPos = pParent->OutputToNormalizedScreenPixel( rSplitPos ); - pViewData->GetView()->SnapSplitPos( aScreenPos ); - Point aNew = pParent->NormalizedScreenToOutputPixel( aScreenPos ); - if ( IsHorizontal() ) - rSplitPos.X() = aNew.X(); - else - rSplitPos.Y() = aNew.Y(); -} - void ScTabSplitter::SetFixed(bool bSet) { bFixed = bSet; commit b01bcbda617b9e53e1ba9b0d3e9808cc6930c6f0 Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> Date: Sun Feb 22 17:42:03 2015 +0900 cell cursor - reduce the size, HiDPI support Change-Id: I24cd38f0f7e0f595815548a53824452d50ddd893 diff --git a/sc/source/ui/view/gridwin.cxx b/sc/source/ui/view/gridwin.cxx index 82ebf72..b65c209 100644 --- a/sc/source/ui/view/gridwin.cxx +++ b/sc/source/ui/view/gridwin.cxx @@ -5797,19 +5797,39 @@ void ScGridWindow::UpdateCursorOverlay() long nSizeYPix; pViewData->GetMergeSizePixel( nX, nY, nSizeXPix, nSizeYPix ); - if ( bLayoutRTL ) + if (bLayoutRTL) aScrPos.X() -= nSizeXPix - 2; // move instead of mirroring - // Now, draw the cursor. + Rectangle aRect( aScrPos, Size( nSizeXPix - 1, nSizeYPix - 1) ); + + sal_Int32 nScale = GetDPIScaleFactor(); + + long aCursorWidth = 1 * nScale; + + Rectangle aLeft = Rectangle(aRect); + aLeft.Top() -= aCursorWidth; + aLeft.Bottom() += aCursorWidth; + aLeft.Right() = aLeft.Left(); + aLeft.Left() -= aCursorWidth; + + Rectangle aRight = Rectangle(aRect); + aRight.Top() -= aCursorWidth; + aRight.Bottom() += aCursorWidth; + aRight.Left() = aRight.Right(); + aRight.Right() += aCursorWidth; + + Rectangle aTop = Rectangle(aRect); + aTop.Bottom() = aTop.Top(); + aTop.Top() -= aCursorWidth; - aScrPos.X() -= 2; - aScrPos.Y() -= 2; - Rectangle aRect( aScrPos, Size( nSizeXPix + 3, nSizeYPix + 3 ) ); + Rectangle aBottom = Rectangle(aRect); + aBottom.Top() = aBottom.Bottom(); + aBottom.Bottom() += aCursorWidth; - aPixelRects.push_back(Rectangle( aRect.Left(), aRect.Top(), aRect.Left()+2, aRect.Bottom() )); - aPixelRects.push_back(Rectangle( aRect.Right()-2, aRect.Top(), aRect.Right(), aRect.Bottom() )); - aPixelRects.push_back(Rectangle( aRect.Left()+3, aRect.Top(), aRect.Right()-3, aRect.Top()+2 )); - aPixelRects.push_back(Rectangle( aRect.Left()+3, aRect.Bottom()-2, aRect.Right()-3, aRect.Bottom() )); + aPixelRects.push_back(aLeft); + aPixelRects.push_back(aRight); + aPixelRects.push_back(aTop); + aPixelRects.push_back(aBottom); } } commit 43bfb0e4a693962dae2320a1d7c8825880bcb769 Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> Date: Sun Feb 22 15:08:46 2015 +0900 auto fill handle: HiDPI, increase hit area, adjust draw position Change-Id: I197ca370dad5cadcddd2472ed9f25d7b3acc504a diff --git a/sc/source/ui/view/gridwin.cxx b/sc/source/ui/view/gridwin.cxx index fcbed3d..82ebf72 100644 --- a/sc/source/ui/view/gridwin.cxx +++ b/sc/source/ui/view/gridwin.cxx @@ -5948,18 +5948,30 @@ void ScGridWindow::UpdateAutoFillOverlay() ScDocument* pDoc = pViewData->GetDocument(); bool bLayoutRTL = pDoc->IsLayoutRTL( nTab ); + sal_Int32 nScale = GetDPIScaleFactor(); + // Size should be even + Size aFillHandleSize = Size(6 * nScale, 6 * nScale); + Point aFillPos = pViewData->GetScrPos( nX, nY, eWhich, true ); long nSizeXPix; long nSizeYPix; pViewData->GetMergeSizePixel( nX, nY, nSizeXPix, nSizeYPix ); - if ( bLayoutRTL ) - aFillPos.X() -= nSizeXPix + 3; + + if (bLayoutRTL) + aFillPos.X() -= nSizeXPix - 2 + (aFillHandleSize.Width() / 2); else - aFillPos.X() += nSizeXPix - 2; + aFillPos.X() += nSizeXPix - (aFillHandleSize.Width() / 2); aFillPos.Y() += nSizeYPix; - aFillPos.Y() -= 2; - mpAutoFillRect.reset(new Rectangle(aFillPos, Size(6, 6))); + aFillPos.Y() -= (aFillHandleSize.Height() / 2); + + Rectangle aFillRect(aFillPos, aFillHandleSize); + + // expand rect to increase hit area + mpAutoFillRect.reset(new Rectangle(aFillRect.Left() - nScale, + aFillRect.Top() - nScale, + aFillRect.Right() + nScale, + aFillRect.Bottom() + nScale)); // #i70788# get the OverlayManager safely rtl::Reference<sdr::overlay::OverlayManager> xOverlayManager = getOverlayManager(); @@ -5972,7 +5984,7 @@ void ScGridWindow::UpdateAutoFillOverlay() aHandleColor = SC_MOD()->GetColorConfig().GetColorValue(svtools::CALCPAGEBREAKAUTOMATIC).nColor; std::vector< basegfx::B2DRange > aRanges; const basegfx::B2DHomMatrix aTransform(GetInverseViewTransformation()); - basegfx::B2DRange aRB(mpAutoFillRect->Left(), mpAutoFillRect->Top(), mpAutoFillRect->Right() + 1, mpAutoFillRect->Bottom() + 1); + basegfx::B2DRange aRB(aFillRect.Left(), aFillRect.Top(), aFillRect.Right(), aFillRect.Bottom()); aRB.transform(aTransform); aRanges.push_back(aRB); commit abc3163756f99196ccfb5e69ad5afe070e213c54 Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> Date: Sun Feb 22 14:00:33 2015 +0900 fix selection overlay drawing in RTL (off by one px) Change-Id: I82a743ef3935baab82d9f9239bd589e55def8d76 diff --git a/sc/source/ui/view/gridwin.cxx b/sc/source/ui/view/gridwin.cxx index eaaa620..fcbed3d 100644 --- a/sc/source/ui/view/gridwin.cxx +++ b/sc/source/ui/view/gridwin.cxx @@ -5867,7 +5867,7 @@ void ScGridWindow::UpdateSelectionOverlay() std::vector<Rectangle> aPixelRects; GetSelectionRects( aPixelRects ); - if ( aPixelRects.size() && pViewData->IsActive() ) + if (!aPixelRects.empty() && pViewData->IsActive()) { // #i70788# get the OverlayManager safely rtl::Reference<sdr::overlay::OverlayManager> xOverlayManager = getOverlayManager(); @@ -5876,13 +5876,25 @@ void ScGridWindow::UpdateSelectionOverlay() { std::vector< basegfx::B2DRange > aRanges; const basegfx::B2DHomMatrix aTransform(GetInverseViewTransformation()); + ScDocument* pDoc = pViewData->GetDocument(); + SCTAB nTab = pViewData->GetTabNo(); + bool bLayoutRTL = pDoc->IsLayoutRTL( nTab ); for(sal_uInt32 a(0); a < aPixelRects.size(); a++) { const Rectangle aRA(aPixelRects[a]); - basegfx::B2DRange aRB(aRA.Left() - 1, aRA.Top() - 1, aRA.Right(), aRA.Bottom()); - aRB.transform(aTransform); - aRanges.push_back(aRB); + if (bLayoutRTL) + { + basegfx::B2DRange aRB(aRA.Left(), aRA.Top() - 1, aRA.Right() + 1, aRA.Bottom()); + aRB.transform(aTransform); + aRanges.push_back(aRB); + } + else + { + basegfx::B2DRange aRB(aRA.Left() - 1, aRA.Top() - 1, aRA.Right(), aRA.Bottom()); + aRB.transform(aTransform); + aRanges.push_back(aRB); + } } // get the system's highlight color commit 04767c132c1ca692c7e989b241eae40af33e43e8 Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> Date: Mon Feb 23 19:06:24 2015 +0900 make calc splitter handle HiDPI aware Splitter is very small on a HiDPI screen, which also makes the mouse hit area small and thus hard to click. This change scales the width of the handle in relation to DPI scale factor. Change-Id: I5dacdafc97bf9cbeae7dcc888ba67d804ce62587 diff --git a/sc/source/ui/view/tabview.cxx b/sc/source/ui/view/tabview.cxx index efc7758..1f5f07c 100644 --- a/sc/source/ui/view/tabview.cxx +++ b/sc/source/ui/view/tabview.cxx @@ -332,10 +332,12 @@ void ScTabView::DoResize( const Point& rOffset, const Size& rSize, bool bInner ) if ( bMinimized ) return; - long nSplitSizeX = SPLIT_HANDLE_SIZE; + sal_Int32 aScaleFactor = pFrameWin->GetDPIScaleFactor(); + + long nSplitSizeX = SPLIT_HANDLE_SIZE * aScaleFactor; if ( aViewData.GetHSplitMode() == SC_SPLIT_FIX ) nSplitSizeX = 1; - long nSplitSizeY = SPLIT_HANDLE_SIZE; + long nSplitSizeY = SPLIT_HANDLE_SIZE * aScaleFactor; if ( aViewData.GetVSplitMode() == SC_SPLIT_FIX ) nSplitSizeY = 1;
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits