commit 7a5fb5e9e495f02f553a364e981e67447f66e207
Author: phantomjinx <p.g.richard...@phantomjinx.co.uk>
Date:   Fri Apr 29 21:39:41 2011 +0000

    Gdk to Cairo migration of coverart display
    
    * Migrate GdkColor use to GdkRGBA
    
    * cairo_region_t replaces GdkRegion
    
    * Replaces expose event with draw event which already provide a cairo
      context to draw on.
    
    * Horizontal scroll bars no longer have an update-policy property

 plugins/cover_display/cover_display.xml   |    1 -
 plugins/cover_display/display_coverart.c  |   84 ++++++++++------------------
 plugins/cover_display/display_coverart.h  |    4 +-
 plugins/details_editor/details_editor.xml |    1 -
 4 files changed, 32 insertions(+), 58 deletions(-)
---
diff --git a/plugins/cover_display/cover_display.xml 
b/plugins/cover_display/cover_display.xml
index 1f47d88..afb6aec 100644
--- a/plugins/cover_display/cover_display.xml
+++ b/plugins/cover_display/cover_display.xml
@@ -116,7 +116,6 @@
               <object class="GtkHScale" id="cover_display_scaler">
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
-                <property name="update_policy">discontinuous</property>
                 <property name="digits">0</property>
                 <property name="draw_value">False</property>
               </object>
diff --git a/plugins/cover_display/display_coverart.c 
b/plugins/cover_display/display_coverart.c
index 47dae76..019839b 100644
--- a/plugins/cover_display/display_coverart.c
+++ b/plugins/cover_display/display_coverart.c
@@ -79,8 +79,8 @@ dnd_coverart_drag_motion(GtkWidget *widget, GdkDragContext 
*dc, gint x, gint y,
 static void set_cover_dimensions(Cover_Item *cover, int cover_index, gdouble 
img_width, gdouble img_height);
 static void coverart_sort_images(GtkSortType order);
 static void set_slider_range(gint index);
-static GdkColor *convert_hexstring_to_gdk_color(gchar *hexstring);
-static gboolean on_drawing_area_exposed(GtkWidget *draw_area, GdkEventExpose 
*event);
+static GdkRGBA *convert_hexstring_to_rgba(const gchar *hexstring);
+static gboolean on_drawing_area_drawn(GtkWidget *draw_area, cairo_t 
*cairo_draw_context, gpointer data);
 static void draw(cairo_t *cairo_context);
 static void redraw(gboolean force_pixbuf_update);
 
@@ -212,7 +212,7 @@ void coverart_init_display(GtkWidget *parent, gchar 
*gladepath) {
     gtk_box_pack_start(GTK_BOX(cdwidget->canvasbox), 
GTK_WIDGET(cdwidget->draw_area), TRUE, TRUE, 0);
 
     /* create the expose event for the drawing area */
-    g_signal_connect (G_OBJECT (cdwidget->draw_area), "expose_event", 
G_CALLBACK (on_drawing_area_exposed), NULL);
+    g_signal_connect (G_OBJECT (cdwidget->draw_area), "draw", G_CALLBACK 
(on_drawing_area_drawn), NULL);
     gtk_widget_add_events(cdwidget->draw_area, GDK_BUTTON_PRESS_MASK);
     /* set up some callback events on the main scaled image */
     g_signal_connect(G_OBJECT(cdwidget->draw_area), "button-press-event", 
G_CALLBACK(on_main_cover_image_clicked), NULL);
@@ -308,11 +308,11 @@ void coverart_block_change(gboolean val) {
  */
 static void draw_string(cairo_t *cairo_context, const gchar *text, gdouble x, 
gdouble y) {
     static PangoFontDescription *desc = NULL;
-    GdkColor *color = coverart_get_foreground_display_color();
+    GdkRGBA *color = coverart_get_foreground_display_color();
     PangoLayout *layout;
     PangoRectangle extents;
 
-    gdk_cairo_set_source_color(cairo_context, color);
+    cairo_set_source_rgba(cairo_context, color->red, color->green, 
color->blue, color->alpha);
     g_free(color);
 
     if (!desc) {
@@ -345,11 +345,11 @@ static void redraw(gboolean force_pixbuf_update) {
     g_return_if_fail(gtk_widget_get_window(GTK_WIDGET(cdwidget->draw_area)));
 
     force_pixbuf_covers = force_pixbuf_update;
-    GdkRegion *region = 
gdk_drawable_get_clip_region(gtk_widget_get_window(GTK_WIDGET(cdwidget->draw_area)));
+    cairo_region_t *region = 
gdk_window_get_clip_region(gtk_widget_get_window(GTK_WIDGET(cdwidget->draw_area)));
     /* redraw the cairo canvas completely by exposing it */
     
gdk_window_invalidate_region(gtk_widget_get_window(GTK_WIDGET(cdwidget->draw_area)),
 region, TRUE);
     
gdk_window_process_updates(gtk_widget_get_window(GTK_WIDGET(cdwidget->draw_area)),
 TRUE);
-    gdk_region_destroy(region);
+    cairo_region_destroy(region);
 
     if (g_list_length(album_key_list) <= 1) {
         gtk_widget_set_sensitive(GTK_WIDGET(cdwidget->cdslider), FALSE);
@@ -374,10 +374,10 @@ static void draw(cairo_t *cairo_context) {
     gint cover_index[] =
         { 0, 8, 1, 7, 2, 6, 3, 5, 4 };
     /* Draw the background */
-    GdkColor *color = coverart_get_background_display_color();
+    GdkRGBA *color = coverart_get_background_display_color();
 
     cairo_save(cairo_context);
-    gdk_cairo_set_source_color(cairo_context, color);
+    cairo_set_source_rgba(cairo_context, color->red, color->green, 
color->blue, color->alpha);
     cairo_set_operator(cairo_context, CAIRO_OPERATOR_SOURCE);
     cairo_paint(cairo_context);
     cairo_restore(cairo_context);
@@ -623,7 +623,8 @@ static void set_cover_dimensions(Cover_Item *cover, int 
cover_index, gdouble img
     gint PANEL_WIDTH = 0, PANEL_HEIGHT = 0;
     gint CONTBOX_WIDTH = 0, CONTBOX_HEIGHT = 0;
 
-    
gdk_drawable_get_size(GDK_DRAWABLE(gtk_widget_get_window(cdwidget->canvasbox)), 
&PANEL_WIDTH, &PANEL_HEIGHT);
+    PANEL_WIDTH = gtk_widget_get_allocated_width(cdwidget->canvasbox);
+    PANEL_HEIGHT = gtk_widget_get_allocated_height(cdwidget->canvasbox);
     gtk_widget_get_size_request(cdwidget->controlbox, &CONTBOX_WIDTH, 
&CONTBOX_HEIGHT);
 
     // If panel width not been rendered default to minimum
@@ -772,10 +773,10 @@ static void set_highlight(Cover_Item *cover, gint index, 
cairo_t * cr) {
  *
  */
 static void set_shadow_reflection(Cover_Item *cover, cairo_t *cr) {
-    GdkColor *color = coverart_get_background_display_color();
-    gdouble r = ((gdouble) (color->red >> 8)) / 255;
-    gdouble g = ((gdouble) (color->green >> 8)) / 255;
-    gdouble b = ((gdouble) (color->blue >> 8)) / 255;
+    GdkRGBA *color = coverart_get_background_display_color();
+    gdouble r = color->red;
+    gdouble g = color->green;
+    gdouble b = color->blue;
     g_free(color);
 
     cairo_save(cr);
@@ -1007,20 +1008,11 @@ void coverart_track_changed(Track *track, gint signal) {
  * Returns:
  * boolean indicating whether other handlers should be run.
  */
-static gboolean on_drawing_area_exposed(GtkWidget *draw_area, GdkEventExpose 
*event) {
+static gboolean on_drawing_area_drawn(GtkWidget *draw_area, cairo_t 
*cairo_draw_context, gpointer data) {
     if (!draw_area || !gtk_widget_get_window(draw_area))
         return FALSE;
 
-    cairo_t *cairo_draw_context;
-
-    /* get a cairo_t */
-    cairo_draw_context = gdk_cairo_create(gtk_widget_get_window(draw_area));
-
-    /* set a clip region for the expose event */
-    cairo_rectangle(cairo_draw_context, event->area.x, event->area.y, 
event->area.width, event->area.height);
-    cairo_clip(cairo_draw_context);
     draw(cairo_draw_context);
-    cairo_destroy(cairo_draw_context);
 
     return FALSE;
 }
@@ -1415,22 +1407,12 @@ void coverart_select_cover(Track *track) {
  * Returns:
  * boolean indicating whether other handlers should be run.
  */
-static gboolean on_coverart_preview_dialog_exposed(GtkWidget *drawarea, 
GdkEventExpose *event, gpointer data) {
+static gboolean on_coverart_preview_dialog_drawn(GtkWidget *draw_area, cairo_t 
*cairo_draw_context, gpointer data) {
     GdkPixbuf *image = data;
 
-    /* Draw the image using cairo */
-    cairo_t *cairo_context;
-
-    /* get a cairo_t */
-    cairo_context = gdk_cairo_create(gtk_widget_get_window(drawarea));
-    /* set a clip region for the expose event */
-    cairo_rectangle(cairo_context, event->area.x, event->area.y, 
event->area.width, event->area.height);
-    cairo_clip(cairo_context);
-
-    gdk_cairo_set_source_pixbuf(cairo_context, image, 0, 0);
-    cairo_paint(cairo_context);
+    gdk_cairo_set_source_pixbuf(cairo_draw_context, image, 0, 0);
+    cairo_paint(cairo_draw_context);
 
-    cairo_destroy(cairo_context);
     return FALSE;
 }
 
@@ -1490,7 +1472,7 @@ static void display_coverart_image_dialog(GdkPixbuf 
*image) {
 
     /* Set the draw area's minimum size */
     gtk_widget_set_size_request(drawarea, pixwidth, pixheight);
-    g_signal_connect (G_OBJECT (drawarea), "expose_event", G_CALLBACK 
(on_coverart_preview_dialog_exposed), scaled);
+    g_signal_connect (G_OBJECT (drawarea), "draw", G_CALLBACK 
(on_coverart_preview_dialog_drawn), scaled);
 
     /* Display the dialog and block everything else until the
      * dialog is closed.
@@ -1688,9 +1670,9 @@ void coverart_set_cover_from_file() {
  * of the coverart display, which is selected from the preferences.
  *
  */
-GdkColor *coverart_get_background_display_color() {
+GdkRGBA *coverart_get_background_display_color() {
     gchar *hex_string;
-    GdkColor *color;
+    GdkRGBA *color;
 
     if (album_key_list == NULL)
         hex_string = "#FFFFFF";
@@ -1699,7 +1681,7 @@ GdkColor *coverart_get_background_display_color() {
     else
         prefs_get_string_value("coverart_display_bg_color", &hex_string);
 
-    color = convert_hexstring_to_gdk_color(hex_string);
+    color = convert_hexstring_to_rgba(hex_string);
     return color;
 }
 
@@ -1711,9 +1693,9 @@ GdkColor *coverart_get_background_display_color() {
  * foreground color refers to the color used by the artist and album text.
  *
  */
-GdkColor *coverart_get_foreground_display_color() {
+GdkRGBA *coverart_get_foreground_display_color() {
     gchar *hex_string;
-    GdkColor *color;
+    GdkRGBA *color;
 
     if (album_key_list == NULL)
         hex_string = "#000000";
@@ -1722,7 +1704,7 @@ GdkColor *coverart_get_foreground_display_color() {
     else
         prefs_get_string_value("coverart_display_fg_color", &hex_string);
 
-    color = convert_hexstring_to_gdk_color(hex_string);
+    color = convert_hexstring_to_rgba(hex_string);
     return color;
 }
 
@@ -2035,17 +2017,11 @@ static void dnd_coverart_drag_data_received(GtkWidget 
*widget, GdkDragContext *d
  *
  * @GdkColor
  */
-static GdkColor *convert_hexstring_to_gdk_color(gchar *hexstring) {
-    GdkColor *colour;
-    GdkColormap *map;
-    map = gdk_colormap_get_system();
-
-    colour = g_malloc(sizeof(GdkColor));
-
-    if (!gdk_color_parse(hexstring, colour))
-        return NULL;
+static GdkRGBA *convert_hexstring_to_rgba(const gchar *hexstring) {
+    GdkRGBA *colour;
 
-    if (!gdk_colormap_alloc_color(map, colour, FALSE, TRUE))
+    colour = g_malloc(sizeof(GdkRGBA));
+    if (!gdk_rgba_parse(colour, hexstring))
         return NULL;
 
     return colour;
diff --git a/plugins/cover_display/display_coverart.h 
b/plugins/cover_display/display_coverart.h
index 962d766..8a3afe8 100644
--- a/plugins/cover_display/display_coverart.h
+++ b/plugins/cover_display/display_coverart.h
@@ -180,7 +180,7 @@ void coverart_select_cover (Itdb_Track *track);
  * of the coverart display, which is selected from the preferences.
  *
  */
-GdkColor *coverart_get_background_display_color ();
+GdkRGBA *coverart_get_background_display_color ();
 
 /**
  * coverart_get_foreground_display_color:
@@ -190,7 +190,7 @@ GdkColor *coverart_get_background_display_color ();
  * foreground color refers to the color used by the artist and album text.
  *
  */
-GdkColor *coverart_get_foreground_display_color ();
+GdkRGBA *coverart_get_foreground_display_color ();
 
 /**
  *
diff --git a/plugins/details_editor/details_editor.xml 
b/plugins/details_editor/details_editor.xml
index b878004..9d760bd 100644
--- a/plugins/details_editor/details_editor.xml
+++ b/plugins/details_editor/details_editor.xml
@@ -2492,7 +2492,6 @@ simultaneously</property>
                                   <object class="GtkHScale" 
id="details_scale_23">
                                     <property name="visible">True</property>
                                     <property name="can_focus">True</property>
-                                    <property 
name="update_policy">discontinuous</property>
                                     <property name="digits">0</property>
                                     <property name="value_pos">right</property>
                                   </object>

------------------------------------------------------------------------------
WhatsUp Gold - Download Free Network Management Software
The most intuitive, comprehensive, and cost-effective network 
management toolset available today.  Delivers lowest initial 
acquisition cost and overall TCO of any competing solution.
http://p.sf.net/sfu/whatsupgold-sd
_______________________________________________
gtkpod-cvs2 mailing list
gtkpod-cvs2@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/gtkpod-cvs2

Reply via email to