Pekka Lampila
2007-Oct-14 08:50 UTC
[Swfdec] 10 commits - libswfdec/swfdec_as_strings.c libswfdec/swfdec_text_field.c libswfdec/swfdec_text_field_movie_as.c libswfdec/swfdec_text_field_movie.c
libswfdec/swfdec_as_strings.c | 2 libswfdec/swfdec_text_field.c | 66 +++++++++++++++++++++++----- libswfdec/swfdec_text_field_movie.c | 5 +- libswfdec/swfdec_text_field_movie_as.c | 77 ++++++++++++++++++++++++++++++--- 4 files changed, 132 insertions(+), 18 deletions(-) New commits: commit a165608df6751cf46561b570db61ff309f5b7244 Author: Pekka Lampila <pekka.lampila at iki.fi> Date: Sun Oct 14 02:26:48 2007 +0300 Don't render lines that are not horizontally inside invalid area diff --git a/libswfdec/swfdec_text_field.c b/libswfdec/swfdec_text_field.c index 6adbe8a..867b30d 100644 --- a/libswfdec/swfdec_text_field.c +++ b/libswfdec/swfdec_text_field.c @@ -254,7 +254,7 @@ swfdec_text_field_render (SwfdecTextField *text, cairo_t *cr, GList *layouts, *iter; SwfdecRect limit; SwfdecColor color; - int y, linenum; + int y, x, linenum; g_return_if_fail (SWFDEC_IS_TEXT_FIELD (text)); g_return_if_fail (cr != NULL); @@ -285,8 +285,9 @@ swfdec_text_field_render (SwfdecTextField *text, cairo_t *cr, inval); linenum = 0; + x = SWFDEC_GRAPHIC (text)->extents.x0; y = SWFDEC_GRAPHIC (text)->extents.y0 + 1; - cairo_move_to (cr, SWFDEC_GRAPHIC (text)->extents.x0, y); + cairo_move_to (cr, x, y); for (iter = layouts; iter != NULL && y < limit.y1; iter = iter->next) { @@ -307,18 +308,20 @@ swfdec_text_field_render (SwfdecTextField *text, cairo_t *cr, pango_layout_iter_get_line_extents (iter_line, NULL, &rect); pango_extents_to_pixels (NULL, &rect); - if (y + rect.y + rect.height < limit.y0) - continue; - if (y + rect.y > limit.y1 || y + rect.y + rect.height > SWFDEC_GRAPHIC (text)->extents.y1) break; - cairo_rel_move_to (cr, layout->render_offset_x, + if (y + rect.y + rect.height < limit.y0 || + x + layout->render_offset_x + rect.x > limit.x1 || + x + layout->render_offset_x + rect.x + rect.width < limit.x0) + continue; + + cairo_rel_move_to (cr, layout->render_offset_x + rect.x, pango_layout_iter_get_baseline (iter_line) / PANGO_SCALE); line = pango_layout_iter_get_line_readonly (iter_line); pango_cairo_show_layout_line (cr, line); - cairo_rel_move_to (cr, -layout->render_offset_x, + cairo_rel_move_to (cr, -(layout->render_offset_x + rect.x), -pango_layout_iter_get_baseline (iter_line) / PANGO_SCALE); } while (pango_layout_iter_next_line (iter_line)); commit 1af25e1c21f6aeb02fe5f95384fc94b63d1504af Author: Pekka Lampila <pekka.lampila at iki.fi> Date: Sun Oct 14 02:20:09 2007 +0300 Cleanup TextField's rendering code diff --git a/libswfdec/swfdec_text_field.c b/libswfdec/swfdec_text_field.c index d991be6..6adbe8a 100644 --- a/libswfdec/swfdec_text_field.c +++ b/libswfdec/swfdec_text_field.c @@ -254,7 +254,7 @@ swfdec_text_field_render (SwfdecTextField *text, cairo_t *cr, GList *layouts, *iter; SwfdecRect limit; SwfdecColor color; - int y; + int y, linenum; g_return_if_fail (SWFDEC_IS_TEXT_FIELD (text)); g_return_if_fail (cr != NULL); @@ -284,68 +284,46 @@ swfdec_text_field_render (SwfdecTextField *text, cairo_t *cr, layouts = swfdec_text_field_generate_layouts (text, cr, paragraphs, trans, inval); + linenum = 0; y = SWFDEC_GRAPHIC (text)->extents.y0 + 1; cairo_move_to (cr, SWFDEC_GRAPHIC (text)->extents.x0, y); - for (iter = layouts; iter != NULL; iter = iter->next) + for (iter = layouts; iter != NULL && y < limit.y1; iter = iter->next) { SwfdecLayout *layout = (SwfdecLayout *)iter->data; + PangoLayoutIter *iter_line; + PangoLayoutLine *line; + PangoRectangle rect; - if (y + layout->height < limit.y0) { - // no need to render - cairo_rel_move_to (cr, 0, layout->height); - y += layout->height; - } else if (y < limit.y0 || y + layout->height > limit.y1) { - // possibly skip some lines - PangoLayoutIter *iter_line; - PangoLayoutLine *line; - PangoRectangle rect; - - cairo_rel_move_to (cr, layout->render_offset_x, 0); + iter_line = pango_layout_get_iter (layout->layout); - iter_line = pango_layout_get_iter (layout->layout); + do { + /*if (++linenum < text->text->scroll) { + cairo_rel_move_to (cr, 0, -rect.height); + y -= rect.height; + continue; + }*/ pango_layout_iter_get_line_extents (iter_line, NULL, &rect); pango_extents_to_pixels (NULL, &rect); - while (y + rect.y + rect.height < limit.y0) - { - if (!pango_layout_iter_next_line (iter_line)) - g_assert_not_reached (); - pango_layout_iter_get_line_extents (iter_line, NULL, &rect); - pango_extents_to_pixels (NULL, &rect); - } - while (y + rect.y <= limit.y1 && - y + rect.y + rect.height <= SWFDEC_GRAPHIC (text)->extents.y1) - { - cairo_rel_move_to (cr, 0, - pango_layout_iter_get_baseline (iter_line) / PANGO_SCALE); - line = pango_layout_iter_get_line_readonly (iter_line); - pango_cairo_show_layout_line (cr, line); - cairo_rel_move_to (cr, 0, - -pango_layout_iter_get_baseline (iter_line) / PANGO_SCALE); - - if (!pango_layout_iter_next_line (iter_line)) - break; - - pango_layout_iter_get_line_extents (iter_line, NULL, &rect); - pango_extents_to_pixels (NULL, &rect); - } + if (y + rect.y + rect.height < limit.y0) + continue; - pango_layout_iter_free (iter_line); + if (y + rect.y > limit.y1 || + y + rect.y + rect.height > SWFDEC_GRAPHIC (text)->extents.y1) + break; - cairo_rel_move_to (cr, -layout->render_offset_x, layout->height); - y += layout->height; + cairo_rel_move_to (cr, layout->render_offset_x, + pango_layout_iter_get_baseline (iter_line) / PANGO_SCALE); + line = pango_layout_iter_get_line_readonly (iter_line); + pango_cairo_show_layout_line (cr, line); + cairo_rel_move_to (cr, -layout->render_offset_x, + -pango_layout_iter_get_baseline (iter_line) / PANGO_SCALE); + } while (pango_layout_iter_next_line (iter_line)); - if (y > limit.y1) - break; - } else { - // render the whole layout - cairo_rel_move_to (cr, layout->render_offset_x, 0); - pango_cairo_show_layout (cr, layout->layout); - cairo_rel_move_to (cr, -layout->render_offset_x, layout->height); - y += layout->height; - } + cairo_rel_move_to (cr, 0, layout->height); + y += layout->height; } for (iter = layouts; iter != NULL; iter = iter->next) commit a7bee586fb6061e74b16cb598fed3535eb7e48e5 Author: Pekka Lampila <pekka.lampila at iki.fi> Date: Sun Oct 14 01:55:11 2007 +0300 Limit rendering of TextField's background based on invalid area diff --git a/libswfdec/swfdec_text_field.c b/libswfdec/swfdec_text_field.c index 177462d..d991be6 100644 --- a/libswfdec/swfdec_text_field.c +++ b/libswfdec/swfdec_text_field.c @@ -252,8 +252,9 @@ swfdec_text_field_render (SwfdecTextField *text, cairo_t *cr, const SwfdecRect *inval) { GList *layouts, *iter; + SwfdecRect limit; SwfdecColor color; - int y, y_min, y_max; + int y; g_return_if_fail (SWFDEC_IS_TEXT_FIELD (text)); g_return_if_fail (cr != NULL); @@ -261,10 +262,10 @@ swfdec_text_field_render (SwfdecTextField *text, cairo_t *cr, g_return_if_fail (trans != NULL); g_return_if_fail (inval != NULL); + swfdec_rect_intersect (&limit, &SWFDEC_GRAPHIC (text)->extents, inval); + if (text->background) { - cairo_rectangle (cr, SWFDEC_GRAPHIC (text)->extents.x0, - SWFDEC_GRAPHIC (text)->extents.y0, SWFDEC_GRAPHIC (text)->extents.x1, - SWFDEC_GRAPHIC (text)->extents.y1); + cairo_rectangle (cr, limit.x0, limit.y0, limit.x1, limit.y1); color = swfdec_color_apply_transform (background_color, trans); swfdec_color_set_source (cr, color); cairo_fill (cr); @@ -284,20 +285,17 @@ swfdec_text_field_render (SwfdecTextField *text, cairo_t *cr, inval); y = SWFDEC_GRAPHIC (text)->extents.y0 + 1; - y_min = MAX (SWFDEC_GRAPHIC (text)->extents.y0, inval->y0); - y_max = MIN (SWFDEC_GRAPHIC (text)->extents.y1, inval->y1); - cairo_move_to (cr, SWFDEC_GRAPHIC (text)->extents.x0, y); for (iter = layouts; iter != NULL; iter = iter->next) { SwfdecLayout *layout = (SwfdecLayout *)iter->data; - if (y + layout->height < y_min) { + if (y + layout->height < limit.y0) { // no need to render cairo_rel_move_to (cr, 0, layout->height); y += layout->height; - } else if (y < y_min || y + layout->height > y_max) { + } else if (y < limit.y0 || y + layout->height > limit.y1) { // possibly skip some lines PangoLayoutIter *iter_line; PangoLayoutLine *line; @@ -309,7 +307,7 @@ swfdec_text_field_render (SwfdecTextField *text, cairo_t *cr, pango_layout_iter_get_line_extents (iter_line, NULL, &rect); pango_extents_to_pixels (NULL, &rect); - while (y + rect.y + rect.height < y_min) + while (y + rect.y + rect.height < limit.y0) { if (!pango_layout_iter_next_line (iter_line)) g_assert_not_reached (); @@ -317,7 +315,7 @@ swfdec_text_field_render (SwfdecTextField *text, cairo_t *cr, pango_extents_to_pixels (NULL, &rect); } - while (y + rect.y <= y_max && + while (y + rect.y <= limit.y1 && y + rect.y + rect.height <= SWFDEC_GRAPHIC (text)->extents.y1) { cairo_rel_move_to (cr, 0, @@ -339,7 +337,7 @@ swfdec_text_field_render (SwfdecTextField *text, cairo_t *cr, cairo_rel_move_to (cr, -layout->render_offset_x, layout->height); y += layout->height; - if (y > y_max) + if (y > limit.y1) break; } else { // render the whole layout commit a1d953be60647fa04985138c4a88e62b889aaf9c Author: Pekka Lampila <pekka.lampila at iki.fi> Date: Sun Oct 14 01:49:51 2007 +0300 Don't render TextField text over it's extents in verticald direction Also limit rendering of lines based on the invalid area diff --git a/libswfdec/swfdec_text_field.c b/libswfdec/swfdec_text_field.c index 98383bd..177462d 100644 --- a/libswfdec/swfdec_text_field.c +++ b/libswfdec/swfdec_text_field.c @@ -24,6 +24,7 @@ #include <pango/pangocairo.h> #include <string.h> + #include "swfdec_text_field.h" #include "swfdec_debug.h" #include "swfdec_text_field_movie.h" @@ -252,6 +253,7 @@ swfdec_text_field_render (SwfdecTextField *text, cairo_t *cr, { GList *layouts, *iter; SwfdecColor color; + int y, y_min, y_max; g_return_if_fail (SWFDEC_IS_TEXT_FIELD (text)); g_return_if_fail (cr != NULL); @@ -281,19 +283,76 @@ swfdec_text_field_render (SwfdecTextField *text, cairo_t *cr, layouts = swfdec_text_field_generate_layouts (text, cr, paragraphs, trans, inval); - cairo_move_to (cr, SWFDEC_GRAPHIC (text)->extents.x0, - SWFDEC_GRAPHIC (text)->extents.y0 + 1); + y = SWFDEC_GRAPHIC (text)->extents.y0 + 1; + y_min = MAX (SWFDEC_GRAPHIC (text)->extents.y0, inval->y0); + y_max = MIN (SWFDEC_GRAPHIC (text)->extents.y1, inval->y1); + + cairo_move_to (cr, SWFDEC_GRAPHIC (text)->extents.x0, y); - for (iter = layouts; iter != NULL; iter = iter->next) { + for (iter = layouts; iter != NULL; iter = iter->next) + { SwfdecLayout *layout = (SwfdecLayout *)iter->data; - cairo_rel_move_to (cr, layout->render_offset_x, 0); + if (y + layout->height < y_min) { + // no need to render + cairo_rel_move_to (cr, 0, layout->height); + y += layout->height; + } else if (y < y_min || y + layout->height > y_max) { + // possibly skip some lines + PangoLayoutIter *iter_line; + PangoLayoutLine *line; + PangoRectangle rect; + + cairo_rel_move_to (cr, layout->render_offset_x, 0); + + iter_line = pango_layout_get_iter (layout->layout); + + pango_layout_iter_get_line_extents (iter_line, NULL, &rect); + pango_extents_to_pixels (NULL, &rect); + while (y + rect.y + rect.height < y_min) + { + if (!pango_layout_iter_next_line (iter_line)) + g_assert_not_reached (); + pango_layout_iter_get_line_extents (iter_line, NULL, &rect); + pango_extents_to_pixels (NULL, &rect); + } + + while (y + rect.y <= y_max && + y + rect.y + rect.height <= SWFDEC_GRAPHIC (text)->extents.y1) + { + cairo_rel_move_to (cr, 0, + pango_layout_iter_get_baseline (iter_line) / PANGO_SCALE); + line = pango_layout_iter_get_line_readonly (iter_line); + pango_cairo_show_layout_line (cr, line); + cairo_rel_move_to (cr, 0, + -pango_layout_iter_get_baseline (iter_line) / PANGO_SCALE); + + if (!pango_layout_iter_next_line (iter_line)) + break; + + pango_layout_iter_get_line_extents (iter_line, NULL, &rect); + pango_extents_to_pixels (NULL, &rect); + } - pango_layout_context_changed (layout->layout); + pango_layout_iter_free (iter_line); - pango_cairo_show_layout (cr, layout->layout); + cairo_rel_move_to (cr, -layout->render_offset_x, layout->height); + y += layout->height; - cairo_rel_move_to (cr, -layout->render_offset_x, layout->height); + if (y > y_max) + break; + } else { + // render the whole layout + cairo_rel_move_to (cr, layout->render_offset_x, 0); + pango_cairo_show_layout (cr, layout->layout); + cairo_rel_move_to (cr, -layout->render_offset_x, layout->height); + y += layout->height; + } + } + + for (iter = layouts; iter != NULL; iter = iter->next) + { + SwfdecLayout *layout = (SwfdecLayout *)iter->data; g_object_unref (layout->layout); g_free (layout); commit ab8ff2313cb6c57a11c00eef9b03afcc96abca48 Author: Pekka Lampila <pekka.lampila at iki.fi> Date: Sat Oct 13 21:44:29 2007 +0300 Add border property for TextField diff --git a/libswfdec/swfdec_as_strings.c b/libswfdec/swfdec_as_strings.c index a2d7cc8..d9b85cc 100644 --- a/libswfdec/swfdec_as_strings.c +++ b/libswfdec/swfdec_as_strings.c @@ -395,6 +395,7 @@ const char swfdec_as_strings[] SWFDEC_AS_CONSTANT_STRING ("embedFonts") SWFDEC_AS_CONSTANT_STRING ("autoSize") SWFDEC_AS_CONSTANT_STRING ("wordWrap") + SWFDEC_AS_CONSTANT_STRING ("border") /* add more here */ ; diff --git a/libswfdec/swfdec_text_field_movie_as.c b/libswfdec/swfdec_text_field_movie_as.c index 32ce75e..77c2652 100644 --- a/libswfdec/swfdec_text_field_movie_as.c +++ b/libswfdec/swfdec_text_field_movie_as.c @@ -598,6 +598,36 @@ swfdec_text_field_movie_set_wordWrap (SwfdecAsContext *cx, } } +static void +swfdec_text_field_movie_get_border (SwfdecAsContext *cx, + SwfdecAsObject *object, guint argc, SwfdecAsValue *argv, + SwfdecAsValue *ret) +{ + SwfdecTextFieldMovie *text; + + SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE, &text, ""); + + SWFDEC_AS_VALUE_SET_BOOLEAN (ret, text->text->border); +} + +static void +swfdec_text_field_movie_set_border (SwfdecAsContext *cx, + SwfdecAsObject *object, guint argc, SwfdecAsValue *argv, + SwfdecAsValue *ret) +{ + SwfdecTextFieldMovie *text; + gboolean value; + + SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE, &text, "b", &value); + + swfdec_as_value_to_number (cx, &argv[0]); + + if (text->text->border != value) { + text->text->border = value; + swfdec_movie_invalidate (SWFDEC_MOVIE (text)); + } +} + SWFDEC_AS_NATIVE (104, 104, swfdec_text_field_movie_getNewTextFormat) void swfdec_text_field_movie_getNewTextFormat (SwfdecAsContext *cx, @@ -818,6 +848,8 @@ swfdec_text_field_movie_init_properties (SwfdecAsContext *cx) swfdec_text_field_movie_add_variable (proto, SWFDEC_AS_STR_wordWrap, swfdec_text_field_movie_get_wordWrap, swfdec_text_field_movie_set_wordWrap); + swfdec_text_field_movie_add_variable (proto, SWFDEC_AS_STR_border, + swfdec_text_field_movie_get_border, swfdec_text_field_movie_set_border); } SWFDEC_AS_CONSTRUCTOR (104, 0, swfdec_text_field_movie_construct, swfdec_text_field_movie_get_type) commit 7be9e44642a66fe9b4c6f14c4e96d61386c14ad4 Author: Pekka Lampila <pekka.lampila at iki.fi> Date: Sat Oct 13 19:27:43 2007 +0300 Fix setNewTextFormat to add the defined values to the existing style This fixes a crash diff --git a/libswfdec/swfdec_text_field_movie_as.c b/libswfdec/swfdec_text_field_movie_as.c index a40d456..32ce75e 100644 --- a/libswfdec/swfdec_text_field_movie_as.c +++ b/libswfdec/swfdec_text_field_movie_as.c @@ -626,7 +626,7 @@ swfdec_text_field_movie_setNewTextFormat (SwfdecAsContext *cx, if (!SWFDEC_IS_TEXT_FORMAT (obj)) return; - text->format_new = swfdec_text_format_copy (SWFDEC_TEXT_FORMAT (obj)); + swfdec_text_format_add (text->format_new, SWFDEC_TEXT_FORMAT (obj)); } SWFDEC_AS_NATIVE (104, 102, swfdec_text_field_movie_setTextFormat) commit a207c0002748a1a42151252db7b0ba319798bb37 Author: Pekka Lampila <pekka.lampila at iki.fi> Date: Sat Oct 13 19:02:36 2007 +0300 Set PANGO_WRAP_WORD_CHAR to wrap on non-word boundaries if necessary diff --git a/libswfdec/swfdec_text_field.c b/libswfdec/swfdec_text_field.c index 485d3b2..98383bd 100644 --- a/libswfdec/swfdec_text_field.c +++ b/libswfdec/swfdec_text_field.c @@ -141,8 +141,12 @@ swfdec_text_field_generate_layouts (SwfdecTextField *text, cairo_t *cr, width += -paragraphs[i].indent / PANGO_SCALE; } - pango_layout_set_width (playout, - (text->word_wrap ? width * PANGO_SCALE : -1)); + if (text->word_wrap) { + pango_layout_set_wrap (playout, PANGO_WRAP_WORD_CHAR); + pango_layout_set_width (playout, width * PANGO_SCALE); + } else { + pango_layout_set_width (playout, -1); + } // set paragraph styles if (block->index_ == 0) { commit d28d42632fac41c643492693f1b0bdf9bf87c4e6 Author: Pekka Lampila <pekka.lampila at iki.fi> Date: Sat Oct 13 18:57:03 2007 +0300 Add wordWrap property for TextField diff --git a/libswfdec/swfdec_as_strings.c b/libswfdec/swfdec_as_strings.c index 0ff4d4c..a2d7cc8 100644 --- a/libswfdec/swfdec_as_strings.c +++ b/libswfdec/swfdec_as_strings.c @@ -394,6 +394,7 @@ const char swfdec_as_strings[] SWFDEC_AS_CONSTANT_STRING ("textColor") SWFDEC_AS_CONSTANT_STRING ("embedFonts") SWFDEC_AS_CONSTANT_STRING ("autoSize") + SWFDEC_AS_CONSTANT_STRING ("wordWrap") /* add more here */ ; diff --git a/libswfdec/swfdec_text_field_movie_as.c b/libswfdec/swfdec_text_field_movie_as.c index 8a08dd2..a40d456 100644 --- a/libswfdec/swfdec_text_field_movie_as.c +++ b/libswfdec/swfdec_text_field_movie_as.c @@ -568,6 +568,36 @@ swfdec_text_field_movie_set_autoSize (SwfdecAsContext *cx, swfdec_text_field_movie_format_changed (text); } +static void +swfdec_text_field_movie_get_wordWrap (SwfdecAsContext *cx, + SwfdecAsObject *object, guint argc, SwfdecAsValue *argv, + SwfdecAsValue *ret) +{ + SwfdecTextFieldMovie *text; + + SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE, &text, ""); + + SWFDEC_AS_VALUE_SET_BOOLEAN (ret, text->text->word_wrap); +} + +static void +swfdec_text_field_movie_set_wordWrap (SwfdecAsContext *cx, + SwfdecAsObject *object, guint argc, SwfdecAsValue *argv, + SwfdecAsValue *ret) +{ + SwfdecTextFieldMovie *text; + gboolean value; + + SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE, &text, "b", &value); + + swfdec_as_value_to_number (cx, &argv[0]); + + if (text->text->word_wrap != value) { + text->text->word_wrap = value; + swfdec_text_field_movie_format_changed (text); + } +} + SWFDEC_AS_NATIVE (104, 104, swfdec_text_field_movie_getNewTextFormat) void swfdec_text_field_movie_getNewTextFormat (SwfdecAsContext *cx, @@ -785,6 +815,9 @@ swfdec_text_field_movie_init_properties (SwfdecAsContext *cx) swfdec_text_field_movie_add_variable (proto, SWFDEC_AS_STR_autoSize, swfdec_text_field_movie_get_autoSize, swfdec_text_field_movie_set_autoSize); + swfdec_text_field_movie_add_variable (proto, SWFDEC_AS_STR_wordWrap, + swfdec_text_field_movie_get_wordWrap, + swfdec_text_field_movie_set_wordWrap); } SWFDEC_AS_CONSTRUCTOR (104, 0, swfdec_text_field_movie_construct, swfdec_text_field_movie_get_type) commit 198e1a25ca3debd97e6534c5291143258b5d8919 Author: Pekka Lampila <pekka.lampila at iki.fi> Date: Sat Oct 13 18:54:31 2007 +0300 Fix a crash in TextField for empty paragraphs diff --git a/libswfdec/swfdec_text_field_movie.c b/libswfdec/swfdec_text_field_movie.c index 21e9a79..304e8e8 100644 --- a/libswfdec/swfdec_text_field_movie.c +++ b/libswfdec/swfdec_text_field_movie.c @@ -112,7 +112,7 @@ swfdec_text_field_movie_generate_paragraph (SwfdecTextFieldMovie *text, g_assert (SWFDEC_IS_TEXT_FIELD_MOVIE (text)); g_assert (paragraph != NULL); - g_assert (start_index < end_index); + g_assert (start_index <= end_index); g_assert (end_index <= strlen (text->text_display)); paragraph->text = text->text_display + start_index; @@ -122,6 +122,9 @@ swfdec_text_field_movie_generate_paragraph (SwfdecTextFieldMovie *text, paragraph->attrs = NULL; paragraph->attrs_list = pango_attr_list_new (); + if (paragraph->text_length == 0) + return; + g_assert (text->formats != NULL); for (iter = text->formats; iter->next != NULL && ((SwfdecFormatIndex *)(iter->next->data))->index <= start_index; commit b12359a1bb3a12b72aed6561ab2d1b1ee225eb26 Author: Pekka Lampila <pekka.lampila at iki.fi> Date: Sat Oct 13 15:53:14 2007 +0300 Convert the x, y, width and height units correctly in createTextField diff --git a/libswfdec/swfdec_text_field_movie_as.c b/libswfdec/swfdec_text_field_movie_as.c index 8d7389a..8a08dd2 100644 --- a/libswfdec/swfdec_text_field_movie_as.c +++ b/libswfdec/swfdec_text_field_movie_as.c @@ -677,10 +677,12 @@ swfdec_text_field_movie_createTextField (SwfdecAsContext *cx, edittext->indent = 0; edittext->leading = 0; - edittext->graphic.extents.x0 = x; - edittext->graphic.extents.x1 = x + width; - edittext->graphic.extents.y0 = y; - edittext->graphic.extents.y1 = y + height; + edittext->graphic.extents.x0 = SWFDEC_DOUBLE_TO_TWIPS (x); + edittext->graphic.extents.x1 + edittext->graphic.extents.x0 + SWFDEC_DOUBLE_TO_TWIPS (width); + edittext->graphic.extents.y0 = SWFDEC_DOUBLE_TO_TWIPS (y); + edittext->graphic.extents.y1 + edittext->graphic.extents.y0 + SWFDEC_DOUBLE_TO_TWIPS (height); movie = swfdec_movie_find (parent, depth); if (movie)
Seemingly Similar Threads
- 5 commits - libswfdec/swfdec_html_parser.c libswfdec/swfdec_text_field.c libswfdec/swfdec_text_field.h libswfdec/swfdec_text_field_movie_as.c libswfdec/swfdec_text_field_movie.c libswfdec/swfdec_xml.c libswfdec/swfdec_xml.h
- libswfdec/swfdec_text_field.c libswfdec/swfdec_text_field.h libswfdec/swfdec_text_field_movie.c
- 6 commits - libswfdec/swfdec_as_strings.c libswfdec/swfdec_codec_audio.c libswfdec/swfdec_codec_video.c libswfdec/swfdec_text_field.c libswfdec/swfdec_text_field.h libswfdec/swfdec_text_field_movie_as.c libswfdec/swfdec_text_field_movie.c
- 11 commits - libswfdec/swfdec_as_strings.c libswfdec/swfdec_text_field.c libswfdec/swfdec_text_field.h libswfdec/swfdec_text_field_movie_as.c libswfdec/swfdec_text_field_movie.c libswfdec/swfdec_text_field_movie.h test/trace
- libswfdec/swfdec_text_field.c