mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-05-18 17:12:54 +00:00
85 lines
2.1 KiB
C++
85 lines
2.1 KiB
C++
/*
|
|
* Copyright (c) 2021, Richard Gráčik <r.gracik@gmail.com>
|
|
* Copyright (c) 2022, kleines Filmröllchen <filmroellchen@serenityos.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <AK/EnumBits.h>
|
|
#include <AK/NonnullRefPtr.h>
|
|
#include <AK/RefPtr.h>
|
|
#include <AK/Types.h>
|
|
#include <LibCore/ElapsedTimer.h>
|
|
#include <LibGUI/Menu.h>
|
|
#include <LibGUI/MouseTracker.h>
|
|
#include <LibGUI/Widget.h>
|
|
#include <LibGfx/Bitmap.h>
|
|
#include <unistd.h>
|
|
|
|
class CatDog final : public GUI::Widget
|
|
, GUI::MouseTracker {
|
|
C_OBJECT(CatDog);
|
|
|
|
public:
|
|
static ErrorOr<NonnullRefPtr<CatDog>> 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<void()> on_click;
|
|
Function<void(GUI::ContextMenuEvent&)> 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<Gfx::Bitmap> bitmap;
|
|
};
|
|
|
|
Vector<ImageForState> m_images;
|
|
|
|
Gfx::IntPoint m_mouse_offset {};
|
|
Core::ElapsedTimer m_idle_sleep_timer;
|
|
|
|
NonnullOwnPtr<Core::File> 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;
|
|
};
|