Compare commits
No commits in common. "e85dc97e9131b9630b23644592fe75c59695297d" and "1d4055411dbb854bc7bfe27a247b452c088ccbac" have entirely different histories.
e85dc97e91
...
1d4055411d
@ -14,12 +14,22 @@ struct ColorWidget : public ui::Widget
|
||||
return ui::EventResult::DidHandle;
|
||||
}
|
||||
|
||||
Result<ui::EventResult> handle_mouse_leave() override
|
||||
Result<ui::EventResult> handle_mouse_leave(ui::Point) override
|
||||
{
|
||||
m_color = m_first_color;
|
||||
return ui::EventResult::DidHandle;
|
||||
}
|
||||
|
||||
Result<ui::EventResult> handle_mouse_down(ui::Point, int) override
|
||||
{
|
||||
return ui::EventResult::DidNotHandle;
|
||||
}
|
||||
|
||||
Result<ui::EventResult> handle_mouse_up(ui::Point, int) override
|
||||
{
|
||||
return ui::EventResult::DidNotHandle;
|
||||
}
|
||||
|
||||
Result<void> draw(ui::Canvas& canvas) override
|
||||
{
|
||||
canvas.fill(m_color);
|
||||
|
@ -21,7 +21,7 @@ namespace ui
|
||||
void set_action(void (*action)(void));
|
||||
|
||||
Result<EventResult> handle_mouse_move(Point position) override;
|
||||
Result<EventResult> handle_mouse_leave() override;
|
||||
Result<EventResult> handle_mouse_leave(Point position) override;
|
||||
Result<EventResult> handle_mouse_down(Point position, int buttons) override;
|
||||
Result<EventResult> handle_mouse_up(Point position, int buttons) override;
|
||||
Result<void> draw(Canvas& canvas) override;
|
||||
|
@ -21,7 +21,7 @@ namespace ui
|
||||
void set_widget(Widget& widget);
|
||||
|
||||
Result<EventResult> handle_mouse_move(Point position) override;
|
||||
Result<EventResult> handle_mouse_leave() override;
|
||||
Result<EventResult> handle_mouse_leave(Point position) override;
|
||||
Result<EventResult> handle_mouse_down(Point position, int buttons) override;
|
||||
Result<EventResult> handle_mouse_up(Point position, int buttons) override;
|
||||
Result<void> draw(Canvas& canvas) override;
|
||||
|
@ -84,6 +84,10 @@ namespace ui
|
||||
public:
|
||||
static Result<OwnedPtr<ImageWidget>> load(const os::Path& path);
|
||||
|
||||
Result<EventResult> handle_mouse_move(Point position) override;
|
||||
Result<EventResult> handle_mouse_leave(Point position) override;
|
||||
Result<EventResult> handle_mouse_down(Point position, int buttons) override;
|
||||
Result<EventResult> handle_mouse_up(Point position, int buttons) override;
|
||||
Result<void> draw(Canvas& canvas) override;
|
||||
|
||||
private:
|
||||
|
@ -31,7 +31,7 @@ namespace ui
|
||||
HorizontalLayout(AdjustHeight adjust_height = AdjustHeight::Yes, AdjustWidth adjust_width = AdjustWidth::Yes);
|
||||
|
||||
Result<EventResult> handle_mouse_move(Point position) override;
|
||||
Result<EventResult> handle_mouse_leave() override;
|
||||
Result<EventResult> handle_mouse_leave(Point position) override;
|
||||
Result<EventResult> handle_mouse_down(Point position, int buttons) override;
|
||||
Result<EventResult> handle_mouse_up(Point position, int buttons) override;
|
||||
|
||||
@ -52,7 +52,7 @@ namespace ui
|
||||
VerticalLayout(AdjustHeight adjust_height = AdjustHeight::Yes, AdjustWidth adjust_width = AdjustWidth::Yes);
|
||||
|
||||
Result<EventResult> handle_mouse_move(Point position) override;
|
||||
Result<EventResult> handle_mouse_leave() override;
|
||||
Result<EventResult> handle_mouse_leave(Point position) override;
|
||||
Result<EventResult> handle_mouse_down(Point position, int buttons) override;
|
||||
Result<EventResult> handle_mouse_up(Point position, int buttons) override;
|
||||
|
||||
|
@ -8,7 +8,6 @@
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
#include <luna/Ignore.h>
|
||||
#include <luna/Result.h>
|
||||
#include <ui/Canvas.h>
|
||||
#include <ui/Point.h>
|
||||
@ -27,28 +26,10 @@ namespace ui
|
||||
class Widget
|
||||
{
|
||||
public:
|
||||
virtual Result<EventResult> handle_mouse_move(Point position)
|
||||
{
|
||||
ignore(position);
|
||||
return EventResult::DidNotHandle;
|
||||
}
|
||||
|
||||
virtual Result<EventResult> handle_mouse_down(Point position, int buttons)
|
||||
{
|
||||
ignore(position, buttons);
|
||||
return EventResult::DidNotHandle;
|
||||
}
|
||||
|
||||
virtual Result<EventResult> handle_mouse_up(Point position, int buttons)
|
||||
{
|
||||
ignore(position, buttons);
|
||||
return EventResult::DidNotHandle;
|
||||
}
|
||||
|
||||
virtual Result<EventResult> handle_mouse_leave()
|
||||
{
|
||||
return EventResult::DidNotHandle;
|
||||
}
|
||||
virtual Result<EventResult> handle_mouse_move(Point position);
|
||||
virtual Result<EventResult> handle_mouse_down(Point position, int buttons);
|
||||
virtual Result<EventResult> handle_mouse_up(Point position, int buttons);
|
||||
virtual Result<EventResult> handle_mouse_leave(Point position);
|
||||
|
||||
virtual Result<void> draw(Canvas& canvas);
|
||||
|
||||
|
@ -46,7 +46,6 @@ namespace ui
|
||||
void close();
|
||||
|
||||
Result<void> draw();
|
||||
Result<void> handle_mouse_leave();
|
||||
Result<void> handle_mouse_move(ui::Point position);
|
||||
Result<void> handle_mouse_buttons(ui::Point position, int buttons);
|
||||
|
||||
|
@ -19,7 +19,6 @@ namespace ui
|
||||
CREATE_WINDOW_RESPONSE_ID,
|
||||
WINDOW_CLOSE_REQUEST_ID,
|
||||
MOUSE_EVENT_REQUEST_ID,
|
||||
MOUSE_LEAVE_REQUEST_ID,
|
||||
GET_SCREEN_RECT_RESPONSE_ID
|
||||
};
|
||||
|
||||
@ -47,13 +46,6 @@ namespace ui
|
||||
int buttons;
|
||||
};
|
||||
|
||||
struct MouseLeaveRequest
|
||||
{
|
||||
static constexpr u8 ID = MOUSE_LEAVE_REQUEST_ID;
|
||||
|
||||
int window;
|
||||
};
|
||||
|
||||
struct GetScreenRectResponse
|
||||
{
|
||||
static constexpr u8 ID = GET_SCREEN_RECT_RESPONSE_ID;
|
||||
|
@ -122,14 +122,6 @@ namespace ui
|
||||
window->draw();
|
||||
return {};
|
||||
}
|
||||
case MOUSE_LEAVE_REQUEST_ID: {
|
||||
MouseLeaveRequest request;
|
||||
READ_MESSAGE(request);
|
||||
auto* window = find_window(request.window);
|
||||
window->handle_mouse_leave();
|
||||
window->draw();
|
||||
return {};
|
||||
}
|
||||
default: fail("Unexpected IPC request from server!");
|
||||
}
|
||||
}
|
||||
|
@ -35,10 +35,10 @@ namespace ui
|
||||
return m_child->handle_mouse_move(position);
|
||||
}
|
||||
|
||||
Result<EventResult> Button::handle_mouse_leave()
|
||||
Result<EventResult> Button::handle_mouse_leave(Point position)
|
||||
{
|
||||
m_hovered = m_clicked = false;
|
||||
return m_child->handle_mouse_leave();
|
||||
return m_child->handle_mouse_leave(position);
|
||||
}
|
||||
|
||||
Result<EventResult> Button::handle_mouse_down(Point position, int buttons)
|
||||
|
@ -26,25 +26,22 @@ namespace ui
|
||||
|
||||
Result<EventResult> Container::handle_mouse_move(Point position)
|
||||
{
|
||||
if (m_widget->rect().contains(position)) return m_widget->handle_mouse_move(position);
|
||||
return ui::EventResult::DidNotHandle;
|
||||
return m_widget->handle_mouse_move(position);
|
||||
}
|
||||
|
||||
Result<EventResult> Container::handle_mouse_leave()
|
||||
Result<EventResult> Container::handle_mouse_leave(Point position)
|
||||
{
|
||||
return m_widget->handle_mouse_leave();
|
||||
return m_widget->handle_mouse_leave(position);
|
||||
}
|
||||
|
||||
Result<EventResult> Container::handle_mouse_down(Point position, int buttons)
|
||||
{
|
||||
if (m_widget->rect().contains(position)) return m_widget->handle_mouse_down(position, buttons);
|
||||
return ui::EventResult::DidNotHandle;
|
||||
return m_widget->handle_mouse_down(position, buttons);
|
||||
}
|
||||
|
||||
Result<EventResult> Container::handle_mouse_up(Point position, int buttons)
|
||||
{
|
||||
if (m_widget->rect().contains(position)) return m_widget->handle_mouse_up(position, buttons);
|
||||
return ui::EventResult::DidNotHandle;
|
||||
return m_widget->handle_mouse_up(position, buttons);
|
||||
}
|
||||
|
||||
Result<void> Container::draw(Canvas& canvas)
|
||||
|
@ -40,6 +40,26 @@ namespace ui
|
||||
return widget;
|
||||
}
|
||||
|
||||
Result<EventResult> ImageWidget::handle_mouse_move(Point)
|
||||
{
|
||||
return EventResult::DidNotHandle;
|
||||
}
|
||||
|
||||
Result<EventResult> ImageWidget::handle_mouse_leave(Point)
|
||||
{
|
||||
return EventResult::DidNotHandle;
|
||||
}
|
||||
|
||||
Result<EventResult> ImageWidget::handle_mouse_up(Point, int)
|
||||
{
|
||||
return EventResult::DidNotHandle;
|
||||
}
|
||||
|
||||
Result<EventResult> ImageWidget::handle_mouse_down(Point, int)
|
||||
{
|
||||
return EventResult::DidNotHandle;
|
||||
}
|
||||
|
||||
Result<void> ImageWidget::draw(Canvas& canvas)
|
||||
{
|
||||
canvas.subcanvas({ 0, 0, m_image->width(), m_image->height() }).fill(m_image->pixels(), m_image->width());
|
||||
|
@ -25,15 +25,15 @@ namespace ui
|
||||
{
|
||||
if (widget->rect().contains(position)) result = TRY(widget->handle_mouse_move(position));
|
||||
else
|
||||
TRY(widget->handle_mouse_leave());
|
||||
TRY(widget->handle_mouse_leave(position));
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
Result<EventResult> HorizontalLayout::handle_mouse_leave()
|
||||
Result<EventResult> HorizontalLayout::handle_mouse_leave(Point position)
|
||||
{
|
||||
for (auto widget : m_widgets) TRY(widget->handle_mouse_leave());
|
||||
for (auto widget : m_widgets) TRY(widget->handle_mouse_leave(position));
|
||||
|
||||
return ui::EventResult::DidNotHandle;
|
||||
}
|
||||
@ -114,15 +114,15 @@ namespace ui
|
||||
{
|
||||
if (widget->rect().contains(position)) result = TRY(widget->handle_mouse_move(position));
|
||||
else
|
||||
TRY(widget->handle_mouse_leave());
|
||||
TRY(widget->handle_mouse_leave(position));
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
Result<EventResult> VerticalLayout::handle_mouse_leave()
|
||||
Result<EventResult> VerticalLayout::handle_mouse_leave(Point position)
|
||||
{
|
||||
for (auto widget : m_widgets) TRY(widget->handle_mouse_leave());
|
||||
for (auto widget : m_widgets) TRY(widget->handle_mouse_leave(position));
|
||||
|
||||
return ui::EventResult::DidNotHandle;
|
||||
}
|
||||
|
@ -101,13 +101,6 @@ namespace ui
|
||||
return {};
|
||||
}
|
||||
|
||||
Result<void> Window::handle_mouse_leave()
|
||||
{
|
||||
if (!m_main_widget) return {};
|
||||
TRY(m_main_widget->handle_mouse_leave());
|
||||
return {};
|
||||
}
|
||||
|
||||
Result<void> Window::handle_mouse_move(ui::Point position)
|
||||
{
|
||||
if (!m_main_widget) return {};
|
||||
|
@ -79,8 +79,6 @@ void Mouse::update(const moon::MousePacket& packet)
|
||||
}
|
||||
}
|
||||
|
||||
Window* new_active_window = nullptr;
|
||||
|
||||
for (Window* window = g_windows.last().value_or(nullptr); window;
|
||||
window = g_windows.previous(window).value_or(nullptr))
|
||||
{
|
||||
@ -94,19 +92,7 @@ void Mouse::update(const moon::MousePacket& packet)
|
||||
request.position = contents.relative(m_position);
|
||||
request.buttons = packet.buttons;
|
||||
os::IPC::send_async(window->client->conn, request);
|
||||
new_active_window = window;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (m_active_window != new_active_window)
|
||||
{
|
||||
if (m_active_window)
|
||||
{
|
||||
ui::MouseLeaveRequest request;
|
||||
request.window = m_active_window->id;
|
||||
os::IPC::send_async(m_active_window->client->conn, request);
|
||||
}
|
||||
m_active_window = new_active_window;
|
||||
}
|
||||
}
|
||||
|
@ -19,6 +19,4 @@ class Mouse
|
||||
|
||||
Window* m_dragging_window = nullptr;
|
||||
ui::Point m_initial_drag_position;
|
||||
|
||||
Window* m_active_window = nullptr;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user