13
13
#include <midori/midori.h>
16
get_foreground_color_for_GdkColor (GdkColor color)
16
get_foreground_color_for_GdkColor (GdkColor* color,
19
19
gfloat brightness, r, g, b;
22
g = color.green / 255;
22
g = color->green / 255;
23
b = color->blue / 255;
25
25
/* For math used see algorithms for converting from rgb to yuv */
26
26
brightness = 0.299 * r + 0.587 * g + 0.114 * b;
28
28
/* Ensure high contrast by enforcing black/ white text colour. */
29
29
/* Brigthness (range 0-255) equals value of y from YUV color space. */
30
30
if (brightness < 128)
31
gdk_color_parse ("white", &fgcolor);
31
gdk_color_parse ("white", fgcolor);
33
gdk_color_parse ("black", &fgcolor);
33
gdk_color_parse ("black", fgcolor);
38
static GdkColor adjust_brightness (GdkColor color)
37
adjust_brightness (GdkColor* color)
40
39
guint dark_grey = 137 * 255;
41
40
guint adjustment = 78 * 255;
42
41
guint blue = 39 * 255;
43
42
guint readjust = 19 * 255;
45
if ((color.red < dark_grey)
46
&& (color.green < dark_grey)
47
&& (color.blue < dark_grey))
44
if ((color->red < dark_grey)
45
&& (color->green < dark_grey)
46
&& (color->blue < dark_grey))
49
color.red += adjustment;
50
color.green += adjustment;
51
color.blue += adjustment;
48
color->red += adjustment;
49
color->green += adjustment;
50
color->blue += adjustment;
57
color.red -= readjust;
59
if (color.blue < blue)
60
color.blue = readjust;
62
color.blue -= readjust;
64
if (color.green < blue)
65
color.green = readjust;
67
color.green -= readjust;
53
if (color->red < blue)
54
color->red = readjust;
56
color->red -= readjust;
58
if (color->blue < blue)
59
color->blue = readjust;
61
color->blue -= readjust;
63
if (color->green < blue)
64
color->green = readjust;
66
color->green -= readjust;
73
view_get_bgcolor_for_favicon (GdkPixbuf* icon)
70
view_get_bgcolor_for_favicon (GdkPixbuf* icon,
79
76
newpix = gdk_pixbuf_scale_simple (icon, 1, 1, GDK_INTERP_BILINEAR);
80
77
pixels = gdk_pixbuf_get_pixels (newpix);
81
color.red = pixels[0] * 255;
82
color.green = pixels[1] * 255;
83
color.blue = pixels[2] * 255;
85
color = adjust_brightness (color);
78
color->red = pixels[0] * 255;
79
color->green = pixels[1] * 255;
80
color->blue = pixels[2] * 255;
82
adjust_brightness (color);
91
view_get_bgcolor_for_hostname (gchar* hostname)
86
view_get_bgcolor_for_hostname (gchar* hostname,
93
89
gchar* hash, *colorstr;
96
91
hash = g_compute_checksum_for_string (G_CHECKSUM_MD5, hostname, 1);
97
92
colorstr = g_strndup (hash, 6 + 1);
99
gdk_color_parse (colorstr, &color);
94
gdk_color_parse (colorstr, color);
102
97
g_free (colorstr);
104
color = adjust_brightness (color);
99
adjust_brightness (color);
124
117
GdkPixbuf* icon = midori_view_get_icon (view);
127
color = view_get_bgcolor_for_favicon (icon);
120
view_get_bgcolor_for_favicon (icon, &color);
129
color = view_get_bgcolor_for_hostname (hostname);
122
view_get_bgcolor_for_hostname (hostname, &color);
131
fgcolor = get_foreground_color_for_GdkColor (color);
124
get_foreground_color_for_GdkColor (&color, &fgcolor);
132
125
midori_view_set_colors (view, &fgcolor, &color);
134
127
g_free (hostname);
238
230
for (i = 0; i < G_N_ELEMENTS (items); i++)
240
color = view_get_bgcolor_for_hostname ((gchar*)items[i].host);
241
fgcolor = get_foreground_color_for_GdkColor (color);
232
view_get_bgcolor_for_hostname ((gchar*)items[i].host, &color);
233
get_foreground_color_for_GdkColor (&color, &fgcolor);
243
235
g_assert_cmpstr (items[i].color, ==, gdk_color_to_string (&color));
244
236
g_assert_cmpstr (items[i].fgcolor, ==, gdk_color_to_string (&fgcolor));