From c624c378b6a4e5ed85bf21c8657a18c6a29fc4bd Mon Sep 17 00:00:00 2001 From: JJones780 Date: Tue, 29 Jan 2019 05:14:09 -0700 Subject: [PATCH] initial multi-column checkin - beta. Presentation mode not working. Check dpi settings. My 4k + 1080p zoomed out display config might be confusing it? --- src/gui/Layout.cpp | 137 +++++++++++++++++---------------------------- 1 file changed, 50 insertions(+), 87 deletions(-) diff --git a/src/gui/Layout.cpp b/src/gui/Layout.cpp index ac830863..c90b13c9 100644 --- a/src/gui/Layout.cpp +++ b/src/gui/Layout.cpp @@ -178,6 +178,11 @@ double Layout::getLayoutWidth() */ const int XOURNAL_PADDING = 10; +/** + * Allowance for shadow between page pairs in dual mode + */ +const int XOURNAL_ROOM_FOR_SHADOW = 3; + /** * Padding between the pages */ @@ -195,26 +200,31 @@ void Layout::layoutPages() bool verticalSpace = settings->getAddVerticalSpace(); bool horizontalSpace = settings->getAddHorizontalSpace(); bool dualPage = settings->isShowTwoPages(); + int columns = 5; + int dualoffset = 0; - int size[2] = { 0, 0 }; + int size[columns]; + for ( int i =0; i< columns; i++){ size[i] = 0; } - // we need at least 2 page for dual page view - if (len < 2) + + if (len < columns) { - dualPage = false; + columns = len; } // calculate maximum size for (int i = 0; i < len; i++) { XojPageView* v = this->view->viewPages[i]; - - int rId = 0; - if (dualPage && i % 2 == 1) + + if (dualPage && len >1) //offset 1st page { - rId = 1; + int future_prefs_setting_offset = 3; //TODO TODO TODO TODO TODO TODO TODO + dualoffset = MIN(MIN(future_prefs_setting_offset,columns-1),len); } + int rId = (i+ dualoffset) % columns; + if (size[rId] < v->getDisplayWidth()) { size[rId] = v->getDisplayWidth(); @@ -227,15 +237,13 @@ void Layout::layoutPages() y += XOURNAL_PADDING; - int width = XOURNAL_PADDING + size[0]; - if (dualPage) - { - width += XOURNAL_PADDING_BETWEEN + size[1] + XOURNAL_PADDING; - } - else - { - width += XOURNAL_PADDING; - } + int width = XOURNAL_PADDING *2 + ( columns>1?(columns-1):0 ) * XOURNAL_PADDING_BETWEEN; + for (int c = 0; cview->viewPages[i]; int height = 0; - - if (dualPage) { - /* - * Align the left page right and the right page left, like this - * (first page at right) - * - * [===] - * [==] [=] - * [===] [===] - */ - if (i == 0) - { - int x = XOURNAL_PADDING + size[0] + XOURNAL_PADDING_BETWEEN; - - v->layout.setX(x); - v->layout.setY(y); - v->layout.setMarginLeft(marginLeft); - v->layout.setMarginTop(marginTop); - - height = v->getDisplayHeight(); + int paddingoffset; + int paddingremains; + if (dualPage && len >1){ // dual page mode... + if ((i+dualoffset)%2 == 0 ) paddingoffset = XOURNAL_PADDING_BETWEEN - XOURNAL_ROOM_FOR_SHADOW; //right justify left pages + else paddingoffset = XOURNAL_ROOM_FOR_SHADOW; // left justify right pages } - else - { - XojPageView* v2 = NULL; - height = v->getDisplayHeight(); - - if (i + 1 < len) - { - i++; - - v2 = this->view->viewPages[i]; - if (height < v2->getDisplayHeight()) - { - height = v2->getDisplayHeight(); - } - } - - // left page, align right - int x1 = XOURNAL_PADDING + (size[0] - v->getDisplayWidth()); - v->layout.setX(x1); - v->layout.setY(y); - v->layout.setMarginLeft(marginLeft); - v->layout.setMarginTop(marginTop); - - // if right page available, align left - if (v2 != NULL) - { - int x2 = XOURNAL_PADDING + size[0] + XOURNAL_PADDING_BETWEEN; - - v2->layout.setX(x2); - v2->layout.setY(y); - v2->layout.setMarginLeft(marginLeft); - v2->layout.setMarginTop(marginTop); - } + else{ + paddingoffset = XOURNAL_PADDING_BETWEEN/2; //center justify } - } - else - { - /* - * Center vertically, like this - * - * [=] - * [===] - * [===] - * [=] - */ - int x = (size[0] - v->getDisplayWidth()) / 2 + XOURNAL_PADDING; + paddingremains = XOURNAL_PADDING_BETWEEN - paddingoffset; + x += (size[(i+dualoffset)%columns] - v->getDisplayWidth() ) / 2 + paddingoffset; + g_message("other columns x = %d ", x); + + v->layout.setX(x); v->layout.setY(y); v->layout.setMarginLeft(marginLeft); v->layout.setMarginTop(marginTop); - height = v->getDisplayHeight(); + height = v->getDisplayHeight(); + x += v->getDisplayWidth() + paddingremains; + } + + + if( (i+dualoffset)%columns +1 == columns || i == len -1 ){ // end of row or last page of document + y += height; + + y += XOURNAL_PADDING_BETWEEN + verticalSpaceBetweenSlides; + + x = 0; // new row } - - y += height; - - y += XOURNAL_PADDING_BETWEEN + verticalSpaceBetweenSlides; } int height = 2 * marginTop + XOURNAL_PADDING + y + XOURNAL_PADDING;