[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: |
Thu, 07 Feb 2008 10:07:58 +0000 |
CVSROOT: /sources/gnash
Module name: gnash
Changes by: Benjamin Wolsey <bwy> 08/02/07 10:07:58
Modified files:
. : ChangeLog
server/asobj : Key.cpp Key.h
Log message:
* server/asobj/Key.{cpp,h}: clean up code. Take
gnash::key::code when
that's what's meant; drop unnecessary assertions; use
std::bitset
instead of custom bit array (this is C++, after all).
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.5583&r2=1.5584
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/Key.cpp?cvsroot=gnash&r1=1.51&r2=1.52
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/Key.h?cvsroot=gnash&r1=1.33&r2=1.34
Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.5583
retrieving revision 1.5584
diff -u -b -r1.5583 -r1.5584
--- ChangeLog 7 Feb 2008 09:46:35 -0000 1.5583
+++ ChangeLog 7 Feb 2008 10:07:57 -0000 1.5584
@@ -1,3 +1,9 @@
+2008-02-07 Benjamin Wolsey <address@hidden>
+
+ * server/asobj/Key.{cpp,h}: clean up code. Take gnash::key::code when
+ that's what's meant; drop unnecessary assertions; use std::bitset
+ instead of custom bit array (this is C++, after all).
+
2008-02-07 Sandro Santilli <address@hidden>
* testsuite/actionscript.all/array.as: make the test nicer with
Index: server/asobj/Key.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/Key.cpp,v
retrieving revision 1.51
retrieving revision 1.52
diff -u -b -r1.51 -r1.52
--- server/asobj/Key.cpp 21 Jan 2008 20:55:55 -0000 1.51
+++ server/asobj/Key.cpp 7 Feb 2008 10:07:58 -0000 1.52
@@ -44,10 +44,9 @@
key_as_object::key_as_object()
:
as_object(getObjectInterface()),
- m_last_key_event(0)
+ _unreleasedKeys(0),
+ _lastKeyEvent(0)
{
- memset(m_unreleased_keys, 0, sizeof(m_unreleased_keys));
-
// Key is a broadcaster only in SWF6 and up (correct?)
int swfversion = _vm.getSWFVersion();
if ( swfversion > 5 )
@@ -60,58 +59,44 @@
key_as_object::is_key_down(int keycode)
{
if (keycode < 0 || keycode >= key::KEYCOUNT) return false;
-
- // 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);
-
- boost::uint8_t mask = 1 << bit_index;
-
- if ((m_unreleased_keys[byte_index] & mask) != 0 ) return true;
-
+ if (_unreleasedKeys.test(keycode)) return true;
return false;
}
void
- key_as_object::set_key_down(int code)
+key_as_object::set_key_down(key::code code)
{
- if (code < 0 || code >= key::KEYCOUNT) return;
+ if (code >= key::KEYCOUNT) return;
- // This is used for getAscii() of the last key event, so we use gnash's
- // internal code.
- m_last_key_event = code;
+ // This is used for getAscii() of the last key event, so we store
+ // the unique gnash::key::code.
+ _lastKeyEvent = code;
// Key.isDown() only cares about flash keycode, not character, so
- // we lookup keycode to add to m_unreleased_keys.
-
- int byte_index = key::codeMap[code][1] >> 3;
- int bit_index = key::codeMap[code][1] - (byte_index << 3);
- int mask = 1 << bit_index;
+ // we lookup keycode to add to _unreleasedKeys.
+ size_t keycode = key::codeMap[code][key::KEY];
- assert(byte_index >= 0 && byte_index <
int(sizeof(m_unreleased_keys)/sizeof(m_unreleased_keys[0])));
+ assert(keycode < _unreleasedKeys.size());
- m_unreleased_keys[byte_index] |= mask;
+ _unreleasedKeys.set(keycode, 1);
}
void
-key_as_object::set_key_up(int code)
+key_as_object::set_key_up(key::code code)
{
- if (code < 0 || code >= key::KEYCOUNT) return;
+ if (code >= key::KEYCOUNT) return;
- // This is used for getAscii() of the last key event, so we use gnash's
- // internal code.
- m_last_key_event = code;
+ // This is used for getAscii() of the last key event, so we store
+ // the unique gnash::key::code.
+ _lastKeyEvent = code;
// Key.isDown() only cares about flash keycode, not character, so
- // we lookup keycode to add to m_unreleased_keys.
- int byte_index = key::codeMap[code][1] >> 3;
- int bit_index = key::codeMap[code][1] - (byte_index << 3);
- int mask = 1 << bit_index;
+ // we lookup keycode to add to _unreleasedKeys.
+ size_t keycode = key::codeMap[code][key::KEY];
- assert(byte_index >= 0 && byte_index <
int(sizeof(m_unreleased_keys)/sizeof(m_unreleased_keys[0])));
+ assert(keycode < _unreleasedKeys.size());
- m_unreleased_keys[byte_index] &= ~mask;
+ _unreleasedKeys.set(keycode, 0);
}
@@ -130,7 +115,7 @@
int
key_as_object::get_last_key() const
{
- return m_last_key_event;
+ return _lastKeyEvent;
}
@@ -142,18 +127,18 @@
int code = ko->get_last_key();
- return as_value(gnash::key::codeMap[code][2]);
+ return as_value(gnash::key::codeMap[code][key::ASCII]);
}
/// Returns the keycode of the last key pressed.
static as_value
- key_get_code(const fn_call& fn)
+key_get_code(const fn_call& fn)
{
boost::intrusive_ptr<key_as_object> ko =
ensureType<key_as_object>(fn.this_ptr);
int code = ko->get_last_key();
- return as_value(key::codeMap[code][1]);
+ return as_value(key::codeMap[code][key::KEY]);
}
/// Return true if the specified (first arg keycode) key is pressed.
@@ -198,7 +183,7 @@
as_object* key_obj = new key_as_object;
// constants
-#define KEY_CONST(k) key_obj->init_member(#k, key::codeMap[key::k][1])
+#define KEY_CONST(k) key_obj->init_member(#k, key::codeMap[key::k][key::KEY])
KEY_CONST(BACKSPACE);
KEY_CONST(CAPSLOCK);
KEY_CONST(CONTROL);
@@ -242,7 +227,7 @@
key_as_object::markReachableResources() const
{
markAsObjectReachable();
- for (Listeners::const_iterator i=m_listeners.begin(), e=m_listeners.end();
+ for (Listeners::const_iterator i=_listeners.begin(), e=_listeners.end();
i != e; ++i)
{
(*i)->setReachable();
Index: server/asobj/Key.h
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/Key.h,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -b -r1.33 -r1.34
--- server/asobj/Key.h 21 Jan 2008 20:55:55 -0000 1.33
+++ server/asobj/Key.h 7 Feb 2008 10:07:58 -0000 1.34
@@ -16,7 +16,7 @@
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
//
-/* $Id: Key.h,v 1.33 2008/01/21 20:55:55 rsavoye Exp $ */
+/* $Id: Key.h,v 1.34 2008/02/07 10:07:58 bwy Exp $ */
#ifndef __KEY_H__
#define __KEY_H__
@@ -30,6 +30,7 @@
#include "fn_call.h"
#include "event_id.h"
#include "gnash.h" // for gnash::key namespace
+#include <bitset>
#ifdef WIN32
# undef _CONTROL
@@ -49,15 +50,6 @@
class DSOEXPORT key_as_object : public as_object
{
-private:
- /// bit-array for recording the unreleased keys
- boost::uint8_t m_unreleased_keys[key::KEYCOUNT / 8 + 1];
-
- typedef std::list<boost::intrusive_ptr<as_object> > Listeners;
- Listeners m_listeners;
-
- int m_last_key_event;
-
protected:
#ifdef GNASH_USE_GC
@@ -74,13 +66,13 @@
// 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);
+ // pressed (_unreleasedKeys)
+ void set_key_down(key::code 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);
+ // pressed (_unreleasedKeys)
+ void set_key_up(key::code code);
int get_last_key() const;
@@ -88,6 +80,14 @@
/// take over both characters and non-characters object.
void notify_listeners(const event_id& key_event_type);
+private:
+ /// bit-array for recording the unreleased keys
+ std::bitset<key::KEYCOUNT> _unreleasedKeys;
+
+ typedef std::list<boost::intrusive_ptr<as_object> > Listeners;
+ Listeners _listeners;
+
+ int _lastKeyEvent;
};
void key_class_init(as_object& global);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Gnash-commit] gnash ChangeLog server/asobj/Key.cpp server/aso...,
Benjamin Wolsey <=