Bug 502804 – pango-view or pangocairo-view option to annotate
authorBehdad Esfahbod <behdad@behdad.org>
Mon, 16 Mar 2009 20:57:58 +0000 (16:57 -0400)
committerBehdad Esfahbod <behdad@behdad.org>
Mon, 16 Mar 2009 20:57:58 +0000 (16:57 -0400)
Added --annotate.

Also fixes:
Bug 502801 – per-backend pango-view options

pango-view/viewer-cairo.c
pango-view/viewer-cairo.h
pango-view/viewer-pangocairo.c
pango-view/viewer-render.c
pango-view/viewer.h

index 1da05b8..72aae5d 100644 (file)
@@ -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)
+{
+}
index 81d2eee..e843664 100644 (file)
@@ -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 */
index e834540..3d19668 100644 (file)
@@ -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
 };
index e078dd1..b3ee52b 100644 (file)
@@ -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)
index 055ca58..a493769 100644 (file)
@@ -91,6 +91,7 @@ struct _PangoViewer {
                int      height,
                int      stride);
 
+  GOptionGroup * (*get_option_group) (const PangoViewer *klass);
 };
 
 extern const PangoViewer *viewers[];