summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBehdad Esfahbod <behdad@src.gnome.org>2006-01-29 00:55:24 +0000
committerBehdad Esfahbod <behdad@src.gnome.org>2006-01-29 00:55:24 +0000
commit16272a0a5682514e3eda47cb53fa0708ec8f178c (patch)
tree1d16c73f1911730f59d5199dc3375d444cdd417e
parent7b198ad324a75d8a910e7e75c1ac0e4c206af59d (diff)
downloadpango-16272a0a5682514e3eda47cb53fa0708ec8f178c.tar.gz
Reverted the tab alignments patch.
-rw-r--r--ChangeLog14
-rw-r--r--docs/tmpl/tab-stops.sgml2
-rw-r--r--examples/renderdemo.c82
-rw-r--r--examples/renderdemo.h1
-rw-r--r--pango/pango-layout.c51
-rw-r--r--pango/pango-tabs.c8
-rw-r--r--pango/pango-tabs.h6
7 files changed, 21 insertions, 143 deletions
diff --git a/ChangeLog b/ChangeLog
index dd2eaff4..66a42190 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,19 +1,5 @@
2006-01-28 Behdad Esfahbod <behdad@gnome.org>
- Implement other tab alignments. Bug #325547, Itai Bar-Haim.
-
- * docs/tmpl/tab-stops.sgml: Documented new tab alignment enum vals.
-
- * pango/pango-tabs.h, pango/pango-tabs.c, pango/pango-layout.c:
- Added support for tab alignments PANGO_TAB_RIGHT and PANGO_TAB_CENTER.
-
- * examples/renderdemo.h, examples/renderdemo.c: Added support for
- --tab-spec.
-
- * examples/GLASS.utf8, examples/HELLO.utf8: Cleaned up tabs.
-
-2006-01-28 Behdad Esfahbod <behdad@gnome.org>
-
* doc/tmpl/opentype.sgml: Document PangoOTBuffer and PangoOTGlyph.
* pango/pango-ot-buffer.c, pango/pango-ot-info.c,
diff --git a/docs/tmpl/tab-stops.sgml b/docs/tmpl/tab-stops.sgml
index 82954993..757280ad 100644
--- a/docs/tmpl/tab-stops.sgml
+++ b/docs/tmpl/tab-stops.sgml
@@ -34,8 +34,6 @@ A #PangoTabAlign specifies where a tab stop appears relative to the text.
</para>
@PANGO_TAB_LEFT: the tab stop appears to the left of the text.
-@PANGO_TAB_RIGHT: the tab stop appears to the right of the text.
-@PANGO_TAB_CENTER: the tab stop appears to the center of the text.
<!-- ##### MACRO PANGO_TYPE_TAB_ALIGN ##### -->
<para>
diff --git a/examples/renderdemo.c b/examples/renderdemo.c
index 155b7714..e225fe7e 100644
--- a/examples/renderdemo.c
+++ b/examples/renderdemo.c
@@ -58,14 +58,10 @@ int opt_runs = 1;
PangoEllipsizeMode opt_ellipsize = PANGO_ELLIPSIZE_NONE;
HintMode opt_hinting = HINT_DEFAULT;
const char *opt_pangorc = NULL;
-const char *opt_tab_spec;
/* Text (or markup) to render */
static char *text;
-
-static PangoTabArray * parse_tab_spec (const char *p);
-
void
fail (const char *format, ...)
{
@@ -132,15 +128,6 @@ make_layout(PangoContext *context,
pango_font_description_free (font_description);
- if (opt_tab_spec != NULL)
- {
- PangoTabArray *tabs;
-
- tabs = parse_tab_spec (opt_tab_spec);
- pango_layout_set_tabs (layout, tabs);
- pango_tab_array_free (tabs);
- }
-
return layout;
}
@@ -382,6 +369,11 @@ parse_hinting (ArgContext *arg_context,
const char *arg,
gpointer data)
{
+ static GEnumClass *class = NULL;
+
+ if (!class)
+ class = g_type_class_ref (PANGO_TYPE_ELLIPSIZE_MODE);
+
if (strcmp (arg, "none") == 0)
opt_hinting = HINT_NONE;
else if (strcmp (arg, "auto") == 0)
@@ -392,68 +384,6 @@ parse_hinting (ArgContext *arg_context,
fail ("--hinting option must be one of none/auto/full");
}
-static PangoTabArray *
-parse_tab_spec (const char *p)
-{
- PangoTabArray *tabs;
- int tab_index;
-
- tab_index = 0;
- tabs = pango_tab_array_new (0, FALSE);
-
- while (*p)
- {
- double pos;
- int pos_units;
- PangoTabAlign tab_align;
- char *endpos;
-
- pos = g_ascii_strtod (p, &endpos);
- if (p == (const char *)endpos)
- goto failed;
- p = endpos;
-
- pos_units = (pos * opt_dpi * PANGO_SCALE + 32) / 72;
-
- switch (*p)
- {
- case 'c':
- p++;
- tab_align = PANGO_TAB_CENTER;
- break;
-
- case 'r':
- p++;
- tab_align = PANGO_TAB_RIGHT;
- break;
-
- case 'l':
- p++;
- tab_align = PANGO_TAB_LEFT;
- break;
-
- default:
- break;
- }
-
- if (*p == ',')
- p++;
- else if (*p)
- goto failed;
-
- pango_tab_array_set_tab (tabs, tab_index, tab_align, pos_units);
- tab_index++;
- }
-
- return tabs;
-
-failed:
- fail ("invalid --tab-spec option.\n"
- "A tab spec should consist of a comma-separated list of tab-stop\n"
- "positions in points optionally followed by one of 'l', 'c', and 'r'.");
- return NULL;
-}
-
void
parse_options (int argc, char *argv[])
{
@@ -492,8 +422,6 @@ parse_options (int argc, char *argv[])
ARG_INT, &opt_width, NULL },
{ "indent", "Width in points to indent paragraphs",
ARG_INT, &opt_indent, NULL },
- { "tab-spec", "Tab stops and alignment in points, like '100l,300r,500c,700'",
- ARG_STRING, &opt_tab_spec, NULL },
{ "runs", "Render text this many times",
ARG_INT, &opt_runs, NULL },
{ "pangorc", "pangorc file to use (default is ./pangorc if available)",
diff --git a/examples/renderdemo.h b/examples/renderdemo.h
index acd4c46b..d79df1a6 100644
--- a/examples/renderdemo.h
+++ b/examples/renderdemo.h
@@ -73,4 +73,3 @@ extern int opt_runs;
extern PangoEllipsizeMode opt_ellipsize;
extern HintMode opt_hinting;
extern const char *opt_pangorc;
-extern const char *opt_tab_spec;
diff --git a/pango/pango-layout.c b/pango/pango-layout.c
index 5dc3a0ce..50143387 100644
--- a/pango/pango-layout.c
+++ b/pango/pango-layout.c
@@ -109,8 +109,6 @@ struct _PangoLayoutLinePrivate
{
PangoLayoutLine line;
guint ref_count;
- PangoGlyphString *last_tab_glyph;
- PangoTabAlign last_tab_alignment;
};
struct _PangoLayoutClass
@@ -2497,8 +2495,11 @@ ensure_tab_width (PangoLayout *layout)
}
}
+/* For now we only need the tab position, we assume
+ * all tabs are left-aligned.
+ */
static int
-get_tab_pos (PangoLayout *layout, int index, PangoTabAlign *alignment)
+get_tab_pos (PangoLayout *layout, int index)
{
gint n_tabs;
gboolean in_pixels;
@@ -2518,7 +2519,7 @@ get_tab_pos (PangoLayout *layout, int index, PangoTabAlign *alignment)
{
gint pos = 0;
- pango_tab_array_get_tab (layout->tabs, index, alignment, &pos);
+ pango_tab_array_get_tab (layout->tabs, index, NULL, &pos);
if (in_pixels)
return pos * PANGO_SCALE;
@@ -2535,10 +2536,10 @@ get_tab_pos (PangoLayout *layout, int index, PangoTabAlign *alignment)
int next_to_last_pos = 0;
int tab_width;
- pango_tab_array_get_tab (layout->tabs, n_tabs - 1, alignment, &last_pos);
+ pango_tab_array_get_tab (layout->tabs, n_tabs - 1, NULL, &last_pos);
if (n_tabs > 1)
- pango_tab_array_get_tab (layout->tabs, n_tabs - 2, alignment, &next_to_last_pos);
+ pango_tab_array_get_tab (layout->tabs, n_tabs - 2, NULL, &next_to_last_pos);
else
next_to_last_pos = 0;
@@ -2596,8 +2597,6 @@ shape_tab (PangoLayoutLine *line,
{
int i;
- PangoTabAlign tab_alignment;
-
int current_width = line_width (line);
pango_glyph_string_set_size (glyphs, 1);
@@ -2611,16 +2610,13 @@ shape_tab (PangoLayoutLine *line,
for (i=0;;i++)
{
- int tab_pos = get_tab_pos (line->layout, i, &tab_alignment);
+ int tab_pos = get_tab_pos (line->layout, i);
if (tab_pos > current_width)
{
glyphs->glyphs[0].geometry.width = tab_pos - current_width;
break;
}
}
- PangoLayoutLinePrivate *private = (PangoLayoutLinePrivate *)line;
- private->last_tab_glyph = glyphs;
- private->last_tab_alignment = tab_alignment;
}
static inline gboolean
@@ -2693,16 +2689,6 @@ struct _ParaBreakState
* to the remaining portion of the first item */
};
-static int
-glyphstring_width (PangoGlyphString* glyphs)
-{
- int i;
- int width = 0;
- for (i=0; i < glyphs->num_glyphs; i++)
- width += glyphs->glyphs[i].geometry.width;
- return width;
-}
-
static PangoGlyphString *
shape_run (PangoLayoutLine *line,
ParaBreakState *state,
@@ -2715,10 +2701,6 @@ shape_run (PangoLayoutLine *line,
shape_tab (line, glyphs);
else
{
- PangoLayoutLinePrivate *private = (PangoLayoutLinePrivate *)line;
-
- g_return_val_if_fail (line != NULL, glyphs);
-
if (state->properties.shape_set)
imposed_shape (layout->text + item->offset, item->num_chars,
state->properties.shape_ink_rect, state->properties.shape_logical_rect,
@@ -2726,21 +2708,6 @@ shape_run (PangoLayoutLine *line,
else
pango_shape (layout->text + item->offset, item->length, &item->analysis, glyphs);
- if (private->last_tab_glyph != NULL)
- {
- if (private->last_tab_glyph->num_glyphs > 0)
- {
- int w = private->last_tab_glyph->glyphs[0].geometry.width;
- if (private->last_tab_alignment == PANGO_TAB_RIGHT)
- w -= glyphstring_width (glyphs);
- else if (private->last_tab_alignment == PANGO_TAB_CENTER)
- w -= glyphstring_width (glyphs) / 2;
-
- if (w < 0) w = 0;
- private->last_tab_glyph->glyphs[0].geometry.width = w;
- }
- }
-
if (state->properties.letter_spacing)
{
PangoGlyphItem glyph_item;
@@ -4067,8 +4034,6 @@ pango_layout_line_new (PangoLayout *layout)
private->line.layout = layout;
private->line.runs = 0;
private->line.length = 0;
- private->last_tab_glyph = NULL;
- private->last_tab_alignment = PANGO_TAB_LEFT;
/* Note that we leave start_index, resolved_dir, and is_paragraph_start
* uninitialized */
diff --git a/pango/pango-tabs.c b/pango/pango-tabs.c
index 73343bc4..aedd9bce 100644
--- a/pango/pango-tabs.c
+++ b/pango/pango-tabs.c
@@ -257,12 +257,13 @@ pango_tab_array_resize (PangoTabArray *tab_array,
/**
* pango_tab_array_set_tab:
* @tab_array: a #PangoTabArray
- * @tab_index: the index of a tab stop, starting from zero
+ * @tab_index: the index of a tab stop
* @alignment: tab alignment
* @location: tab location in Pango units
*
- * Sets the alignment and location of a tab stop. Resizes the
- * tab array if needed.
+ * Sets the alignment and location of a tab stop.
+ * @alignment must always be #PANGO_TAB_LEFT in the current
+ * implementation.
*
**/
void
@@ -273,6 +274,7 @@ pango_tab_array_set_tab (PangoTabArray *tab_array,
{
g_return_if_fail (tab_array != NULL);
g_return_if_fail (tab_index >= 0);
+ g_return_if_fail (alignment == PANGO_TAB_LEFT);
g_return_if_fail (location >= 0);
if (tab_index >= tab_array->size)
diff --git a/pango/pango-tabs.h b/pango/pango-tabs.h
index c2ec7eff..f60949e8 100644
--- a/pango/pango-tabs.h
+++ b/pango/pango-tabs.h
@@ -30,13 +30,13 @@ typedef struct _PangoTabArray PangoTabArray;
typedef enum
{
- PANGO_TAB_LEFT,
- PANGO_TAB_RIGHT,
- PANGO_TAB_CENTER
+ PANGO_TAB_LEFT
/* These are not supported now, but may be in the
* future.
*
+ * PANGO_TAB_RIGHT,
+ * PANGO_TAB_CENTER,
* PANGO_TAB_NUMERIC
*/
} PangoTabAlign;