[Top][All Lists]
[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;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Gnash-commit] gnash ./ChangeLog server/edit_text_character.cp...,
Sandro Santilli <=