From 3f175f30d0eb1df7df8894c7ba0949e4cbd23e8f Mon Sep 17 00:00:00 2001 From: Kristian Høgsberg Date: Sat, 06 Aug 2005 18:14:24 +0000 Subject: Change selection color on focus in and focus out events. Also, poppler now 2005-08-06 Kristian Høgsberg * backend/ev-selection.c: (ev_selection_render_selection): * backend/ev-selection.h: * pdf/ev-poppler.cc: * shell/ev-jobs.c: (ev_job_render_new): * shell/ev-jobs.h: * shell/ev-pixbuf-cache.c: (get_selection_colors), (add_job_if_needed), (ev_pixbuf_cache_get_selection_pixbuf): * shell/ev-view.c: (ev_view_focus_in), (ev_view_focus_out), (ev_view_class_init): Change selection color on focus in and focus out events. Also, poppler now uses GdkColor for specifying the selection colors, so drop some awkward conversion code. --- diff --git a/ChangeLog b/ChangeLog index 02055f9..642d196 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,19 @@ +2005-08-06 Kristian Høgsberg + + * backend/ev-selection.c: (ev_selection_render_selection): + * backend/ev-selection.h: + * pdf/ev-poppler.cc: + * shell/ev-jobs.c: (ev_job_render_new): + * shell/ev-jobs.h: + * shell/ev-pixbuf-cache.c: (get_selection_colors), + (add_job_if_needed), (ev_pixbuf_cache_get_selection_pixbuf): + * shell/ev-view.c: (ev_view_focus_in), (ev_view_focus_out), + (ev_view_class_init): + + Change selection color on focus in and focus out events. Also, + poppler now uses GdkColor for specifying the selection colors, so + drop some awkward conversion code. + 2005-08-06 Yair Hershkovitz * configure.ac: Added Hebrew translation diff --git a/backend/ev-selection.c b/backend/ev-selection.c index f9f73e0..36c32e3 100644 --- a/backend/ev-selection.c +++ b/backend/ev-selection.c @@ -62,8 +62,8 @@ ev_selection_render_selection (EvSelection *selection, GdkPixbuf **pixbuf, EvRectangle *points, EvRectangle *old_points, - guint text, - guint base) + GdkColor *text, + GdkColor *base) { EvSelectionIface *iface = EV_SELECTION_GET_IFACE (selection); diff --git a/backend/ev-selection.h b/backend/ev-selection.h index 8ed416b..d081604 100644 --- a/backend/ev-selection.h +++ b/backend/ev-selection.h @@ -48,8 +48,8 @@ struct _EvSelectionIface GdkPixbuf **pixbuf, EvRectangle *points, EvRectangle *old_points, - guint text, - guint base); + GdkColor *text, + GdkColor *base); GdkRegion * (* get_selection_map) (EvSelection *selection, EvRenderContext *rc); GdkRegion * (* get_selection_region) (EvSelection *selection, @@ -63,8 +63,8 @@ void ev_selection_render_selection (EvSelection *selection, GdkPixbuf **pixbuf, EvRectangle *points, EvRectangle *old_points, - guint text, - guint base); + GdkColor *text, + GdkColor *base); GdkRegion *ev_selection_get_selection_map (EvSelection *selection, EvRenderContext *rc); GdkRegion *ev_selection_get_selection_region (EvSelection *selection, diff --git a/pdf/ev-poppler.cc b/pdf/ev-poppler.cc index b4a6799..610f598 100644 --- a/pdf/ev-poppler.cc +++ b/pdf/ev-poppler.cc @@ -1182,8 +1182,8 @@ pdf_selection_render_selection (EvSelection *selection, GdkPixbuf **pixbuf, EvRectangle *points, EvRectangle *old_points, - guint text, - guint base) + GdkColor *text, + GdkColor *base) { PdfDocument *pdf_document; double width_points, height_points; diff --git a/shell/ev-jobs.c b/shell/ev-jobs.c index 595f9e8..5060231 100644 --- a/shell/ev-jobs.c +++ b/shell/ev-jobs.c @@ -236,8 +236,8 @@ ev_job_render_new (EvDocument *document, gint width, gint height, EvRectangle *selection_points, - guint text, - guint base, + GdkColor *text, + GdkColor *base, gboolean include_links, gboolean include_text, gboolean include_selection) diff --git a/shell/ev-jobs.h b/shell/ev-jobs.h index 1576837..8836d92 100644 --- a/shell/ev-jobs.h +++ b/shell/ev-jobs.h @@ -120,8 +120,8 @@ struct _EvJobRender GdkPixbuf *selection; GdkRegion *selection_region; EvRectangle selection_points; - guint base; - guint text; + GdkColor *base; + GdkColor *text; gint include_links : 1; gint include_text : 1; @@ -187,8 +187,8 @@ EvJob *ev_job_render_new (EvDocument *document, gint width, gint height, EvRectangle *selection_points, - guint text, - guint base, + GdkColor *text, + GdkColor *base, gboolean include_links, gboolean include_text, gboolean include_selection); diff --git a/shell/ev-pixbuf-cache.c b/shell/ev-pixbuf-cache.c index cbb6d18..1b6966d 100644 --- a/shell/ev-pixbuf-cache.c +++ b/shell/ev-pixbuf-cache.c @@ -67,7 +67,6 @@ static CacheJobInfo *find_job_cache (EvPixbufCache *pixbuf_cach static void copy_job_to_job_info (EvJobRender *job_render, CacheJobInfo *job_info, EvPixbufCache *pixbuf_cache); -static guint convert_gdk_color_to_uint (GdkColor *color); static gboolean new_selection_pixbuf_needed(EvPixbufCache *pixbuf_cache, CacheJobInfo *job_info, gint page, @@ -490,6 +489,18 @@ ev_pixbuf_cache_clear_job_sizes (EvPixbufCache *pixbuf_cache, (MAX (0, pixbuf_cache->preload_cache_size + 1 - pixbuf_cache->start_page)) static void +get_selection_colors (GtkWidget *widget, GdkColor **text, GdkColor **base) +{ + if (GTK_WIDGET_HAS_FOCUS (widget)) { + *text = &widget->style->text [GTK_STATE_SELECTED]; + *base = &widget->style->base [GTK_STATE_SELECTED]; + } else { + *text = &widget->style->text [GTK_STATE_ACTIVE]; + *base = &widget->style->base [GTK_STATE_ACTIVE]; + } +} + +static void add_job_if_needed (EvPixbufCache *pixbuf_cache, CacheJobInfo *job_info, EvPageCache *page_cache, @@ -502,7 +513,7 @@ add_job_if_needed (EvPixbufCache *pixbuf_cache, gboolean include_text = FALSE; gboolean include_selection = FALSE; int width, height; - guint text, base; + GdkColor *text, *base; if (job_info->job) return; @@ -535,8 +546,7 @@ add_job_if_needed (EvPixbufCache *pixbuf_cache, gtk_widget_ensure_style (pixbuf_cache->view); - text = convert_gdk_color_to_uint (& (pixbuf_cache->view->style->text [GTK_STATE_SELECTED])); - base = convert_gdk_color_to_uint (& (pixbuf_cache->view->style->base [GTK_STATE_SELECTED])); + get_selection_colors (pixbuf_cache->view, &text, &base); job_info->job = ev_job_render_new (pixbuf_cache->document, job_info->rc, @@ -664,18 +674,6 @@ ev_pixbuf_cache_get_link_mapping (EvPixbufCache *pixbuf_cache, return job_info->link_mapping; } -/* Selection */ -static guint -convert_gdk_color_to_uint (GdkColor *color) -{ - g_assert (color); - - return 0xff << 24 | - (color->red & 0xff00) << 8 | - (color->green & 0xff00) | - (color->blue & 0xff00) >> 8; -} - static gboolean new_selection_pixbuf_needed (EvPixbufCache *pixbuf_cache, CacheJobInfo *job_info, @@ -825,7 +823,7 @@ ev_pixbuf_cache_get_selection_pixbuf (EvPixbufCache *pixbuf_cache, */ if (ev_rect_cmp (&(job_info->new_points), &(job_info->selection_points))) { EvRectangle *old_points; - guint text, base; + GdkColor *text, *base; /* we need to get a new selection pixbuf */ ev_document_doc_mutex_lock (); @@ -846,8 +844,7 @@ ev_pixbuf_cache_get_selection_pixbuf (EvPixbufCache *pixbuf_cache, gtk_widget_ensure_style (pixbuf_cache->view); - text = convert_gdk_color_to_uint (& (pixbuf_cache->view->style->text [GTK_STATE_SELECTED])); - base = convert_gdk_color_to_uint (& (pixbuf_cache->view->style->base [GTK_STATE_SELECTED])); + get_selection_colors (pixbuf_cache->view, &text, &base); ev_selection_render_selection (EV_SELECTION (pixbuf_cache->document), job_info->rc, &(job_info->selection), diff --git a/shell/ev-view.c b/shell/ev-view.c index 5d7df6b..c4ae904 100644 --- a/shell/ev-view.c +++ b/shell/ev-view.c @@ -1566,6 +1566,28 @@ ev_view_button_release_event (GtkWidget *widget, return FALSE; } +static gint +ev_view_focus_in (GtkWidget *widget, + GdkEventFocus *event) +{ + if (EV_VIEW (widget)->pixbuf_cache) + ev_pixbuf_cache_style_changed (EV_VIEW (widget)->pixbuf_cache); + gtk_widget_queue_draw (widget); + + return FALSE; +} + +static gint +ev_view_focus_out (GtkWidget *widget, + GdkEventFocus *event) +{ + if (EV_VIEW (widget)->pixbuf_cache) + ev_pixbuf_cache_style_changed (EV_VIEW (widget)->pixbuf_cache); + gtk_widget_queue_draw (widget); + + return FALSE; +} + static gboolean ev_view_leave_notify_event (GtkWidget *widget, GdkEventCrossing *event) { @@ -1894,6 +1916,8 @@ ev_view_class_init (EvViewClass *class) widget_class->button_press_event = ev_view_button_press_event; widget_class->motion_notify_event = ev_view_motion_notify_event; widget_class->button_release_event = ev_view_button_release_event; + widget_class->focus_in_event = ev_view_focus_in; + widget_class->focus_out_event = ev_view_focus_out; widget_class->size_request = ev_view_size_request; widget_class->size_allocate = ev_view_size_allocate; widget_class->realize = ev_view_realize; -- cgit v0.9.1