gnash-commit
[Top][All Lists]
Advanced

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

[Gnash-commit] gnash ChangeLog server/asobj/Stage.cpp server/a...


From: Benjamin Wolsey
Subject: [Gnash-commit] gnash ChangeLog server/asobj/Stage.cpp server/a...
Date: Thu, 13 Mar 2008 12:23:07 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Benjamin Wolsey <bwy>   08/03/13 12:23:07

Modified files:
        .              : ChangeLog 
        server/asobj   : Stage.cpp Stage.h 

Log message:
                * server/asobj/Stage.{h,cpp}: add _displayState member, 
implement
                  displayState getter-setter. Make checks case-insensitive, but
                  not yet tolerant of whitespace or extra characters.
                * gui/Player.cpp: listen for displayState.
        
        Example:
        
        http://julian.empiregn.com/files/fullscreen/fullscreen_flash.swf

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.5896&r2=1.5897
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/Stage.cpp?cvsroot=gnash&r1=1.34&r2=1.35
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/Stage.h?cvsroot=gnash&r1=1.13&r2=1.14

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.5896
retrieving revision 1.5897
diff -u -b -r1.5896 -r1.5897
--- ChangeLog   13 Mar 2008 12:14:29 -0000      1.5896
+++ ChangeLog   13 Mar 2008 12:23:06 -0000      1.5897
@@ -2,6 +2,10 @@
 
        * testsuite/actionscript.all/Stage.as: tests with different cases,
          whitespace and extra characters.
+       * server/asobj/Stage.{h,cpp}: add _displayState member, implement
+         displayState getter-setter. Make checks case-insensitive, but
+         not yet tolerant of whitespace or extra characters.
+       * gui/Player.cpp: listen for displayState. 
 
 2008-03-13 Benjamin Wolsey <address@hidden>
 

Index: server/asobj/Stage.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/Stage.cpp,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -b -r1.34 -r1.35
--- server/asobj/Stage.cpp      13 Mar 2008 11:23:16 -0000      1.34
+++ server/asobj/Stage.cpp      13 Mar 2008 12:23:07 -0000      1.35
@@ -31,6 +31,7 @@
 #include "Object.h" // for getObjectInterface()
 #include "AsBroadcaster.h" // for initializing self as a broadcaster
 #include "namedStrings.h"
+#include "StringPredicates.h"
 
 #include <string>
 
@@ -41,6 +42,7 @@
 as_value stage_showMenu_getset(const fn_call& fn);
 as_value stage_width_getset(const fn_call& fn);
 as_value stage_height_getset(const fn_call& fn);
+as_value stage_displaystate_getset(const fn_call& fn);
 
 static void
 attachStageInterface(as_object& o)
@@ -81,13 +83,17 @@
        vm.registerNative(getset, 666, 10);
        o.init_property("showMenu", getset, getset);
 
+       getset = stage_displaystate_getset;
+       o.init_property("displayState", getset, getset);
+
 }
 
 Stage::Stage()
        :
        as_object(getObjectInterface()),
        _scaleMode(showAll),
-       _alignMode(ALIGN_MODE_NONE)
+       _alignMode(ALIGN_MODE_NONE),
+       _displayState(normal)
 {
        attachStageInterface(*this);
 
@@ -146,6 +152,16 @@
 }
 
 const char*
+Stage::getDisplayStateString()
+{
+       static const char* displayStateName[] = {
+               "normal",
+               "fullScreen" };
+
+       return displayStateName[_displayState];
+}
+
+const char*
 Stage::getScaleModeString()
 {
        static const char* modeName[] = {
@@ -207,6 +223,27 @@
 
 }
 
+void
+Stage::setDisplayState(DisplayState state)
+{
+       if ( _displayState == state ) return; // nothing to do
+
+       _displayState = state;
+       
+       if (!movie_root::interfaceHandle) return; // No registered callback
+       
+       if (_displayState == Stage::fullScreen)
+       {
+           (*movie_root::interfaceHandle)("Stage.displayState", "fullScreen");
+       }
+       else if (_displayState == Stage::normal)
+       {
+           (*movie_root::interfaceHandle)("Stage.displayState", "normal");
+       }
+
+}
+
+
 as_value stage_scalemode_getset(const fn_call& fn)
 {
        boost::intrusive_ptr<Stage> stage = ensureType<Stage>(fn.this_ptr);
@@ -280,14 +317,28 @@
 
                const std::string& str = fn.arg(0).to_string();
 
-               if ( str == "T" ) mode = Stage::T;
-               else if ( str == "B" ) mode = Stage::B;
-               else if ( str == "L" ) mode = Stage::L;
-               else if ( str == "R" ) mode = Stage::R;
-               else if ( str == "LT" || str == "TL" ) mode = Stage::LT;
-               else if ( str == "TR" || str == "RT" ) mode = Stage::TR;
-               else if ( str == "LB" || str == "BL" ) mode = Stage::LB;
-               else if ( str == "RB" || str == "BR" ) mode = Stage::RB;
+        StringNoCaseEqual noCaseCompare;
+
+               if ( noCaseCompare(str, "T") ) mode = Stage::T;
+               else if ( noCaseCompare(str, "B") ) mode = Stage::B;
+               else if ( noCaseCompare(str, "L") ) mode = Stage::L;
+               else if ( noCaseCompare(str, "R") ) mode = Stage::R;
+               else if ( noCaseCompare(str, "LT") || noCaseCompare(str, "TL") )
+               {
+                   mode = Stage::LT;
+               }
+               else if ( noCaseCompare(str, "TR") || noCaseCompare(str, "RT") )
+               {
+                   mode = Stage::TR;
+               }
+               else if ( noCaseCompare(str, "LB") || noCaseCompare(str, "BL") )
+               {
+                   mode = Stage::LB;
+               }
+               else if ( noCaseCompare(str, "RB") || noCaseCompare(str, "BR") )
+               {
+                    mode = Stage::RB;
+               }
         else mode = Stage::ALIGN_MODE_NONE;
         
                stage->setAlignMode(mode);
@@ -321,6 +372,35 @@
        }
 }
 
+as_value
+stage_displaystate_getset(const fn_call& fn)
+{
+       boost::intrusive_ptr<Stage> stage = ensureType<Stage>(fn.this_ptr);
+
+       if ( fn.nargs == 0 ) // getter
+       {
+               return as_value(stage->getDisplayStateString());
+       }
+       else // setter
+       {
+
+        StringNoCaseEqual noCaseCompare;
+
+               const std::string& str = fn.arg(0).to_string();
+               if ( noCaseCompare(str, "normal") )
+               {
+                   stage->setDisplayState(Stage::normal);
+               }
+               else if ( noCaseCompare(str, "fullScreen") ) 
+               {
+                   stage->setDisplayState(Stage::fullScreen);
+        }
+
+        // If invalid, do nothing.
+               return as_value();
+       }
+}
+
 // extern (used by Global.cpp)
 void stage_class_init(as_object& global)
 {

Index: server/asobj/Stage.h
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/Stage.h,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -b -r1.13 -r1.14
--- server/asobj/Stage.h        12 Mar 2008 11:47:56 -0000      1.13
+++ server/asobj/Stage.h        13 Mar 2008 12:23:07 -0000      1.14
@@ -58,6 +58,12 @@
         ALIGN_MODE_NONE      
     } AlignMode;
 
+    typedef enum {
+               normal,
+               fullScreen
+       } DisplayState;
+
+
        Stage();
 
        // override from as_object ?
@@ -95,6 +101,11 @@
        
        const char* getAlignModeString();
 
+       /// Set display state 
+       void setDisplayState(DisplayState state);
+       
+       const char* getDisplayStateString();    
+
 private:
 
        /// Notify all listeners about a resize event
@@ -103,6 +114,8 @@
        ScaleMode _scaleMode;
        
        AlignMode _alignMode;
+       
+       DisplayState _displayState;
 };
 
 




reply via email to

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