[Commit] gwaterfall/src main.c,1.2,1.3 waterfall.c,1.4,1.5 waterfall.h,1.2,1.3

Noah Levitt commit@keithp.com
Mon, 28 Apr 2003 19:21:47 -0700


Committed by: nlevitt

Update of /local/src/CVS/gwaterfall/src
In directory home.keithp.com:/tmp/cvs-serv23166/src

Modified Files:
	main.c waterfall.c waterfall.h 
Log Message:
Add subpixel rendering option.


Index: main.c
===================================================================
RCS file: /local/src/CVS/gwaterfall/src/main.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- main.c	28 Apr 2003 05:09:00 -0000	1.2
+++ main.c	29 Apr 2003 02:21:45 -0000	1.3
@@ -24,6 +24,7 @@
 static GtkWidget *page_label = NULL;
 static GtkWidget *style_combo = NULL;
 static GtkWidget *autohint_check_button = NULL;
+static GtkWidget *rgba_hbox = NULL;
 
 
 static void
@@ -176,6 +177,8 @@
 {
   waterfall_set_antialias (waterfall, 
                            gtk_toggle_button_get_active (toggle_button));
+  gtk_widget_set_sensitive (rgba_hbox,
+                            waterfall_get_antialias (waterfall));
 }
 
 
@@ -404,12 +407,113 @@
 }
 
 
+static void
+set_rgba_none (GtkMenuItem *menu_item,
+               Waterfall *waterfall)
+{
+  waterfall_set_rgba (waterfall, FC_RGBA_NONE);
+}
+
+
+static void
+set_rgba_rgb (GtkMenuItem *menu_item,
+              Waterfall *waterfall)
+{
+  waterfall_set_rgba (waterfall, FC_RGBA_RGB);
+}
+
+
+static void
+set_rgba_bgr (GtkMenuItem *menu_item,
+              Waterfall *waterfall)
+{
+  waterfall_set_rgba (waterfall, FC_RGBA_BGR);
+}
+
+
+static void
+set_rgba_vrgb (GtkMenuItem *menu_item,
+               Waterfall *waterfall)
+{
+  waterfall_set_rgba (waterfall, FC_RGBA_VRGB);
+}
+
+
+static void
+set_rgba_vbgr (GtkMenuItem *menu_item,
+               Waterfall *waterfall)
+{
+  waterfall_set_rgba (waterfall, FC_RGBA_VBGR);
+}
+
+
+static GtkWidget *
+construct_rgba_menu (Waterfall *waterfall)
+{
+  GtkWidget *option_menu;
+  GtkWidget *menu;
+  GtkWidget *menu_item;
+  GtkWidget *label;
+
+  rgba_hbox = gtk_hbox_new (FALSE, 6);
+  gtk_widget_show (rgba_hbox);
+
+  label = gtk_label_new ("Subpixel smoothing:");
+  gtk_widget_show (label);
+  gtk_box_pack_start (GTK_BOX (rgba_hbox), label, FALSE, FALSE, 0);
+
+  menu = gtk_menu_new ();
+  gtk_widget_show (menu);
+
+  menu_item = gtk_menu_item_new_with_label ("None");
+  gtk_widget_show (menu_item);
+  gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
+  g_signal_connect (menu_item, "activate", 
+                    G_CALLBACK (set_rgba_none), waterfall);
+  
+  menu_item = gtk_menu_item_new_with_label ("RGB");
+  gtk_widget_show (menu_item);
+  gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
+  g_signal_connect (menu_item, "activate", 
+                    G_CALLBACK (set_rgba_rgb), waterfall);
+  
+  menu_item = gtk_menu_item_new_with_label ("BGR");
+  gtk_widget_show (menu_item);
+  gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
+  g_signal_connect (menu_item, "activate", 
+                    G_CALLBACK (set_rgba_bgr), waterfall);
+  
+  menu_item = gtk_menu_item_new_with_label ("VRGB");
+  gtk_widget_show (menu_item);
+  gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
+  g_signal_connect (menu_item, "activate", 
+                    G_CALLBACK (set_rgba_vrgb), waterfall);
+  
+  menu_item = gtk_menu_item_new_with_label ("VBGR");
+  gtk_widget_show (menu_item);
+  gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
+  g_signal_connect (menu_item, "activate", 
+                    G_CALLBACK (set_rgba_vbgr), waterfall);
+  
+  option_menu = gtk_option_menu_new ();
+  gtk_widget_show (option_menu);
+  gtk_box_pack_start (GTK_BOX (rgba_hbox), option_menu, FALSE, FALSE, 0);
+  gtk_option_menu_set_menu (GTK_OPTION_MENU (option_menu), menu);
+
+  gtk_widget_set_sensitive (rgba_hbox,
+                            waterfall_get_antialias (waterfall));
+
+  return rgba_hbox;
+}
+
+
 static GtkWidget *
 construct_options_bar (Waterfall *waterfall)
 {
   GtkWidget *vbox;
   GtkWidget *hbox;
   GtkWidget *check_button;
+  GtkWidget *separator;
 
   vbox = gtk_vbox_new (FALSE, 6);
   gtk_widget_show (vbox);
@@ -427,6 +531,10 @@
                       construct_font_style_chooser (waterfall), 
                       FALSE, FALSE, 0);
 
+  separator = gtk_vseparator_new ();
+  gtk_widget_show (separator);
+  gtk_box_pack_start (GTK_BOX (hbox), separator, FALSE, FALSE, 0);
+
   check_button = gtk_check_button_new_with_label ("Hinting");
   gtk_widget_show (check_button);
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
@@ -445,6 +553,10 @@
   g_signal_connect (G_OBJECT (autohint_check_button), "toggled",
                     G_CALLBACK (autohint_toggled), waterfall);
 
+  separator = gtk_vseparator_new ();
+  gtk_widget_show (separator);
+  gtk_box_pack_start (GTK_BOX (hbox), separator, FALSE, FALSE, 0);
+
   check_button = gtk_check_button_new_with_label ("Anti-Aliasing");
   gtk_widget_show (check_button);
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
@@ -453,10 +565,21 @@
   g_signal_connect (G_OBJECT (check_button), "toggled",
                     G_CALLBACK (antialias_toggled), waterfall);
 
+  gtk_box_pack_start (GTK_BOX (hbox), construct_rgba_menu (waterfall), 
+                      FALSE, FALSE, 0);
+
+  hbox = gtk_hbox_new (FALSE, 12);
+  gtk_widget_show (hbox);
+  gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
+
   gtk_box_pack_start (GTK_BOX (hbox), construct_size_bar (waterfall), 
                       FALSE, FALSE, 0);
 
-  gtk_box_pack_start (GTK_BOX (vbox), construct_page_navigator (waterfall), 
+  separator = gtk_vseparator_new ();
+  gtk_widget_show (separator);
+  gtk_box_pack_start (GTK_BOX (hbox), separator, FALSE, FALSE, 0);
+
+  gtk_box_pack_start (GTK_BOX (hbox), construct_page_navigator (waterfall), 
                       FALSE, FALSE, 0);
 
   return vbox;

Index: waterfall.c
===================================================================
RCS file: /local/src/CVS/gwaterfall/src/waterfall.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- waterfall.c	28 Apr 2003 05:09:00 -0000	1.4
+++ waterfall.c	29 Apr 2003 02:21:45 -0000	1.5
@@ -81,6 +81,7 @@
   FcPatternAddBool (pattern, FC_HINTING, waterfall->hint);
   FcPatternAddBool (pattern, FC_ANTIALIAS, waterfall->antialias);
   FcPatternAddBool (pattern, FC_AUTOHINT, waterfall->autohint);
+  FcPatternAddInteger (pattern, FC_RGBA, waterfall->rgba);
 
   match = XftFontMatch (GDK_DISPLAY (), gdk_x11_get_default_screen (), 
                         pattern, &result);
@@ -257,6 +258,7 @@
   waterfall->hint = TRUE;
   waterfall->antialias = TRUE;
   waterfall->autohint = FALSE;
+  waterfall->rgba = FC_RGBA_NONE;
   waterfall->page = -1;
 
   gtk_widget_set_events (GTK_WIDGET (waterfall), GDK_EXPOSURE_MASK);
@@ -530,5 +532,25 @@
 
   return count == 0;
 }
+
+
+gint
+waterfall_get_rgba (Waterfall *waterfall)
+{
+  return waterfall->rgba;
+}
+
+
+void
+waterfall_set_rgba (Waterfall *waterfall, 
+                    gboolean rgba)
+{
+  if (rgba != waterfall->rgba)
+    {
+      waterfall->rgba = rgba;
+      queue_redraw (waterfall);
+    }
+}
+
 
 

Index: waterfall.h
===================================================================
RCS file: /local/src/CVS/gwaterfall/src/waterfall.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- waterfall.h	28 Apr 2003 05:09:00 -0000	1.2
+++ waterfall.h	29 Apr 2003 02:21:45 -0000	1.3
@@ -56,6 +56,7 @@
   gboolean hint;
   gboolean antialias;
   gboolean autohint;
+  gint rgba; /* subpixel geometry */
 
   gint page;
 };
@@ -99,6 +100,9 @@
 gboolean waterfall_get_autohint (Waterfall *waterfall);
 void waterfall_set_autohint (Waterfall *waterfall, 
                              gboolean autohint);
+gint waterfall_get_rgba (Waterfall *waterfall);
+void waterfall_set_rgba (Waterfall *waterfall, 
+                         gboolean rgba);
 
 
 G_END_DECLS