#include #include #include #include #include #include namespace extra2d { // ============================================================================ // Button 实现 // ============================================================================ /** * @brief 默认构造函数 */ Button::Button() { setAnchor(0.0f, 0.0f); setSpatialIndexed(false); auto &dispatcher = getEventDispatcher(); dispatcher.addListener(EventType::UIHoverEnter, [this](Event &) { hovered_ = true; auto &app = Application::instance(); app.window().setCursor(hoverCursor_); cursorChanged_ = true; }); dispatcher.addListener(EventType::UIHoverExit, [this](Event &) { hovered_ = false; pressed_ = false; if (cursorChanged_) { auto &app = Application::instance(); app.window().resetCursor(); cursorChanged_ = false; } }); dispatcher.addListener(EventType::UIPressed, [this](Event &) { pressed_ = true; }); dispatcher.addListener(EventType::UIReleased, [this](Event &) { pressed_ = false; }); dispatcher.addListener(EventType::UIClicked, [this](Event &) { if (toggleMode_) { toggle(); } if (onClick_) { onClick_(); } }); } /** * @brief 带文本的构造函数 * @param text 按钮文本 */ Button::Button(const std::string &text) : Button() { text_ = text; } // ------------------------------------------------------------------------ // 静态创建方法 // ------------------------------------------------------------------------ /** * @brief 创建空按钮对象 * @return 按钮对象指针 */ Ptr