gnash-commit
[Top][All Lists]
Advanced

[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);
+       }
+    }
+
 }
 
 


reply via email to

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