In the case we want to automatically set the position by by passing -1
to position_set, we better tell it the page before.
Signed-off-by: Sebastian Ramacher <sebastian+dev@ramacher.at>
We now use the data available on the document object to compute the
exact positioning of the link target.
This way we get rid of page_calculate_offset, which uses explicit GTK
calls.
The plan is to put in adjustment.c every piece of code that has to do
with document positioning, either computing it from data on the document
side, or talking to GTK.
We want to have at our disposal functions to compute sizes and positions
without having to ask for it to a GTK widget. The new functions are:
- move page_calc_height_width to adjustment.c
- add page_calc_position that rotates a position relative to a page
according to the rotation settings.
- add position_to_page_number that computes the number of a page
sitting at a given position (given in document-relative coordinates)
- add page_number_to_position that computes the position (in document
relative coordinates) that will be placed at the center of the viewport.
- add page_is_visible that checks whether the given page intersects the
viewport.
This is just in case that zathura_link_evaluate returns without evaluating the
link, which would result in a new jump being added for the current position,
but without adding a corresponding jump for the target position (actually a
second one would be added but the check in zathura_jumplist_add would prevent
it from being appended on the linked list since it's position would be the same
as the current one, because the link haven't been evaluated).
Signed-off-by: Sebastian Ramacher <sebastian+dev@ramacher.at>
- Don't delete the elements on the right of the current one, when
appending a new jump to the jumplist, because this makes no sense at
all; the point of the jumplist in the first place is to remember
previously jumped-to positions in the document, so there is no need
to delete anythings except to trim the oldest entries from the
beginning to maintain the maximum size. This also makes us compatible
with the Vim way of doing things.
- Make the jumplist mechanism functional on the same page; if we
followed a link to a target on the same page, remember the
adjustments before and after following the link. The same holds for
navigating search results on the same page.
- Implement position_set and use it instead of position_set_delayed
when following links in order to give zathura_jumplist_save a chance
to record the exact adjustments of the link target. Otherwise, it
will always record the adjustments after going to the target page,
but before going to the exact position within it.
- Don't consider movements with ^i and ^o as jumps :)
- Don't use page_set followed by setting the adjustments in
sc_jumplist, because this is redundant and causes clutter when using
^i and ^o, as the adjustments is set twice this way (once in page_set
and again in position_set_delayed). It's enough to only update the
page number on the statusbar and then set the adjustments.
- Hide implementation details (zathura_jumplist_save and
zathura_jumplist_append), and make things more consistent by
exporting and using only zathura_jumplist_add for adding new entries.
The end result: A more slick jumping experience :-)
Signed-off-by: Sebastian Ramacher <sebastian+dev@ramacher.at>
Added config parameter "link-hadjust" with default value true. When set to false,
following internal links do not change the horizontal position of the page, only
the vertical position.
Also updates page number when following links, now.
Signed-off-by: Sebastian Ramacher <sebastian+dev@ramacher.at>
This is useful when the text of the link doesn't match its target. The
default key is set to 'F'.
See issue 266 <http://bugs.pwmt.org/issue266>.
Reported-by: Iron <o380770@rtrtr.com>
Signed-off-by: Sebastian Ramacher <sebastian+dev@ramacher.at>