// Aseprite // Copyright (c) 2022-2023 Igara Studio S.A. // // This program is distributed under the terms of // the End-User License Agreement for Aseprite. #ifndef APP_SCRIPT_CANVAS_H_INCLUDED #define APP_SCRIPT_CANVAS_H_INCLUDED #pragma once #include "os/surface.h" #include "ui/cursor_type.h" #include "ui/widget.h" namespace ui { class TouchMessage; } namespace app { namespace script { class GraphicsContext; // The canvas widget of a Dialog() created with Dialog:canvas{ ... } // This is a generic widget where all its events can be listened. class Canvas : public ui::Widget { public: static ui::WidgetType Type(); Canvas(); void callPaint(); void setMouseCursor(const ui::CursorType cursor) { m_cursorType = cursor; } obs::signal Paint; obs::signal KeyDown; obs::signal KeyUp; obs::signal MouseMove; obs::signal MouseDown; obs::signal MouseUp; obs::signal Wheel; obs::signal TouchMagnify; static void stopKeyEventPropagation(); private: static bool s_stopKeyEventPropagation; void onInitTheme(ui::InitThemeEvent& ev) override; bool onProcessMessage(ui::Message* msg) override; void onResize(ui::ResizeEvent& ev) override; void onPaint(ui::PaintEvent& ev) override; os::SurfaceRef m_surface; ui::CursorType m_cursorType = ui::kArrowCursor; }; } // namespace script } // namespace app #endif