gnash-commit
[Top][All Lists]
Advanced

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

[Gnash-commit] gnash ChangeLog server/drag_state.h server/movi...


From: Sandro Santilli
Subject: [Gnash-commit] gnash ChangeLog server/drag_state.h server/movi...
Date: Fri, 02 Nov 2007 01:11:45 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Sandro Santilli <strk>  07/11/02 01:11:44

Modified files:
        .              : ChangeLog 
        server         : drag_state.h movie_root.cpp 

Log message:
                * server/drag_state.h: add x/y offset members.
                * server/movie_root.cpp (set_drag_state, doMouseDrag):
                  implement relative dragging. Fixes bug #21496.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.4758&r2=1.4759
http://cvs.savannah.gnu.org/viewcvs/gnash/server/drag_state.h?cvsroot=gnash&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/gnash/server/movie_root.cpp?cvsroot=gnash&r1=1.115&r2=1.116

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.4758
retrieving revision 1.4759
diff -u -b -r1.4758 -r1.4759
--- ChangeLog   1 Nov 2007 23:30:47 -0000       1.4758
+++ ChangeLog   2 Nov 2007 01:11:43 -0000       1.4759
@@ -1,3 +1,9 @@
+2007-11-02 Sandro Santilli <address@hidden>
+
+       * server/drag_state.h: add x/y offset members.
+       * server/movie_root.cpp (set_drag_state, doMouseDrag):
+         implement relative dragging. Fixes bug #21496.
+
 2007-11-01 Sandro Santilli <address@hidden>
 
        * gui/Player.cpp (run): make the window at least 1x1 pixels sized

Index: server/drag_state.h
===================================================================
RCS file: /sources/gnash/gnash/server/drag_state.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- server/drag_state.h 1 Jul 2007 10:54:22 -0000       1.4
+++ server/drag_state.h 2 Nov 2007 01:11:44 -0000       1.5
@@ -15,7 +15,7 @@
 // along with this program; if not, write to the Free Software
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
-/* $Id: drag_state.h,v 1.4 2007/07/01 10:54:22 bjacques Exp $ */
+/* $Id: drag_state.h,v 1.5 2007/11/02 01:11:44 strk Exp $ */
 
 
 #ifndef GNASH_DRAG_STATE_H
@@ -51,6 +51,13 @@
 
        bool    _lock_centered;
 
+       /// Offsets of displacement from character origin
+       /// at time of drag start. These are used for non
+       /// lock-centered dragging.
+       /// Coordinates are in stage space (TWIPS)
+       int _xoffset;
+       int _yoffset;
+
 public:
 
        bool isLockCentered() const {
@@ -61,6 +68,19 @@
                _lock_centered = lock;
        }
 
+       /// Set displacement offset from origin
+       /// at time of drag start.
+       /// Coordinates are in stage space (twips)
+       ///
+       void setOffset(int x, int y)
+       {
+               _xoffset = x;
+               _yoffset = y;
+       }
+
+       int xOffset() const { return _xoffset; }
+       int yOffset() const { return _yoffset; }
+
        bool hasBounds() const {
                return _hasbounds;
        }
@@ -93,7 +113,7 @@
        }
 
        /// May return NULL !!
-       character* getCharacter() {
+       character* getCharacter() const {
                return _character.get();
        }
 

Index: server/movie_root.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/movie_root.cpp,v
retrieving revision 1.115
retrieving revision 1.116
diff -u -b -r1.115 -r1.116
--- server/movie_root.cpp       1 Nov 2007 21:54:45 -0000       1.115
+++ server/movie_root.cpp       2 Nov 2007 01:11:44 -0000       1.116
@@ -663,6 +663,26 @@
 movie_root::set_drag_state(const drag_state& st)
 {
        m_drag_state = st;
+       character* ch = st.getCharacter();
+       if ( ch && ! st.isLockCentered() )
+       {
+               // Get coordinates of the character's origin
+               point origin(0, 0);
+               matrix chmat = ch->get_world_matrix();
+               point world_origin;
+               chmat.transform(&world_origin, origin);
+
+               // Get current mouse coordinates
+               int x, y, buttons;
+               get_mouse_state(x, y, buttons);
+               point world_mouse(PIXELS_TO_TWIPS(x), PIXELS_TO_TWIPS(y));
+
+               // Compute offset
+               int xoffset = world_mouse.m_x - world_origin.m_x;
+               int yoffset = world_mouse.m_y - world_origin.m_y;
+
+               m_drag_state.setOffset(xoffset, yoffset);
+       }
        assert(testInvariant());
 }
 
@@ -684,20 +704,9 @@
 
        if (! m_drag_state.isLockCentered())
        {
-               // FIXME: Implement relative drag...
-               static bool warned_relative_drag = false;
-               if ( ! warned_relative_drag )
-               {
-                       log_unimpl(_("Relative drag"));
-                       warned_relative_drag = true;
+               world_mouse.m_x -= m_drag_state.xOffset();
+               world_mouse.m_y -= m_drag_state.yOffset();
                }
-       }
-
-#if 0
-       matrix  world_mat = dragChar->get_world_matrix();
-       point   local_mouse;
-       world_mat.transform_by_inverse(&local_mouse, world_mouse);
-#endif
 
        matrix  parent_world_mat;
        character* parent = dragChar->get_parent();




reply via email to

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