sc/source/ui/unoobj/docuno.cxx | 12 +++++++++--- sc/source/ui/view/gridwin4.cxx | 35 +++++++++++++++++++++++++---------- sc/source/ui/view/viewdata.cxx | 15 +++++++++++---- 3 files changed, 45 insertions(+), 17 deletions(-)
New commits: commit 440c2c1cccf26e5e0eda6b7ae1a2868798b4057b Author: Jan Holesovsky <ke...@collabora.com> Date: Fri Apr 3 23:22:56 2015 +0200 sc tiled editing: Fix the conversion so that it works with zoom too. Change-Id: I80d9ed6abe6b3ddb2bb1e0d6b7c74ce50d0df55a diff --git a/sc/source/ui/unoobj/docuno.cxx b/sc/source/ui/unoobj/docuno.cxx index b098082..231d1f8 100644 --- a/sc/source/ui/unoobj/docuno.cxx +++ b/sc/source/ui/unoobj/docuno.cxx @@ -480,9 +480,8 @@ void ScModelObj::paintTile( VirtualDevice& rDevice, //if (pGridWindow->GetOutputSizePixel() != aTileSize) // pGridWindow->SetOutputSizePixel(Size(nOutputWidth, nOutputHeight)); // so instead for now, set the viewport size to document size - const MapMode aMapTwip(MAP_TWIP); Size aDocSize = getDocumentSize(); - pGridWindow->SetOutputSizePixel(pGridWindow->LogicToPixel(aDocSize, aMapTwip)); + pGridWindow->SetOutputSizePixel(Size(aDocSize.Width() * pViewData->GetPPTX(), aDocSize.Height() * pViewData->GetPPTY())); pGridWindow->PaintTile( rDevice, nOutputWidth, nOutputHeight, nTilePosX, nTilePosY, nTileWidth, nTileHeight ); commit ca18f7310f76f72f86806bd2586486e7c446a098 Author: Jan Holesovsky <ke...@collabora.com> Date: Fri Apr 3 23:07:31 2015 +0200 Revert "sc tiled editing: This got fixed by the recent changes." Needed again. This reverts commit b11c58889cde10f43a9f239a959eb2c252dc4db7. diff --git a/sc/source/ui/view/gridwin4.cxx b/sc/source/ui/view/gridwin4.cxx index a9c0135..269d12e 100644 --- a/sc/source/ui/view/gridwin4.cxx +++ b/sc/source/ui/view/gridwin4.cxx @@ -893,7 +893,10 @@ void ScGridWindow::DrawContent(OutputDevice &rDevice, const ScTableInfo& rTableI // set the correct mapmode Rectangle aBackground(aStart, aEnd); if (bIsTiledRendering) + { + aBackground += Point(nScrX, nScrY); rDevice.SetMapMode(aDrawMode); + } else rDevice.SetMapMode(pViewData->GetLogicMode()); commit 5deb60a4ef6243bcef5c6a50b3ed2073d3353bc9 Author: Jan Holesovsky <ke...@collabora.com> Date: Fri Apr 3 23:04:06 2015 +0200 sc tiled editing: For now, revert to using the entire doc size. There are still too many problems with the interaction with the editeng, unfortunately. Change-Id: I5cdbc80dbe1dc3996ecd89f0bca5399cbfb9c9b0 diff --git a/sc/source/ui/unoobj/docuno.cxx b/sc/source/ui/unoobj/docuno.cxx index 7c3bb1b..b098082 100644 --- a/sc/source/ui/unoobj/docuno.cxx +++ b/sc/source/ui/unoobj/docuno.cxx @@ -473,9 +473,16 @@ void ScModelObj::paintTile( VirtualDevice& rDevice, ScGridWindow* pGridWindow = pViewData->GetActiveWin(); // update the size of the area we are painting - Size aTileSize(nOutputWidth, nOutputHeight); - if (pGridWindow->GetOutputSizePixel() != aTileSize) - pGridWindow->SetOutputSizePixel(Size(nOutputWidth, nOutputHeight)); + // FIXME we want to use only the minimal necessary size, like the + // following; but for the moment there is too many problems with that and + // interaction with editeng used for the cell editing + //Size aTileSize(nOutputWidth, nOutputHeight); + //if (pGridWindow->GetOutputSizePixel() != aTileSize) + // pGridWindow->SetOutputSizePixel(Size(nOutputWidth, nOutputHeight)); + // so instead for now, set the viewport size to document size + const MapMode aMapTwip(MAP_TWIP); + Size aDocSize = getDocumentSize(); + pGridWindow->SetOutputSizePixel(pGridWindow->LogicToPixel(aDocSize, aMapTwip)); pGridWindow->PaintTile( rDevice, nOutputWidth, nOutputHeight, nTilePosX, nTilePosY, nTileWidth, nTileHeight ); commit 0a0238129a47c42c996f0000836bd48cee57b78a Author: Jan Holesovsky <ke...@collabora.com> Date: Fri Apr 3 20:57:49 2015 +0200 sc tiled editing: Correct position of the selection in far positions. Before this commit, the selections outside of the aScrSize rectangle did not work - they always degraded to a single cell selection. Change-Id: Ie51da710424bff3691302f5923b141a2f2bea676 diff --git a/sc/source/ui/view/gridwin4.cxx b/sc/source/ui/view/gridwin4.cxx index 7202f3d..a9c0135 100644 --- a/sc/source/ui/view/gridwin4.cxx +++ b/sc/source/ui/view/gridwin4.cxx @@ -1554,23 +1554,35 @@ void ScGridWindow::GetSelectionRects( ::std::vector< Rectangle >& rPixelRects ) SCCOL nPosX = pViewData->GetPosX( eHWhich ); SCROW nPosY = pViewData->GetPosY( eVWhich ); + // is the selection visible at all? if (nTestX2 < nPosX || nTestY2 < nPosY) - return; // unsichtbar + return; SCCOL nRealX1 = nX1; if (nX1 < nPosX) nX1 = nPosX; if (nY1 < nPosY) nY1 = nPosY; - SCCOL nXRight = nPosX + pViewData->VisibleCellsX(eHWhich); - if (nXRight > MAXCOL) nXRight = MAXCOL; - SCROW nYBottom = nPosY + pViewData->VisibleCellsY(eVWhich); - if (nYBottom > MAXROW) nYBottom = MAXROW; - - if (nX1 > nXRight || nY1 > nYBottom) - return; // unsichtbar - if (nX2 > nXRight) nX2 = nXRight; - if (nY2 > nYBottom) nY2 = nYBottom; + if (!pDoc->GetDrawLayer()->isTiledRendering()) + { + // limit the selection to only what is visible on the screen + SCCOL nXRight = nPosX + pViewData->VisibleCellsX(eHWhich); + if (nXRight > MAXCOL) + nXRight = MAXCOL; + + SCROW nYBottom = nPosY + pViewData->VisibleCellsY(eVWhich); + if (nYBottom > MAXROW) + nYBottom = MAXROW; + + // is the selection visible at all? + if (nX1 > nXRight || nY1 > nYBottom) + return; + + if (nX2 > nXRight) + nX2 = nXRight; + if (nY2 > nYBottom) + nY2 = nYBottom; + } double nPPTX = pViewData->GetPPTX(); double nPPTY = pViewData->GetPPTY(); diff --git a/sc/source/ui/view/viewdata.cxx b/sc/source/ui/view/viewdata.cxx index 32ed642..fb375a5 100644 --- a/sc/source/ui/view/viewdata.cxx +++ b/sc/source/ui/view/viewdata.cxx @@ -1513,13 +1513,14 @@ Point ScViewData::GetScrPos( SCCOL nWhereX, SCROW nWhereY, ScSplitPos eWhich, } sal_uInt16 nTSize; + bool bIsTiledRendering = GetDocument()->GetDrawLayer()->isTiledRendering(); SCCOL nPosX = GetPosX(eWhichX); SCCOL nX; long nScrPosX=0; if (nWhereX >= nPosX) - for (nX=nPosX; nX<nWhereX && (bAllowNeg || nScrPosX<=aScrSize.Width()); nX++) + for (nX = nPosX; nX < nWhereX && (bAllowNeg || bIsTiledRendering || nScrPosX <= aScrSize.Width()); nX++) { if ( nX > MAXCOL ) nScrPosX = 65535; @@ -1550,7 +1551,7 @@ Point ScViewData::GetScrPos( SCCOL nWhereX, SCROW nWhereY, ScSplitPos eWhich, long nScrPosY=0; if (nWhereY >= nPosY) - for (nY=nPosY; nY<nWhereY && (bAllowNeg || nScrPosY<=aScrSize.Height()); nY++) + for (nY = nPosY; nY < nWhereY && (bAllowNeg || bIsTiledRendering || nScrPosY <= aScrSize.Height()); nY++) { if ( nY > MAXROW ) nScrPosY = 65535; @@ -1591,8 +1592,14 @@ Point ScViewData::GetScrPos( SCCOL nWhereX, SCROW nWhereY, ScSplitPos eWhich, nScrPosX = aScrSize.Width() - 1 - nScrPosX; } - if (nScrPosX > 32767) nScrPosX=32767; - if (nScrPosY > 32767) nScrPosY=32767; + if (!bIsTiledRendering) + { + if (nScrPosX > 32767) + nScrPosX = 32767; + if (nScrPosY > 32767) + nScrPosY = 32767; + } + return Point( nScrPosX, nScrPosY ); } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits