2010-11-10 20:31:15 +01:00
|
|
|
/* See LICENSE file for license and copyright information */
|
2010-11-10 20:47:53 +01:00
|
|
|
|
|
|
|
#ifndef UTILS_H
|
|
|
|
#define UTILS_H
|
|
|
|
|
2010-11-18 02:35:33 +01:00
|
|
|
#include <stdbool.h>
|
2010-12-28 09:47:09 +01:00
|
|
|
#include <gtk/gtk.h>
|
2011-10-23 17:01:15 +02:00
|
|
|
#include <girara/types.h>
|
2010-11-18 02:35:33 +01:00
|
|
|
|
2011-04-19 19:24:03 +02:00
|
|
|
#include "document.h"
|
|
|
|
|
2011-10-01 23:29:40 +02:00
|
|
|
#define LENGTH(x) (sizeof(x)/sizeof((x)[0]))
|
|
|
|
|
2011-04-19 19:24:03 +02:00
|
|
|
typedef struct page_offset_s
|
|
|
|
{
|
|
|
|
int x;
|
|
|
|
int y;
|
|
|
|
} page_offset_t;
|
|
|
|
|
2011-02-01 15:48:16 +01:00
|
|
|
/**
|
|
|
|
* Returns the file extension of a path
|
|
|
|
*
|
|
|
|
* @param path Path to the file
|
|
|
|
* @return The file extension or NULL
|
|
|
|
*/
|
2010-11-18 02:35:33 +01:00
|
|
|
const char* file_get_extension(const char* path);
|
2011-02-01 15:48:16 +01:00
|
|
|
|
2011-05-25 00:54:16 +02:00
|
|
|
/**
|
|
|
|
* This function checks if the file has a valid extension. A extension is
|
|
|
|
* evaluated as valid if it matches a supported filetype.
|
|
|
|
*
|
|
|
|
* @param zathura Zathura object
|
|
|
|
* @param path The path to the file
|
|
|
|
* @return true if the extension is valid, otherwise false
|
|
|
|
*/
|
|
|
|
bool file_valid_extension(zathura_t* zathura, const char* path);
|
|
|
|
|
2011-02-01 15:48:16 +01:00
|
|
|
/**
|
|
|
|
* Executes a system command and saves its output into output
|
|
|
|
*
|
|
|
|
* @param argv The command
|
|
|
|
* @param output Pointer where the output will be saved
|
|
|
|
* @return true if no error occured, otherwise false
|
|
|
|
*/
|
2010-11-29 14:58:56 +01:00
|
|
|
bool execute_command(char* const argv[], char** output);
|
2011-02-01 15:48:16 +01:00
|
|
|
|
2011-02-10 04:33:28 +01:00
|
|
|
/**
|
|
|
|
* Generates the document index based upon the list retreived from the document
|
|
|
|
* object.
|
|
|
|
*
|
|
|
|
* @param model The tree model
|
2012-02-08 15:30:13 +01:00
|
|
|
* @param parent The tree iterator parent
|
|
|
|
* @param tree The Tree iterator
|
2011-02-10 04:33:28 +01:00
|
|
|
*/
|
|
|
|
void document_index_build(GtkTreeModel* model, GtkTreeIter* parent, girara_tree_node_t* tree);
|
|
|
|
|
2011-04-19 19:24:03 +02:00
|
|
|
/**
|
|
|
|
* Calculates the offset of the page to the top of the viewing area as
|
|
|
|
* well as to the left side of it. The result has to be freed.
|
|
|
|
*
|
2012-04-03 09:02:45 +02:00
|
|
|
* @param zathura Zathura session
|
2011-04-19 19:24:03 +02:00
|
|
|
* @param page The Page
|
2012-02-08 15:30:13 +01:00
|
|
|
* @param offset Applied offset
|
2011-04-19 19:24:03 +02:00
|
|
|
* @return The calculated offset or NULL if an error occured
|
|
|
|
*/
|
2012-04-03 09:02:45 +02:00
|
|
|
void page_calculate_offset(zathura_t* zathura, zathura_page_t* page, page_offset_t* offset);
|
2011-04-19 19:24:03 +02:00
|
|
|
|
2012-02-08 22:23:45 +01:00
|
|
|
/**
|
|
|
|
* Rotate a rectangle by 0, 90, 180 or 270 degree
|
2012-02-09 02:58:53 +01:00
|
|
|
*
|
|
|
|
* @param rectangle the rectangle to rotate
|
2012-02-08 22:23:45 +01:00
|
|
|
* @param degree rotation degree
|
|
|
|
* @param height the height of the enclosing rectangle
|
|
|
|
* @param width the width of the enclosing rectangle
|
|
|
|
* @return the rotated rectangle
|
|
|
|
*/
|
2013-02-23 16:48:19 +01:00
|
|
|
zathura_rectangle_t rotate_rectangle(zathura_rectangle_t rectangle, unsigned int degree, double height, double width);
|
2012-02-08 22:23:45 +01:00
|
|
|
|
2012-01-19 00:37:58 +01:00
|
|
|
/**
|
|
|
|
* Calculates the new coordinates based on the rotation and scale level of the
|
|
|
|
* document for the given rectangle
|
|
|
|
*
|
|
|
|
* @param page Page where the rectangle should be
|
|
|
|
* @param rectangle The rectangle
|
|
|
|
* @return New rectangle
|
|
|
|
*/
|
|
|
|
zathura_rectangle_t recalc_rectangle(zathura_page_t* page, zathura_rectangle_t rectangle);
|
|
|
|
|
2012-02-08 22:23:45 +01:00
|
|
|
/**
|
|
|
|
* Calculate the page size according to the corrent scaling and rotation if
|
|
|
|
* desired.
|
|
|
|
* @param page the page
|
|
|
|
* @param page_height the resulting page height
|
|
|
|
* @param page_width the resultung page width
|
|
|
|
* @param rotate honor page's rotation
|
2013-02-23 17:18:02 +01:00
|
|
|
* @return real scale after rounding
|
2012-02-08 22:23:45 +01:00
|
|
|
*/
|
2013-02-23 17:18:02 +01:00
|
|
|
double
|
2013-10-20 19:20:03 +02:00
|
|
|
page_calc_height_width(zathura_document_t* document, double height, double width,
|
|
|
|
unsigned int* page_height, unsigned int* page_width, bool rotate);
|
2012-02-08 22:23:45 +01:00
|
|
|
|
2012-12-13 12:43:49 +01:00
|
|
|
/**
|
|
|
|
* Compute the size of the entire document to be displayed (in pixels), taking
|
|
|
|
* into account the scale, the layout of the pages, and the padding between
|
|
|
|
* them. It should be equal to the allocation of zathura->ui.page_widget once
|
|
|
|
* it's shown.
|
|
|
|
*
|
|
|
|
* @param[in] zathura The zathura instance
|
|
|
|
* @param[in] cell_height,cell_width The height and width of a cell containing
|
|
|
|
* a single page; it should be obtained
|
|
|
|
* using zathura_document_get_cell_size()
|
|
|
|
* with the document scale set to 1.0
|
|
|
|
* @param[out] height,width The height and width of the document
|
|
|
|
*/
|
|
|
|
void zathura_get_document_size(zathura_t* zathura,
|
|
|
|
unsigned int cell_height, unsigned int cell_width,
|
|
|
|
unsigned int* height, unsigned int* width);
|
|
|
|
|
2012-04-03 09:02:45 +02:00
|
|
|
/**
|
|
|
|
* Returns the page widget of the page
|
|
|
|
*
|
|
|
|
* @param zathura The zathura instance
|
|
|
|
* @param page The page object
|
|
|
|
* @return The page widget of the page
|
|
|
|
* @return NULL if an error occured
|
|
|
|
*/
|
|
|
|
GtkWidget* zathura_page_get_widget(zathura_t* zathura, zathura_page_t* page);
|
2012-02-08 22:23:45 +01:00
|
|
|
|
2012-04-22 19:12:45 +02:00
|
|
|
/**
|
|
|
|
* Set if the search results should be drawn or not
|
|
|
|
*
|
|
|
|
* @param zathura Zathura instance
|
|
|
|
* @param value true if they should be drawn, otherwise false
|
|
|
|
*/
|
|
|
|
void document_draw_search_results(zathura_t* zathura, bool value);
|
|
|
|
|
2012-07-12 10:37:58 +02:00
|
|
|
/**
|
|
|
|
* Create zathura version string
|
|
|
|
*
|
|
|
|
* @param zathura The zathura instance
|
|
|
|
* @param markup Enable markup
|
2013-10-20 19:20:03 +02:00
|
|
|
* @return Version string
|
2012-07-12 10:37:58 +02:00
|
|
|
*/
|
|
|
|
char* zathura_get_version_string(zathura_t* zathura, bool markup);
|
|
|
|
|
2012-08-14 11:45:11 +02:00
|
|
|
/**
|
|
|
|
* Replaces all occurences of \ref old in \ref string with \ref new and returns
|
|
|
|
* a new allocated string
|
|
|
|
*
|
|
|
|
* @param string The original string
|
|
|
|
* @param old String to replace
|
|
|
|
* @param new Replacement string
|
|
|
|
*
|
|
|
|
* @return new allocated string
|
|
|
|
*/
|
|
|
|
char* replace_substring(const char* string, const char* old, const char* new);
|
|
|
|
|
2013-08-31 06:18:31 +02:00
|
|
|
/**
|
|
|
|
* Get a pointer to the GdkAtom of the current clipboard.
|
|
|
|
*
|
|
|
|
* @param zathura The zathura instance
|
|
|
|
*
|
|
|
|
* @return A pointer to a GdkAtom object correspoinding to the current
|
|
|
|
* clipboard, or NULL.
|
|
|
|
*/
|
|
|
|
GdkAtom* get_selection(zathura_t* zathura);
|
|
|
|
|
2010-11-10 20:47:53 +01:00
|
|
|
#endif // UTILS_H
|