static void colorful_tabs_view_notify_uri_cb (MidoriView* view, GParamSpec* pspec, MidoriExtension* extension) { GtkWidget* label; SoupURI* uri; gchar* hash; gchar* colorstr; GdkColor color; label = midori_view_get_proxy_tab_label (view); if (!midori_extension_get_boolean (extension, "tint")) { gtk_widget_modify_bg (label, GTK_STATE_NORMAL, NULL); gtk_widget_modify_bg (label, GTK_STATE_ACTIVE, NULL); return; } /* Find a color that is unique to an address. We merely compute a hash value, pick the first 6 + 1 characters and turn the first into a hash sign, ie. #8b424b. In case a color is too dark, we lighten it up a litte. Finally we make the event box visible and modify its background. */ if ((uri = soup_uri_new (midori_view_get_display_uri (view))) && uri->host) { hash = g_compute_checksum_for_string (G_CHECKSUM_MD5, uri->host, -1); soup_uri_free (uri); colorstr = g_strndup (hash, 6 + 1); g_free (hash); colorstr[0] = '#'; gdk_color_parse (colorstr, &color); if (color.red < 35000) color.red += 25000 + (color.blue + 1) / 2; if (color.green < 35000) color.green += 25000 + (color.red + 1) / 2; if (color.blue < 35000) color.blue += 25000 + (color.green + 1) / 2; gtk_event_box_set_visible_window (GTK_EVENT_BOX (label), TRUE); gtk_widget_modify_bg (label, GTK_STATE_NORMAL, &color); gtk_widget_modify_bg (label, GTK_STATE_ACTIVE, &color); } else { gtk_widget_modify_bg (label, GTK_STATE_NORMAL, NULL); gtk_widget_modify_bg (label, GTK_STATE_ACTIVE, NULL); } }
static void night_mode_tabs_view_notify_uri_cb (MidoriView* view, GParamSpec* pspec, MidoriExtension* extension) { gchar* exception = NULL; gchar *script=NULL; FILE *fp; int file_size; gboolean result; const gchar* uri = midori_view_get_display_uri (view); if (!*uri) return; if (g_night_mode) { if (!midori_uri_is_blank (uri)) { gchar* hostname = midori_uri_parse_hostname (uri, NULL); if (hostname) { if((fp=fopen(midori_paths_get_res_filename("night_mode/nightingale_view_content.js"),"r"))!=NULL) { fseek(fp,0,SEEK_END); file_size=ftell(fp); fseek(fp,0,SEEK_SET); script=(char *)malloc(file_size * sizeof(char)+1); fread(script,file_size,sizeof(char),fp); script[file_size*sizeof(char)]='\0'; fclose(fp); result = midori_view_execute_script (view, script, &exception); free(script); script=NULL; } g_free (hostname); } } } else { GtkWidget* current_web_view = midori_view_get_web_view (MIDORI_VIEW (view)); webkit_web_view_run_javascript(WEBKIT_WEB_VIEW (current_web_view), night_mode_remove, NULL, NULL, NULL); } }
static void colorful_tabs_view_notify_uri_cb (MidoriView* view, GParamSpec* pspec, MidoriExtension* extension) { GtkWidget* box; GtkWidget* label; SoupURI* uri; gchar* colorstr; GdkColor color; GdkColor fgcolor; GdkPixbuf* icon; label = midori_view_get_proxy_tab_label (view); if ((uri = soup_uri_new (midori_view_get_display_uri (view))) && uri->host && (katze_object_get_enum (view, "load-status") == MIDORI_LOAD_FINISHED)) { icon = midori_view_get_icon (view); if (midori_view_get_icon_uri (view) != NULL) { GdkPixbuf* newpix; guchar* pixels; newpix = gdk_pixbuf_scale_simple (icon, 1, 1, GDK_INTERP_BILINEAR); g_return_if_fail (gdk_pixbuf_get_bits_per_sample (newpix) == 8); pixels = gdk_pixbuf_get_pixels (newpix); color.red = pixels[0] * 225; color.green = pixels[1] * 225; color.blue = pixels[2] * 225; } else { gchar* hash = g_compute_checksum_for_string (G_CHECKSUM_MD5, uri->host, 1); colorstr = g_strndup (hash, 6 + 1); g_free (hash); colorstr[0] = '#'; gdk_color_parse (colorstr, &color); } soup_uri_free (uri); if ((color.red < 35000) && (color.green < 35000) && (color.blue < 35000)) { color.red += 20000; color.green += 20000; color.blue += 20000; } /* Ensure high contrast by enforcing black/ white text colour. */ if ((color.red < 41000) && (color.green < 41000) && (color.blue < 41000)) gdk_color_parse ("#fff", &fgcolor); else gdk_color_parse ("#000", &fgcolor); box = gtk_bin_get_child (GTK_BIN (label)); gtk_event_box_set_visible_window (GTK_EVENT_BOX (label), TRUE); gtk_container_foreach (GTK_CONTAINER (box), (GtkCallback) colorful_tabs_modify_fg, &fgcolor); gtk_widget_modify_bg (label, GTK_STATE_NORMAL, &color); if (color.red < 10000) color.red = 5000; else color.red -= 5000; if (color.blue < 10000) color.blue = 5000; else color.blue -= 5000; if (color.green < 10000) color.green = 5000; else color.green -= 5000; gtk_widget_modify_bg (label, GTK_STATE_ACTIVE, &color); } else { gtk_widget_modify_bg (label, GTK_STATE_NORMAL, NULL); gtk_widget_modify_bg (label, GTK_STATE_ACTIVE, NULL); gtk_container_foreach (GTK_CONTAINER (gtk_bin_get_child (GTK_BIN (label))), (GtkCallback) colorful_tabs_modify_fg, NULL); } }