mirror of
https://github.com/LNH-team/pico-launcher.git
synced 2026-06-02 09:06:54 +02:00
Initial commit
This commit is contained in:
106
arm9/source/gui/views/View.h
Normal file
106
arm9/source/gui/views/View.h
Normal file
@@ -0,0 +1,106 @@
|
||||
#pragma once
|
||||
#include "core/LinkedListLink.h"
|
||||
#include "core/math/Point.h"
|
||||
#include "core/math/Rectangle.h"
|
||||
#include "../FocusManager.h"
|
||||
#include "../FocusMoveDirection.h"
|
||||
|
||||
class GraphicsContext;
|
||||
class VramContext;
|
||||
class InputProvider;
|
||||
|
||||
/// @brief Base class for views.
|
||||
class View
|
||||
{
|
||||
public:
|
||||
/// @brief Link used for views that contain other views.
|
||||
LinkedListLink listLink;
|
||||
|
||||
virtual ~View() { }
|
||||
|
||||
/// @brief Initializes the vram for the view.
|
||||
/// @param vramContext The vram context to use.
|
||||
virtual void InitVram(const VramContext& vramContext) { }
|
||||
|
||||
/// @brief Updates the view.
|
||||
virtual void Update() { }
|
||||
|
||||
/// @brief Draws the view.
|
||||
/// @param graphicsContext The graphics context to use.
|
||||
virtual void Draw(GraphicsContext& graphicsContext) = 0;
|
||||
|
||||
/// @brief Performs vblank processes for the view.
|
||||
virtual void VBlank() { }
|
||||
|
||||
/// @brief Moves the focus from the currentFocus view into the given direction.
|
||||
/// @param currentFocus The currently focused view.
|
||||
/// @param direction The direction to move the focus in.
|
||||
/// @param source The view that requested this view to move focus.
|
||||
/// @return The newly focused view, or null if the focus didn't change.
|
||||
virtual View* MoveFocus(View* currentFocus, FocusMoveDirection direction, View* source)
|
||||
{
|
||||
if (_parent && _parent != source)
|
||||
return _parent->MoveFocus(currentFocus, direction, this);
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
/// @brief Handles input for the view.
|
||||
/// @param inputProvider The input provider.
|
||||
/// @param focusManager The focus manager.
|
||||
/// @return True if input was handled, or false otherwise.
|
||||
virtual bool HandleInput(const InputProvider& inputProvider, FocusManager& focusManager)
|
||||
{
|
||||
if (_parent)
|
||||
return _parent->HandleInput(inputProvider, focusManager);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/// @brief Gets the bounds of the view.
|
||||
/// @return The bounds of the view.
|
||||
virtual Rectangle GetBounds() const = 0;
|
||||
|
||||
/// @brief Sets the position of the view.
|
||||
/// @param position The position to set.
|
||||
void SetPosition(const Point& position) { _position = position; }
|
||||
|
||||
/// @brief Sets the position of the view.
|
||||
/// @param x The x position to set.
|
||||
/// @param y The y position to set.
|
||||
void SetPosition(int x, int y)
|
||||
{
|
||||
_position.x = x;
|
||||
_position.y = y;
|
||||
}
|
||||
|
||||
/// @brief Gets the position of the view.
|
||||
/// @return The position of the view.
|
||||
const Point& GetPosition() const { return _position; }
|
||||
|
||||
/// @brief Sets the parent of the view.
|
||||
/// @param parent The parent to set.
|
||||
void SetParent(View* parent) { _parent = parent; }
|
||||
|
||||
/// @brief Gets the parent of the view.
|
||||
/// @return The parent of the view, or null if none.
|
||||
View* GetParent() const { return _parent; }
|
||||
|
||||
/// @brief Sets whether the view is currently focused.
|
||||
/// @param focused True if the view is currently focused, or false otherwise.
|
||||
void SetFocused(bool focused) { _isFocused = focused; }
|
||||
|
||||
/// @brief Gets whether the view is currently focused.
|
||||
/// @return True if the view is currently focused, or false otherwise.
|
||||
bool IsFocused() const { return _isFocused; }
|
||||
|
||||
protected:
|
||||
Point _position;
|
||||
bool _isFocused;
|
||||
|
||||
View()
|
||||
: _position(0, 0), _isFocused(false), _parent(nullptr) { }
|
||||
|
||||
private:
|
||||
View* _parent;
|
||||
};
|
||||
Reference in New Issue
Block a user