mirror of
https://git.pwmt.org/pwmt/zathura.git
synced 2025-01-16 20:47:51 +01:00
draw search results again
This commit is contained in:
parent
e7004e3089
commit
ba0ee61dfe
2 changed files with 45 additions and 10 deletions
|
@ -296,14 +296,11 @@ cmd_search(girara_session_t* session, const char* input, girara_argument_t* argu
|
||||||
girara_list_t* result = zathura_page_search_text(page, input);
|
girara_list_t* result = zathura_page_search_text(page, input);
|
||||||
if (result == NULL || girara_list_size(result) == 0) {
|
if (result == NULL || girara_list_size(result) == 0) {
|
||||||
girara_list_free(result);
|
girara_list_free(result);
|
||||||
|
g_object_set(page->drawing_area, "search-results", NULL, NULL);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
GIRARA_LIST_FOREACH(result, zathura_rectangle_t*, iter, rect)
|
g_object_set(page->drawing_area, "search-results", result, NULL);
|
||||||
zathura_rectangle_t position = recalc_rectangle(page, *rect);
|
|
||||||
/*zathura_page_view_draw_rectangle(ZATHURA_PAGE_VIEW(page->drawing_area), &position, -1);*/
|
|
||||||
GIRARA_LIST_FOREACH_END(result, zathura_link_t*, iter, link);
|
|
||||||
girara_list_free(result);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -17,6 +17,7 @@ typedef struct zathura_page_view_private_s {
|
||||||
girara_list_t* links; /**< List of links on the page */
|
girara_list_t* links; /**< List of links on the page */
|
||||||
bool links_got; /**< True if we already tried to retrieve the list of links */
|
bool links_got; /**< True if we already tried to retrieve the list of links */
|
||||||
bool draw_links; /**< True if links should be drawn */
|
bool draw_links; /**< True if links should be drawn */
|
||||||
|
girara_list_t* search_results; /** True if search results should be drawn */
|
||||||
} zathura_page_view_private_t;
|
} zathura_page_view_private_t;
|
||||||
|
|
||||||
#define ZATHURA_PAGE_VIEW_GET_PRIVATE(obj) \
|
#define ZATHURA_PAGE_VIEW_GET_PRIVATE(obj) \
|
||||||
|
@ -27,12 +28,14 @@ static void zathura_page_view_finalize(GObject* object);
|
||||||
static void zathura_page_view_set_property(GObject* object, guint prop_id, const GValue* value, GParamSpec* pspec);
|
static void zathura_page_view_set_property(GObject* object, guint prop_id, const GValue* value, GParamSpec* pspec);
|
||||||
static void zathura_page_view_size_allocate(GtkWidget* widget, GdkRectangle* allocation);
|
static void zathura_page_view_size_allocate(GtkWidget* widget, GdkRectangle* allocation);
|
||||||
static void redraw_rect(ZathuraPageView* widget, zathura_rectangle_t* rectangle);
|
static void redraw_rect(ZathuraPageView* widget, zathura_rectangle_t* rectangle);
|
||||||
|
static void redraw_all_rects(ZathuraPageView* widget, girara_list_t* rectangles);
|
||||||
|
|
||||||
enum properties_e
|
enum properties_e
|
||||||
{
|
{
|
||||||
PROP_0,
|
PROP_0,
|
||||||
PROP_PAGE,
|
PROP_PAGE,
|
||||||
PROP_DRAW_LINKS,
|
PROP_DRAW_LINKS,
|
||||||
|
PROP_SEARCH_RESULTS
|
||||||
};
|
};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -55,6 +58,8 @@ zathura_page_view_class_init(ZathuraPageViewClass* class)
|
||||||
g_param_spec_pointer("page", "page", "the page to draw", G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
|
g_param_spec_pointer("page", "page", "the page to draw", G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
|
||||||
g_object_class_install_property(object_class, PROP_DRAW_LINKS,
|
g_object_class_install_property(object_class, PROP_DRAW_LINKS,
|
||||||
g_param_spec_boolean("draw-links", "draw-links", "Set to true if links should be drawn", FALSE, G_PARAM_WRITABLE));
|
g_param_spec_boolean("draw-links", "draw-links", "Set to true if links should be drawn", FALSE, G_PARAM_WRITABLE));
|
||||||
|
g_object_class_install_property(object_class, PROP_SEARCH_RESULTS,
|
||||||
|
g_param_spec_pointer("search-results", "search-results", "Set to the list of search results", G_PARAM_WRITABLE));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -91,6 +96,7 @@ zathura_page_view_finalize(GObject* object)
|
||||||
cairo_surface_destroy(priv->surface);
|
cairo_surface_destroy(priv->surface);
|
||||||
}
|
}
|
||||||
g_static_mutex_free(&(priv->lock));
|
g_static_mutex_free(&(priv->lock));
|
||||||
|
girara_list_free(priv->links);
|
||||||
|
|
||||||
G_OBJECT_CLASS(zathura_page_view_parent_class)->finalize(object);
|
G_OBJECT_CLASS(zathura_page_view_parent_class)->finalize(object);
|
||||||
}
|
}
|
||||||
|
@ -121,6 +127,17 @@ zathura_page_view_set_property(GObject* object, guint prop_id, const GValue* val
|
||||||
GIRARA_LIST_FOREACH_END(priv->links, zathura_link_t*, iter, link);
|
GIRARA_LIST_FOREACH_END(priv->links, zathura_link_t*, iter, link);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case PROP_SEARCH_RESULTS:
|
||||||
|
if (priv->search_results != NULL) {
|
||||||
|
redraw_all_rects(pageview, priv->search_results);
|
||||||
|
girara_list_free(priv->search_results);
|
||||||
|
}
|
||||||
|
priv->search_results = g_value_get_pointer(value);
|
||||||
|
if (priv->search_results != NULL) {
|
||||||
|
priv->draw_links = false;
|
||||||
|
redraw_all_rects(pageview, priv->search_results);
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
|
||||||
}
|
}
|
||||||
|
@ -181,6 +198,7 @@ zathura_page_view_expose(GtkWidget* widget, GdkEventExpose* event)
|
||||||
if (font != NULL) {
|
if (font != NULL) {
|
||||||
cairo_select_font_face(cairo, font, CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD);
|
cairo_select_font_face(cairo, font, CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD);
|
||||||
}
|
}
|
||||||
|
g_free(font);
|
||||||
|
|
||||||
/* draw links */
|
/* draw links */
|
||||||
if (priv->draw_links == true) {
|
if (priv->draw_links == true) {
|
||||||
|
@ -202,6 +220,20 @@ zathura_page_view_expose(GtkWidget* widget, GdkEventExpose* event)
|
||||||
cairo_fill(cairo);
|
cairo_fill(cairo);
|
||||||
GIRARA_LIST_FOREACH_END(priv->links, zathura_link_t*, iter, link);
|
GIRARA_LIST_FOREACH_END(priv->links, zathura_link_t*, iter, link);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* draw search results */
|
||||||
|
if (priv->search_results != NULL) {
|
||||||
|
GIRARA_LIST_FOREACH(priv->search_results, zathura_rectangle_t*, iter, rect)
|
||||||
|
zathura_rectangle_t rectangle = recalc_rectangle(priv->page, *rect);
|
||||||
|
|
||||||
|
/* draw position */
|
||||||
|
GdkColor color = priv->zathura->ui.colors.highlight_color;
|
||||||
|
cairo_set_source_rgba(cairo, color.red, color.green, color.blue, transparency);
|
||||||
|
cairo_rectangle(cairo, rectangle.x1, rectangle.y1,
|
||||||
|
(rectangle.x2 - rectangle.x1), (rectangle.y2 - rectangle.y1));
|
||||||
|
cairo_fill(cairo);
|
||||||
|
GIRARA_LIST_FOREACH_END(priv->search_results, zathura_rectangle_t*, iter, rect);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
/* set background color */
|
/* set background color */
|
||||||
cairo_set_source_rgb(cairo, 255, 255, 255);
|
cairo_set_source_rgb(cairo, 255, 255, 255);
|
||||||
|
@ -238,11 +270,6 @@ static void
|
||||||
zathura_page_view_redraw_canvas(ZathuraPageView* pageview)
|
zathura_page_view_redraw_canvas(ZathuraPageView* pageview)
|
||||||
{
|
{
|
||||||
GtkWidget* widget = GTK_WIDGET(pageview);
|
GtkWidget* widget = GTK_WIDGET(pageview);
|
||||||
/* redraw the cairo canvas completely by exposing it */
|
|
||||||
/* GdkRegion* region = gdk_drawable_get_clip_region(widget->window);
|
|
||||||
gdk_window_invalidate_region(widget->window, region, TRUE);
|
|
||||||
gdk_window_process_updates(widget->window, TRUE);
|
|
||||||
gdk_region_destroy(region); */
|
|
||||||
gtk_widget_queue_draw(widget);
|
gtk_widget_queue_draw(widget);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -279,6 +306,17 @@ redraw_rect(ZathuraPageView* widget, zathura_rectangle_t* rectangle)
|
||||||
gdk_window_invalidate_rect(GTK_WIDGET(widget)->window, &grect, TRUE);
|
gdk_window_invalidate_rect(GTK_WIDGET(widget)->window, &grect, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
redraw_all_rects(ZathuraPageView* widget, girara_list_t* rectangles)
|
||||||
|
{
|
||||||
|
zathura_page_view_private_t* priv = ZATHURA_PAGE_VIEW_GET_PRIVATE(widget);
|
||||||
|
|
||||||
|
GIRARA_LIST_FOREACH(rectangles, zathura_rectangle_t*, iter, rect)
|
||||||
|
zathura_rectangle_t rectangle = recalc_rectangle(priv->page, *rect);
|
||||||
|
redraw_rect(widget, &rectangle);
|
||||||
|
GIRARA_LIST_FOREACH_END(rectangles, zathura_recantgle_t*, iter, rect);
|
||||||
|
}
|
||||||
|
|
||||||
zathura_link_t*
|
zathura_link_t*
|
||||||
zathura_page_view_link_get(ZathuraPageView* widget, unsigned int index)
|
zathura_page_view_link_get(ZathuraPageView* widget, unsigned int index)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue