コード例 #1
0
ファイル: colorful-tabs.c プロジェクト: garfieldwtf/midori
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);
    }
}
コード例 #2
0
ファイル: night_mode.c プロジェクト: sinoory/webv8
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);
        }
}
コード例 #3
0
ファイル: colorful-tabs.c プロジェクト: OoberMick/Midori
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);
    }
}