/* * Copyright (c) 2021, Richard Gráčik * Copyright (c) 2022, kleines Filmröllchen * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include #include #include #include #include #include class CatDog final : public GUI::Widget , GUI::MouseTracker { C_OBJECT(CatDog); public: static ErrorOr> create(); virtual void timer_event(Core::TimerEvent&) override; virtual void paint_event(GUI::PaintEvent& event) override; virtual void track_mouse_move(Gfx::IntPoint point) override; virtual void mousedown_event(GUI::MouseEvent& event) override; virtual void context_menu_event(GUI::ContextMenuEvent& event) override; Function on_click; Function on_context_menu_request; void set_roaming(bool roaming); [[nodiscard]] bool is_artist() const; [[nodiscard]] bool is_inspector() const; private: enum class State : u16 { Frame1 = 0x0, Frame2 = 0x1, Up = 0x10, Down = 0x20, Left = 0x40, Right = 0x80, Directions = Up | Down | Left | Right, Roaming = 0x0100, Idle = 0x0200, Sleeping = 0x0400, Alert = 0x0800, GenericCatDog = 0x0000, Inspector = 0x1000, Artist = 0x2000 }; AK_ENUM_BITWISE_FRIEND_OPERATORS(State); struct ImageForState { State state; NonnullRefPtr bitmap; }; Vector m_images; Gfx::IntPoint m_mouse_offset {}; Core::ElapsedTimer m_idle_sleep_timer; NonnullOwnPtr m_proc_all; State m_state { State::Roaming }; State m_frame { State::Frame1 }; CatDog(); [[nodiscard]] Gfx::Bitmap& bitmap_for_state() const; [[nodiscard]] State special_application_states() const; };