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.
The document object now has functions to set and get the position and
the viewport size.
The position is a relative position with respect to the size of the
entire document, i.e. position_y=0 means top of the document and
position_y=1 bottom.
The viewport size is stored in screen coordinates, in pixels.
All of those callbacks are conceptually related (change the page
layout), and depend from one another.
Now the single callback page_layout_value_changed defers to
page_widget_set_mode to change whatever is needed in the GTK widgets.
- fix the computation of the number of rows in the table. Doing a ceil
of an integer division has no effect...
- set the page_padding in page_widget_set_mode function, instead of
doing it independently.
- call zathura_document_set_layout after calling page_widget_set_mode
to save the page layout settings into the document object.
Now the document object knows about pages_per_row, first_page_column and
page_padding, so we will be able to compute sizes and positions of the
document view without querying the GTK widgets.
We precompute the maximum width and maximum height when opening the
document. Then, when someone calls zathura_document_get_cell_size we use
page_calc_width_height to apply the rotation and scale the precomputed
values.
now accepts a document object and explicit width and height. This will
make it easier to reuse this function for computing the document page
cell width and height.
Since we 'continue' the loop if num_search_results is 0, there is no need for
the second check.
Signed-off-by: Sebastian Ramacher <sebastian+dev@ramacher.at>
Add two more signals to ZathuraRenderRequest to notify pages if they are cached
or not. This allows us to move some logic away from
cb_view_vadjutment_value_changed to more appropriate places.
ZathuraPageWidget will now release the surface if
* it gets the signal that the page is no longer cached and the page is
invisible,
* the page is not cached and the render request is aborted.
Signed-off-by: Sebastian Ramacher <sebastian+dev@ramacher.at>
The page widget shouldn't have to care what should be done with selected images
and text.
Signed-off-by: Sebastian Ramacher <sebastian+dev@ramacher.at>
This patch adds a new configuration setting, selection-clipboard, which allows
us to choose between the PRIMARY selection, and the CLIPBOARD selection, for
determining which X clipboard to use for storing mouse-selected data. It has
only two valid values: "primary" and "clipboard", with "clipboard" being set as
the it's default value.
Signed-off-by: Sebastian Ramacher <sebastian+dev@ramacher.at>
ZathuraRenderer is a thread pool rendering the pages. Every page widget holds a
ZathuraRenderRequest instance to request its page to be rendered. This object
can also be used to abort the request in case the page is not visible anymore.
Signed-off-by: Sebastian Ramacher <sebastian+dev@ramacher.at>
Hiding the inputbar immediately before jumping breaks incremental search, as
Guillaume Duranceau stated in an earlier mail.
This patch makes an exception for the case of incremental search, at the cost
of a slight displacement when jumping back (^o) after ending the incremental
search (pressing the ESC key). The rest of the jump cases are unaffected.
This should makes things usable for now, until we move to GTK3 (link to it by
default) which has a new widget that suits this problem nicely (GtkOverlay), as
demonstrated by an earlier patch by Abdo Roig-Maranges which is now included on
the develop branch in girara repo as commit
70fd1cf354ee1300d4a9bdab9e939d5cc975979e, but is compiled only with GTK3.
Signed-off-by: Sebastian Ramacher <sebastian+dev@ramacher.at>