summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBehdad Esfahbod <behdad@behdad.org>2010-04-01 03:33:22 -0400
committerBehdad Esfahbod <behdad@behdad.org>2010-04-01 03:34:12 -0400
commit1a36b77ee5030c099eff8a6ac7f0081a4a46d69d (patch)
treef9d8b2f67a70dde714372c4b5ca69ba62e5db2dc
parent91d8773a88938aaa0a78de9bc6f768baf7021bc8 (diff)
downloadpango-1a36b77ee5030c099eff8a6ac7f0081a4a46d69d.tar.gz
Bug 582698 - Support CSS-style margin specification
-rw-r--r--pango-view/viewer-render.c41
1 files changed, 34 insertions, 7 deletions
diff --git a/pango-view/viewer-render.c b/pango-view/viewer-render.c
index e672dcd4..8e3cc7f8 100644
--- a/pango-view/viewer-render.c
+++ b/pango-view/viewer-render.c
@@ -38,7 +38,10 @@ gboolean opt_pixels = FALSE;
const char *opt_font = "";
gboolean opt_header = FALSE;
const char *opt_output = NULL;
-int opt_margin = 10;
+int opt_margin_t = 10;
+int opt_margin_r = 10;
+int opt_margin_b = 10;
+int opt_margin_l = 10;
int opt_markup = FALSE;
gboolean opt_rtl = FALSE;
double opt_rotate = 0;
@@ -248,8 +251,8 @@ do_output (PangoContext *context,
PangoMatrix *orig_matrix;
gboolean supports_matrix;
int rotated_width, rotated_height;
- int x = opt_margin;
- int y = opt_margin;
+ int x = opt_margin_l;
+ int y = opt_margin_t;
int width, height;
width = 0;
@@ -331,8 +334,8 @@ do_output (PangoContext *context,
width = MAX (width, rect.width);
height += rect.height;
- width += 2 * opt_margin;
- height += 2 * opt_margin;
+ width += opt_margin_l + opt_margin_r;
+ height += opt_margin_t + opt_margin_b;
if (width_out)
*width_out = width;
@@ -543,6 +546,30 @@ parse_background (const char *name,
name, arg, data, error);
}
+static gboolean
+parse_margin (const char *name G_GNUC_UNUSED,
+ const char *arg,
+ gpointer data G_GNUC_UNUSED,
+ GError **error)
+{
+ switch (sscanf (arg, "%d %d %d %d", &opt_margin_t, &opt_margin_r, &opt_margin_b, &opt_margin_l))
+ {
+ case 0:
+ {
+ g_set_error(error,
+ G_OPTION_ERROR,
+ G_OPTION_ERROR_BAD_VALUE,
+ "Argument for --margin must be one to four space-separated numbers");
+ return FALSE;
+ }
+ case 1: opt_margin_r = opt_margin_t;
+ case 2: opt_margin_b = opt_margin_t;
+ case 3: opt_margin_l = opt_margin_r;
+ }
+ return TRUE;
+}
+
+
static gchar *
backends_to_string (void)
{
@@ -680,8 +707,8 @@ parse_options (int argc, char *argv[])
"Align paragraph lines to be justified", NULL},
{"language", 0, 0, G_OPTION_ARG_STRING, &opt_language,
"Language to use for font selection", "en_US/etc"},
- {"margin", 0, 0, G_OPTION_ARG_INT, &opt_margin,
- "Set the margin on the output in pixels", "pixels"},
+ {"margin", 0, 0, G_OPTION_ARG_CALLBACK, &parse_margin,
+ "Set the margin on the output in pixels", "CSS-style numbers in pixels"},
{"markup", 0, 0, G_OPTION_ARG_NONE, &opt_markup,
"Interpret text as Pango markup", NULL},
{"output", 'o', 0, G_OPTION_ARG_STRING, &opt_output,