[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gnash-commit] /srv/bzr/gnash/trunk r9519: Have TextFormat query fonts f
From: |
Sandro Santilli |
Subject: |
[Gnash-commit] /srv/bzr/gnash/trunk r9519: Have TextFormat query fonts from relative movie root before then the |
Date: |
Tue, 22 Jul 2008 19:47:43 +0200 |
User-agent: |
Bazaar (1.5) |
------------------------------------------------------------
revno: 9519
committer: Sandro Santilli <address@hidden>
branch nick: trunk
timestamp: Tue 2008-07-22 19:47:43 +0200
message:
Have TextFormat query fonts from relative movie root before then the
global shared font lib; trim trailing nulls in string-with-length
to avoid false negative equality comparisons. Fixes bug #23323.
modified:
server/edit_text_character.cpp
server/font.cpp
server/font.h
server/fontlib.cpp
server/parser/SWFMovieDefinition.cpp
server/parser/SWFMovieDefinition.h
server/parser/movie_definition.h
server/stream.cpp
------------------------------------------------------------
revno: 9517.1.1
committer: Sandro Santilli <address@hidden>
branch nick: mybranch
timestamp: Tue 2008-07-22 19:06:36 +0200
message:
Drop trailing zeroes when reading strings with length
modified:
server/stream.cpp
------------------------------------------------------------
revno: 9517.1.2
committer: Sandro Santilli <address@hidden>
branch nick: mybranch
timestamp: Tue 2008-07-22 19:07:34 +0200
message:
Add font::matches() for font matching reuse
modified:
server/font.cpp
server/font.h
------------------------------------------------------------
revno: 9517.1.3
committer: Sandro Santilli <address@hidden>
branch nick: mybranch
timestamp: Tue 2008-07-22 19:08:40 +0200
message:
use font::matches in get_font
modified:
server/fontlib.cpp
------------------------------------------------------------
revno: 9517.1.4
committer: Sandro Santilli <address@hidden>
branch nick: mybranch
timestamp: Tue 2008-07-22 19:15:23 +0200
message:
fix null trimming (disambiguation)
modified:
server/stream.cpp
------------------------------------------------------------
revno: 9517.1.5
committer: Sandro Santilli <address@hidden>
branch nick: mybranch
timestamp: Tue 2008-07-22 19:15:52 +0200
message:
ADd interface to query movie-local font lib by name and flags
modified:
server/parser/SWFMovieDefinition.cpp
server/parser/SWFMovieDefinition.h
server/parser/movie_definition.h
------------------------------------------------------------
revno: 9517.1.6
committer: Sandro Santilli <address@hidden>
branch nick: mybranch
timestamp: Tue 2008-07-22 19:16:51 +0200
message:
Query root movie for fonts, and only query shared lib if that failed
modified:
server/edit_text_character.cpp
------------------------------------------------------------
revno: 9517.1.7
committer: Sandro Santilli <address@hidden>
branch nick: mybranch
timestamp: Tue 2008-07-22 19:44:58 +0200
message:
Add log_debug for the trailing null trimming case (seems common)
modified:
server/stream.cpp
=== modified file 'server/edit_text_character.cpp'
--- a/server/edit_text_character.cpp 2008-07-21 15:23:59 +0000
+++ b/server/edit_text_character.cpp 2008-07-22 17:16:51 +0000
@@ -253,7 +253,13 @@
bool bold = tf->bold();
bool italic = tf->italiced();
- font* f = fontlib::get_font(fontName, bold, italic);
+ // NOTE: should query movie-private font lib, not
global-shared one
+ movie_instance* mi = text->get_root();
+ assert(mi);
+ movie_definition* md = mi->get_movie_definition();
+ assert(md);
+ font* f = md->get_font(fontName, bold, italic);
+ if ( ! f ) f = fontlib::get_font(fontName, bold,
italic);
text->setFont( f );
}
}
=== modified file 'server/font.cpp'
--- a/server/font.cpp 2008-06-25 12:42:14 +0000
+++ b/server/font.cpp 2008-07-22 17:07:34 +0000
@@ -624,6 +624,16 @@
return true;
}
+bool
+font::matches(const std::string& name, bool bold, bool italic) const
+{
+ if ( bold != isBold() ) return false;
+ if ( italic != isItalic() ) return false;
+ if ( name != get_name() ) return false;
+
+ return true;
+}
+
#ifdef GNASH_USE_GC
/// Mark reachable resources (for the GC)
//
=== modified file 'server/font.h'
--- a/server/font.h 2008-06-25 12:42:14 +0000
+++ b/server/font.h 2008-07-22 17:07:34 +0000
@@ -127,6 +127,19 @@
// override from resource.
font* cast_to_font() { return this; }
+ /// Return true if this font matches given name and flags
+ //
+ /// @param name
+ /// Font name
+ ///
+ /// @param bold
+ /// Bold flag
+ ///
+ /// @param italic
+ /// Italic flag
+ ///
+ bool matches(const std::string& name, bool bold, bool italic) const;
+
void testInvariant()
{
}
=== modified file 'server/fontlib.cpp'
--- a/server/fontlib.cpp 2008-06-02 11:19:24 +0000
+++ b/server/fontlib.cpp 2008-07-22 17:08:40 +0000
@@ -71,14 +71,10 @@
for (unsigned int i = 0; i < s_fonts.size(); i++)
{
font* f = s_fonts[i].get();
- if (f != NULL)
+ assert(f);
+ if ( f->matches(name, bold, italic) )
{
- if (f->get_name() == name)
- {
- if ( bold && ! f->isBold() ) continue;
- if ( italic && ! f->isItalic() )
continue;
- return f;
- }
+ return f;
}
}
font* f = new font(name, bold, italic);
=== modified file 'server/parser/SWFMovieDefinition.cpp'
--- a/server/parser/SWFMovieDefinition.cpp 2008-06-29 14:15:16 +0000
+++ b/server/parser/SWFMovieDefinition.cpp 2008-07-22 17:15:52 +0000
@@ -29,7 +29,7 @@
#include "IOChannel.h" // for use
#include "stream.h"
#include "jpeg.h"
-#include "fontlib.h"
+//#include "fontlib.h"
#include "font.h"
#include "log.h"
#include "sprite_instance.h"
@@ -270,6 +270,18 @@
return f.get();
}
+font*
+SWFMovieDefinition::get_font(const std::string& name, bool bold, bool italic)
const
+{
+
+ for (FontMap::const_iterator it=m_fonts.begin(), itEnd=m_fonts.end(); it
!= itEnd; ++it)
+ {
+ font* f = it->second.get();
+ if ( f->matches(name, bold, italic) ) return f;
+ }
+ return 0;
+}
+
bitmap_character_def* SWFMovieDefinition::get_bitmap_character_def(int
character_id)
{
BitmapMap::iterator it = m_bitmap_characters.find(character_id);
=== modified file 'server/parser/SWFMovieDefinition.h'
--- a/server/parser/SWFMovieDefinition.h 2008-06-29 14:15:16 +0000
+++ b/server/parser/SWFMovieDefinition.h 2008-07-22 17:15:52 +0000
@@ -273,6 +273,8 @@
font* get_font(int font_id) const;
+ font* get_font(const std::string& name, bool bold, bool italic) const;
+
// See dox in movie_definition.h
bitmap_character_def* get_bitmap_character_def(int character_id);
=== modified file 'server/parser/movie_definition.h'
--- a/server/parser/movie_definition.h 2008-06-09 13:31:51 +0000
+++ b/server/parser/movie_definition.h 2008-07-22 17:15:52 +0000
@@ -294,6 +294,12 @@
return NULL;
}
+ /// Find a font from the movie (not shared) lib
+ virtual font* get_font(const std::string& /*name*/, bool /*bold*/, bool
/*italic*/) const
+ {
+ return 0;
+ }
+
/// Add an ControlTag to this movie_definition's playlist
//
/// The default implementation is a no-op.
=== modified file 'server/stream.cpp'
--- a/server/stream.cpp 2008-06-09 18:08:25 +0000
+++ b/server/stream.cpp 2008-07-22 17:44:58 +0000
@@ -445,6 +445,20 @@
to[i] = read_u8();
}
+ // drop trailing nulls (see swf6/Bejeweled.swf)
+ std::string::size_type last = to.find_last_not_of('\0');
+ if ( last == std::string::npos ) to.clear();
+ else
+ {
+ ++last;
+ if ( last < len )
+ {
+ // seems common to find null-terminated lenght-equipped
strings...
+ log_debug("String %s with length %d has %d trailing NULLs,
trimming", to, len, len-last);
+ to.erase(last);
+ }
+ }
+
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Gnash-commit] /srv/bzr/gnash/trunk r9519: Have TextFormat query fonts from relative movie root before then the,
Sandro Santilli <=