diff --git a/src/control/FullscreenHandler.cpp b/src/control/FullscreenHandler.cpp index b5256fb1..4725dd0b 100644 --- a/src/control/FullscreenHandler.cpp +++ b/src/control/FullscreenHandler.cpp @@ -21,33 +21,14 @@ void FullscreenHandler::hideWidget(MainWindow* win, const string& widgetName) { } if ("mainMenubar" == widgetName) { - // If the menu is hidden, shortcuts are not working anymore - // therefore the menu is not hidden, it's displayed, but invisible - // this costs 1px at the bottom, even if the preferred size is 0px, - // 1px is used by GTK - GtkWidget* mainMenubar = win->get("mainMenubar"); - GtkWidget* mainBox = win->get("mainBox"); if (mainMenubar == nullptr || !gtk_widget_is_visible(mainMenubar)) { // Menu not visible (global menu or something like this) return; } - - // Remove menu from parent - gtk_container_remove(GTK_CONTAINER(gtk_widget_get_parent(mainMenubar)), mainMenubar); - - GtkWidget* fix = gtk_invisible_new(); - - gtk_widget_set_size_request(fix, 0, 0); - gtk_fixed_put(GTK_FIXED(fix), mainMenubar, 0, 0); - - gtk_widget_show(fix); - - gtk_box_pack_end(GTK_BOX(mainBox), fix, false, false, 0); - + gtk_widget_hide(mainMenubar); menubarHidden = true; - return; } } @@ -76,23 +57,9 @@ void FullscreenHandler::disableFullscreen(MainWindow* win) { if (this->menubarHidden) { GtkWidget* mainMenubar = win->get("mainMenubar"); - GtkWidget* mainBox = win->get("mainBox"); - - GtkWidget* parent = gtk_widget_get_parent(mainMenubar); - - // Remove menu from parent - gtk_container_remove(GTK_CONTAINER(parent), mainMenubar); - gtk_box_pack_start(GTK_BOX(mainBox), mainMenubar, false, true, 0); - - - GValue value = G_VALUE_INIT; - g_value_init(&value, G_TYPE_INT); - g_value_set_int(&value, 0); - gtk_container_child_set_property(GTK_CONTAINER(mainBox), mainMenubar, "position", &value); - - // not needed, will be recreated next time - gtk_widget_destroy(parent); - + if (mainMenubar != nullptr) { + gtk_widget_show(mainMenubar); + } menubarHidden = false; } } diff --git a/src/control/zoom/ZoomControl.cpp b/src/control/zoom/ZoomControl.cpp index 52e3a579..b0294d3c 100644 --- a/src/control/zoom/ZoomControl.cpp +++ b/src/control/zoom/ZoomControl.cpp @@ -142,6 +142,8 @@ void ZoomControl::setZoom100Value(double zoom100Val) { auto ZoomControl::updateZoomFitValue(size_t pageNo) -> bool { return updateZoomFitValue(getVisibleRect(), pageNo); } +constexpr double SPACE_FOR_SCROLLBARS = 10.0; + auto ZoomControl::updateZoomFitValue(const Rectangle& widget_rect, size_t pageNo) -> bool { if (pageNo == 0) { pageNo = view->getCurrentPage(); @@ -151,7 +153,7 @@ auto ZoomControl::updateZoomFitValue(const Rectangle& widget_rect, size_ return false; } - double zoom_fit_width = widget_rect.width / (page->getWidth() + 20.0); + double zoom_fit_width = widget_rect.width / (page->getWidth() + SPACE_FOR_SCROLLBARS); if (zoom_fit_width < this->zoomMin || zoom_fit_width > this->zoomMax) { return false; } @@ -174,8 +176,8 @@ auto ZoomControl::updateZoomPresentationValue(size_t pageNo) -> bool { } Rectangle widget_rect = getVisibleRect(); - double zoom_fit_width = widget_rect.width / (page->getWidth() + 14.0); - double zoom_fit_height = widget_rect.height / (page->getHeight() + 14.0); + double zoom_fit_width = widget_rect.width / page->getWidth(); + double zoom_fit_height = widget_rect.height / page->getHeight(); double zoom_presentation = zoom_fit_width < zoom_fit_height ? zoom_fit_width : zoom_fit_height; if (zoom_presentation < this->zoomMin) { return false; @@ -243,13 +245,9 @@ void ZoomControl::setZoomPresentationMode(bool isZoomPresentationMode) { auto ZoomControl::isZoomPresentationMode() const -> bool { return this->zoomPresentationMode; } -void ZoomControl::setZoomStep(double zoomStep) { - this->zoomStep = zoomStep * this->zoom100Value; -} +void ZoomControl::setZoomStep(double zoomStep) { this->zoomStep = zoomStep * this->zoom100Value; } -void ZoomControl::setZoomStepScroll(double zoomStep) { - this->zoomStepScroll = zoomStep * this->zoom100Value; -} +void ZoomControl::setZoomStepScroll(double zoomStep) { this->zoomStepScroll = zoomStep * this->zoom100Value; } void ZoomControl::pageSizeChanged(size_t page) { updateZoomPresentationValue(page); diff --git a/src/gui/Layout.cpp b/src/gui/Layout.cpp index e346f93b..897bd3bf 100644 --- a/src/gui/Layout.cpp +++ b/src/gui/Layout.cpp @@ -133,6 +133,17 @@ inline auto sumIf(size_t base, size_t addend, bool predicate) -> size_t { void Layout::recalculate() { + size_t padding = 0; + size_t paddingBetween = 0; + size_t roomForShadow = 0; + + if (!view->getControl()->getZoomControl()->isZoomPresentationMode()) { + padding = XOURNAL_PADDING; + paddingBetween = XOURNAL_PADDING_BETWEEN; + roomForShadow = XOURNAL_ROOM_FOR_SHADOW; + } + + auto* settings = view->getControl()->getSettings(); size_t len = view->viewPages.size(); mapper.configureFromSettings(len, settings); @@ -152,13 +163,11 @@ void Layout::recalculate() { } // add space around the entire page area to accomodate older Wacom tablets with limited sense area. - size_t const vPadding = - sumIf(XOURNAL_PADDING, settings->getAddVerticalSpaceAmount(), settings->getAddVerticalSpace()); - size_t const hPadding = - sumIf(XOURNAL_PADDING, settings->getAddHorizontalSpaceAmount(), settings->getAddHorizontalSpace()); + size_t const vPadding = sumIf(padding, settings->getAddVerticalSpaceAmount(), settings->getAddVerticalSpace()); + size_t const hPadding = sumIf(padding, settings->getAddHorizontalSpaceAmount(), settings->getAddHorizontalSpace()); - minWidth = 2 * hPadding + (widthCols.size() - 1) * XOURNAL_PADDING_BETWEEN; - minHeight = 2 * vPadding + (heightRows.size() - 1) * XOURNAL_PADDING_BETWEEN; + minWidth = 2 * hPadding + (widthCols.size() - 1) * paddingBetween; + minHeight = 2 * vPadding + (heightRows.size() - 1) * paddingBetween; minWidth = std::accumulate(begin(widthCols), end(widthCols), minWidth); minHeight = std::accumulate(begin(heightRows), end(heightRows), minHeight); @@ -173,6 +182,16 @@ void Layout::layoutPages(int width, int height) { } valid = false; + size_t padding = 0; + size_t paddingBetween = 0; + size_t roomForShadow = 0; + + if (!view->getControl()->getZoomControl()->isZoomPresentationMode()) { + padding = XOURNAL_PADDING; + paddingBetween = XOURNAL_PADDING_BETWEEN; + roomForShadow = XOURNAL_ROOM_FOR_SHADOW; + } + size_t const len = this->view->viewPages.size(); Settings* settings = this->view->getControl()->getSettings(); @@ -184,10 +203,9 @@ void Layout::layoutPages(int width, int height) { // add space around the entire page area to accomodate older Wacom tablets with limited sense area. - int64_t const v_padding = - sumIf(XOURNAL_PADDING, settings->getAddVerticalSpaceAmount(), settings->getAddVerticalSpace()); + int64_t const v_padding = sumIf(padding, settings->getAddVerticalSpaceAmount(), settings->getAddVerticalSpace()); int64_t const h_padding = - sumIf(XOURNAL_PADDING, settings->getAddHorizontalSpaceAmount(), settings->getAddHorizontalSpace()); + sumIf(padding, settings->getAddHorizontalSpaceAmount(), settings->getAddHorizontalSpace()); int64_t const centeringXBorder = static_cast(width - minWidth) / 2; int64_t const centeringYBorder = static_cast(height - minHeight) / 2; @@ -221,15 +239,15 @@ void Layout::layoutPages(int width, int height) { // pair pages mode if (c % 2 == 0) { // align right - paddingLeft = XOURNAL_PADDING_BETWEEN - XOURNAL_ROOM_FOR_SHADOW + columnPadding; - paddingRight = XOURNAL_ROOM_FOR_SHADOW; + paddingLeft = paddingBetween - roomForShadow + columnPadding; + paddingRight = roomForShadow; } else { // align left - paddingLeft = XOURNAL_ROOM_FOR_SHADOW; - paddingRight = XOURNAL_PADDING_BETWEEN - XOURNAL_ROOM_FOR_SHADOW + columnPadding; + paddingLeft = roomForShadow; + paddingRight = paddingBetween - roomForShadow + columnPadding; } - } else { // not paired page mode - center - paddingLeft = XOURNAL_PADDING_BETWEEN / 2 + columnPadding / 2; // center justify - paddingRight = XOURNAL_PADDING_BETWEEN - paddingLeft + columnPadding / 2; + } else { // not paired page mode - center + paddingLeft = paddingBetween / 2 + columnPadding / 2; // center justify + paddingRight = paddingBetween - paddingLeft + columnPadding / 2; } x += paddingLeft; @@ -240,23 +258,23 @@ void Layout::layoutPages(int width, int height) { x += vDisplayWidth + paddingRight; } } else { - x += this->widthCols[c] + XOURNAL_PADDING_BETWEEN; + x += this->widthCols[c] + paddingBetween; } } x = borderX; - y += this->heightRows[r] + XOURNAL_PADDING_BETWEEN; + y += this->heightRows[r] + paddingBetween; } int64_t totalWidth = borderX; for (auto&& widthCol: this->widthCols) { // accumulated - absolute pixel location for use by getViewAt() and updateVisibility() - totalWidth += widthCol + XOURNAL_PADDING_BETWEEN; + totalWidth += widthCol + paddingBetween; widthCol = totalWidth; } int64_t totalHeight = borderY; for (auto&& heightRow: this->heightRows) { - totalHeight += heightRow + XOURNAL_PADDING_BETWEEN; + totalHeight += heightRow + paddingBetween; heightRow = totalHeight; } } @@ -285,8 +303,9 @@ void Layout::scrollAbs(double x, double y) { void Layout::ensureRectIsVisible(int x, int y, int width, int height) { - gtk_adjustment_clamp_page(scrollHandling->getHorizontal(), x - 5, x + width + 10); - gtk_adjustment_clamp_page(scrollHandling->getVertical(), y - 5, y + height + 10); + int offset = (this->view->getControl()->getSettings()->isPresentationMode()) ? 0 : XOURNAL_PADDING / 2; + gtk_adjustment_clamp_page(scrollHandling->getHorizontal(), x - offset, x + width + 2 * offset); + gtk_adjustment_clamp_page(scrollHandling->getVertical(), y - offset, y + height + 2 * offset); } diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index a35e483f..8b4b9423 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -497,11 +497,6 @@ auto MainWindow::onKeyPressCallback(GtkWidget* widget, GdkEventKey* event, MainW // editing text - give that control return false; } - if (event->keyval == GDK_KEY_Escape) { - win->getControl()->getSearchBar()->showSearchBar(false); - return true; - } - return false; } diff --git a/src/gui/XournalView.cpp b/src/gui/XournalView.cpp index d41fae7d..86982453 100644 --- a/src/gui/XournalView.cpp +++ b/src/gui/XournalView.cpp @@ -139,6 +139,8 @@ auto XournalView::onKeyPressEvent(GdkEventKey* event) -> bool { if (event->keyval == GDK_KEY_Escape) { if (control->isFullscreen()) { control->setFullscreen(false); + control->setViewPresentationMode(false); + control->getWindow()->setToolbarVisible(true); return true; } } @@ -148,6 +150,7 @@ auto XournalView::onKeyPressEvent(GdkEventKey* event) -> bool { if (!control->isFullscreen()) { control->setViewPresentationMode(true); control->setFullscreen(true); + control->getWindow()->setToolbarVisible(false); return true; } } diff --git a/src/gui/widgets/XournalWidget.cpp b/src/gui/widgets/XournalWidget.cpp index b28de485..16d8b2c1 100644 --- a/src/gui/widgets/XournalWidget.cpp +++ b/src/gui/widgets/XournalWidget.cpp @@ -301,7 +301,9 @@ static auto gtk_xournal_draw(GtkWidget* widget, cairo_t* cr) -> gboolean { continue; } - gtk_xournal_draw_shadow(xournal, cr, px, py, pw, ph, pv->isSelected()); + if (!xournal->view->getControl()->getZoomControl()->isZoomPresentationMode()) { + gtk_xournal_draw_shadow(xournal, cr, px, py, pw, ph, pv->isSelected()); + } cairo_save(cr); cairo_translate(cr, px, py); diff --git a/ui/main.glade b/ui/main.glade index 0128b18c..cb8097b0 100644 --- a/ui/main.glade +++ b/ui/main.glade @@ -2284,7 +2284,7 @@ searchBar - True + False False vertical