mirror of
https://github.com/aseprite/aseprite.git
synced 2024-09-15 15:14:16 +00:00
[lua] Add onmousemove/down/up events to canvas widget
At the moment very basic properties were added to the received event: x, y, and button.
This commit is contained in:
parent
25682a44d8
commit
0aaa9fdddf
@ -58,6 +58,32 @@ void Canvas::onInitTheme(ui::InitThemeEvent& ev)
|
||||
setBgColor(bg);
|
||||
}
|
||||
|
||||
bool Canvas::onProcessMessage(ui::Message* msg)
|
||||
{
|
||||
switch (msg->type()) {
|
||||
|
||||
case ui::kMouseMoveMessage: {
|
||||
auto mouseMsg = static_cast<ui::MouseMessage*>(msg);
|
||||
MouseMove(mouseMsg);
|
||||
break;
|
||||
}
|
||||
|
||||
case ui::kMouseDownMessage: {
|
||||
auto mouseMsg = static_cast<ui::MouseMessage*>(msg);
|
||||
MouseDown(mouseMsg);
|
||||
break;
|
||||
}
|
||||
|
||||
case ui::kMouseUpMessage: {
|
||||
auto mouseMsg = static_cast<ui::MouseMessage*>(msg);
|
||||
MouseUp(mouseMsg);
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
return ui::Widget::onProcessMessage(msg);
|
||||
}
|
||||
|
||||
void Canvas::onResize(ui::ResizeEvent& ev)
|
||||
{
|
||||
Widget::onResize(ev);
|
||||
|
@ -27,9 +27,13 @@ public:
|
||||
void callPaint();
|
||||
|
||||
obs::signal<void(GraphicsContext&)> Paint;
|
||||
obs::signal<void(ui::MouseMessage*)> MouseMove;
|
||||
obs::signal<void(ui::MouseMessage*)> MouseDown;
|
||||
obs::signal<void(ui::MouseMessage*)> MouseUp;
|
||||
|
||||
private:
|
||||
void onInitTheme(ui::InitThemeEvent& ev) override;
|
||||
bool onProcessMessage(ui::Message* msg) override;
|
||||
void onResize(ui::ResizeEvent& ev) override;
|
||||
void onPaint(ui::PaintEvent& ev) override;
|
||||
|
||||
|
@ -32,6 +32,7 @@
|
||||
#include "ui/grid.h"
|
||||
#include "ui/label.h"
|
||||
#include "ui/manager.h"
|
||||
#include "ui/message.h"
|
||||
#include "ui/separator.h"
|
||||
#include "ui/slider.h"
|
||||
#include "ui/window.h"
|
||||
@ -923,6 +924,36 @@ int Dialog_canvas(lua_State* L)
|
||||
});
|
||||
}
|
||||
lua_pop(L, 1);
|
||||
|
||||
auto mouseCallback =
|
||||
[](lua_State* L, ui::MouseMessage* msg) {
|
||||
lua_pushinteger(L, msg->position().x);
|
||||
lua_setfield(L, -2, "x");
|
||||
|
||||
lua_pushinteger(L, msg->position().y);
|
||||
lua_setfield(L, -2, "y");
|
||||
|
||||
lua_pushinteger(L, int(msg->button()));
|
||||
lua_setfield(L, -2, "button");
|
||||
};
|
||||
|
||||
type = lua_getfield(L, 2, "onmousemove");
|
||||
if (type == LUA_TFUNCTION) {
|
||||
Dialog_connect_signal(L, 1, widget->MouseMove, mouseCallback);
|
||||
}
|
||||
lua_pop(L, 1);
|
||||
|
||||
type = lua_getfield(L, 2, "onmousedown");
|
||||
if (type == LUA_TFUNCTION) {
|
||||
Dialog_connect_signal(L, 1, widget->MouseDown, mouseCallback);
|
||||
}
|
||||
lua_pop(L, 1);
|
||||
|
||||
type = lua_getfield(L, 2, "onmouseup");
|
||||
if (type == LUA_TFUNCTION) {
|
||||
Dialog_connect_signal(L, 1, widget->MouseUp, mouseCallback);
|
||||
}
|
||||
lua_pop(L, 1);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user