Initial commit

This commit is contained in:
Gericom
2025-11-22 17:21:45 +01:00
commit 5d6f67c612
517 changed files with 63025 additions and 0 deletions

View 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;
};