mirror of
https://git.pwmt.org/pwmt/zathura.git
synced 2024-11-14 07:53:45 +01:00
fix the zooming issue
This commit is contained in:
parent
435727672c
commit
6c0a63943f
37
render.c
37
render.c
@ -12,6 +12,18 @@
|
|||||||
void* render_job(void* data);
|
void* render_job(void* data);
|
||||||
bool render(zathura_t* zathura, zathura_page_t* page);
|
bool render(zathura_t* zathura, zathura_page_t* page);
|
||||||
|
|
||||||
|
static void
|
||||||
|
page_calc_height_width(zathura_page_t* page, unsigned int* page_height, unsigned int* page_width)
|
||||||
|
{
|
||||||
|
if (page->document->rotate == 0 || page->document->rotate == 180) {
|
||||||
|
*page_width = page->width * page->document->scale;
|
||||||
|
*page_height = page->height * page->document->scale;
|
||||||
|
} else {
|
||||||
|
*page_width = page->height * page->document->scale;
|
||||||
|
*page_height = page->width * page->document->scale;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void*
|
void*
|
||||||
render_job(void* data)
|
render_job(void* data)
|
||||||
{
|
{
|
||||||
@ -153,14 +165,7 @@ render(zathura_t* zathura, zathura_page_t* page)
|
|||||||
/* create cairo surface */
|
/* create cairo surface */
|
||||||
unsigned int page_width = 0;
|
unsigned int page_width = 0;
|
||||||
unsigned int page_height = 0;
|
unsigned int page_height = 0;
|
||||||
|
page_calc_height_width(page, &page_height, &page_width);
|
||||||
if (page->document->rotate == 0 || page->document->rotate == 180) {
|
|
||||||
page_width = page->width * zathura->document->scale;
|
|
||||||
page_height = page->height * zathura->document->scale;
|
|
||||||
} else {
|
|
||||||
page_width = page->height * zathura->document->scale;
|
|
||||||
page_height = page->width * zathura->document->scale;
|
|
||||||
}
|
|
||||||
|
|
||||||
cairo_surface_t* surface = cairo_image_surface_create(CAIRO_FORMAT_RGB24, page_width, page_height);
|
cairo_surface_t* surface = cairo_image_surface_create(CAIRO_FORMAT_RGB24, page_width, page_height);
|
||||||
|
|
||||||
@ -255,7 +260,6 @@ render(zathura_t* zathura, zathura_page_t* page)
|
|||||||
|
|
||||||
/* draw to gtk widget */
|
/* draw to gtk widget */
|
||||||
page->surface = surface;
|
page->surface = surface;
|
||||||
gtk_widget_set_size_request(page->drawing_area, page_width, page_height);
|
|
||||||
gtk_widget_queue_draw(page->drawing_area);
|
gtk_widget_queue_draw(page->drawing_area);
|
||||||
|
|
||||||
g_static_mutex_unlock(&(page->lock));
|
g_static_mutex_unlock(&(page->lock));
|
||||||
@ -273,13 +277,16 @@ render_all(zathura_t* zathura)
|
|||||||
|
|
||||||
/* unmark all pages */
|
/* unmark all pages */
|
||||||
for (unsigned int page_id = 0; page_id < zathura->document->number_of_pages; page_id++) {
|
for (unsigned int page_id = 0; page_id < zathura->document->number_of_pages; page_id++) {
|
||||||
cairo_surface_destroy(zathura->document->pages[page_id]->surface);
|
zathura_page_t* page = zathura->document->pages[page_id];
|
||||||
zathura->document->pages[page_id]->surface = NULL;
|
cairo_surface_destroy(page->surface);
|
||||||
}
|
page->surface = NULL;
|
||||||
|
|
||||||
/* redraw current page */
|
unsigned int page_height = 0, page_width = 0;
|
||||||
GtkAdjustment* view_vadjustment = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(zathura->ui.session->gtk.view));
|
page_calc_height_width(page, &page_height, &page_width);
|
||||||
cb_view_vadjustment_value_changed(view_vadjustment, zathura);
|
|
||||||
|
gtk_widget_set_size_request(page->drawing_area, page_width, page_height);
|
||||||
|
gtk_widget_queue_resize(page->drawing_area);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
|
59
utils.c
59
utils.c
@ -178,65 +178,6 @@ document_index_build(GtkTreeModel* model, GtkTreeIter* parent,
|
|||||||
GIRARA_LIST_FOREACH_END(list, gchar*, iter, name);
|
GIRARA_LIST_FOREACH_END(list, gchar*, iter, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
char*
|
|
||||||
string_concat(const char* string1, ...)
|
|
||||||
{
|
|
||||||
if(!string1) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
va_list args;
|
|
||||||
char* s;
|
|
||||||
int l = strlen(string1) + 1;
|
|
||||||
|
|
||||||
/* calculate length */
|
|
||||||
va_start(args, string1);
|
|
||||||
|
|
||||||
s = va_arg(args, char*);
|
|
||||||
|
|
||||||
while(s) {
|
|
||||||
l += strlen(s);
|
|
||||||
s = va_arg(args, char*);
|
|
||||||
}
|
|
||||||
|
|
||||||
va_end(args);
|
|
||||||
|
|
||||||
/* prepare */
|
|
||||||
char* c = malloc(sizeof(char) * l);
|
|
||||||
char* p = c;
|
|
||||||
|
|
||||||
/* copy */
|
|
||||||
char* d = p;
|
|
||||||
char* x = (char*) string1;
|
|
||||||
|
|
||||||
do {
|
|
||||||
*d++ = *x;
|
|
||||||
} while (*x++ != '\0');
|
|
||||||
|
|
||||||
p = d - 1;
|
|
||||||
|
|
||||||
va_start(args, string1);
|
|
||||||
|
|
||||||
s = va_arg(args, char*);
|
|
||||||
|
|
||||||
while(s) {
|
|
||||||
d = p;
|
|
||||||
x = s;
|
|
||||||
|
|
||||||
do {
|
|
||||||
*d++ = *x;
|
|
||||||
} while (*x++ != '\0');
|
|
||||||
|
|
||||||
p = d - 1;
|
|
||||||
s = va_arg(args, char*);
|
|
||||||
}
|
|
||||||
|
|
||||||
va_end(args);
|
|
||||||
|
|
||||||
return c;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
page_offset_t*
|
page_offset_t*
|
||||||
page_calculate_offset(zathura_page_t* page)
|
page_calculate_offset(zathura_page_t* page)
|
||||||
{
|
{
|
||||||
|
10
utils.h
10
utils.h
@ -62,16 +62,6 @@ bool execute_command(char* const argv[], char** output);
|
|||||||
*/
|
*/
|
||||||
void document_index_build(GtkTreeModel* model, GtkTreeIter* parent, girara_tree_node_t* tree);
|
void document_index_build(GtkTreeModel* model, GtkTreeIter* parent, girara_tree_node_t* tree);
|
||||||
|
|
||||||
/**
|
|
||||||
* This function is used to concatenate multiple strings. Argument list has to
|
|
||||||
* be ended with NULL. Returned string has to be freed with free().
|
|
||||||
*
|
|
||||||
* @param string1 First string
|
|
||||||
* @param ... Additional strings
|
|
||||||
* @return Concatenated string or NULL if an error occured
|
|
||||||
*/
|
|
||||||
char* string_concat(const char* string1, ...);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Calculates the offset of the page to the top of the viewing area as
|
* 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.
|
* well as to the left side of it. The result has to be freed.
|
||||||
|
@ -591,7 +591,7 @@ page_view_set_mode(zathura_t* zathura, unsigned int pages_per_row)
|
|||||||
{
|
{
|
||||||
int x = i % pages_per_row;
|
int x = i % pages_per_row;
|
||||||
int y = i / pages_per_row;
|
int y = i / pages_per_row;
|
||||||
gtk_table_attach(GTK_TABLE(zathura->ui.page_view), zathura->document->pages[i]->event_box, x, x + 1, y, y + 1, GTK_EXPAND, GTK_EXPAND, 0, 0);
|
gtk_table_attach(GTK_TABLE(zathura->ui.page_view), zathura->document->pages[i]->event_box, x, x + 1, y, y + 1, GTK_SHRINK, GTK_SHRINK, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
gtk_widget_show_all(zathura->ui.page_view);
|
gtk_widget_show_all(zathura->ui.page_view);
|
||||||
|
Loading…
Reference in New Issue
Block a user