From 86fb1b4590873e436c60d935ff2953988b3d9498 Mon Sep 17 00:00:00 2001 From: Justin Luth Date: Wed, 6 Jan 2016 21:23:47 +0300 Subject: set reasonable default size for new draw/impress tables The width was decent, except that on small paper (A6) it was wider than the paper size. The height was terrible - the minimum size possible. It was too small for even a single line of text. That made it hard to grab the table edge (instead grabbing a row edge) when trying to resize. Now the height and width are limited to the page/view size, and based on the number of rows created. One possible enhancement would be to use the border width instead of the page width. Change-Id: I4e106a7bc34f65886e3c80d308499242c0fdd7d8 Reviewed-on: https://gerrit.libreoffice.org/21171 Reviewed-by: Justin Luth Tested-by: Samuel Mehrbrodt Reviewed-by: Samuel Mehrbrodt (cherry picked from commit 66b8b09d0aa97e4009d2019a9d93b74cd1e11a09) Reviewed-on: https://gerrit.libreoffice.org/21214 Tested-by: Jenkins --- sd/source/ui/table/tablefunction.cxx | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) (limited to 'sd') diff --git a/sd/source/ui/table/tablefunction.cxx b/sd/source/ui/table/tablefunction.cxx index 0070bee8e0d3..7535798d3b7d 100644 --- a/sd/source/ui/table/tablefunction.cxx +++ b/sd/source/ui/table/tablefunction.cxx @@ -146,12 +146,32 @@ void DrawViewShell::FuTable(SfxRequest& rReq) } else { - Size aSize( 14100, 200 ); + Size aSize( 14100, 2000 ); Point aPos; Rectangle aWinRect(aPos, GetActiveWindow()->GetOutputSizePixel() ); + aWinRect = GetActiveWindow()->PixelToLogic(aWinRect); + + // make sure that the default size of the table fits on the paper and is inside the viewing area. + // if zoomed in close, don't make the table bigger than the viewing window. + Size aMaxSize = getCurrentPage()->GetSize(); + if( aMaxSize.Height() > aWinRect.getHeight() ) + aMaxSize.setHeight( aWinRect.getHeight() ); + if( aMaxSize.Width() > aWinRect.getWidth() ) + aMaxSize.setWidth( aWinRect.getWidth() ); + + if( aSize.Width() > aMaxSize.getWidth() ) + aSize.setWidth( aMaxSize.getWidth() ); + + // adjust height based on # of rows. + if( nRows > 0 ) + { + aSize.setHeight( aSize.Height() * nRows ); + if( aSize.Height() > aMaxSize.getHeight() ) + aSize.setHeight( aMaxSize.getHeight() ); + } + aPos = aWinRect.Center(); - aPos = GetActiveWindow()->PixelToLogic(aPos); aPos.X() -= aSize.Width() / 2; aPos.Y() -= aSize.Height() / 2; aRect = Rectangle(aPos, aSize); -- cgit v1.2.3