We added three options

1) zoom-center :: bool
   zoom-center = false

   If zoom-center = false nothing changes.
   If zoom-center = true zooming respects the horizontal center of the
   pageview. That is, the vertical line dividing the displayed part of
   the document doesn't move within the document.

   Reasoning: When viewing a pdf with a margin we usually want to hide the
   margin at both sides by zooming in.

2) scroll-hstep :: float
   scroll-hstep = -1

   If scroll-hstep < 0 nothing changes.
   If scroll-hstep >= 0 then scroll-hstep defines the scroll step in the
   horizontal direction.

   Reasoning: This allows us to make finer adjustments in the horizontal
   direction without the mouse and without loosing the ablility to
   navigate quickly through the document.

3) search-hadjust :: bool
   search-hadjust = true

   If search-hadjust = true nothing changes.
   If search-hadjust = false searching does not adjust the horizontal
   center of the document when showing search results.

   Reasoning: When viewing a pdf with a margin we usually want to hide
   the margin at both sides by zooming in. The horizontal adjustment
   sometimes hides parts of the document by moving the horizontal
   center.
This commit is contained in:
Julian Orth 2012-05-29 14:22:04 +02:00 committed by Sebastian Ramacher
parent efcdfaefbb
commit 30eda65aaa
4 changed files with 53 additions and 5 deletions

View File

@ -106,6 +106,8 @@ config_load_default(zathura_t* zathura)
girara_setting_add(gsession, "pages-per-row", &int_value, INT, false, _("Number of pages per row"), cb_pages_per_row_value_changed, NULL);
float_value = 40;
girara_setting_add(gsession, "scroll-step", &float_value, FLOAT, false, _("Scroll step"), NULL, NULL);
float_value = -1;
girara_setting_add(gsession, "scroll-hstep", &float_value, FLOAT, false, _("Horizontal scroll step"), NULL, NULL);
int_value = 10;
girara_setting_add(gsession, "zoom-min", &int_value, INT, false, _("Zoom minimum"), NULL, NULL);
int_value = 1000;
@ -129,6 +131,10 @@ config_load_default(zathura_t* zathura)
girara_setting_add(gsession, "scroll-wrap", &bool_value, BOOLEAN, false, _("Wrap scrolling"), NULL, NULL);
bool_value = false;
girara_setting_add(gsession, "advance-pages-per-row", &bool_value, BOOLEAN, false, _("Advance number of pages per row"), NULL, NULL);
bool_value = false;
girara_setting_add(gsession, "zoom-center", &bool_value, BOOLEAN, false, _("Horizontally centered zoom"), NULL, NULL);
bool_value = true;
girara_setting_add(gsession, "search-hadjust", &bool_value, BOOLEAN, false, _("Center result horizontally"), NULL, NULL);
float_value = 0.5;
girara_setting_add(gsession, "highlight-transparency", &float_value, FLOAT, false, _("Transparency for highlighting"), NULL, NULL);
bool_value = true;

View File

@ -548,6 +548,11 @@ sc_scroll(girara_session_t* session, girara_argument_t* argument,
float scroll_step = 40;
girara_setting_get(session, "scroll-step", &scroll_step);
float scroll_hstep = -1;
girara_setting_get(session, "scroll-hstep", &scroll_hstep);
if (scroll_hstep < 0) {
scroll_hstep = scroll_step;
}
int padding = 1;
girara_setting_get(session, "page-padding", &padding);
@ -571,10 +576,14 @@ sc_scroll(girara_session_t* session, girara_argument_t* argument,
new_value = value + ((view_size + padding) / 2);
break;
case LEFT:
new_value = value - scroll_hstep;
break;
case UP:
new_value = value - scroll_step;
break;
case RIGHT:
new_value = value + scroll_hstep;
break;
case DOWN:
new_value = value + scroll_step;
break;
@ -666,12 +675,16 @@ sc_search(girara_session_t* session, girara_argument_t* argument,
page_calculate_offset(zathura, target_page, &offset);
GtkAdjustment* view_vadjustment = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(zathura->ui.session->gtk.view));
GtkAdjustment* view_hadjustment = gtk_scrolled_window_get_hadjustment(GTK_SCROLLED_WINDOW(zathura->ui.session->gtk.view));
int x = offset.x - gtk_adjustment_get_page_size(view_hadjustment) / 2 + rectangle.x1;
int y = offset.y - gtk_adjustment_get_page_size(view_vadjustment) / 2 + rectangle.y1;
set_adjustment(view_hadjustment, x);
set_adjustment(view_vadjustment, y);
bool search_hadjust = true;
girara_setting_get(session, "search-hadjust", &search_hadjust);
if (search_hadjust == true) {
GtkAdjustment* view_hadjustment = gtk_scrolled_window_get_hadjustment(GTK_SCROLLED_WINDOW(zathura->ui.session->gtk.view));
int x = offset.x - gtk_adjustment_get_page_size(view_hadjustment) / 2 + rectangle.x1;
set_adjustment(view_hadjustment, x);
}
}
return false;

10
utils.c
View File

@ -11,6 +11,7 @@
#include <gtk/gtk.h>
#include <girara/session.h>
#include <girara/utils.h>
#include <girara/settings.h>
#include <glib/gi18n.h>
#include "links.h"
@ -312,7 +313,8 @@ zathura_page_get_widget(zathura_t* zathura, zathura_page_t* page)
}
void
readjust_view_after_zooming(zathura_t *zathura, float old_zoom, bool delay) {
readjust_view_after_zooming(zathura_t *zathura, float old_zoom, bool delay)
{
if (zathura == NULL || zathura->document == NULL) {
return;
}
@ -325,6 +327,12 @@ readjust_view_after_zooming(zathura_t *zathura, float old_zoom, bool delay) {
gdouble valx = gtk_adjustment_get_value(hadjustment) / old_zoom * scale;
gdouble valy = gtk_adjustment_get_value(vadjustment) / old_zoom * scale;
bool zoom_center = false;
girara_setting_get(zathura->ui.session, "zoom-center", &zoom_center);
if (zoom_center) {
valx += gtk_adjustment_get_page_size(hadjustment) * (scale / old_zoom - 1) / 2;
}
if (delay == true) {
position_set_delayed(zathura, valx, valy);
} else {

View File

@ -570,6 +570,13 @@ Defines if the "Loading..." text should be displayed if a page is rendered.
* Value type: Boolean
* Default value: true
scroll-hstep
^^^^^^^^^^^^
Defines the horizontal step size of scrolling by calling the scroll command once
* Value-type: Float
* Default value: -1
scroll-step
^^^^^^^^^^^
Defines the step size of scrolling by calling the scroll command once
@ -584,6 +591,20 @@ Defines if the last/first page should be wrapped
* Value type: Boolean
* Default value: false
search-hadjust
^^^^^^^^^^^^^^
En/Disables horizontally centered search results
* Value-type: Boolean
* Default value: true
zoom-center
^^^^^^^^^^^
En/Disables horizontally centered zooming
* Value-type: Bool
* Default value: False
zoom-max
^^^^^^^^
Defines the maximum percentage that the zoom level can be