[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gnash-commit] gnash ChangeLog server/button_character_instanc...
From: |
Sandro Santilli |
Subject: |
[Gnash-commit] gnash ChangeLog server/button_character_instanc... |
Date: |
Wed, 31 Jan 2007 15:11:58 +0000 |
CVSROOT: /sources/gnash
Module name: gnash
Changes by: Sandro Santilli <strk> 07/01/31 15:11:58
Modified files:
. : ChangeLog
server : button_character_instance.cpp
button_character_instance.h character.cpp
character.h sprite_instance.cpp
testsuite/misc-ming.all: ButtonEventsTest-Runner.cpp
Log message:
* server/button_character_instance.{h,cpp}:
Use getter-setter properties, and avoid override
of get_member/set_member methods.
* server/character.{cpp,h}: define more generic
getter-setters.
* server/sprite_instance.cpp: use character class
statics for onload and onrollout events
* testsuite/misc-ming.all/ButtonEventsTest-Runner.cpp:
expect less failures :)
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.2205&r2=1.2206
http://cvs.savannah.gnu.org/viewcvs/gnash/server/button_character_instance.cpp?cvsroot=gnash&r1=1.25&r2=1.26
http://cvs.savannah.gnu.org/viewcvs/gnash/server/button_character_instance.h?cvsroot=gnash&r1=1.10&r2=1.11
http://cvs.savannah.gnu.org/viewcvs/gnash/server/character.cpp?cvsroot=gnash&r1=1.16&r2=1.17
http://cvs.savannah.gnu.org/viewcvs/gnash/server/character.h?cvsroot=gnash&r1=1.42&r2=1.43
http://cvs.savannah.gnu.org/viewcvs/gnash/server/sprite_instance.cpp?cvsroot=gnash&r1=1.143&r2=1.144
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/misc-ming.all/ButtonEventsTest-Runner.cpp?cvsroot=gnash&r1=1.9&r2=1.10
Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.2205
retrieving revision 1.2206
diff -u -b -r1.2205 -r1.2206
--- ChangeLog 31 Jan 2007 11:06:09 -0000 1.2205
+++ ChangeLog 31 Jan 2007 15:11:57 -0000 1.2206
@@ -1,5 +1,17 @@
2007-01-31 Sandro Santilli <address@hidden>
+ * server/button_character_instance.{h,cpp}:
+ Use getter-setter properties, and avoid override
+ of get_member/set_member methods.
+ * server/character.{cpp,h}: define more generic
+ getter-setters.
+ * server/sprite_instance.cpp: use character class
+ statics for onload and onrollout events
+ * testsuite/misc-ming.all/ButtonEventsTest-Runner.cpp:
+ expect less failures :)
+
+2007-01-31 Sandro Santilli <address@hidden>
+
* server/sprite_instance.cpp (goto_frame): fix
check for target frame being already loaded.
* server/button_character_instance.cpp (on_event):
Index: server/button_character_instance.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/button_character_instance.cpp,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -b -r1.25 -r1.26
--- server/button_character_instance.cpp 31 Jan 2007 09:28:44 -0000
1.25
+++ server/button_character_instance.cpp 31 Jan 2007 15:11:58 -0000
1.26
@@ -18,6 +18,7 @@
#include "sprite_instance.h"
#include "movie_root.h"
#include "VM.h"
+#include "builtin_function.h"
/** \page buttons Buttons and mouse behaviour
@@ -149,6 +150,73 @@
namespace gnash {
+static void
+attachButtonInterface(as_object& o)
+{
+ //int target_version = o.getVM().getSWFVersion();
+
+ boost::intrusive_ptr<builtin_function> gettersetter;
+
+ //
+ // Properties (TODO: move to appropriate SWF version section)
+ //
+
+ gettersetter = new builtin_function(&character::x_getset, NULL);
+ o.init_property("_x", *gettersetter, *gettersetter);
+
+ gettersetter = new builtin_function(&character::y_getset, NULL);
+ o.init_property("_y", *gettersetter, *gettersetter);
+
+ gettersetter = new builtin_function(&character::xscale_getset, NULL);
+ o.init_property("_xscale", *gettersetter, *gettersetter);
+
+ gettersetter = new builtin_function(&character::yscale_getset, NULL);
+ o.init_property("_yscale", *gettersetter, *gettersetter);
+
+ gettersetter = new builtin_function(&character::xmouse_getset, NULL);
+ o.init_property("_xmouse", *gettersetter, *gettersetter);
+
+ gettersetter = new builtin_function(&character::ymouse_getset, NULL);
+ o.init_property("_ymouse", *gettersetter, *gettersetter);
+
+ gettersetter = new builtin_function(&character::alpha_getset, NULL);
+ o.init_property("_alpha", *gettersetter, *gettersetter);
+
+ gettersetter = new builtin_function(&character::visible_getset, NULL);
+ o.init_property("_visible", *gettersetter, *gettersetter);
+
+ gettersetter = new builtin_function(&character::width_getset, NULL);
+ o.init_property("_width", *gettersetter, *gettersetter);
+
+ gettersetter = new builtin_function(&character::height_getset, NULL);
+ o.init_property("_height", *gettersetter, *gettersetter);
+
+ gettersetter = new builtin_function(&character::rotation_getset, NULL);
+ o.init_property("_rotation", *gettersetter, *gettersetter);
+
+ gettersetter = new builtin_function(&character::parent_getset, NULL);
+ o.init_property("_parent", *gettersetter, *gettersetter);
+
+ gettersetter = new builtin_function(&character::onrollover_getset,
NULL);
+ o.init_property("onRollOver", *gettersetter, *gettersetter);
+
+ gettersetter = new builtin_function(&character::onrollout_getset, NULL);
+ o.init_property("onRollOut", *gettersetter, *gettersetter);
+
+ gettersetter = new builtin_function(&character::onpress_getset, NULL);
+ o.init_property("onPress", *gettersetter, *gettersetter);
+
+ gettersetter = new builtin_function(&character::onrelease_getset, NULL);
+ o.init_property("onRelease", *gettersetter, *gettersetter);
+
+ gettersetter = new
builtin_function(&character::onreleaseoutside_getset, NULL);
+ o.init_property("onReleaseOutside", *gettersetter, *gettersetter);
+
+ gettersetter = new builtin_function(&character::onload_getset, NULL);
+ o.init_property("onLoad", *gettersetter, *gettersetter);
+
+}
+
button_character_instance::button_character_instance(
button_character_definition* def,
character* parent, int id)
@@ -161,6 +229,8 @@
{
assert(m_def);
+ attachButtonInterface(*this);
+
int r, r_num = m_def->m_button_records.size();
m_record_character.resize(r_num);
@@ -201,13 +271,13 @@
button_character_instance::on_event(const event_id& id)
{
+#if 0
if (id.m_id != event_id::KEY_PRESS)
{
log_warning("Unsupported event for button instance: %s",
id.get_function_name().c_str());
return false;
}
-
- bool called = false;
+#endif
static const event_id s_key[32] =
{
@@ -233,8 +303,13 @@
// 32-126 folows ASCII
};
+ bool called = false;
+
+ sprite_instance* parent = get_parent()->to_movie();
+ assert ( parent );
// Add appropriate actions to the movie's execute list...
+ // TODO: should we execute immediately instead ?
for (size_t i = 0, ie=m_def->m_button_actions.size(); i<ie; ++i)
{
button_action& ba = m_def->m_button_actions[i];
@@ -246,9 +321,7 @@
// Matching action.
for (size_t j=0, je=ba.m_actions.size(); j<je; ++j)
{
- sprite_instance* si = get_parent()->to_movie();
- assert ( si );
- si->add_action_buffer(ba.m_actions[j]);
+ parent->add_action_buffer(ba.m_actions[j]);
}
called = true;
}
@@ -500,11 +573,22 @@
ActionExec exec(*ab, get_environment());
exec();
- //get_parent()->add_action_buffer(ab);
}
}
}}
+ // check for built-in event handler.
+ as_value method;
+ if ( get_event_handler(event, &method) && ! method.is_undefined() )
+ {
+ call_method0(method, &(get_environment()), this);
+ }
+ else
+ {
+ log_warning("No handler for event: %s",
event.get_function_name().c_str());
+ }
+
+
// Call conventional attached method.
// @@ TODO
}
@@ -547,157 +631,6 @@
// ActionScript overrides
//
-void
-button_character_instance::set_member(const std::string& name,
- const as_value& val)
-{
-
- // TODO: pull these up into a base class, to
- // share as much as possible with sprite_instance.
- as_standard_member std_member = get_standard_member(name);
- switch (std_member)
- {
- default:
- case M_INVALID_MEMBER:
- break;
- case M_VISIBLE: // _visible
- {
- m_visible = val.to_bool();
- return;
- }
- case M_ALPHA: // _alpha
- {
- // Set alpha modulate, in percent.
- cxform cx = get_cxform();
- cx.m_[3][0] = infinite_to_fzero(val.to_number()) / 100.f;
- set_cxform(cx);
- //m_accept_anim_moves = false;
- return;
- }
- case M_X: // _x
- {
- matrix m = get_matrix(); // @@ get_world_matrix()???
- m.m_[0][2] =
infinite_to_fzero(PIXELS_TO_TWIPS(val.to_number()));
- this->set_matrix(m);
- return;
- }
- case M_Y: // _y
- {
- matrix m = get_matrix(); // @@ get_world_matrix()???
- m.m_[1][2] =
infinite_to_fzero(PIXELS_TO_TWIPS(val.to_number()));
- this->set_matrix(m);
- return;
- }
-// evan : need set_width and set_height function for struct character
-#if 0
- case M_WIDTH: // _width
- {
- for (int i = 0; i < m_def->m_button_records.size(); i++)
- {
- button_record& rec = m_def->m_button_records[i];
- if (m_record_character[i] == NULL)
- {
- continue;
- }
- if ((m_mouse_state == UP && rec.m_up)
- || (m_mouse_state == DOWN && rec.m_down)
- || (m_mouse_state == OVER && rec.m_over))
- {
- m_record_character[i]->set_width(val.to_number);
- // @@ evan: should we return here?
- return;
- }
- }
-
- return;
- }
- //What is this from???
- /*else if (name == "enabled")
- {
- m_enabled = val.to_bool();
- }*/
- case M_HEIGHT: // _height
- {
- for (int i = 0; i < m_def->m_button_records.size(); i++)
- {
- button_record& rec = m_def->m_button_records[i];
- if (m_record_character[i] == NULL)
- {
- continue;
- }
- if ((m_mouse_state == UP && rec.m_up)
- || (m_mouse_state == DOWN && rec.m_down)
- || (m_mouse_state == OVER && rec.m_over))
- {
-
m_record_character[i]->set_height(val.to_number);
- // @@ evan: should we return here?
- return;
- }
- }
-
- return;
- }
-#endif
- }
-
- log_error("button_character_instance::set_member('%s', '%s') not
implemented yet",
- name.c_str(),
- val.to_string());
-}
-
-bool
-button_character_instance::get_member(const std::string& name, as_value* val)
-{
- // TODO: pull these up into a base class, to
- // share as much as possible with sprite_instance.
- as_standard_member std_member = get_standard_member(name);
- switch (std_member)
- {
- default:
- case M_INVALID_MEMBER:
- break;
- case M_VISIBLE: // _visible
- {
- val->set_bool(this->get_visible());
- return true;
- }
- case M_ALPHA: // _alpha
- {
- // @@ TODO this should be generic to struct character!
- // Alpha units are in percent.
- val->set_double(get_cxform().m_[3][0] * 100.f);
- return true;
- }
- case M_X: // _x
- {
- matrix m = get_matrix(); // @@ get_world_matrix()???
- val->set_double(TWIPS_TO_PIXELS(m.m_[0][2]));
- return true;
- }
- case M_Y: // _y
- {
- matrix m = get_matrix(); // @@ get_world_matrix()???
- val->set_double(TWIPS_TO_PIXELS(m.m_[1][2]));
- return true;
- }
- case M_WIDTH: // _width
- {
- float width = get_width();
- if ( width ) width = TWIPS_TO_PIXELS(width);
- val->set_double(width);
- return true;
- }
- case M_HEIGHT: // _height
- {
- float width = get_height();
- if ( width ) width = TWIPS_TO_PIXELS(width);
- val->set_double(width);
- return true;
- }
- } // end of switch
-
- return false;
-}
void
button_character_instance::get_invalidated_bounds(rect* bounds, bool force)
Index: server/button_character_instance.h
===================================================================
RCS file: /sources/gnash/gnash/server/button_character_instance.h,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -b -r1.10 -r1.11
--- server/button_character_instance.h 18 Jan 2007 22:53:21 -0000 1.10
+++ server/button_character_instance.h 31 Jan 2007 15:11:58 -0000 1.11
@@ -5,7 +5,7 @@
// SWF buttons. Mouse-sensitive update/display, actions, etc.
-/* $Id: button_character_instance.h,v 1.10 2007/01/18 22:53:21 strk Exp $ */
+/* $Id: button_character_instance.h,v 1.11 2007/01/31 15:11:58 strk Exp $ */
#ifndef GNASH_BUTTON_CHARACTER_INSTANCE_H
#define GNASH_BUTTON_CHARACTER_INSTANCE_H
@@ -103,10 +103,6 @@
// ActionScript overrides
//
- virtual void set_member(const std::string& name, const as_value& val);
-
- virtual bool get_member(const std::string& name, as_value* val);
-
void get_invalidated_bounds(rect* bounds, bool force);
Index: server/character.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/character.cpp,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -b -r1.16 -r1.17
--- server/character.cpp 30 Jan 2007 18:29:40 -0000 1.16
+++ server/character.cpp 31 Jan 2007 15:11:58 -0000 1.17
@@ -18,7 +18,7 @@
//
//
-/* $Id: character.cpp,v 1.16 2007/01/30 18:29:40 strk Exp $ */
+/* $Id: character.cpp,v 1.17 2007/01/31 15:11:58 strk Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -225,6 +225,81 @@
}
void
+character::onrollout_getset(const fn_call& fn)
+{
+ character* ptr = ensure_character(fn.this_ptr);
+
+ if ( fn.nargs == 0 ) // getter
+ {
+ ptr->get_event_handler(event_id::ROLL_OUT, fn.result);
+ }
+ else // setter
+ {
+ ptr->set_event_handler(event_id::ROLL_OUT, fn.arg(0));
+ }
+}
+
+void
+character::onpress_getset(const fn_call& fn)
+{
+ character* ptr = ensure_character(fn.this_ptr);
+
+ if ( fn.nargs == 0 ) // getter
+ {
+ ptr->get_event_handler(event_id::PRESS, fn.result);
+ }
+ else // setter
+ {
+ ptr->set_event_handler(event_id::PRESS, fn.arg(0));
+ }
+}
+
+void
+character::onrelease_getset(const fn_call& fn)
+{
+ character* ptr = ensure_character(fn.this_ptr);
+
+ if ( fn.nargs == 0 ) // getter
+ {
+ ptr->get_event_handler(event_id::RELEASE, fn.result);
+ }
+ else // setter
+ {
+ ptr->set_event_handler(event_id::RELEASE, fn.arg(0));
+ }
+}
+
+void
+character::onreleaseoutside_getset(const fn_call& fn)
+{
+ character* ptr = ensure_character(fn.this_ptr);
+
+ if ( fn.nargs == 0 ) // getter
+ {
+ ptr->get_event_handler(event_id::RELEASE_OUTSIDE, fn.result);
+ }
+ else // setter
+ {
+ ptr->set_event_handler(event_id::RELEASE_OUTSIDE, fn.arg(0));
+ }
+}
+
+void
+character::onload_getset(const fn_call& fn)
+{
+ character* ptr = ensure_character(fn.this_ptr);
+
+ if ( fn.nargs == 0 ) // getter
+ {
+ ptr->get_event_handler(event_id::LOAD, fn.result);
+ }
+ else // setter
+ {
+ ptr->set_event_handler(event_id::LOAD, fn.arg(0));
+ }
+}
+
+void
character::x_getset(const fn_call& fn)
{
character* ptr = ensure_character(fn.this_ptr);
Index: server/character.h
===================================================================
RCS file: /sources/gnash/gnash/server/character.h,v
retrieving revision 1.42
retrieving revision 1.43
diff -u -b -r1.42 -r1.43
--- server/character.h 30 Jan 2007 18:29:40 -0000 1.42
+++ server/character.h 31 Jan 2007 15:11:58 -0000 1.43
@@ -18,7 +18,7 @@
//
//
-/* $Id: character.h,v 1.42 2007/01/30 18:29:40 strk Exp $ */
+/* $Id: character.h,v 1.43 2007/01/31 15:11:58 strk Exp $ */
#ifndef GNASH_CHARACTER_H
#define GNASH_CHARACTER_H
@@ -134,6 +134,16 @@
static void onrollover_getset(const fn_call& fn);
+ static void onrollout_getset(const fn_call& fn);
+
+ static void onload_getset(const fn_call& fn);
+
+ static void onpress_getset(const fn_call& fn);
+
+ static void onrelease_getset(const fn_call& fn);
+
+ static void onreleaseoutside_getset(const fn_call& fn);
+
static void x_getset(const fn_call& fn);
static void y_getset(const fn_call& fn);
Index: server/sprite_instance.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/sprite_instance.cpp,v
retrieving revision 1.143
retrieving revision 1.144
diff -u -b -r1.143 -r1.144
--- server/sprite_instance.cpp 31 Jan 2007 11:10:11 -0000 1.143
+++ server/sprite_instance.cpp 31 Jan 2007 15:11:58 -0000 1.144
@@ -1014,36 +1014,6 @@
}
static void
-sprite_onrollout_getset(const fn_call& fn)
-{
- sprite_instance* ptr = ensure_sprite(fn.this_ptr);
-
- if ( fn.nargs == 0 ) // getter
- {
- ptr->get_event_handler(event_id::ROLL_OUT, fn.result);
- }
- else // setter
- {
- ptr->set_event_handler(event_id::ROLL_OUT, fn.arg(0));
- }
-}
-
-static void
-sprite_onload_getset(const fn_call& fn)
-{
- sprite_instance* ptr = ensure_sprite(fn.this_ptr);
-
- if ( fn.nargs == 0 ) // getter
- {
- ptr->get_event_handler(event_id::LOAD, fn.result);
- }
- else // setter
- {
- ptr->set_event_handler(event_id::LOAD, fn.arg(0));
- }
-}
-
-static void
sprite_highquality_getset(const fn_call& fn)
{
sprite_instance* ptr = ensure_sprite(fn.this_ptr);
@@ -1064,6 +1034,7 @@
}
}
+// TODO: move this to character class, _focusrect seems a generic property
static void
sprite_focusrect_getset(const fn_call& fn)
{
@@ -1191,10 +1162,10 @@
gettersetter = new builtin_function(&character::onrollover_getset,
NULL);
o.init_property("onRollOver", *gettersetter, *gettersetter);
- gettersetter = new builtin_function(&sprite_onrollout_getset, NULL);
+ gettersetter = new builtin_function(&character::onrollout_getset, NULL);
o.init_property("onRollOut", *gettersetter, *gettersetter);
- gettersetter = new builtin_function(&sprite_onload_getset, NULL);
+ gettersetter = new builtin_function(&character::onload_getset, NULL);
o.init_property("onLoad", *gettersetter, *gettersetter);
#endif // ndef OLD_GET_MEMBER
Index: testsuite/misc-ming.all/ButtonEventsTest-Runner.cpp
===================================================================
RCS file:
/sources/gnash/gnash/testsuite/misc-ming.all/ButtonEventsTest-Runner.cpp,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -b -r1.9 -r1.10
--- testsuite/misc-ming.all/ButtonEventsTest-Runner.cpp 31 Jan 2007 09:17:32
-0000 1.9
+++ testsuite/misc-ming.all/ButtonEventsTest-Runner.cpp 31 Jan 2007 15:11:58
-0000 1.10
@@ -40,7 +40,7 @@
// the textfield value.
tester.movePointerTo(60, 60);
check_equals(string(text->get_text_value()), string("MouseOver"));
- xcheck_equals(string(text2->get_text_value()), string("RollOver"));
+ check_equals(string(text2->get_text_value()), string("RollOver"));
check(tester.isMouseOverMouseEntity());
// TODO: check that pixel @ 60,60 is yellow !
@@ -48,7 +48,7 @@
// the textfield value.
tester.pressMouseButton();
check_equals(string(text->get_text_value()), string("MouseDown"));
- xcheck_equals(string(text2->get_text_value()), string("Press"));
+ check_equals(string(text2->get_text_value()), string("Press"));
check(tester.isMouseOverMouseEntity());
// TODO: check that pixel @ 60,60 is green !
@@ -56,7 +56,7 @@
// the textfield value.
tester.depressMouseButton();
check_equals(string(text->get_text_value()), string("MouseUp"));
- xcheck_equals(string(text2->get_text_value()), string("Release"));
+ check_equals(string(text2->get_text_value()), string("Release"));
check(tester.isMouseOverMouseEntity());
// TODO: check that pixel @ 60,60 is yellow !
@@ -64,7 +64,7 @@
// the textfield value.
tester.movePointerTo(39, 60);
check_equals(string(text->get_text_value()), string("MouseOut"));
- xcheck_equals(string(text2->get_text_value()), string("RollOut"));
+ check_equals(string(text2->get_text_value()), string("RollOut"));
check(!tester.isMouseOverMouseEntity());
// TODO: check that pixel @ 60,60 is red !
@@ -72,7 +72,7 @@
// as we're outside of the button.
tester.pressMouseButton();
check_equals(string(text->get_text_value()), string("MouseOut"));
- xcheck_equals(string(text2->get_text_value()), string("RollOut"));
+ check_equals(string(text2->get_text_value()), string("RollOut"));
check(!tester.isMouseOverMouseEntity());
// TODO: check that pixel @ 60,60 is red !
@@ -80,19 +80,19 @@
// as we're outside of the button.
tester.depressMouseButton();
check_equals(string(text->get_text_value()), string("MouseOut"));
- xcheck_equals(string(text2->get_text_value()), string("RollOut"));
+ check_equals(string(text2->get_text_value()), string("RollOut"));
check(!tester.isMouseOverMouseEntity());
// TODO: check that pixel @ 60,60 is red !
// Now press the mouse inside and release outside
tester.movePointerTo(60, 60);
check_equals(string(text->get_text_value()), string("MouseOver"));
- xcheck_equals(string(text2->get_text_value()), string("RollOver"));
+ check_equals(string(text2->get_text_value()), string("RollOver"));
check(tester.isMouseOverMouseEntity());
// TODO: check that pixel @ 60,60 is yellow !
tester.pressMouseButton();
check_equals(string(text->get_text_value()), string("MouseDown"));
- xcheck_equals(string(text2->get_text_value()), string("Press"));
+ check_equals(string(text2->get_text_value()), string("Press"));
check(tester.isMouseOverMouseEntity());
// TODO: check that pixel @ 60,60 is green !
tester.movePointerTo(39, 60);