gnash-commit
[Top][All Lists]
Advanced

[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);




reply via email to

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