[Top][All Lists]
[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();
- [Gnash-commit] gnash ChangeLog server/drag_state.h server/movi...,
Sandro Santilli <=