gnash-commit
[Top][All Lists]
Advanced

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

[Gnash-commit] gnash ChangeLog server/sprite_instance.cpp


From: Sandro Santilli
Subject: [Gnash-commit] gnash ChangeLog server/sprite_instance.cpp
Date: Thu, 03 Jan 2008 17:50:25 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Sandro Santilli <strk>  08/01/03 17:50:25

Modified files:
        .              : ChangeLog 
        server         : sprite_instance.cpp 

Log message:
        beginGradientFill:
                  Improvements in "box" matrixType parsing.
                  Still not 100% correct, but translation and scaling
                  seem good, and rotation does have an effect.
                  The problem is that translation/scaling and rotation
                  is happening in the wrong order.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.5292&r2=1.5293
http://cvs.savannah.gnu.org/viewcvs/gnash/server/sprite_instance.cpp?cvsroot=gnash&r1=1.424&r2=1.425

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.5292
retrieving revision 1.5293
diff -u -b -r1.5292 -r1.5293
--- ChangeLog   3 Jan 2008 15:46:57 -0000       1.5292
+++ ChangeLog   3 Jan 2008 17:50:24 -0000       1.5293
@@ -1,3 +1,12 @@
+2008-01-03 Sandro Santilli <address@hidden>
+
+       * server/sprite_instance.cpp (beginGradientFill): 
+         Improvements in "box" matrixType parsing.
+         Still not 100% correct, but translation and scaling
+         seem good, and rotation does have an effect.
+         The problem is that translation/scaling and rotation
+         is happening in the wrong order.
+
 2008-01-03 Benjamin Wolsey <address@hidden>
 
         * gui/gui.{h,cpp}: ^F toggles fullscreen (not in the plugin - no 
shortcuts work

Index: server/sprite_instance.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/sprite_instance.cpp,v
retrieving revision 1.424
retrieving revision 1.425
diff -u -b -r1.424 -r1.425
--- server/sprite_instance.cpp  2 Jan 2008 19:08:32 -0000       1.424
+++ server/sprite_instance.cpp  3 Jan 2008 17:50:24 -0000       1.425
@@ -1345,8 +1345,7 @@
        // ----------------------------
        // Parse matrix
        // ----------------------------
-       //
-       //
+       
        // TODO: fix this matrix build-up, it is NOT correct
 
        matrix mat;
@@ -1356,33 +1355,59 @@
        if ( matrixArg->getMember(keyT).to_string() == "box" )
        {
                
-               string_table::key keyX = st.find("x");
-               string_table::key keyY = st.find("y");
-               string_table::key keyW = st.find("w");
-               string_table::key keyH = st.find("h");
-               string_table::key keyR = st.find("r");
-
-               float valX = matrixArg->getMember(keyX).to_number(); 
-               float valY = matrixArg->getMember(keyY).to_number(); 
-               float valW = matrixArg->getMember(keyW).to_number(); 
-               float valH = matrixArg->getMember(keyH).to_number(); 
+               // TODO: add to namedStrings.{cpp,h}
+               static const string_table::key keyX = st.find("x");
+               static const string_table::key keyY = st.find("y");
+               static const string_table::key keyW = st.find("w");
+               static const string_table::key keyH = st.find("h");
+               static const string_table::key keyR = st.find("r");
+
+               float valX = 
PIXELS_TO_TWIPS(matrixArg->getMember(keyX).to_number()); 
+               float valY = 
PIXELS_TO_TWIPS(matrixArg->getMember(keyY).to_number()); 
+               float valW = 
PIXELS_TO_TWIPS(matrixArg->getMember(keyW).to_number()); 
+               float valH = 
PIXELS_TO_TWIPS(matrixArg->getMember(keyH).to_number()); 
                float valR = matrixArg->getMember(keyR).to_number(); 
 
-               input_matrix.set_translation( (valX+valW)/2, (valY+valH)/2 );
-               input_matrix.set_scale(valW, valH);
-               input_matrix.set_rotation(valR);
+               if ( radial )
+               {
+                       // Radial gradient is 64x64 twips.
+                       input_matrix.set_scale_rotation(64.0f/valW, 64.0f/valH, 
-valR);
+
+                       // For radial gradients, dunno why translation must be 
negative...
+                       input_matrix.concatenate_translation( -valX, -valY );
+
+                       // TODO: fix the rotation, isn't working as it should
+                       //       In particular, it seems the origin is wrong 
+                       //       while rotating.
+
+               }
+               else
+               {
+                       // Linear gradient is 256x1 twips.
+                       //
+                       // No idea why we should use the 256 value for Y scale, 
but empirically
+                       // seems to give closer results. Note that it only 
influences rotation,
+                       // which is still not correct... TODO: fix it !
+                       //
+                       input_matrix.set_scale_rotation(256.0f/valW, 
256.0f/valH, -valR);
+
+                       // For linear gradients, dunno why translation must be 
negative...
+                       input_matrix.concatenate_translation( -valX, -valY );
+                       //cout << "inpt matrix with concatenated translation: " 
<< input_matrix << endl;
+               }
 
-               mat.concatenate_scale(20/16384.0);
                mat.concatenate(input_matrix);
        }
        else
        {
-               string_table::key keyA = st.find("a");
-               string_table::key keyB = st.find("b");
-               string_table::key keyD = st.find("d");
-               string_table::key keyE = st.find("e");
-               string_table::key keyG = st.find("g");
-               string_table::key keyH = st.find("h");
+               // TODO: add to namedStrings.{cpp,h}
+               static const string_table::key keyA = st.find("a");
+               static const string_table::key keyB = st.find("b");
+               static const string_table::key keyD = st.find("d");
+               static const string_table::key keyE = st.find("e");
+               static const string_table::key keyG = st.find("g");
+               static const string_table::key keyH = st.find("h");
+
                float valA = matrixArg->getMember(keyA).to_number() ; // xx
                float valB = matrixArg->getMember(keyB).to_number() ; // yx
                float valD = matrixArg->getMember(keyD).to_number() ; // xy




reply via email to

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