ubuntu-touch-coreapps-reviewers team mailing list archive
-
ubuntu-touch-coreapps-reviewers team
-
Mailing list archive
-
Message #06069
[Merge] lp:~verzegnassi-stefano/ubuntu-docviewer-app/reboot-lok-dont-be-dumb into lp:ubuntu-docviewer-app/reboot
Stefano Verzegnassi has proposed merging lp:~verzegnassi-stefano/ubuntu-docviewer-app/reboot-lok-dont-be-dumb into lp:ubuntu-docviewer-app/reboot with lp:~verzegnassi-stefano/ubuntu-docviewer-app/fix-1515037 as a prerequisite.
Commit message:
LibreofficeKit-qml-plugin:
* Fix wrong size for last tile in a row/column
* Don't create tiles outside the visible/buffer grid (i.e. wrong size for m_visibleArea and m_gridArea)
Requested reviews:
Ubuntu Document Viewer Developers (ubuntu-docviewer-dev)
Related bugs:
Bug #1516239 in Ubuntu Document Viewer App: "Last tile in a row/column has a wrong size"
https://bugs.launchpad.net/ubuntu-docviewer-app/+bug/1516239
Bug #1516241 in Ubuntu Document Viewer App: "LO-viewer creates tiles outside the visible/buffer grid"
https://bugs.launchpad.net/ubuntu-docviewer-app/+bug/1516241
For more details, see:
https://code.launchpad.net/~verzegnassi-stefano/ubuntu-docviewer-app/reboot-lok-dont-be-dumb/+merge/277816
LibreofficeKit-qml-plugin:
* Fix wrong size for last tile in a row/column
* Don't create tiles outside the visible/buffer grid (i.e. wrong size for m_visibleArea and m_gridArea)
--
Your team Ubuntu Document Viewer Developers is requested to review the proposed merge of lp:~verzegnassi-stefano/ubuntu-docviewer-app/reboot-lok-dont-be-dumb into lp:ubuntu-docviewer-app/reboot.
=== modified file 'src/plugin/libreofficetoolkit-qml-plugin/loview.cpp'
--- src/plugin/libreofficetoolkit-qml-plugin/loview.cpp 2015-10-18 21:27:16 +0000
+++ src/plugin/libreofficetoolkit-qml-plugin/loview.cpp 2015-11-18 12:50:41 +0000
@@ -238,17 +238,24 @@
}
}
- // Update information about the visible area
- m_visibleArea.setRect(m_parentFlickable->property("contentX").toInt(),
- m_parentFlickable->property("contentY").toInt(),
- m_parentFlickable->width(),
- m_parentFlickable->height());
-
- // Update information about the buffer area
- m_bufferArea.setRect(qMax(0, m_visibleArea.x() - m_cacheBuffer),
- qMax(0, m_visibleArea.y() - m_cacheBuffer),
- qMin(int(this->width() - m_bufferArea.x()), m_visibleArea.width() + (m_cacheBuffer * 2)),
- qMin(int(this->height() - m_bufferArea.y()), m_visibleArea.height() + (m_cacheBuffer * 2)));
+ // Just for convenience.
+ QRect documentRect(this->boundingRect().toRect());
+
+ // Update visible area
+ QRect visibleRect(m_parentFlickable->property("contentX").toInt(),
+ m_parentFlickable->property("contentY").toInt(),
+ m_parentFlickable->width(),
+ m_parentFlickable->height());
+
+ m_visibleArea = visibleRect.intersected(documentRect);
+
+ // Update buffer area
+ QRect bufferRect(m_visibleArea.left() - m_cacheBuffer,
+ m_visibleArea.top() - m_cacheBuffer,
+ m_visibleArea.width() + (m_cacheBuffer * 2),
+ m_visibleArea.height() + (m_cacheBuffer * 2));
+
+ m_bufferArea = bufferRect.intersected(documentRect);
// Delete tiles that are outside the loading area
if (!m_tiles.isEmpty()) {
@@ -273,21 +280,9 @@
}
}
- /*
- FIXME: It seems that LOView loads more tiles than necessary.
- This can be easily tested with DEBUG_SHOW_TILE_BORDER enabled.
-
- Step to reproduce:
- 1) Open Document Viewer
- 2) Resize the window, BEFORE opening any LibreOffice document
- (Trying to resize the window or scrolling the Flickable when the
- document is already loaded causes bad flickering)
- 3) Outside the document area, at the bottom-right corner, there are
- a few tiles that should not be visible/rendered/generated.
- */
-
// Number of tiles per row
int tilesPerWidth = qCeil(this->width() / TILE_SIZE);
+ int tilesPerHeight = qCeil(this->height() / TILE_SIZE);
// Get indexes for visible tiles
int visiblesFromWidth = int(m_visibleArea.left() / TILE_SIZE);
@@ -301,18 +296,35 @@
int bufferToWidth = qCeil(qreal(m_bufferArea.right()) / TILE_SIZE);
int bufferToHeight = qCeil(qreal(m_bufferArea.bottom()) / TILE_SIZE);
- this->generateTiles(visiblesFromWidth, visiblesFromHeight, visiblesToWidth, visiblesToHeight, tilesPerWidth);
- this->generateTiles(bufferFromWidth, bufferFromHeight, bufferToWidth, bufferToHeight, tilesPerWidth);
+#ifdef DEBUG_VERBOSE
+ qDebug() << "Visible area - Left:" << visiblesFromWidth << "Right:" << visiblesToWidth << "Top:" << visiblesFromHeight << "Bottom:" << visiblesToHeight;
+ qDebug() << "Buffer area - Left:" << bufferFromWidth << "Right:" << bufferToWidth << "Top:" << bufferFromHeight << "Bottom:" << bufferToHeight;
+#endif
+
+ this->generateTiles(visiblesFromWidth, visiblesFromHeight, visiblesToWidth, visiblesToHeight, tilesPerWidth, tilesPerHeight);
+ this->generateTiles(bufferFromWidth, bufferFromHeight, bufferToWidth, bufferToHeight, tilesPerWidth, tilesPerHeight);
}
-void LOView::generateTiles(int x1, int y1, int x2, int y2, int tilesPerWidth)
+void LOView::generateTiles(int x1, int y1, int x2, int y2, int tilesPerWidth, int tilesPerHeight)
{
for (int x = x1; x < x2; x++) {
for (int y = y1; y < y2; y++) {
- QRect tileRect(x * TILE_SIZE, y * TILE_SIZE, TILE_SIZE, TILE_SIZE);
- int index = y * tilesPerWidth + x;
-
- this->createTile(index, tileRect);
+ bool lastRow = (y == (tilesPerHeight - 1));
+ bool lastColumn = (x == (tilesPerWidth - 1));
+
+ int left = TILE_SIZE * x;
+ int top = TILE_SIZE * y;
+ int width = lastColumn ? this->width() - left : TILE_SIZE;
+ int height = lastRow ? this->height() - top : TILE_SIZE;
+
+ QRect tileRect(left, top, width, height);
+ int index = x + tilesPerWidth * y;
+
+ createTile(index, tileRect);
+
+#ifdef DEBUG_VERBOSE
+ qDebug() << "Generating tile - Index:" << index << "X:" << x << "Y:" << y;
+#endif
}
}
}
@@ -327,7 +339,7 @@
{
if (!m_tiles.contains(index)) {
#ifdef DEBUG_VERBOSE
- qDebug() << "Creating tile indexed as" << index;
+ qDebug() << "Creating tile indexed as" << index << "- Rect:" << rect;
#endif
auto tile = new SGTileItem(rect, m_zoomFactor, RenderEngine::getNextId(), this);
=== modified file 'src/plugin/libreofficetoolkit-qml-plugin/loview.h'
--- src/plugin/libreofficetoolkit-qml-plugin/loview.h 2015-10-11 11:27:29 +0000
+++ src/plugin/libreofficetoolkit-qml-plugin/loview.h 2015-11-18 12:50:41 +0000
@@ -103,7 +103,7 @@
QMap<int, SGTileItem*> m_tiles;
- void generateTiles(int x1, int y1, int x2, int y2, int tilesPerWidth);
+ void generateTiles(int x1, int y1, int x2, int y2, int tilesPerWidth, int tilesPerHeight);
void createTile(int index, QRect rect);
void setZoomMode(const ZoomMode zoomMode);
bool updateZoomIfAutomatic();
Follow ups