[pango: 3/4] Bug 502804 – pango-view or pangocairo-view optio



commit 69e1f7921525c2849d937b5a822475007a4f9a2f
Author: Behdad Esfahbod <behdad behdad org>
Date:   Mon Mar 16 16:57:58 2009 -0400

    Bug 502804 â?? pango-view or pangocairo-view option to annotate
    
    Added --annotate.
    
    Also fixes:
    Bug 502801 â?? per-backend pango-view options
---
 pango-view/viewer-cairo.c      |    5 +++++
 pango-view/viewer-cairo.h      |    2 ++
 pango-view/viewer-pangocairo.c |   33 +++++++++++++++++++++++++++++++--
 pango-view/viewer-render.c     |   15 ++++++++++++---
 pango-view/viewer.h            |    1 +
 5 files changed, 51 insertions(+), 5 deletions(-)

diff --git a/pango-view/viewer-cairo.c b/pango-view/viewer-cairo.c
index 1da05b8..72aae5d 100644
--- a/pango-view/viewer-cairo.c
+++ b/pango-view/viewer-cairo.c
@@ -358,3 +358,8 @@ cairo_viewer_iface_create (const CairoViewerIface **iface)
   *iface = &cairo_image_viewer_iface;
   return (*iface)->backend_class->create ((*iface)->backend_class);
 }
+
+void
+cairo_viewer_add_options (GOptionGroup *group G_GNUC_UNUSED)
+{
+}
diff --git a/pango-view/viewer-cairo.h b/pango-view/viewer-cairo.h
index 81d2eee..e843664 100644
--- a/pango-view/viewer-cairo.h
+++ b/pango-view/viewer-cairo.h
@@ -42,4 +42,6 @@ struct _CairoViewerIface
 
 gpointer cairo_viewer_iface_create (const CairoViewerIface **iface_out);
 
+void cairo_viewer_add_options (GOptionGroup *group);
+
 #endif /* VIEWER_CAIRO_H */
diff --git a/pango-view/viewer-pangocairo.c b/pango-view/viewer-pangocairo.c
index e834540..3d19668 100644
--- a/pango-view/viewer-pangocairo.c
+++ b/pango-view/viewer-pangocairo.c
@@ -26,6 +26,8 @@
 
 #include <pango/pangocairo.h>
 
+static int opt_annotate = 0;
+
 typedef struct
 {
   const CairoViewerIface *iface;
@@ -136,7 +138,7 @@ render_callback (PangoLayout *layout,
 		 gpointer     state)
 {
   cairo_t *cr = (cairo_t *) context;
-  int annotate = GPOINTER_TO_INT (state) % 3;
+  int annotate = (GPOINTER_TO_INT (state) + opt_annotate) % 3;
 
   cairo_save (cr);
   cairo_translate (cr, x, y);
@@ -406,6 +408,30 @@ pangocairo_view_display (gpointer instance,
 					   state);
 }
 
+static GOptionGroup *
+pangocairo_view_get_option_group (const PangoViewer *klass G_GNUC_UNUSED)
+{
+  GOptionEntry entries[] =
+  {
+    {"annotate",	0, 0, G_OPTION_ARG_INT, &opt_annotate,
+     "Annotate the output",				"1 or 2"},
+    {NULL}
+  };
+  GOptionGroup *group;
+
+  group = g_option_group_new ("cairo",
+			      "Cairo backend options:",
+			      "Options understood by the cairo backend",
+			      NULL,
+			      NULL);
+
+  g_option_group_add_entries (group, entries);
+
+  cairo_viewer_add_options (group);
+
+  return group;
+}
+
 const PangoViewer pangocairo_viewer = {
   "PangoCairo",
   "cairo",
@@ -427,5 +453,8 @@ const PangoViewer pangocairo_viewer = {
 #endif
   pangocairo_view_create_window,
   pangocairo_view_destroy_window,
-  pangocairo_view_display
+  pangocairo_view_display,
+  NULL,
+  NULL,
+  pangocairo_view_get_option_group
 };
diff --git a/pango-view/viewer-render.c b/pango-view/viewer-render.c
index e078dd1..b3ee52b 100644
--- a/pango-view/viewer-render.c
+++ b/pango-view/viewer-render.c
@@ -466,7 +466,6 @@ parse_rgba_color (PangoColor *color,
 		  gpointer    data G_GNUC_UNUSED,
 		  GError    **error)
 {
-  char *possible_values = NULL;
   gboolean ret;
   char buf[32];
   int len;
@@ -653,7 +652,7 @@ parse_options (int argc, char *argv[])
     {"backend",		0, backend_flag, G_OPTION_ARG_CALLBACK,		&parse_backend,
      backend_desc,					     backend_options},
     {"background",	0, 0, G_OPTION_ARG_CALLBACK,			&parse_background,
-     "Set the background color",			       "red/#rrggbb/#rrggbbaa/transparent/etc"},
+     "Set the background color",     "red/#rrggbb/#rrggbbaa/transparent"},
     {"no-display",	'q', G_OPTION_FLAG_REVERSE, G_OPTION_ARG_NONE,	&opt_display,
      "Do not display (just write to file or whatever)",			NULL},
     {"dpi",		0, 0, G_OPTION_ARG_INT,				&opt_dpi,
@@ -665,7 +664,7 @@ parse_options (int argc, char *argv[])
     {"font",		0, 0, G_OPTION_ARG_STRING,			&opt_font,
      "Set the font description",			       "description"},
     {"foreground",	0, 0, G_OPTION_ARG_CALLBACK,			&parse_foreground,
-     "Set the text color",				       "red/#rrggbb/#rrggbbaa/etc"},
+     "Set the text color",		         "red/#rrggbb/#rrggbbaa"},
     {"gravity",		0, 0, G_OPTION_ARG_CALLBACK,			&parse_gravity,
      "Base gravity: glyph rotation",		"south/east/north/west/auto"},
     {"gravity-hint",	0, 0, G_OPTION_ARG_CALLBACK,			&parse_gravity_hint,
@@ -714,10 +713,20 @@ parse_options (int argc, char *argv[])
   GError *parse_error = NULL;
   GOptionContext *context;
   size_t len;
+  const PangoViewer **viewer;
 
   prog_name = g_path_get_basename (argv[0]);
   context = g_option_context_new ("- FILE");
   g_option_context_add_main_entries (context, entries, NULL);
+
+  for (viewer = viewers; *viewer; viewer++)
+    if ((*viewer)->get_option_group)
+      {
+        GOptionGroup *group = (*viewer)->get_option_group (*viewer);
+	if (group)
+	  g_option_context_add_group (context, group);
+      }
+
   if (!g_option_context_parse (context, &argc, &argv, &parse_error))
   {
     if (parse_error != NULL)
diff --git a/pango-view/viewer.h b/pango-view/viewer.h
index 055ca58..a493769 100644
--- a/pango-view/viewer.h
+++ b/pango-view/viewer.h
@@ -91,6 +91,7 @@ struct _PangoViewer {
 		int      height,
 		int      stride);
 
+  GOptionGroup * (*get_option_group) (const PangoViewer *klass);
 };
 
 extern const PangoViewer *viewers[];



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]