mirror of
https://git.pwmt.org/pwmt/zathura.git
synced 2024-12-27 13:36:00 +01:00
Smooth scrolling
With this commit it is possible to activate a smoother scrolling by setting smooth_scrolling in the zathurarc file to e.g. 2.0.
This commit is contained in:
parent
9bb9e495f6
commit
d4dd021eab
2 changed files with 38 additions and 16 deletions
|
@ -6,6 +6,7 @@ float zoom_min = 10;
|
|||
float zoom_max = 400;
|
||||
float scroll_step = 40;
|
||||
float transparency = 0.4;
|
||||
float smooth_scrolling = 0.0;
|
||||
|
||||
/* completion */
|
||||
static const char FORMAT_COMMAND[] = "<b>%s</b>";
|
||||
|
@ -82,7 +83,6 @@ Shortcut shortcuts[] = {
|
|||
{0, GDK_K, sc_navigate, NORMAL, { PREVIOUS } },
|
||||
{GDK_MOD1_MASK, GDK_Right, sc_navigate, NORMAL, { NEXT } },
|
||||
{GDK_MOD1_MASK, GDK_Left, sc_navigate, NORMAL, { PREVIOUS } },
|
||||
{0, GDK_space, sc_navigate, NORMAL, { NEXT } },
|
||||
{0, GDK_Left, sc_navigate, FULLSCREEN, { PREVIOUS } },
|
||||
{0, GDK_Up, sc_navigate, FULLSCREEN, { PREVIOUS } },
|
||||
{0, GDK_Down, sc_navigate, FULLSCREEN, { NEXT } },
|
||||
|
@ -111,6 +111,7 @@ Shortcut shortcuts[] = {
|
|||
{GDK_CONTROL_MASK, GDK_u, sc_scroll, NORMAL, { HALF_UP } },
|
||||
{GDK_CONTROL_MASK, GDK_f, sc_scroll, NORMAL, { FULL_DOWN } },
|
||||
{GDK_CONTROL_MASK, GDK_b, sc_scroll, NORMAL, { FULL_UP } },
|
||||
{0, GDK_space, sc_scroll, NORMAL, { FULL_DOWN } },
|
||||
{0, GDK_O, sc_switch_goto_mode, NORMAL, {0} },
|
||||
{0, GDK_F5, sc_toggle_fullscreen, NORMAL | FULLSCREEN, {0} },
|
||||
{0, GDK_Tab, sc_toggle_index, NORMAL | INDEX, {0} },
|
||||
|
@ -220,6 +221,7 @@ Setting settings[] = {
|
|||
{"show_inputbar", &(Zathura.Global.show_inputbar), 'b', FALSE, TRUE, "Show inputbar"},
|
||||
{"search_highlight", &(search_highlight), 's', FALSE, TRUE, "Highlighted results"},
|
||||
{"select_text", &(select_text), 's', FALSE, TRUE, "Rectangle of the selected text"},
|
||||
{"smooth_scrolling", &(smooth_scrolling), 'f', FALSE, TRUE, "Show scrollbars"},
|
||||
{"statusbar_bgcolor", &(statusbar_bgcolor), 's', FALSE, TRUE, "Statusbar background color"},
|
||||
{"statusbar_fgcolor", &(statusbar_fgcolor), 's', FALSE, TRUE, "Statusbar foreground color"},
|
||||
{"transparency", &(transparency), 'f', FALSE, FALSE, "Transparency of rectangles"},
|
||||
|
|
36
zathura.c
36
zathura.c
|
@ -1866,6 +1866,8 @@ sc_scroll(Argument* argument)
|
|||
gdouble view_size = gtk_adjustment_get_page_size(adjustment);
|
||||
gdouble value = gtk_adjustment_get_value(adjustment);
|
||||
gdouble max = gtk_adjustment_get_upper(adjustment) - view_size;
|
||||
gdouble new_value = value;
|
||||
gboolean static ss = FALSE;
|
||||
|
||||
if((argument->n == UP || argument->n == HALF_UP || argument->n == FULL_UP) && value == 0)
|
||||
{
|
||||
|
@ -1873,30 +1875,48 @@ sc_scroll(Argument* argument)
|
|||
arg.n = PREVIOUS;
|
||||
sc_navigate(&arg);
|
||||
arg.n = BOTTOM;
|
||||
ss = TRUE;
|
||||
sc_scroll(&arg);
|
||||
return;
|
||||
}
|
||||
else if((argument->n == DOWN || argument->n == HALF_DOWN || argument->n == FULL_DOWN) && value == max)
|
||||
{
|
||||
Argument arg;
|
||||
arg.n = NEXT;
|
||||
ss = TRUE;
|
||||
sc_navigate(&arg);
|
||||
return;
|
||||
}
|
||||
else if(argument->n == FULL_UP)
|
||||
gtk_adjustment_set_value(adjustment, (value - view_size) < 0 ? 0 : (value - view_size));
|
||||
new_value = (value - view_size) < 0 ? 0 : (value - view_size);
|
||||
else if(argument->n == FULL_DOWN)
|
||||
gtk_adjustment_set_value(adjustment, (value + view_size) > max ? max : (value + view_size));
|
||||
new_value = (value + view_size) > max ? max : (value + view_size);
|
||||
else if(argument->n == HALF_UP)
|
||||
gtk_adjustment_set_value(adjustment, (value - (view_size / 2)) < 0 ? 0 : (value - (view_size / 2)));
|
||||
new_value = (value - (view_size / 2)) < 0 ? 0 : (value - (view_size / 2));
|
||||
else if(argument->n == HALF_DOWN)
|
||||
gtk_adjustment_set_value(adjustment, (value + (view_size / 2)) > max ? max : (value + (view_size / 2)));
|
||||
new_value = (value + (view_size / 2)) > max ? max : (value + (view_size / 2));
|
||||
else if((argument->n == LEFT) || (argument->n == UP))
|
||||
gtk_adjustment_set_value(adjustment, (value - scroll_step) < 0 ? 0 : (value - scroll_step));
|
||||
new_value = (value - scroll_step) < 0 ? 0 : (value - scroll_step);
|
||||
else if(argument->n == TOP)
|
||||
gtk_adjustment_set_value(adjustment, 0);
|
||||
new_value = 0;
|
||||
else if(argument->n == BOTTOM)
|
||||
gtk_adjustment_set_value(adjustment, max);
|
||||
new_value = max;
|
||||
else
|
||||
gtk_adjustment_set_value(adjustment, (value + scroll_step) > max ? max : (value + scroll_step));
|
||||
new_value = (value + scroll_step) > max ? max : (value + scroll_step);
|
||||
|
||||
if(smooth_scrolling && !ss)
|
||||
{
|
||||
gdouble i;
|
||||
if(new_value > value)
|
||||
for(i = value; (i + smooth_scrolling) < new_value; i += smooth_scrolling)
|
||||
gtk_adjustment_set_value(adjustment, i);
|
||||
else
|
||||
for(i = value; (i + smooth_scrolling) > new_value; i -= smooth_scrolling)
|
||||
gtk_adjustment_set_value(adjustment, i);
|
||||
}
|
||||
|
||||
gtk_adjustment_set_value(adjustment, new_value);
|
||||
ss = FALSE;
|
||||
|
||||
update_status();
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue