[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gnash-commit] gnash ChangeLog server/asobj/Key.cpp server/aso...
From: |
Benjamin Wolsey |
Subject: |
[Gnash-commit] gnash ChangeLog server/asobj/Key.cpp server/aso... |
Date: |
Wed, 10 Oct 2007 14:07:58 +0000 |
CVSROOT: /sources/gnash
Module name: gnash
Changes by: Benjamin Wolsey <bwy> 07/10/10 14:07:58
Modified files:
. : ChangeLog
server/asobj : Key.cpp Key.h
Log message:
* server/asobj/Key.{h,cpp}: change is_key_down() to take SWF
keycode
and check the relevant bit in m_unreleased_keys (bit array).
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.4588&r2=1.4589
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/Key.cpp?cvsroot=gnash&r1=1.39&r2=1.40
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/Key.h?cvsroot=gnash&r1=1.28&r2=1.29
Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.4588
retrieving revision 1.4589
diff -u -b -r1.4588 -r1.4589
--- ChangeLog 10 Oct 2007 13:38:08 -0000 1.4588
+++ ChangeLog 10 Oct 2007 14:07:57 -0000 1.4589
@@ -1,3 +1,8 @@
+2007-10-10 Benjamin Wolsey <address@hidden>
+
+ * server/asobj/Key.{h,cpp}: change is_key_down() to take SWF keycode
+ and check the relevant bit in m_unreleased_keys (bit array).
+
2007-10-10 Sandro Santilli <address@hidden>
* server/movie_root.cpp (notify_key_listeners): don't use a
Index: server/asobj/Key.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/Key.cpp,v
retrieving revision 1.39
retrieving revision 1.40
diff -u -b -r1.39 -r1.40
--- server/asobj/Key.cpp 10 Oct 2007 08:55:46 -0000 1.39
+++ server/asobj/Key.cpp 10 Oct 2007 14:07:58 -0000 1.40
@@ -51,23 +51,18 @@
}
bool
-key_as_object::is_key_down(int code)
+key_as_object::is_key_down(int keycode)
{
- if (code < 0 || code >= key::KEYCOUNT) return false;
+ if (keycode < 0 || keycode >= key::KEYCOUNT) return false;
- for(int i = 0; i < sizeof(m_unreleased_keys)/sizeof(m_unreleased_keys[0]);
i++)
- {
- if( m_unreleased_keys[i] != 0)
- {
- for(int j=0; j<8; j++)
- {
- if( m_unreleased_keys[i] & (1 << j) )
- {
- if(key::codeMap[i*8+j][1] == code) return true;
- }
- }
- }
- }
+ // Select the relevant byte of the bit array:
+ int byte_index = keycode >> 3;
+ // Find bit within the byte:
+ int bit_index = keycode - (byte_index << 3);
+
+ uint8_t mask = ~(1 << bit_index);
+
+ if ((m_unreleased_keys[byte_index] & mask) !=
m_unreleased_keys[byte_index] ) return true;
return false;
}
@@ -98,9 +93,8 @@
{
if (code < 0 || code >= key::KEYCOUNT) return;
- // Key.isDown() only cares about flash keycode, not character, so
- // we lookup keycode to add to m_unreleased_keys.
-
+ // This is used for getAscii() of the last key event, so we use gnash's
+ // internal code.
m_last_key_event = code;
// Key.isDown() only cares about flash keycode, not character, so
@@ -286,9 +280,9 @@
return as_value();
}
- int code = fn.arg(0).to_number<int>();
+ int keycode = fn.arg(0).to_number<int>();
- return as_value(ko->is_key_down(code));
+ return as_value(ko->is_key_down(keycode));
}
/// \brief
Index: server/asobj/Key.h
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/Key.h,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -b -r1.28 -r1.29
--- server/asobj/Key.h 10 Oct 2007 07:45:28 -0000 1.28
+++ server/asobj/Key.h 10 Oct 2007 14:07:58 -0000 1.29
@@ -16,7 +16,7 @@
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
//
-/* $Id: Key.h,v 1.28 2007/10/10 07:45:28 bwy Exp $ */
+/* $Id: Key.h,v 1.29 2007/10/10 14:07:58 bwy Exp $ */
#ifndef __KEY_H__
#define __KEY_H__
@@ -79,10 +79,17 @@
key_as_object();
- bool is_key_down(int code);
+ // Pass SWF keycode, returns true if currently pressed.
+ bool is_key_down(int keycode);
+ // Pass gnash::key::code. Changes m_last_key_event
+ // and adds appropriate SWF keycode to bit array of keys
+ // pressed (m_unreleased_keys)
void set_key_down(int code);
+ // Pass gnash::key::code. Changes m_last_key_event
+ // and removes appropriate SWF keycode from bit array of keys
+ // pressed (m_unreleased_keys)
void set_key_up(int code);
#ifndef NEW_KEY_LISTENER_LIST_DESIGN