From 42ddc3073ecb88271a0ffc74326878627d71b34e Mon Sep 17 00:00:00 2001 From: Martin Kretzschmar Date: Tue, 15 Feb 2005 08:26:23 +0000 Subject: add parameters providing allocation width and height without scrollbars * shell/ev-view.c (ev_view_best_fit, ev_view_fit_width): add parameters providing allocation width and height without scrollbars and width of a possible vertical scrollbar. With this additional information the functions can work as intended. Unfortunately they're not idempotent. We should transform these commands to toggles. Fixes Bug #164976 Initial patch by Stephane Loeuillet, then heavily modified. * shell/ev-view.h: update prototypes. * shell/ev-window.c (ev_window_cmd_view_best_fit) (ev_window_cmd_view_page_width): provide EvView fit functions with all the information they need. Formulas to calculate this information taken from GtkScrolledWindow. --- (limited to 'shell/ev-window.c') diff --git a/shell/ev-window.c b/shell/ev-window.c index a1d74f6..547eaf0 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -1197,17 +1197,49 @@ ev_window_cmd_view_normal_size (GtkAction *action, EvWindow *ev_window) static void ev_window_cmd_view_best_fit (GtkAction *action, EvWindow *ev_window) { + EvWindowPrivate *priv = ev_window->priv; + int width, height; + g_return_if_fail (EV_IS_WINDOW (ev_window)); - ev_view_best_fit (EV_VIEW (ev_window->priv->view)); + width = priv->scrolled_window->allocation.width; + height = priv->scrolled_window->allocation.height; + + /* the scrolled window has a GTK_SHADOW_IN */ + width -= 2 * priv->view->style->xthickness; + height -= 2 * priv->view->style->ythickness; + + ev_view_best_fit (EV_VIEW (priv->view), + MAX (1, width), MAX (1, height)); } static void ev_window_cmd_view_page_width (GtkAction *action, EvWindow *ev_window) { + EvWindowPrivate *priv = ev_window->priv; + int width, height; + GtkRequisition vsb_requisition; + int scrollbar_spacing; + g_return_if_fail (EV_IS_WINDOW (ev_window)); - ev_view_fit_width (EV_VIEW (ev_window->priv->view)); + width = priv->scrolled_window->allocation.width; + height = priv->scrolled_window->allocation.height; + + /* the scrolled window has a GTK_SHADOW_IN */ + width -= 2 * priv->view->style->xthickness; + height -= 2 * priv->view->style->ythickness; + + gtk_widget_size_request ( + GTK_SCROLLED_WINDOW (priv->scrolled_window)->vscrollbar, + &vsb_requisition); + gtk_widget_style_get (priv->scrolled_window, + "scrollbar_spacing", &scrollbar_spacing, + NULL); + + ev_view_fit_width (EV_VIEW (ev_window->priv->view), + width, height, + vsb_requisition.width + scrollbar_spacing); } static void -- cgit v0.9.1