gnash-commit
[Top][All Lists]
Advanced

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

[Gnash-commit] gnash ./ChangeLog server/edit_text_character.cp...


From: Sandro Santilli
Subject: [Gnash-commit] gnash ./ChangeLog server/edit_text_character.cp...
Date: Thu, 18 May 2006 15:17:57 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Branch:         
Changes by:     Sandro Santilli <address@hidden>        06/05/18 15:17:57

Modified files:
        .              : ChangeLog 
        server         : edit_text_character.cpp edit_text_character.h 
                         edit_text_character_def.cpp 
                         edit_text_character_def.h text.cpp text.h 

Log message:
        * server/edit_text_character_def.h, server/edit_text_character.cpp
        edit_text_character_def made a real class, ensuring data
        members are never changed. Type of variables holding twips
        values changed from float to uint16_t (a definition is immutable
        anyway, and we read uint16_t from the stream)
        * server/edit_text_character.h, server/edit_text_character_def.cpp:
        updated to use edit_text_character_def interface (no more
        direct members access). Added a private 'font' member to allow
        for replacement of it from ActionScript code (not sure this
        is required).
        * server/text.cpp, server/text.h: changed text_style::m_font
        member to be a const pointer.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/gnash/ChangeLog.diff?tr1=1.356&tr2=1.357&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/gnash/gnash/server/edit_text_character.cpp.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/gnash/gnash/server/edit_text_character.h.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/gnash/gnash/server/edit_text_character_def.cpp.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/gnash/gnash/server/edit_text_character_def.h.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/gnash/gnash/server/text.cpp.diff?tr1=1.19&tr2=1.20&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/gnash/gnash/server/text.h.diff?tr1=1.8&tr2=1.9&r1=text&r2=text

Patches:
Index: gnash/ChangeLog
diff -u gnash/ChangeLog:1.356 gnash/ChangeLog:1.357
--- gnash/ChangeLog:1.356       Thu May 18 14:47:00 2006
+++ gnash/ChangeLog     Thu May 18 15:17:57 2006
@@ -1,5 +1,17 @@
 2006-05-18 Sandro Santilli <address@hidden>
 
+       * server/edit_text_character_def.h, server/edit_text_character.cpp
+       edit_text_character_def made a real class, ensuring data
+       members are never changed. Type of variables holding twips
+       values changed from float to uint16_t (a definition is immutable
+       anyway, and we read uint16_t from the stream)
+       * server/edit_text_character.h, server/edit_text_character_def.cpp:
+       updated to use edit_text_character_def interface (no more
+       direct members access). Added a private 'font' member to allow
+       for replacement of it from ActionScript code (not sure this
+       is required).
+       * server/text.cpp, server/text.h: changed text_style::m_font
+       member to be a const pointer.
        * server/StreamProvider.cpp: fixed compiler warning
        in absence of libcurl.
        * server/Makefile.am, server/edit_text_character.cpp
Index: gnash/server/edit_text_character.cpp
diff -u gnash/server/edit_text_character.cpp:1.1 
gnash/server/edit_text_character.cpp:1.2
--- gnash/server/edit_text_character.cpp:1.1    Thu May 18 11:53:02 2006
+++ gnash/server/edit_text_character.cpp        Thu May 18 15:17:57 2006
@@ -3,18 +3,37 @@
 // This source code has been donated to the Public Domain.  Do
 // whatever you want with it.
 
-// Code for the text tags.
-
-
 #include "utf8.h"
-//#include "log.h"
+#include "log.h"
 #include "render.h"
 #include "movie_definition.h" // to extract version info
 
 #include "edit_text_character.h"
 
+#include <algorithm>
+
 namespace gnash {
 
+edit_text_character::edit_text_character(movie* parent,
+               edit_text_character_def* def, int id)
+       :
+       character(parent, id),
+       m_def(def),
+       _font(0)
+{
+       assert(parent);
+       assert(m_def);
+
+       // WARNING! remember to set the font *before* setting text value!
+       set_font( m_def->get_font() );
+
+       set_text_value(m_def->get_default_text().c_str());
+
+       m_dummy_style.push_back(fill_style());
+
+       reset_bounding_box(0, 0);
+}
+
 void
 edit_text_character::set_text_value(const char* new_text)
 {
@@ -24,10 +43,10 @@
        }
 
        m_text = new_text;
-       if (m_def->m_max_length > 0
-           && m_text.length() > m_def->m_max_length)
+       if (m_def->get_max_length() > 0
+           && m_text.length() > m_def->get_max_length() )
        {
-               m_text.resize(m_def->m_max_length);
+               m_text.resize(m_def->get_max_length());
        }
 
        format_text();
@@ -168,7 +187,7 @@
                // @@ TODO should implement this in
                // character and inherit into both here and sprite_instance
                rect    transformed_rect;
-               transformed_rect.enclose_transformed_rect(get_world_matrix(), 
m_def->m_rect);
+               transformed_rect.enclose_transformed_rect(get_world_matrix(), 
m_def->get_bounds());
                val->set_double(TWIPS_TO_PIXELS(transformed_rect.width()));
                return true;
        }
@@ -178,7 +197,7 @@
                // @@ TODO should implement this in
                // character and inherit into both here and sprite_instance
                rect    transformed_rect;
-               transformed_rect.enclose_transformed_rect(get_world_matrix(), 
m_def->m_rect);
+               transformed_rect.enclose_transformed_rect(get_world_matrix(), 
m_def->get_bounds());
                val->set_double(TWIPS_TO_PIXELS(transformed_rect.height()));
                return true;
        }
@@ -211,11 +230,8 @@
 {
        assert(m_def);
 
-       log_msg("m_def->m_rect.width() == %g; m_def->m_right_margin == %g\n",
-               m_def->m_rect.width(), m_def->m_right_margin);
-
-       float   extra_space = (m_def->m_rect.width() -
-                       m_def->m_right_margin) - x - WIDTH_FUDGE;
+       float   extra_space = (m_def->width() -
+                       m_def->get_right_margin()) - x - WIDTH_FUDGE;
        assert(extra_space >= 0.0f);
 
        float   shift_right = 0.0f;
@@ -248,23 +264,38 @@
        }
 }
 
+const font*
+edit_text_character::set_font(const font* newfont)
+{
+       const font* oldfont = _font;
+       _font = newfont; // @@ should I add_ref() ?
+       return oldfont;  // @@ should I drop_ref() ?
+}
+
 void
 edit_text_character::format_text()
 {
        m_text_glyph_records.resize(0);
 
-       if (m_def->m_font == NULL)
+       // FIXME: I don't think we should query the definition
+       // to find the appropriate font to use, as ActionScript
+       // code should be able to change the font of a TextField
+       //
+       if (_font == NULL)
        {
+               log_error("No font for edit_text_character! [%s:%d]\n",
+                       __FILE__, __LINE__);
                return;
        }
 
        // @@ mostly for debugging
        // Font substitution -- if the font has no
        // glyphs, try some other defined font!
-       if (m_def->m_font->get_glyph_count() == 0)
+       if (_font->get_glyph_count() == 0)
        {
+
                // Find a better font.
-               font*   newfont = m_def->m_font;
+               const font*     newfont = _font;
                for (int i = 0, n = fontlib::get_font_count(); i < n; i++)
                {
                        font*   f = fontlib::get_font(i);
@@ -278,48 +309,50 @@
                        }
                }
 
-               if (m_def->m_font != newfont)
+               if (_font != newfont)
                {
                        log_error("error: substituting font!  font '%s' has no 
glyphs, using font '%s'\n",
-                                 fontlib::get_font_name(m_def->m_font),
+                                 fontlib::get_font_name(_font),
                                  fontlib::get_font_name(newfont));
 
-                       m_def->m_font = newfont;
+                       _font = newfont;
                }
        }
 
 
-       float   scale = m_def->m_text_height / 1024.0f; // the EM square is 
1024 x 1024
+       float   scale = m_def->get_font_height() / 1024.0f;     // the EM 
square is 1024 x 1024
 
        text_glyph_record       rec;    // one to work on
-       rec.m_style.m_font = m_def->m_font;
-       rec.m_style.m_color = m_def->m_color;
-       rec.m_style.m_x_offset = fmax(0, m_def->m_left_margin + 
m_def->m_indent);
-       rec.m_style.m_y_offset = m_def->m_text_height
-               + (m_def->m_font->get_leading() - m_def->m_font->get_descent()) 
* scale;
-       rec.m_style.m_text_height = m_def->m_text_height;
+       rec.m_style.m_font = _font;
+       rec.m_style.m_color = m_def->get_text_color();
+       rec.m_style.m_x_offset = std::max(0, m_def->get_left_margin() + 
m_def->get_indent());
+       rec.m_style.m_y_offset = m_def->get_font_height()
+               + (_font->get_leading() - _font->get_descent()) * scale;
+       rec.m_style.m_text_height = m_def->get_font_height();
        rec.m_style.m_has_x_offset = true;
        rec.m_style.m_has_y_offset = true;
 
        float   x = rec.m_style.m_x_offset;
        float   y = rec.m_style.m_y_offset;
 
+
        // Start the bbox at the upper-left corner of the first glyph.
-       reset_bounding_box(x, y - m_def->m_font->get_descent() * scale + 
m_def->m_text_height);
+       reset_bounding_box(x, y - _font->get_descent() * scale + 
m_def->get_font_height());
 
-       float   leading = m_def->m_leading;
-       leading += m_def->m_font->get_leading() * scale;
+       float   leading = m_def->get_leading();
+       leading += _font->get_leading() * scale;
 
        int     last_code = -1;
        int     last_space_glyph = -1;
        int     last_line_start_record = 0;
 
+
        const char*     text = &m_text[0];
        while (uint32_t code = utf8::decode_next_unicode_character(&text))
        {
 // @@ try to truncate overflow text??
 #if 0
-               if (y + m_def->m_font->get_descent() * scale > 
m_def->m_rect.height())
+               if (y + _font->get_descent() * scale > m_def->height())
                {
                        // Text goes below the bottom of our bounding box.
                        rec.m_glyphs.resize(0);
@@ -329,12 +362,12 @@
 
                //uint16_t      code = m_text[j];
 
-               x += m_def->m_font->get_kerning_adjustment(last_code, (int) 
code) * scale;
+               x += _font->get_kerning_adjustment(last_code, (int) code) * 
scale;
                last_code = (int) code;
 
                // Expand the bounding-box to the lower-right corner of each 
glyph as
                // we generate it.
-               m_text_bounding_box.expand_to_point(x, y + 
m_def->m_font->get_descent() * scale);
+               m_text_bounding_box.expand_to_point(x, y + _font->get_descent() 
* scale);
 
                if (code == 13 || code == 10)
                {
@@ -347,18 +380,19 @@
 
                        // Close out this stretch of glyphs.
                        m_text_glyph_records.push_back(rec);
-                       align_line(m_def->m_alignment, last_line_start_record, 
x);
+                       align_line(m_def->get_alignment(), 
last_line_start_record, x);
 
-                       x = fmax(0, m_def->m_left_margin + m_def->m_indent);    
// new paragraphs get the indent.
-                       y += m_def->m_text_height + leading;
+                       // new paragraphs get the indent.
+                       x = std::max(0, m_def->get_left_margin() + 
m_def->get_indent());
+                       y += m_def->get_font_height() + leading;
 
                        // Start a new record on the next line.
                        rec.m_glyphs.resize(0);
-                       rec.m_style.m_font = m_def->m_font;
-                       rec.m_style.m_color = m_def->m_color;
+                       rec.m_style.m_font = _font;
+                       rec.m_style.m_color = m_def->get_text_color();
                        rec.m_style.m_x_offset = x;
                        rec.m_style.m_y_offset = y;
-                       rec.m_style.m_text_height = m_def->m_text_height;
+                       rec.m_style.m_text_height = m_def->get_font_height();
                        rec.m_style.m_has_x_offset = true;
                        rec.m_style.m_has_y_offset = true;
 
@@ -400,7 +434,7 @@
                        last_space_glyph = rec.m_glyphs.size();
                }
 
-               int     index = m_def->m_font->get_glyph_index((uint16_t) code);
+               int index = _font->get_glyph_index((uint16_t) code);
                if (index == -1)
                {
                        // error -- missing glyph!
@@ -415,7 +449,7 @@
                                          "into your SWF file!\n",
                                            __PRETTY_FUNCTION__,
                                            code,
-                                           m_def->m_font->get_name());
+                                           _font->get_name());
                        }
 
                        // Drop through and use index == -1; this will display
@@ -423,14 +457,14 @@
                }
                text_glyph_record::glyph_entry  ge;
                ge.m_glyph_index = index;
-               ge.m_glyph_advance = scale * m_def->m_font->get_advance(index);
+               ge.m_glyph_advance = scale * _font->get_advance(index);
 
                rec.m_glyphs.push_back(ge);
 
                x += ge.m_glyph_advance;
 
                
-               if (x >= m_def->m_rect.width() - m_def->m_right_margin - 
WIDTH_FUDGE)
+               if (x >= m_def->width() - m_def->get_right_margin() - 
WIDTH_FUDGE)
                {
                        // Whoops, we just exceeded the box width.  Do 
word-wrap.
 
@@ -440,16 +474,16 @@
                        m_text_glyph_records.push_back(rec);
                        float   previous_x = x;
 
-                       x = m_def->m_left_margin;
-                       y += m_def->m_text_height + leading;
+                       x = m_def->get_left_margin();
+                       y += m_def->get_font_height() + leading;
 
                        // Start a new record on the next line.
                        rec.m_glyphs.resize(0);
-                       rec.m_style.m_font = m_def->m_font;
-                       rec.m_style.m_color = m_def->m_color;
+                       rec.m_style.m_font = _font;
+                       rec.m_style.m_color = m_def->get_text_color();
                        rec.m_style.m_x_offset = x;
                        rec.m_style.m_y_offset = y;
-                       rec.m_style.m_text_height = m_def->m_text_height;
+                       rec.m_style.m_text_height = m_def->get_font_height();
                        rec.m_style.m_has_x_offset = true;
                        rec.m_style.m_has_y_offset = true;
                        
@@ -481,7 +515,7 @@
                                last_line.m_glyphs.resize(last_space_glyph);
                        }
 
-                       align_line(m_def->m_alignment, last_line_start_record, 
previous_x);
+                       align_line(m_def->get_alignment(), 
last_line_start_record, previous_x);
 
                        last_space_glyph = -1;
                        last_line_start_record = m_text_glyph_records.size();
@@ -492,7 +526,9 @@
 
        // Add this line to our output.
        m_text_glyph_records.push_back(rec);
-       align_line(m_def->m_alignment, last_line_start_record, x);
+
+       align_line(m_def->get_alignment(), last_line_start_record, x);
+
 }
 
 void
@@ -500,7 +536,7 @@
 {
 //             GNASH_REPORT_FUNCTION;
 
-       if (m_def->m_border)
+       if (m_def->has_border())
        {
                matrix  mat = get_world_matrix();
                
@@ -511,10 +547,11 @@
                render::set_matrix(mat);
 
                point   coords[4];
-               coords[0] = m_def->m_rect.get_corner(0);
-               coords[1] = m_def->m_rect.get_corner(1);
-               coords[2] = m_def->m_rect.get_corner(3);
-               coords[3] = m_def->m_rect.get_corner(2);
+               const rect def_bounds = m_def->get_bounds();
+               coords[0] = def_bounds.get_corner(0);
+               coords[1] = def_bounds.get_corner(1);
+               coords[2] = def_bounds.get_corner(3);
+               coords[3] = def_bounds.get_corner(2);
 
                int16_t icoords[18] = 
                {
@@ -540,7 +577,8 @@
        }
 
        // Draw our actual text.
-       display_glyph_records(matrix::identity, this, m_text_glyph_records, 
m_def->m_root_def);
+       display_glyph_records(matrix::identity, this, m_text_glyph_records,
+               m_def->get_root_def());
 
        do_display_callback();
 }
Index: gnash/server/edit_text_character.h
diff -u gnash/server/edit_text_character.h:1.1 
gnash/server/edit_text_character.h:1.2
--- gnash/server/edit_text_character.h:1.1      Thu May 18 11:53:02 2006
+++ gnash/server/edit_text_character.h  Thu May 18 15:17:57 2006
@@ -56,7 +56,11 @@
 /// An instance of an edit_text_character_def (I presume)
 struct edit_text_character : public character
 {
+       /// immutable definition of this object, as read
+       /// from the SWF stream. Assured to be not-NULL
+       /// by constructor. This might change in the future
        edit_text_character_def*        m_def;
+
        std::vector<text_glyph_record>  m_text_glyph_records;
 
        /// used to pass a color on to shape_character::display()
@@ -69,26 +73,16 @@
 
        tu_string       m_text;
 
-       edit_text_character(movie* parent, edit_text_character_def* def, int id)
-               :
-               character(parent, id),
-               m_def(def)
-       {
-               assert(parent);
-               assert(m_def);
-
-               set_text_value(m_def->m_default_text.c_str());
-
-               m_dummy_style.push_back(fill_style());
-
-               reset_bounding_box(0, 0);
-       }
+       edit_text_character(movie* parent, edit_text_character_def* def,
+                       int id);
 
        ~edit_text_character()
        {
        }
 
-       virtual const char* get_text_name() const { return 
m_def->m_default_name.c_str(); }
+       virtual const char* get_text_name() const {
+               return m_def->get_default_name().c_str();
+       }
 
 
        /// Reset our text bounding box to the given point.
@@ -132,6 +126,16 @@
 
        /// Draw the dynamic string.
        void    display();
+
+private:
+
+       /// Set our font, return previously set one.
+       /// This is private for now, but might eventally
+       /// be public, for setting fonts from ActionScript.
+       const font* set_font(const font* newfont);
+
+       const font* _font;
+
 };
 
 } // namespace gnash
Index: gnash/server/edit_text_character_def.cpp
diff -u gnash/server/edit_text_character_def.cpp:1.2 
gnash/server/edit_text_character_def.cpp:1.3
--- gnash/server/edit_text_character_def.cpp:1.2        Thu May 18 11:53:02 2006
+++ gnash/server/edit_text_character_def.cpp    Thu May 18 15:17:57 2006
@@ -23,7 +23,7 @@
                movie_definition* m)
 {
        assert(m != NULL);
-       assert(tag_type == 37);
+       assert(tag_type == SWF::DEFINEEDITTEXT); // 37
 
        m_rect.read(in);
 
@@ -49,7 +49,7 @@
        if (has_font)
        {
                m_font_id = in->read_u16();
-               m_text_height = (float) in->read_u16();
+               m_text_height = in->read_u16();
        }
 
        if (has_color)
@@ -65,10 +65,12 @@
        if (has_layout)
        {
                m_alignment = (alignment) in->read_u8();
-               m_left_margin = (float) in->read_u16();
-               m_right_margin = (float) in->read_u16();
-               m_indent = (float) in->read_s16();
-               m_leading = (float) in->read_s16();
+               //m_left_margin = (float) in->read_u16();
+               m_left_margin = in->read_u16();
+               //m_right_margin = (float) in->read_u16();
+               m_right_margin = in->read_u16();
+               m_indent = in->read_s16();
+               m_leading = in->read_s16();
        }
 
        char*   name = in->read_string();
@@ -82,13 +84,21 @@
                delete [] str;
        }
 
-       IF_VERBOSE_PARSE(log_msg("edit_text_char, varname = %s, text = %s\n",
-                                m_default_name.c_str(), 
m_default_text.c_str()));
+       IF_VERBOSE_PARSE(
+               log_msg("edit_text_char:\n"
+                       " default varname = %s\n"
+                       " text = ``%s''\n",
+                       m_default_name.c_str(),
+                       m_default_text.c_str());
+               log_msg(" font_id: %d\n"
+                       " text_height: %d\n",
+                       m_font_id,
+                       m_text_height);
+       );
 }
 
-
-character*
-edit_text_character_def::create_character_instance(movie* parent, int id)
+const font*
+edit_text_character_def::get_font() 
 {
        if (m_font == NULL)
        {
@@ -100,8 +110,18 @@
                }
        }
 
-       edit_text_character*    ch = new edit_text_character(parent, this, id);
+       return m_font;
+}
+
+character*
+edit_text_character_def::create_character_instance(movie* parent, int id)
+{
+       // Resolve the font, if possible
+       get_font();
+       edit_text_character* ch = new edit_text_character(parent, this, id);
+
        ch->set_name(m_default_name.c_str());
+
        return ch;
 }
 
Index: gnash/server/edit_text_character_def.h
diff -u gnash/server/edit_text_character_def.h:1.2 
gnash/server/edit_text_character_def.h:1.3
--- gnash/server/edit_text_character_def.h:1.2  Thu May 18 11:53:02 2006
+++ gnash/server/edit_text_character_def.h      Thu May 18 15:17:57 2006
@@ -45,141 +45,252 @@
 
 namespace gnash {
 
-       // Forward declarations
-       class movie_definition;
+// Forward declarations
+class movie_definition;
+
+/// \brief
+/// A definition for a text display character, whose text can
+/// be changed at runtime (by script or host).
+/// This object is defined by SWF tag 37 (SWF::DEFINEEDITTEXT)
+///
+class edit_text_character_def : public character_def
+{
+
+public:
+
+       /// Text alignment values
+       enum alignment
+       {
+               ALIGN_LEFT = 0,
+               ALIGN_RIGHT,
+               ALIGN_CENTER,
+               /// probably don't need to implement...
+               ALIGN_JUSTIFY
+       };
+
+       edit_text_character_def(movie_definition* root_def)
+               :
+               m_root_def(root_def),
+               m_word_wrap(false),
+               m_multiline(false),
+               m_password(false),
+               m_readonly(false),
+               m_auto_size(false),
+               m_no_select(false),
+               m_border(false),
+               m_html(false),
+               m_use_outlines(false),
+               m_font_id(-1),
+               m_font(NULL),
+               m_text_height(1),
+               m_max_length(0),
+               m_alignment(ALIGN_LEFT),
+               m_left_margin(0),
+               m_right_margin(0),
+               m_indent(0),
+               m_leading(0)
+       {
+               assert(m_root_def);
+
+               m_color.set(0, 0, 0, 255);
+       }
+
+       /// Set the format of the text
+       void    set_format(text_format &format)
+       {
+               m_format = format;
+       }
+       
+       ~edit_text_character_def()
+       {
+       }
+
+       /// Get width of this definition (by definition)
+       float width() const { return m_rect.width(); }
+
+       /// Get height of this definition (by definition)
+       float height() const { return m_rect.height(); }
+
+       /// Create an instance of this character
+       character* create_character_instance(movie* parent, int id);
+
+       /// Initialize from SWF input stream (tag 37)
+       void read(stream* in, int tag_type, movie_definition* m);
+
+       /// Return a reference to the default text associated
+       /// with this EditText definition.
+       const tu_string& get_default_text() const {
+               return m_default_text;
+       }
+
+       /// Return a reference to the default name for
+       /// instances of this EditText definition. (?)
+       const tu_string& get_default_name() const {
+               return m_default_name;
+       }
 
        /// \brief
-       /// A definition for a text display character, whose text can
-       /// be changed at runtime (by script or host).
-       /// This object is defined by SWF tag 37.
+       /// Return the maximum length of text this widget
+       /// can hold.
+       int get_max_length() const {
+               return m_max_length;
+       }
+
+       /// Get boundaries of this movie
+       //
+       /// Return a reference to private space, copy
+       /// it if you need it  for longer then this
+       /// object's lifetime.
        ///
-       struct edit_text_character_def : public character_def
-       {
-               movie_definition*       m_root_def;
-               rect                    m_rect;
-               tu_string               m_default_name;
-               text_format             m_format;
-               bool                    m_word_wrap;
-               bool                    m_multiline;
-               /// show asterisks instead of actual characters
-               bool                    m_password;
-               bool                    m_readonly;
-               /// resize our bound to fit the text
-               bool                    m_auto_size;
-               bool                    m_no_select;
-
-               /// forces white background and black border.
-               /// silly, but sometimes used
-               bool                    m_border;
-
-               /// Allowed HTML (from Alexi's SWF Reference).
-               //
-               /// <a href=url target=targ>...</a> -- hyperlink
-               /// <b>...</b> -- bold
-               /// <br> -- line break
-               /// <font face=name size=[+|-][0-9]+ color=#RRGGBB>...</font>  
-- font change; size in TWIPS
-               /// <i>...</i> -- italic
-               /// <li>...</li> -- list item
-               /// <p>...</p> -- paragraph
-               /// <tab> -- insert tab
-               /// <TEXTFORMAT>  </TEXTFORMAT>
-               ///   [ BLOCKINDENT=[0-9]+ ]
-               ///   [ INDENT=[0-9]+ ]
-               ///   [ LEADING=[0-9]+ ]
-               ///   [ LEFTMARGIN=[0-9]+ ]
-               ///   [ RIGHTMARGIN=[0-9]+ ]
-               ///   [ TABSTOPS=[0-9]+{,[0-9]+} ]
-               ///
-               /// Change the different parameters as indicated. The
-               /// sizes are all in TWIPs. There can be multiple
-               /// positions for the tab stops. These are seperated by
-               /// commas.
-               /// <U>...</U> -- underline
-               ///
-               bool                    m_html;
-
-
-
-               /// \brief
-               /// When true, use specified SWF internal font. 
-               /// Otherwise, renderer picks a default font
-               bool    m_use_outlines;
-
-               int     m_font_id;
-               font*   m_font;
-               float   m_text_height;
-
-               rgba    m_color;
-               int     m_max_length;
-
-               enum alignment
-               {
-                       ALIGN_LEFT = 0,
-                       ALIGN_RIGHT,
-                       ALIGN_CENTER,
-                       /// probably don't need to implement...
-                       ALIGN_JUSTIFY
-               };
-               alignment       m_alignment;
-               
-               /// extra space between box border and text
-               float   m_left_margin;
-
-               float   m_right_margin;
-
-               /// how much to indent the first line of multiline text
-               float   m_indent;
-
-               /// \brief
-               /// Extra space between lines
-               /// (in addition to default font line spacing)
-               float   m_leading;
-               tu_string       m_default_text;
-
-               edit_text_character_def(movie_definition* root_def)
-                       :
-                       m_root_def(root_def),
-                       m_word_wrap(false),
-                       m_multiline(false),
-                       m_password(false),
-                       m_readonly(false),
-                       m_auto_size(false),
-                       m_no_select(false),
-                       m_border(false),
-                       m_html(false),
-                       m_use_outlines(false),
-                       m_font_id(-1),
-                       m_font(NULL),
-                       m_text_height(1.0f),
-                       m_max_length(0),
-                       m_alignment(ALIGN_LEFT),
-                       m_left_margin(0.0f),
-                       m_right_margin(0.0f),
-                       m_indent(0.0f),
-                       m_leading(0.0f)
-               {
-                       assert(m_root_def);
-
-                       m_color.set(0, 0, 0, 255);
-               }
-
-               /// Set the format of the text
-               void    set_format(text_format &format)
-               {
-                       m_format = format;
-               }
-               
-               ~edit_text_character_def()
-               {
-               }
+       const rect& get_bounds() const {
+               return m_rect;
+       }
+
+       /// Get right margin in twips
+       uint16_t get_right_margin() const {
+               return m_right_margin;
+       }
+
+       /// Get left margin in twips
+       uint16_t get_left_margin() const {
+               return m_left_margin;
+       }
+
+       /// Get indentation in  twips
+       uint16_t get_indent() const {
+               return m_indent;
+       }
+
+       /// Get height of font  in twips.
+       // @@ what if has_font is false ??
+       uint16_t get_font_height() const {
+               return m_text_height;
+       }
+
+       /// Get font.
+       //
+       /// Note: use add_ref() on the return if you need to keep
+       /// it alive after this definition gets destructed.
+       ///
+       const font* get_font();
 
+       /// Get color of the text
+       const rgba& get_text_color() const {
+               return m_color;
+       }
 
-               character* create_character_instance(movie* parent, int id);
+       /// \brief
+       /// Get extra space between lines (in twips).
+       //
+       /// This is in addition to default font line spacing.
+       uint16_t get_leading() const {
+               return m_leading;
+       }
+
+       /// Get text alignment
+       alignment get_alignment() const {
+               return m_alignment;
+       }
+
+       /// Is border requested ?
+       bool has_border() const {
+               return m_border;
+       }
+
+       /// Get root movie definition
+       movie_definition* get_root_def() {
+               return m_root_def;
+       }
+
+private:
+
+       /// Root movie_definition
+       movie_definition*       m_root_def;
+
+       rect                    m_rect;
+       tu_string               m_default_name;
+       text_format             m_format;
+       bool                    m_word_wrap;
+       bool                    m_multiline;
+       /// show asterisks instead of actual characters
+       bool                    m_password;
+       bool                    m_readonly;
+       /// resize our bound to fit the text
+       bool                    m_auto_size;
+       bool                    m_no_select;
+
+       /// forces white background and black border.
+       /// silly, but sometimes used
+       bool                    m_border;
+
+       /// Allowed HTML (from Alexi's SWF Reference).
+       //
+       /// <a href=url target=targ>...</a> -- hyperlink
+       /// <b>...</b> -- bold
+       /// <br> -- line break
+       /// <font face=name size=[+|-][0-9]+ color=#RRGGBB>...</font>  -- font 
change; size in TWIPS
+       /// <i>...</i> -- italic
+       /// <li>...</li> -- list item
+       /// <p>...</p> -- paragraph
+       /// <tab> -- insert tab
+       /// <TEXTFORMAT>  </TEXTFORMAT>
+       ///   [ BLOCKINDENT=[0-9]+ ]
+       ///   [ INDENT=[0-9]+ ]
+       ///   [ LEADING=[0-9]+ ]
+       ///   [ LEFTMARGIN=[0-9]+ ]
+       ///   [ RIGHTMARGIN=[0-9]+ ]
+       ///   [ TABSTOPS=[0-9]+{,[0-9]+} ]
+       ///
+       /// Change the different parameters as indicated. The
+       /// sizes are all in TWIPs. There can be multiple
+       /// positions for the tab stops. These are seperated by
+       /// commas.
+       /// <U>...</U> -- underline
+       ///
+       bool                    m_html;
 
 
-               /// Initialize from SWF input stream (tag 37)
-               void read(stream* in, int tag_type, movie_definition* m);
-       };
+
+       /// \brief
+       /// When true, use specified SWF internal font. 
+       /// Otherwise, renderer picks a default font
+       bool    m_use_outlines;
+
+       int     m_font_id;
+       font*   m_font;
+
+       /// height of font text, in twips
+       uint16_t m_text_height;
+
+       /// Text color
+       rgba    m_color;
+
+       /// Maximum length of text this widget can display (number of chars?)
+       int     m_max_length;
+
+       alignment m_alignment;
+       
+       /// extra space between box's left border and text (in twips)
+       uint16_t m_left_margin;
+       //float m_left_margin;
+
+       /// extra space between box's right border and text (in twips)
+       uint16_t m_right_margin;
+       //float m_right_margin;
+
+       /// how much to indent the first line of multiline text (in twips)
+       uint16_t        m_indent;
+       //float m_indent;
+
+       /// \brief
+       /// Extra space between lines
+       /// (in addition to default font line spacing)
+       uint16_t        m_leading;
+
+       /// The default text to be displayed
+       tu_string       m_default_text;
+
+};
 
 } // namespace gnash
 
Index: gnash/server/text.cpp
diff -u gnash/server/text.cpp:1.19 gnash/server/text.cpp:1.20
--- gnash/server/text.cpp:1.19  Thu May 18 10:21:25 2006
+++ gnash/server/text.cpp       Thu May 18 15:17:57 2006
@@ -85,7 +85,7 @@
 
                        rec.m_style.resolve_font(root_def);
 
-                       font*   fnt = rec.m_style.m_font;
+                       const font*     fnt = rec.m_style.m_font;
                        if (fnt == NULL)
                        {
                                continue;
Index: gnash/server/text.h
diff -u gnash/server/text.h:1.8 gnash/server/text.h:1.9
--- gnash/server/text.h:1.8     Thu May 18 11:53:02 2006
+++ gnash/server/text.h Thu May 18 15:17:57 2006
@@ -57,7 +57,7 @@
        struct text_style
        {
                int     m_font_id;
-               mutable font*   m_font;
+               mutable const font*     m_font;
                rgba    m_color;
                float   m_x_offset;
                float   m_y_offset;




reply via email to

[Prev in Thread] Current Thread [Next in Thread]