Sun, 04 Sep 2016 04:45:09 -0400
Use GdkRGBA instead of GdkColor.
--- a/pidgin/gtk3compat.h Sat Sep 03 02:50:16 2016 -0400 +++ b/pidgin/gtk3compat.h Sun Sep 04 04:45:09 2016 -0400 @@ -32,7 +32,6 @@ */ #include <gtk/gtk.h> -#include <math.h> #if GTK_CHECK_VERSION(3,16,0) @@ -53,34 +52,5 @@ #endif /* 3.16.0 */ - -#if GTK_CHECK_VERSION(3,4,0) - -static inline void -pidgin_color_chooser_set_rgb(GtkColorChooser *chooser, const GdkColor *rgb) -{ - GdkRGBA rgba; - - rgba.red = rgb->red / 65535.0; - rgba.green = rgb->green / 65535.0; - rgba.blue = rgb->blue / 65535.0; - rgba.alpha = 1.0; - - gtk_color_chooser_set_rgba(chooser, &rgba); -} - -static inline void -pidgin_color_chooser_get_rgb(GtkColorChooser *chooser, GdkColor *rgb) -{ - GdkRGBA rgba; - - gtk_color_chooser_get_rgba(chooser, &rgba); - rgb->red = (int)round(rgba.red * 65535.0); - rgb->green = (int)round(rgba.green * 65535.0); - rgb->blue = (int)round(rgba.blue * 65535.0); -} - -#endif /* 3.4.0 and gtk_color_chooser_ */ - #endif /* _PIDGINGTK3COMPAT_H_ */
--- a/pidgin/gtkblist-theme-loader.c Sat Sep 03 02:50:16 2016 -0400 +++ b/pidgin/gtkblist-theme-loader.c Sun Sep 04 04:45:09 2016 -0400 @@ -47,25 +47,25 @@ { const char *font; const char *colordesc; - GdkColor color; + GdkRGBA color; font = purple_xmlnode_get_attrib(node, "font"); if ((colordesc = purple_xmlnode_get_attrib(node, "color")) == NULL || - !gdk_color_parse(colordesc, &color)) - gdk_color_parse(DEFAULT_TEXT_COLOR, &color); + !gdk_rgba_parse(&color, colordesc)) + gdk_rgba_parse(&color, DEFAULT_TEXT_COLOR); return pidgin_theme_font_new(font, &color); } -static GdkColor * +static GdkRGBA * parse_color(PurpleXmlNode *node, const char *tag) { const char *temp = purple_xmlnode_get_attrib(node, tag); - GdkColor color; + GdkRGBA color; - if (temp && gdk_color_parse(temp, &color)) { - return gdk_color_copy(&color); + if (temp && gdk_rgba_parse(&color, temp)) { + return gdk_rgba_copy(&color); } else { return NULL; } @@ -78,7 +78,7 @@ gchar *dir, *filename_full, *data = NULL; const gchar *temp, *name; gboolean success = TRUE; - GdkColor *bgcolor, *expanded_bgcolor, *collapsed_bgcolor, *contact_color; + GdkRGBA *bgcolor, *expanded_bgcolor, *collapsed_bgcolor, *contact_color; PidginThemeFont *expanded, *collapsed, *contact, *online, *away, *offline, *idle, *message, *message_nick_said, *status; PidginBlistLayout layout; PidginBlistTheme *theme; @@ -238,13 +238,13 @@ } if (bgcolor) - gdk_color_free(bgcolor); + gdk_rgba_free(bgcolor); if (expanded_bgcolor) - gdk_color_free(expanded_bgcolor); + gdk_rgba_free(expanded_bgcolor); if (collapsed_bgcolor) - gdk_color_free(collapsed_bgcolor); + gdk_rgba_free(collapsed_bgcolor); if (contact_color) - gdk_color_free(contact_color); + gdk_rgba_free(contact_color); return PURPLE_THEME(theme); }
--- a/pidgin/gtkblist-theme.c Sat Sep 03 02:50:16 2016 -0400 +++ b/pidgin/gtkblist-theme.c Sun Sep 04 04:45:09 2016 -0400 @@ -35,18 +35,18 @@ typedef struct { /* Buddy list */ gdouble opacity; - GdkColor *bgcolor; + GdkRGBA *bgcolor; PidginBlistLayout *layout; /* groups */ - GdkColor *expanded_color; + GdkRGBA *expanded_color; PidginThemeFont *expanded; - GdkColor *collapsed_color; + GdkRGBA *collapsed_color; PidginThemeFont *collapsed; /* buddy */ - GdkColor *contact_color; + GdkRGBA *contact_color; PidginThemeFont *contact; @@ -65,7 +65,7 @@ { gchar *font; gchar color[10]; - GdkColor *gdkcolor; + GdkRGBA *gdkcolor; }; /****************************************************************************** @@ -105,7 +105,7 @@ *****************************************************************************/ PidginThemeFont * -pidgin_theme_font_new(const gchar *face, GdkColor *color) +pidgin_theme_font_new(const gchar *face, GdkRGBA *color) { PidginThemeFont *font = g_new0(PidginThemeFont, 1); font->font = g_strdup(face); @@ -120,7 +120,7 @@ if (pair != NULL) { g_free(pair->font); if (pair->gdkcolor) - gdk_color_free(pair->gdkcolor); + gdk_rgba_free(pair->gdkcolor); g_free(pair); } } @@ -137,7 +137,7 @@ copy->font = g_strdup(pair->font); strncpy(copy->color, pair->color, sizeof(copy->color) - 1); if (pair->gdkcolor) - copy->gdkcolor = pair->gdkcolor ? gdk_color_copy(pair->gdkcolor) : NULL; + copy->gdkcolor = pair->gdkcolor ? gdk_rgba_copy(pair->gdkcolor) : NULL; return copy; } @@ -152,17 +152,20 @@ } void -pidgin_theme_font_set_color(PidginThemeFont *font, const GdkColor *color) +pidgin_theme_font_set_color(PidginThemeFont *font, const GdkRGBA *color) { g_return_if_fail(font); if (font->gdkcolor) - gdk_color_free(font->gdkcolor); + gdk_rgba_free(font->gdkcolor); - font->gdkcolor = color ? gdk_color_copy(color) : NULL; + font->gdkcolor = color ? gdk_rgba_copy(color) : NULL; if (color) g_snprintf(font->color, sizeof(font->color), - "#%02x%02x%02x", color->red >> 8, color->green >> 8, color->blue >> 8); + "#%02x%02x%02x", + (unsigned int)(color->red * 255), + (unsigned int)(color->green * 255), + (unsigned int)(color->blue * 255)); else font->color[0] = '\0'; } @@ -174,7 +177,7 @@ return font->font; } -const GdkColor * +const GdkRGBA * pidgin_theme_font_get_color(PidginThemeFont *font) { g_return_val_if_fail(font, NULL); @@ -323,20 +326,20 @@ /* Buddy List */ if (priv->bgcolor) - gdk_color_free(priv->bgcolor); + gdk_rgba_free(priv->bgcolor); g_free(priv->layout); /* Group */ if (priv->expanded_color) - gdk_color_free(priv->expanded_color); + gdk_rgba_free(priv->expanded_color); pidgin_theme_font_free(priv->expanded); if (priv->collapsed_color) - gdk_color_free(priv->collapsed_color); + gdk_rgba_free(priv->collapsed_color); pidgin_theme_font_free(priv->collapsed); /* Buddy */ if (priv->contact_color) - gdk_color_free(priv->contact_color); + gdk_rgba_free(priv->contact_color); pidgin_theme_font_free(priv->contact); pidgin_theme_font_free(priv->online); pidgin_theme_font_free(priv->away); @@ -372,7 +375,7 @@ properties[PROP_BACKGROUND_COLOR] = g_param_spec_boxed("background-color", "Background Color", "The background color for the buddy list", - GDK_TYPE_COLOR, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + GDK_TYPE_RGBA, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); properties[PROP_OPACITY] = g_param_spec_double("opacity", "Opacity", "The opacity of the buddy list", @@ -386,7 +389,7 @@ properties[PROP_EXPANDED_COLOR] = g_param_spec_boxed("expanded-color", "Expanded Background Color", "The background color of an expanded group", - GDK_TYPE_COLOR, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + GDK_TYPE_RGBA, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); properties[PROP_EXPANDED_TEXT] = g_param_spec_pointer("expanded-text", "Expanded Text", @@ -396,7 +399,7 @@ properties[PROP_COLLAPSED_COLOR] = g_param_spec_boxed("collapsed-color", "Collapsed Background Color", "The background color of a collapsed group", - GDK_TYPE_COLOR, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + GDK_TYPE_RGBA, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); properties[PROP_COLLAPSED_TEXT] = g_param_spec_pointer("collapsed-text", "Collapsed Text", @@ -407,7 +410,7 @@ properties[PROP_CONTACT_COLOR] = g_param_spec_boxed("contact-color", "Contact/Chat Background Color", "The background color of a contact or chat", - GDK_TYPE_COLOR, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + GDK_TYPE_RGBA, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); properties[PROP_CONTACT] = g_param_spec_pointer("contact", "Contact Text", @@ -530,7 +533,7 @@ /* get methods */ -GdkColor * +GdkRGBA * pidgin_blist_theme_get_background_color(PidginBlistTheme *theme) { PidginBlistThemePrivate *priv; @@ -566,7 +569,7 @@ return priv->layout; } -GdkColor * +GdkRGBA * pidgin_blist_theme_get_expanded_background_color(PidginBlistTheme *theme) { PidginBlistThemePrivate *priv; @@ -590,7 +593,7 @@ return priv->expanded; } -GdkColor * +GdkRGBA * pidgin_blist_theme_get_collapsed_background_color(PidginBlistTheme *theme) { PidginBlistThemePrivate *priv; @@ -614,7 +617,7 @@ return priv->collapsed; } -GdkColor * +GdkRGBA * pidgin_blist_theme_get_contact_color(PidginBlistTheme *theme) { PidginBlistThemePrivate *priv; @@ -724,7 +727,7 @@ /* Set Methods */ void -pidgin_blist_theme_set_background_color(PidginBlistTheme *theme, const GdkColor *color) +pidgin_blist_theme_set_background_color(PidginBlistTheme *theme, const GdkRGBA *color) { PidginBlistThemePrivate *priv; @@ -733,8 +736,8 @@ priv = PIDGIN_BLIST_THEME_GET_PRIVATE(theme); if (priv->bgcolor) - gdk_color_free(priv->bgcolor); - priv->bgcolor = color ? gdk_color_copy(color) : NULL; + gdk_rgba_free(priv->bgcolor); + priv->bgcolor = color ? gdk_rgba_copy(color) : NULL; g_object_notify_by_pspec(G_OBJECT(theme), properties[PROP_BACKGROUND_COLOR]); } @@ -769,7 +772,7 @@ } void -pidgin_blist_theme_set_expanded_background_color(PidginBlistTheme *theme, const GdkColor *color) +pidgin_blist_theme_set_expanded_background_color(PidginBlistTheme *theme, const GdkRGBA *color) { PidginBlistThemePrivate *priv; @@ -778,8 +781,8 @@ priv = PIDGIN_BLIST_THEME_GET_PRIVATE(theme); if (priv->expanded_color) - gdk_color_free(priv->expanded_color); - priv->expanded_color = color ? gdk_color_copy(color) : NULL; + gdk_rgba_free(priv->expanded_color); + priv->expanded_color = color ? gdk_rgba_copy(color) : NULL; g_object_notify_by_pspec(G_OBJECT(theme), properties[PROP_EXPANDED_COLOR]); } @@ -800,7 +803,7 @@ } void -pidgin_blist_theme_set_collapsed_background_color(PidginBlistTheme *theme, const GdkColor *color) +pidgin_blist_theme_set_collapsed_background_color(PidginBlistTheme *theme, const GdkRGBA *color) { PidginBlistThemePrivate *priv; @@ -809,8 +812,8 @@ priv = PIDGIN_BLIST_THEME_GET_PRIVATE(theme); if (priv->collapsed_color) - gdk_color_free(priv->collapsed_color); - priv->collapsed_color = color ? gdk_color_copy(color) : NULL; + gdk_rgba_free(priv->collapsed_color); + priv->collapsed_color = color ? gdk_rgba_copy(color) : NULL; g_object_notify_by_pspec(G_OBJECT(theme), properties[PROP_COLLAPSED_COLOR]); } @@ -831,7 +834,7 @@ } void -pidgin_blist_theme_set_contact_color(PidginBlistTheme *theme, const GdkColor *color) +pidgin_blist_theme_set_contact_color(PidginBlistTheme *theme, const GdkRGBA *color) { PidginBlistThemePrivate *priv; @@ -840,8 +843,8 @@ priv = PIDGIN_BLIST_THEME_GET_PRIVATE(theme); if (priv->contact_color) - gdk_color_free(priv->contact_color); - priv->contact_color = color ? gdk_color_copy(color) : NULL; + gdk_rgba_free(priv->contact_color); + priv->contact_color = color ? gdk_rgba_copy(color) : NULL; g_object_notify_by_pspec(G_OBJECT(theme), properties[PROP_CONTACT_COLOR]); }
--- a/pidgin/gtkblist-theme.h Sat Sep 03 02:50:16 2016 -0400 +++ b/pidgin/gtkblist-theme.h Sun Sep 04 04:45:09 2016 -0400 @@ -103,7 +103,7 @@ * * Returns: A newly created PidginThemeFont */ -PidginThemeFont * pidgin_theme_font_new(const gchar *face, GdkColor *color); +PidginThemeFont *pidgin_theme_font_new(const gchar *face, GdkRGBA *color); /** * pidgin_theme_font_free: @@ -129,7 +129,7 @@ * * Set the color of a PidginThemeFont. */ -void pidgin_theme_font_set_color(PidginThemeFont *font, const GdkColor *color); +void pidgin_theme_font_set_color(PidginThemeFont *font, const GdkRGBA *color); /** * pidgin_theme_font_get_font_face: @@ -145,11 +145,11 @@ * pidgin_theme_font_get_color: * @font: The PidginThemeFont * - * Get the color of a PidginThemeFont as a GdkColor object. + * Get the color of a PidginThemeFont as a GdkRGBA object. * * Returns: The color, or NULL if none is set. */ -const GdkColor * pidgin_theme_font_get_color(PidginThemeFont *font); +const GdkRGBA *pidgin_theme_font_get_color(PidginThemeFont *font); /** * pidgin_theme_font_get_color_describe: @@ -189,7 +189,7 @@ * * Returns: A gdk color. */ - GdkColor *pidgin_blist_theme_get_background_color(PidginBlistTheme *theme); +GdkRGBA *pidgin_blist_theme_get_background_color(PidginBlistTheme *theme); /** * pidgin_blist_theme_get_opacity: @@ -220,7 +220,7 @@ * * Returns: A gdk color. */ -GdkColor *pidgin_blist_theme_get_expanded_background_color(PidginBlistTheme *theme); +GdkRGBA *pidgin_blist_theme_get_expanded_background_color(PidginBlistTheme *theme); /** * pidgin_blist_theme_get_expanded_text_info: @@ -240,7 +240,7 @@ * * Returns: A gdk color. */ -GdkColor *pidgin_blist_theme_get_collapsed_background_color(PidginBlistTheme *theme); +GdkRGBA *pidgin_blist_theme_get_collapsed_background_color(PidginBlistTheme *theme); /** * pidgin_blist_theme_get_collapsed_text_info: @@ -260,7 +260,7 @@ * * Returns: A gdkcolor for contacts and chats. */ -GdkColor *pidgin_blist_theme_get_contact_color(PidginBlistTheme *theme); +GdkRGBA *pidgin_blist_theme_get_contact_color(PidginBlistTheme *theme); /** * pidgin_blist_theme_get_contact_text_info: @@ -352,7 +352,7 @@ * * Sets the background color to be used for this buddy list theme. */ -void pidgin_blist_theme_set_background_color(PidginBlistTheme *theme, const GdkColor *color); +void pidgin_blist_theme_set_background_color(PidginBlistTheme *theme, const GdkRGBA *color); /** * pidgin_blist_theme_set_opacity: @@ -379,7 +379,7 @@ * * Sets the background color to be used for expanded groups. */ -void pidgin_blist_theme_set_expanded_background_color(PidginBlistTheme *theme, const GdkColor *color); +void pidgin_blist_theme_set_expanded_background_color(PidginBlistTheme *theme, const GdkRGBA *color); /** * pidgin_blist_theme_set_expanded_text_info: @@ -397,7 +397,7 @@ * * Sets the background color to be used for collapsed groups. */ -void pidgin_blist_theme_set_collapsed_background_color(PidginBlistTheme *theme, const GdkColor *color); +void pidgin_blist_theme_set_collapsed_background_color(PidginBlistTheme *theme, const GdkRGBA *color); /** * pidgin_blist_theme_set_collapsed_text_info: @@ -415,7 +415,7 @@ * * Sets the background color to be used for contacts and chats. */ -void pidgin_blist_theme_set_contact_color(PidginBlistTheme *theme, const GdkColor *color); +void pidgin_blist_theme_set_contact_color(PidginBlistTheme *theme, const GdkRGBA *color); /** * pidgin_blist_theme_set_contact_text_info:
--- a/pidgin/gtkblist.c Sat Sep 03 02:50:16 2016 -0400 +++ b/pidgin/gtkblist.c Sun Sep 04 04:45:09 2016 -0400 @@ -5617,7 +5617,7 @@ "visible", GROUP_EXPANDER_VISIBLE_COLUMN, "expander-visible", GROUP_EXPANDER_COLUMN, "sensitive", GROUP_EXPANDER_COLUMN, - "cell-background-gdk", BGCOLOR_COLUMN, + "cell-background-rgba", BGCOLOR_COLUMN, NULL); /* contact */ @@ -5627,7 +5627,7 @@ "visible", CONTACT_EXPANDER_VISIBLE_COLUMN, "expander-visible", CONTACT_EXPANDER_COLUMN, "sensitive", CONTACT_EXPANDER_COLUMN, - "cell-background-gdk", BGCOLOR_COLUMN, + "cell-background-rgba", BGCOLOR_COLUMN, NULL); for (i = 0; i < 5; i++) { @@ -5639,7 +5639,7 @@ gtk_tree_view_column_set_attributes(column, rend, "pixbuf", STATUS_ICON_COLUMN, "visible", STATUS_ICON_VISIBLE_COLUMN, - "cell-background-gdk", BGCOLOR_COLUMN, + "cell-background-rgba", BGCOLOR_COLUMN, NULL); g_object_set(rend, "xalign", 0.0, "xpad", 6, "ypad", 0, NULL); @@ -5648,7 +5648,7 @@ gtkblist->text_rend = rend = gtk_cell_renderer_text_new(); gtk_tree_view_column_pack_start(column, rend, TRUE); gtk_tree_view_column_set_attributes(column, rend, - "cell-background-gdk", BGCOLOR_COLUMN, + "cell-background-rgba", BGCOLOR_COLUMN, "markup", NAME_COLUMN, NULL); g_signal_connect(G_OBJECT(rend), "editing-started", G_CALLBACK(gtk_blist_renderer_editing_started_cb), NULL); @@ -5664,7 +5664,7 @@ gtk_tree_view_column_set_attributes(column, rend, "markup", IDLE_COLUMN, "visible", IDLE_VISIBLE_COLUMN, - "cell-background-gdk", BGCOLOR_COLUMN, + "cell-background-rgba", BGCOLOR_COLUMN, NULL); } else if (emblem == i) { /* emblem */ @@ -5672,7 +5672,7 @@ g_object_set(rend, "xalign", 1.0, "yalign", 0.5, "ypad", 0, "xpad", 3, NULL); gtk_tree_view_column_pack_start(column, rend, FALSE); gtk_tree_view_column_set_attributes(column, rend, "pixbuf", EMBLEM_COLUMN, - "cell-background-gdk", BGCOLOR_COLUMN, + "cell-background-rgba", BGCOLOR_COLUMN, "visible", EMBLEM_VISIBLE_COLUMN, NULL); } else if (protocol_icon == i) { @@ -5682,7 +5682,7 @@ gtk_tree_view_column_set_attributes(column, rend, "pixbuf", PROTOCOL_ICON_COLUMN, "visible", PROTOCOL_ICON_VISIBLE_COLUMN, - "cell-background-gdk", BGCOLOR_COLUMN, + "cell-background-rgba", BGCOLOR_COLUMN, NULL); g_object_set(rend, "xalign", 0.0, "xpad", 3, "ypad", 0, NULL); @@ -5692,7 +5692,7 @@ g_object_set(rend, "xalign", 1.0, "ypad", 0, NULL); gtk_tree_view_column_pack_start(column, rend, FALSE); gtk_tree_view_column_set_attributes(column, rend, "pixbuf", BUDDY_ICON_COLUMN, - "cell-background-gdk", BGCOLOR_COLUMN, + "cell-background-rgba", BGCOLOR_COLUMN, "visible", BUDDY_ICON_VISIBLE_COLUMN, NULL); } @@ -5924,7 +5924,7 @@ GDK_TYPE_PIXBUF, /* Buddy icon */ G_TYPE_BOOLEAN, /* Buddy icon visible */ G_TYPE_POINTER, /* Node */ - GDK_TYPE_COLOR, /* bgcolor */ + GDK_TYPE_RGBA, /* bgcolor */ G_TYPE_BOOLEAN, /* Group expander */ G_TYPE_BOOLEAN, /* Group expander visible */ G_TYPE_BOOLEAN, /* Contact expander */ @@ -6403,7 +6403,7 @@ GtkTreeIter iter; GtkTreePath *path; gboolean expanded; - GdkColor *bgcolor = NULL; + GdkRGBA *bgcolor = NULL; GdkPixbuf *avatar = NULL; PidginBlistTheme *theme = NULL; @@ -6510,7 +6510,7 @@ { PurplePresence *presence = purple_buddy_get_presence(buddy); GdkPixbuf *status, *avatar, *emblem, *protocol_icon; - GdkColor *color = NULL; + GdkRGBA *color = NULL; char *mark; char *idle = NULL; gboolean expanded = ((struct _pidgin_blist_node *)purple_blist_node_get_ui_data(node->parent))->contact_expanded; @@ -6655,7 +6655,7 @@ GdkPixbuf *status; gchar *mark, *tmp; const gchar *fg_color, *font; - GdkColor *color = NULL; + GdkRGBA *color = NULL; PidginBlistTheme *theme; PidginThemeFont *pair; gboolean selected = (gtkblist->selected_node == cnode); @@ -6767,7 +6767,7 @@ PidginBlistNode *ui; PurpleConversation *conv; gboolean hidden = FALSE; - GdkColor *bgcolor = NULL; + GdkRGBA *bgcolor = NULL; PidginThemeFont *pair; PidginBlistTheme *theme; gboolean selected = (gtkblist->selected_node == node);
--- a/pidgin/gtkconv-theme.c Sat Sep 03 02:50:16 2016 -0400 +++ b/pidgin/gtkconv-theme.c Sun Sep 04 04:45:09 2016 -0400 @@ -763,16 +763,15 @@ { char *file = g_build_filename(dir, "Contents", "Resources", "Incoming", "SenderColors.txt", NULL); char *contents; - priv->nick_colors = g_array_new(FALSE, FALSE, sizeof(GdkColor)); + priv->nick_colors = g_array_new(FALSE, FALSE, sizeof(GdkRGBA)); if (g_file_get_contents(file, &contents, NULL, NULL)) { int i; gchar ** color_strings = g_strsplit_set(contents, "\r\n:", -1); for(i=0; color_strings[i]; i++) { - GdkColor color; - if(gdk_color_parse(color_strings[i], &color)) - { + GdkRGBA color; + if (gdk_rgba_parse(&color, color_strings[i])) { g_array_append_val(priv->nick_colors, color); } }
--- a/pidgin/gtkconv.c Sat Sep 03 02:50:16 2016 -0400 +++ b/pidgin/gtkconv.c Sun Sep 04 04:45:09 2016 -0400 @@ -140,8 +140,6 @@ #define BUDDYICON_SIZE_MIN 32 #define BUDDYICON_SIZE_MAX 96 -#define LUMINANCE(c) (float)((0.3*(c.red))+(0.59*(c.green))+(0.11*(c.blue))) - #define MIN_LUMINANCE_CONTRAST_RATIO 4.5 #define NICK_COLOR_GENERATE_COUNT 220 @@ -204,9 +202,9 @@ static void update_typing_icon(PidginConversation *gtkconv); static void update_typing_message(PidginConversation *gtkconv, const char *message); gboolean pidgin_conv_has_focus(PurpleConversation *conv); -static GArray* generate_nick_colors(guint numcolors, GdkColor background); -gfloat luminance(GdkColor color); -static gboolean color_is_visible(GdkColor foreground, GdkColor background, gfloat min_contrast_ratio); +static GArray* generate_nick_colors(guint numcolors, GdkRGBA background); +gfloat luminance(GdkRGBA color); +static gboolean color_is_visible(GdkRGBA foreground, GdkRGBA background, gfloat min_contrast_ratio); static GtkTextTag *get_buddy_tag(PurpleChatConversation *chat, const char *who, PurpleMessageFlags flag, gboolean create); static void pidgin_conv_update_fields(PurpleConversation *conv, PidginConvFields fields); static void focus_out_from_menubar(GtkWidget *wid, PidginConvWindow *win); @@ -218,17 +216,18 @@ int width, int height); static gboolean pidgin_conv_xy_to_right_infopane(PidginConvWindow *win, int x, int y); -static const GdkColor * +static const GdkRGBA * get_nick_color(PidginConversation *gtkconv, const gchar *name) { - static GdkColor col; + static GdkRGBA col; if (name == NULL) { col.red = col.green = col.blue = 0; + col.alpha = 1; return &col; } - col = g_array_index(gtkconv->nick_colors, GdkColor, + col = g_array_index(gtkconv->nick_colors, GdkRGBA, g_str_hash(name) % gtkconv->nick_colors->len); return &col; @@ -4295,7 +4294,7 @@ const gchar *name, *alias; gchar *tmp, *alias_key; PurpleChatUserFlags flags; - GdkColor *color = NULL; + GdkRGBA *color = NULL; alias = purple_chat_user_get_alias(cb); name = purple_chat_user_get_name(cb); @@ -4329,7 +4328,7 @@ GtkTextTag *tag = gtk_text_tag_table_lookup( gtk_text_buffer_get_tag_table(GTK_IMHTML(gtkconv->webview)->text_buffer), "send-name"); - g_object_get(tag, "foreground-gdk", &color, NULL); + g_object_get(tag, "foreground-rgba", &color, NULL); #endif /* if 0 */ } else { GtkTextTag *tag; @@ -4337,7 +4336,7 @@ g_object_set(G_OBJECT(tag), "style", PANGO_STYLE_NORMAL, NULL); if ((tag = get_buddy_tag(chat, name, PURPLE_MESSAGE_NICK, FALSE))) g_object_set(G_OBJECT(tag), "style", PANGO_STYLE_NORMAL, NULL); - color = (GdkColor*)get_nick_color(gtkconv, name); + color = (GdkRGBA*)get_nick_color(gtkconv, name); } gtk_list_store_insert_with_values(ls, &iter, @@ -4369,7 +4368,7 @@ #if 0 if (is_me && color) - gdk_color_free(color); + gdk_rgba_free(color); #endif g_free(alias_key); } @@ -5106,7 +5105,7 @@ ls = gtk_list_store_new(CHAT_USERS_COLUMNS, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, - GDK_TYPE_COLOR, G_TYPE_INT, G_TYPE_STRING); + GDK_TYPE_RGBA, G_TYPE_INT, G_TYPE_STRING); gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(ls), CHAT_USERS_ALIAS_KEY_COLUMN, sort_chat_users, NULL, NULL); @@ -5151,7 +5150,7 @@ col = gtk_tree_view_column_new_with_attributes(NULL, rend, "text", CHAT_USERS_ALIAS_COLUMN, - "foreground-gdk", CHAT_USERS_COLOR_COLUMN, + "foreground-rgba", CHAT_USERS_COLOR_COLUMN, "weight", CHAT_USERS_WEIGHT_COLUMN, NULL); @@ -5892,7 +5891,7 @@ /* TODO WEBKIT */ #if 0 static PangoFontDescription *font_desc = NULL; - static GdkColor *color = NULL; + static GdkRGBA *color = NULL; static gboolean enable = TRUE; if (font_desc == NULL) { @@ -5905,13 +5904,13 @@ font_desc = pango_font_description_from_string(string); g_free(string); if (color == NULL) { - GdkColor def = {0, 0x8888, 0x8888, 0x8888}; - color = gdk_color_copy(&def); + GdkRGBA def = {0x8888/65535.0f, 0x8888/65535.0f, 0x8888/65535.0f, 1.0}; + color = gdk_rgba_copy(&def); } } gtk_text_buffer_create_tag(GTK_IMHTML(widget)->text_buffer, "TYPING-NOTIFICATION", - "foreground-gdk", color, + "foreground-rgba", color, "font-desc", font_desc, NULL); @@ -6065,7 +6064,15 @@ pidgin_conv_placement_place(gtkconv); if (generated_nick_colors == NULL) { - generated_nick_colors = generate_nick_colors(NICK_COLOR_GENERATE_COUNT, gtk_widget_get_style(gtkconv->webview)->base[GTK_STATE_NORMAL]); + GdkColor color; + GdkRGBA rgba; + /* FIXME: No matter how I ask the GtkStyleContext, it always gives me + * back black instead of the _actual_ background colour. */ + color = gtk_widget_get_style(gtkconv->webview)->base[GTK_STATE_NORMAL]; + rgba.red = color.red / 65535.0f; + rgba.green = color.green / 65535.0f; + rgba.blue = color.blue / 65535.0f; + generated_nick_colors = generate_nick_colors(NICK_COLOR_GENERATE_COUNT, rgba); } if(NULL == (gtkconv->nick_colors = pidgin_conversation_theme_get_nick_colors(gtkconv->theme))) @@ -6192,18 +6199,20 @@ static const char * get_text_tag_color(GtkTextTag *tag) { - GdkColor *color = NULL; + GdkRGBA *color = NULL; gboolean set = FALSE; static char colcode[] = "#XXXXXX"; if (tag) - g_object_get(G_OBJECT(tag), "foreground-set", &set, "foreground-gdk", &color, NULL); + g_object_get(G_OBJECT(tag), "foreground-set", &set, "foreground-rgba", &color, NULL); if (set && color) g_snprintf(colcode, sizeof(colcode), "#%02x%02x%02x", - color->red >> 8, color->green >> 8, color->blue >> 8); + (unsigned int)(color->red * 255), + (unsigned int)(color->green * 255), + (unsigned int)(color->blue * 255)); else colcode[0] = '\0'; if (color) - gdk_color_free(color); + gdk_rgba_free(color); return colcode; } @@ -6305,7 +6314,7 @@ else buddytag = gtk_text_buffer_create_tag( buffer, str, - "foreground-gdk", get_nick_color(gtkconv, who), + "foreground-rgba", get_nick_color(gtkconv, who), "weight", purple_blist_find_buddy(purple_conversation_get_account(conv), who) ? PANGO_WEIGHT_BOLD : PANGO_WEIGHT_NORMAL, NULL); @@ -6469,8 +6478,11 @@ replace = alias; } else if (g_str_has_prefix(cur, "%senderColor%")) { - const GdkColor *color = get_nick_color(PIDGIN_CONVERSATION(conv), name); - replace = freeval = g_strdup_printf("#%02x%02x%02x", (color->red >> 8), (color->green >> 8), (color->blue >> 8)); + const GdkRGBA *color = get_nick_color(PIDGIN_CONVERSATION(conv), name); + replace = freeval = g_strdup_printf("#%02x%02x%02x", + (unsigned int)(color->red * 255), + (unsigned int)(color->green * 255), + (unsigned int)(color->blue * 255)); } else if (g_str_has_prefix(cur, "%service%")) { replace = purple_account_get_protocol_name(purple_conversation_get_account(conv)); @@ -11140,18 +11152,16 @@ } -gfloat luminance(GdkColor color) +gfloat luminance(GdkRGBA color) { gfloat r, g, b; gfloat rr, gg, bb; gfloat cutoff = 0.03928, scale = 12.92; gfloat a = 0.055, d = 1.055, p = 2.2; - gfloat sRGBScale = 65535.0; - - /* Normalizing color values to [0,1] from the sRGB space.*/ - rr = (float)(color.red)/sRGBScale; - gg = (float)(color.green)/sRGBScale; - bb = (float)(color.blue)/sRGBScale; + + rr = color.red; + gg = color.green; + bb = color.blue; r = (rr > cutoff) ? pow((rr+a)/d, p) : rr/scale; g = (gg > cutoff) ? pow((gg+a)/d, p) : gg/scale; @@ -11162,10 +11172,11 @@ /* Algorithm from https://www.w3.org/TR/2008/REC-WCAG20-20081211/relative-luminance.xml */ static gboolean -color_is_visible(GdkColor foreground, GdkColor background, gfloat min_contrast_ratio) +color_is_visible(GdkRGBA foreground, GdkRGBA background, gfloat min_contrast_ratio) { gfloat lfg, lbg, lmin, lmax; gfloat luminosity_ratio; + gfloat nr, dr; lfg = luminance(foreground); lbg = luminance(background); @@ -11175,7 +11186,6 @@ else lmax = lbg, lmin = lfg; - gfloat nr, dr; nr = lmax + 0.05, dr = lmin - 0.05; if ( dr == 0 ) dr += 0.01; @@ -11188,18 +11198,18 @@ static GArray* -generate_nick_colors(guint numcolors, GdkColor background) +generate_nick_colors(guint numcolors, GdkRGBA background) { guint i = 0, j = 0; - GArray *colors = g_array_new(FALSE, FALSE, sizeof(GdkColor)); - GdkColor nick_highlight; - GdkColor send_color; + GArray *colors = g_array_new(FALSE, FALSE, sizeof(GdkRGBA)); + GdkRGBA nick_highlight; + GdkRGBA send_color; time_t breakout_time; - gdk_color_parse(DEFAULT_HIGHLIGHT_COLOR, &nick_highlight); - gdk_color_parse(DEFAULT_SEND_COLOR, &send_color); - - srand(background.red + background.green + background.blue + 1); + gdk_rgba_parse(&nick_highlight, DEFAULT_HIGHLIGHT_COLOR); + gdk_rgba_parse(&send_color, DEFAULT_SEND_COLOR); + + srand(background.red * 65535 + background.green * 65535 + background.blue * 65535 + 1); breakout_time = time(NULL) + 3; @@ -11209,7 +11219,7 @@ */ while (i < numcolors && j < PIDGIN_NUM_NICK_SEED_COLORS && time(NULL) < breakout_time) { - GdkColor color = nick_seed_colors[j]; + GdkRGBA color = nick_seed_colors[j]; if (color_is_visible(color, background, MIN_LUMINANCE_CONTRAST_RATIO) && color_is_visible(color, nick_highlight, MIN_LUMINANCE_CONTRAST_RATIO) && @@ -11228,7 +11238,7 @@ */ while(i < numcolors && time(NULL) < breakout_time) { - GdkColor color = { 0, rand() % 65536, rand() % 65536, rand() % 65536 }; + GdkRGBA color = {rand() % 65536 / 65535.f, rand() % 65536 / 65535.f, rand() % 65536 / 65535.f, 1}; if (color_is_visible(color, background, MIN_LUMINANCE_CONTRAST_RATIO) && color_is_visible(color, nick_highlight, MIN_LUMINANCE_CONTRAST_RATIO) && @@ -11245,7 +11255,7 @@ if( i == 0 ) { /* To remove errors caused by an empty array. */ - GdkColor color = {0, 32768, 32768, 32768}; + GdkRGBA color = {0.5, 0.5, 0.5, 1.0}; g_array_append_val(colors, color); }
--- a/pidgin/gtknickcolors.h Sat Sep 03 02:50:16 2016 -0400 +++ b/pidgin/gtknickcolors.h Sun Sep 04 04:45:09 2016 -0400 @@ -27,31 +27,31 @@ * @title: Conversation Nick Colors */ -static const GdkColor nick_seed_colors[] = { - {0, 64764, 59881, 20303}, /* Butter #1 */ - {0, 60909, 54484, 0}, /* Butter #2 */ - {0, 50372, 41120, 0}, /* Butter #3 */ - {0, 64764, 44975, 15934}, /* Orange #1 */ - {0, 62965, 31097, 0}, /* Orange #2 */ - {0, 52942, 23644, 0}, /* Orange #3 */ - {0, 59811, 47545, 28270}, /* Chocolate #1 */ - {0, 49601, 32125, 4369}, /* Chocolate #2 */ - {0, 36751, 22873, 514}, /* Chocolate #3 */ - {0, 35466, 58082, 13364}, /* Chameleon #1 */ - {0, 29555, 53970, 5654}, /* Chameleon #2 */ - {0, 20046, 39578, 1542}, /* Chameleon #3 */ - {0, 29289, 40863, 53199}, /* Sky Blue #1 */ - {0, 13364, 25957, 42148}, /* Sky Blue #2 */ - {0, 8224, 19018, 34695}, /* Sky Blue #3 */ - {0, 44461, 32639, 43167}, /* Plum #1 */ - {0, 30069, 20560, 31611}, /* Plum #2 */ - {0, 23644, 13621, 26214}, /* Plum #3 */ - {0, 61423, 10537, 10537}, /* Scarlet Red #1 */ - {0, 52428, 0, 0}, /* Scarlet Red #2 */ - {0, 42148, 0, 0}, /* Scarlet Red #3 */ - {0, 34952, 35466, 34181}, /* Aluminium #4*/ - {0, 21845, 22359, 21331}, /* Aluminium #5*/ - {0, 11822, 13364, 13878} /* Aluminium #6*/ +static const GdkRGBA nick_seed_colors[] = { + {64764/65535.0f, 59881/65535.0f, 20303/65535.0f, 1}, /* Butter #1 */ + {60909/65535.0f, 54484/65535.0f, 0/65535.0f, 1}, /* Butter #2 */ + {50372/65535.0f, 41120/65535.0f, 0/65535.0f, 1}, /* Butter #3 */ + {64764/65535.0f, 44975/65535.0f, 15934/65535.0f, 1}, /* Orange #1 */ + {62965/65535.0f, 31097/65535.0f, 0/65535.0f, 1}, /* Orange #2 */ + {52942/65535.0f, 23644/65535.0f, 0/65535.0f, 1}, /* Orange #3 */ + {59811/65535.0f, 47545/65535.0f, 28270/65535.0f, 1}, /* Chocolate #1 */ + {49601/65535.0f, 32125/65535.0f, 4369/65535.0f, 1}, /* Chocolate #2 */ + {36751/65535.0f, 22873/65535.0f, 514/65535.0f, 1}, /* Chocolate #3 */ + {35466/65535.0f, 58082/65535.0f, 13364/65535.0f, 1}, /* Chameleon #1 */ + {29555/65535.0f, 53970/65535.0f, 5654/65535.0f, 1}, /* Chameleon #2 */ + {20046/65535.0f, 39578/65535.0f, 1542/65535.0f, 1}, /* Chameleon #3 */ + {29289/65535.0f, 40863/65535.0f, 53199/65535.0f, 1}, /* Sky Blue #1 */ + {13364/65535.0f, 25957/65535.0f, 42148/65535.0f, 1}, /* Sky Blue #2 */ + { 8224/65535.0f, 19018/65535.0f, 34695/65535.0f, 1}, /* Sky Blue #3 */ + {44461/65535.0f, 32639/65535.0f, 43167/65535.0f, 1}, /* Plum #1 */ + {30069/65535.0f, 20560/65535.0f, 31611/65535.0f, 1}, /* Plum #2 */ + {23644/65535.0f, 13621/65535.0f, 26214/65535.0f, 1}, /* Plum #3 */ + {61423/65535.0f, 10537/65535.0f, 10537/65535.0f, 1}, /* Scarlet Red #1 */ + {52428/65535.0f, 0/65535.0f, 0/65535.0f, 1}, /* Scarlet Red #2 */ + {42148/65535.0f, 0/65535.0f, 0/65535.0f, 1}, /* Scarlet Red #3 */ + {34952/65535.0f, 35466/65535.0f, 34181/65535.0f, 1}, /* Aluminium #4*/ + {21845/65535.0f, 22359/65535.0f, 21331/65535.0f, 1}, /* Aluminium #5*/ + {11822/65535.0f, 13364/65535.0f, 13878/65535.0f, 1} /* Aluminium #6*/ }; #define PIDGIN_NUM_NICK_SEED_COLORS (sizeof(nick_seed_colors) / sizeof(nick_seed_colors[0]))
--- a/pidgin/gtkwebviewtoolbar.c Sat Sep 03 02:50:16 2016 -0400 +++ b/pidgin/gtkwebviewtoolbar.c Sun Sep 04 04:45:09 2016 -0400 @@ -103,10 +103,6 @@ static GtkHBoxClass *parent_class = NULL; -/* XXX: I would bet, there is a better way to do this */ -static guint resources_ref_cnt = 0; -static GRegex *color_parse_rgb = NULL; - /****************************************************************************** * Prototypes *****************************************************************************/ @@ -120,10 +116,9 @@ *****************************************************************************/ static gboolean -pidgin_color_parse(const gchar *str, GdkColor *color) +pidgin_color_parse(const gchar *str, GdkRGBA *color) { - GdkColor dummy_color; - gboolean succ; + GdkRGBA dummy_color; if (str == NULL) return FALSE; @@ -139,50 +134,18 @@ if (strcmp(str, "inherit") == 0) { return FALSE; - } else if (strncmp(str, "rgb", 3) == 0) { - GMatchInfo *match; - - g_regex_match(color_parse_rgb, str, 0, &match); - succ = g_match_info_matches(match); - if (succ) { - int m_start, val; - - g_match_info_fetch_pos(match, 1, &m_start, NULL); - val = strtoul(str + m_start, NULL, 10); - if (val >= 0 && val <= 255) - color->red = val * 256; - else - succ = FALSE; - - g_match_info_fetch_pos(match, 2, &m_start, NULL); - val = strtoul(str + m_start, NULL, 10); - if (val >= 0 && val <= 255) - color->green = val * 256; - else - succ = FALSE; - - g_match_info_fetch_pos(match, 3, &m_start, NULL); - val = strtoul(str + m_start, NULL, 10); - if (val >= 0 && val <= 255) - color->blue = val * 256; - else - succ = FALSE; - } - - g_match_info_free(match); - return succ; + } else { + return gdk_rgba_parse(color, str); } - - purple_debug_warning("gtkwebviewtoolbar", - "Invalid color format: \"%s\"", str); - return FALSE; } static gchar* -pidgin_color_to_str(GdkColor *color) +pidgin_color_to_str(GdkRGBA *color) { - return g_strdup_printf("#%02X%02X%02X", color->red / 256, - color->green / 256, color->blue / 256); + return g_strdup_printf("#%02X%02X%02X", + (unsigned int)(color->red * 255), + (unsigned int)(color->green * 255), + (unsigned int)(color->blue * 255)); } static void @@ -341,7 +304,7 @@ do_fgcolor(GtkDialog *dialog, gint response, gpointer _toolbar) { PidginWebViewToolbar *toolbar = _toolbar; - GdkColor text_color; + GdkRGBA text_color; gchar *open_tag; if (response != GTK_RESPONSE_OK) { @@ -349,7 +312,7 @@ return; } - pidgin_color_chooser_get_rgb(GTK_COLOR_CHOOSER(dialog), &text_color); + gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(dialog), &text_color); open_tag = pidgin_color_to_str(&text_color); pidgin_webview_toggle_forecolor(PIDGIN_WEBVIEW(toolbar->webview), open_tag); @@ -365,7 +328,7 @@ PIDGIN_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); if (gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(color))) { - GdkColor fgcolor; + GdkRGBA fgcolor; gchar *color = pidgin_webview_get_current_forecolor( PIDGIN_WEBVIEW(toolbar->webview)); @@ -378,7 +341,7 @@ GTK_COLOR_CHOOSER(priv->fgcolor_dialog), FALSE); if (pidgin_color_parse(color, &fgcolor)) { - pidgin_color_chooser_set_rgb( + gtk_color_chooser_set_rgba( GTK_COLOR_CHOOSER(priv->fgcolor_dialog), &fgcolor); } @@ -425,7 +388,7 @@ do_bgcolor(GtkDialog *dialog, gint response, gpointer _toolbar) { PidginWebViewToolbar *toolbar = _toolbar; - GdkColor text_color; + GdkRGBA text_color; gchar *open_tag; if (response != GTK_RESPONSE_OK) { @@ -433,7 +396,7 @@ return; } - pidgin_color_chooser_get_rgb(GTK_COLOR_CHOOSER(dialog), &text_color); + gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(dialog), &text_color); open_tag = pidgin_color_to_str(&text_color); pidgin_webview_toggle_backcolor(PIDGIN_WEBVIEW(toolbar->webview), open_tag); @@ -449,7 +412,7 @@ PIDGIN_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); if (gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(color))) { - GdkColor bgcolor; + GdkRGBA bgcolor; gchar *color = pidgin_webview_get_current_backcolor( PIDGIN_WEBVIEW(toolbar->webview)); @@ -462,7 +425,7 @@ GTK_COLOR_CHOOSER(priv->bgcolor_dialog), FALSE); if (pidgin_color_parse(color, &bgcolor)) { - pidgin_color_chooser_set_rgb( + gtk_color_chooser_set_rgba( GTK_COLOR_CHOOSER(priv->bgcolor_dialog), &bgcolor); } @@ -1105,7 +1068,7 @@ gboolean bold, italic, underline, strike; char *tmp, *color_str; char *label; - GdkColor color; + GdkRGBA color; label = g_strdup(_("_Font")); @@ -1165,7 +1128,7 @@ PIDGIN_WEBVIEW(toolbar->webview)); color_str = NULL; if (pidgin_color_parse(tmp, &color) && - (color.red != 0 || color.green != 0 || color.blue != 0)) + (color.red > 0 || color.green > 0 || color.blue > 0)) { color_str = pidgin_color_to_str(&color); } @@ -1365,11 +1328,6 @@ purple_prefs_disconnect_by_handle(object); - if (--resources_ref_cnt == 0) { - g_regex_unref(color_parse_rgb); - color_parse_rgb = NULL; - } - G_OBJECT_CLASS(parent_class)->finalize(object); } @@ -1609,12 +1567,6 @@ PidginWebViewToolbarPriv *priv = PIDGIN_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar); GtkWidget *hbox = GTK_WIDGET(toolbar); - if (resources_ref_cnt++ == 0) { - color_parse_rgb = g_regex_new("^rgb\\s*\\(\\s*" - "([0-9]+),\\s*([0-9]+),\\s*([0-9]+)\\s*\\)", - G_REGEX_OPTIMIZE, 0, NULL); - } - pidgin_webviewtoolbar_create_actions(toolbar); pidgin_webviewtoolbar_create_wide_view(toolbar); pidgin_webviewtoolbar_create_lean_view(toolbar);
--- a/pidgin/gtkwhiteboard.c Sat Sep 03 02:50:16 2016 -0400 +++ b/pidgin/gtkwhiteboard.c Sun Sep 04 04:45:09 2016 -0400 @@ -106,7 +106,7 @@ static void pidgin_whiteboard_set_canvas_as_icon(PidginWhiteboard *gtkwb); -static void pidgin_whiteboard_rgb24_to_rgb48(int color_rgb, GdkColor *color); +static void pidgin_whiteboard_rgb24_to_rgba(int color_rgb, GdkRGBA *color); static void color_selected(GtkColorButton *button, PidginWhiteboard *gtkwb); @@ -164,7 +164,7 @@ GtkWidget *clear_button; GtkWidget *save_button; GtkWidget *color_button; - GdkColor color; + GdkRGBA color; PidginWhiteboard *gtkwb = g_new0(PidginWhiteboard, 1); gtkwb->priv = g_new0(PidginWhiteboardPrivate, 1); @@ -265,8 +265,8 @@ gtk_widget_show(color_button); gtk_color_chooser_set_use_alpha(GTK_COLOR_CHOOSER(color_button), FALSE); - pidgin_whiteboard_rgb24_to_rgb48(gtkwb->brush_color, &color); - pidgin_color_chooser_set_rgb(GTK_COLOR_CHOOSER(color_button), &color); + pidgin_whiteboard_rgb24_to_rgba(gtkwb->brush_color, &color); + gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(color_button), &color); g_signal_connect(G_OBJECT(color_button), "color-set", G_CALLBACK(color_selected), gtkwb); @@ -604,16 +604,10 @@ PidginWhiteboard *gtkwb = purple_whiteboard_get_ui_data(wb); GtkWidget *widget = gtkwb->drawing_area; cairo_t *gfx_con = gtkwb->priv->cr; - GdkColor col; GdkRGBA rgba; /* Interpret and convert color */ - pidgin_whiteboard_rgb24_to_rgb48(color, &col); - - rgba.red = col.red / 0xffff; - rgba.green = col.green / 0xffff; - rgba.blue = col.blue / 0xffff; - rgba.alpha = 1.0; + pidgin_whiteboard_rgb24_to_rgba(color, &rgba); gdk_cairo_set_source_rgba(gfx_con, &rgba); /* Draw a circle */ @@ -812,26 +806,26 @@ g_object_unref(pixbuf); } -static void pidgin_whiteboard_rgb24_to_rgb48(int color_rgb, GdkColor *color) +static void pidgin_whiteboard_rgb24_to_rgba(int color_rgb, GdkRGBA *color) { - color->red = (color_rgb >> 8) | 0xFF; - color->green = (color_rgb & 0xFF00) | 0xFF; - color->blue = ((color_rgb & 0xFF) << 8) | 0xFF; + color->red = ((color_rgb >> 16) & 0xFF) / 255.0f; + color->green = ((color_rgb >> 8) & 0xFF) / 255.0f; + color->blue = (color_rgb & 0xFF) / 255.0f; } static void color_selected(GtkColorButton *button, PidginWhiteboard *gtkwb) { - GdkColor color; + GdkRGBA color; PurpleWhiteboard *wb = gtkwb->wb; int old_size, old_color; int new_color; - pidgin_color_chooser_get_rgb(GTK_COLOR_CHOOSER(button), &color); + gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(button), &color); - new_color = (color.red & 0xFF00) << 8; - new_color |= (color.green & 0xFF00); - new_color |= (color.blue & 0xFF00) >> 8; + new_color = (unsigned int)(color.red * 255) << 16; + new_color |= (unsigned int)(color.green * 255) << 8; + new_color |= (unsigned int)(color.blue * 255); purple_whiteboard_get_brush(wb, &old_size, &old_color); purple_whiteboard_send_brush(wb, old_size, new_color);
--- a/pidgin/plugins/screencap.c Sat Sep 03 02:50:16 2016 -0400 +++ b/pidgin/plugins/screencap.c Sun Sep 04 04:45:09 2016 -0400 @@ -53,7 +53,7 @@ static gint draw_origin_x, draw_origin_y; static gboolean draw_active; -static GdkColor brush_color = {0, 65535, 0, 0}; +static GdkRGBA brush_color = {1, 0, 0, 1}; static gint line_width = 2; /****************************************************************************** @@ -322,14 +322,10 @@ { gchar *color_str; - pidgin_color_chooser_get_rgb(GTK_COLOR_CHOOSER(button), &brush_color); + gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(button), &brush_color); + gdk_cairo_set_source_rgba(cr, &brush_color); - cairo_set_source_rgb(cr, - brush_color.red / 65535.0, - brush_color.green / 65535.0, - brush_color.blue / 65535.0); - - color_str = gdk_color_to_string(&brush_color); + color_str = gdk_rgba_to_string(&brush_color); purple_prefs_set_string("/plugins/gtk/screencap/brush_color", color_str); g_free(color_str); } @@ -403,7 +399,7 @@ GTK_DIALOG(draw_window))), scroll_area); color_button = gtk_color_button_new(); - pidgin_color_chooser_set_rgb(GTK_COLOR_CHOOSER(color_button), + gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(color_button), &brush_color); g_signal_connect(G_OBJECT(color_button), "color-set", G_CALLBACK(scrncap_draw_color_selected), cr); @@ -940,7 +936,7 @@ color_str = purple_prefs_get_string("/plugins/gtk/screencap/brush_color"); if (color_str && color_str[0]) - gdk_color_parse(color_str, &brush_color); + gdk_rgba_parse(&brush_color, color_str); purple_signal_connect(pidgin_conversations_get_handle(), "conversation-displayed", plugin,