Hi, I attach some small fixes for the new synctex forward search functionality.
Abdó.
>From 922361bab36aef469766806cca12974e442ce99a Mon Sep 17 00:00:00 2001 From: Abdo Roig-Maranges <[email protected]> Date: Fri, 17 Jan 2014 12:52:05 +0100 Subject: [PATCH 1/4] fix page range check In those cases, page is in the range [1...N], both ends included. --- dbus-interface.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dbus-interface.c b/dbus-interface.c index 569d83a..d145106 100644 --- a/dbus-interface.c +++ b/dbus-interface.c @@ -255,7 +255,7 @@ handle_method_call(GDBusConnection* UNUSED(connection), g_variant_get(parameters, "(i)", &page); bool ret = true; - if (page < 1 || (unsigned int)page >= number_of_pages) { + if (page < 1 || (unsigned int)page > number_of_pages) { ret = false; } else { page_set(priv->zathura, page - 1); @@ -270,7 +270,7 @@ handle_method_call(GDBusConnection* UNUSED(connection), g_variant_get(parameters, "(ia(dddd)a(idddd))", &page, &iter, &secondary_iter); - if (page < 1 || (unsigned int)page >= number_of_pages) { + if (page < 1 || (unsigned int)page > number_of_pages) { GVariant* result = g_variant_new("(b)", false); g_variant_iter_free(iter); g_variant_iter_free(secondary_iter); -- 1.8.5.3 >From b77b32259b6b0ecfed298102e0a1878625773263 Mon Sep 17 00:00:00 2001 From: Abdo Roig-Maranges <[email protected]> Date: Fri, 17 Jan 2014 13:09:10 +0100 Subject: [PATCH 2/4] fix rectangles subindex. Need page not 0 --- dbus-interface.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/dbus-interface.c b/dbus-interface.c index d145106..e8e55e5 100644 --- a/dbus-interface.c +++ b/dbus-interface.c @@ -169,7 +169,7 @@ highlight_rects(zathura_t* zathura, unsigned int page, document_draw_search_results(zathura, true); - if (rectangles[0] == NULL || girara_list_size(rectangles[0]) == 0) { + if (rectangles[page] == NULL || girara_list_size(rectangles[page]) == 0) { page_set(zathura, page); return; } @@ -192,7 +192,8 @@ highlight_rects(zathura_t* zathura, unsigned int page, unsigned int doc_width = 0; zathura_document_get_document_size(zathura->document, &doc_height, &doc_width); - zathura_rectangle_t* rectangle = girara_list_nth(rectangles[0], 0); + zathura_rectangle_t* rectangle = girara_list_nth(rectangles[page], 0); + pos_y += (rectangle->y1 - (double)cell_height/2) / (double)doc_height; if (search_hadjust == true) { pos_x += (rectangle->x1 - (double)cell_width/2) / (double)doc_width; -- 1.8.5.3 >From 7874948b7b7dd00a1dc2b04c800381bc64dac397 Mon Sep 17 00:00:00 2001 From: Abdo Roig-Maranges <[email protected]> Date: Fri, 17 Jan 2014 13:35:11 +0100 Subject: [PATCH 3/4] properly scale and rotate rectangle --- dbus-interface.c | 9 ++++++--- shortcuts.c | 1 + 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/dbus-interface.c b/dbus-interface.c index e8e55e5..1f780dd 100644 --- a/dbus-interface.c +++ b/dbus-interface.c @@ -192,11 +192,14 @@ highlight_rects(zathura_t* zathura, unsigned int page, unsigned int doc_width = 0; zathura_document_get_document_size(zathura->document, &doc_height, &doc_width); - zathura_rectangle_t* rectangle = girara_list_nth(rectangles[page], 0); + /* Need to adjust rectangle to page scale and orientation */ + zathura_page_t* doc_page = zathura_document_get_page(zathura->document, page); + zathura_rectangle_t* rect = girara_list_nth(rectangles[page], 0); + zathura_rectangle_t rectangle = recalc_rectangle(doc_page, *rect); - pos_y += (rectangle->y1 - (double)cell_height/2) / (double)doc_height; + pos_y += (rectangle.y1 - (double)cell_height/2) / (double)doc_height; if (search_hadjust == true) { - pos_x += (rectangle->x1 - (double)cell_width/2) / (double)doc_width; + pos_x += (rectangle.x1 - (double)cell_width/2) / (double)doc_width; } /* move to position */ diff --git a/shortcuts.c b/shortcuts.c index 7e76235..a067dac 100644 --- a/shortcuts.c +++ b/shortcuts.c @@ -917,6 +917,7 @@ sc_search(girara_session_t* session, girara_argument_t* argument, g_object_set(page_widget, "search-current", target_idx, NULL); g_object_get(page_widget, "search-results", &results, NULL); + /* Need to adjust rectangle to page scale and orientation */ zathura_rectangle_t* rect = girara_list_nth(results, target_idx); zathura_rectangle_t rectangle = recalc_rectangle(target_page, *rect); -- 1.8.5.3 >From d3926da7fd7d3eb6b9742e7b23c238d99151dcf6 Mon Sep 17 00:00:00 2001 From: Abdo Roig-Maranges <[email protected]> Date: Fri, 17 Jan 2014 13:40:51 +0100 Subject: [PATCH 4/4] align highlighted rectangles correctly Align center of the rectangle with the center of the viewport, vor both keyword searches and synctex forward search. --- dbus-interface.c | 9 +++++++-- shortcuts.c | 8 ++++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/dbus-interface.c b/dbus-interface.c index 1f780dd..c22b2f2 100644 --- a/dbus-interface.c +++ b/dbus-interface.c @@ -197,9 +197,14 @@ highlight_rects(zathura_t* zathura, unsigned int page, zathura_rectangle_t* rect = girara_list_nth(rectangles[page], 0); zathura_rectangle_t rectangle = recalc_rectangle(doc_page, *rect); - pos_y += (rectangle.y1 - (double)cell_height/2) / (double)doc_height; + /* compute the center of the rectangle, which will be aligned to the center + of the viewport */ + double center_x = (rectangle.x1 + rectangle.x2) / 2; + double center_y = (rectangle.y1 + rectangle.y2) / 2; + + pos_y += (center_y - (double)cell_height/2) / (double)doc_height; if (search_hadjust == true) { - pos_x += (rectangle.x1 - (double)cell_width/2) / (double)doc_width; + pos_x += (center_x - (double)cell_width/2) / (double)doc_width; } /* move to position */ diff --git a/shortcuts.c b/shortcuts.c index a067dac..0f5c807 100644 --- a/shortcuts.c +++ b/shortcuts.c @@ -940,10 +940,14 @@ sc_search(girara_session_t* session, girara_argument_t* argument, unsigned int doc_width = 0; zathura_document_get_document_size(zathura->document, &doc_height, &doc_width); - pos_y += (rectangle.y1 - (double)cell_height/2) / (double)doc_height; + /* compute the center of the rectangle, which will be aligned to the center + of the viewport */ + double center_x = (rectangle.x1 + rectangle.x2) / 2; + double center_y = (rectangle.y1 + rectangle.y2) / 2; + pos_y += (center_y - (double)cell_height/2) / (double)doc_height; if (search_hadjust == true) { - pos_x += (rectangle.x1 - (double)cell_width/2) / (double)doc_width; + pos_x += (center_x - (double)cell_width/2) / (double)doc_width; } /* move to position */ -- 1.8.5.3
_______________________________________________ zathura mailing list [email protected] http://lists.pwmt.org/mailman/listinfo/zathura
