279 lines
7.9 KiB
C++
279 lines
7.9 KiB
C++
/**
|
|
* @file Window.hpp
|
|
* @brief Contains window related objects
|
|
* @author Lauchmelder23
|
|
* @date 20.05.20
|
|
*/
|
|
#pragma once
|
|
#include <string>
|
|
#include <chrono>
|
|
|
|
#include "Util.hpp"
|
|
#include "structures/Vector2.hpp"
|
|
|
|
struct SDL_Window;
|
|
union SDL_Event;
|
|
struct SDL_Surface;
|
|
struct SDL_Cursor;
|
|
|
|
SDLU_BEGIN
|
|
/**
|
|
* @brief Stores information about a window. You probably want RenderWindow.
|
|
*/
|
|
class Window
|
|
{
|
|
public:
|
|
enum Flags {
|
|
Fullscreen = ((Uint32)1 << 0),
|
|
OpenGL = ((Uint32)1 << 1),
|
|
Shown = ((Uint32)1 << 2),
|
|
Hidden = ((Uint32)1 << 3),
|
|
Borderless = ((Uint32)1 << 4),
|
|
Resizable = ((Uint32)1 << 5),
|
|
Minimized = ((Uint32)1 << 6),
|
|
Maximized = ((Uint32)1 << 7),
|
|
InputGrabbed = ((Uint32)1 << 8),
|
|
InputFocus = ((Uint32)1 << 9),
|
|
MouseFocus = ((Uint32)1 << 10),
|
|
Foregin = ((Uint32)1 << 11),
|
|
FullscreenDesktop = (Fullscreen | ((Uint32)1 << 12)),
|
|
};
|
|
public:
|
|
/**
|
|
* @brief Default Constructor. No window is created.
|
|
*/
|
|
Window();
|
|
|
|
/**
|
|
* @brief Creates a window with the given parameters
|
|
*
|
|
* @param[in] dimension A vector containing the width and height
|
|
* @param[in] title The title of the create window
|
|
*/
|
|
Window(Vector2u dimension, const std::string& title,
|
|
Uint32 windowFlags);
|
|
|
|
Window(const Window& other) = delete;
|
|
Window(Window&& other) = delete;
|
|
|
|
virtual ~Window();
|
|
|
|
/**
|
|
* @brief Creates the window.
|
|
*
|
|
* This function creates the SDL_Window object. If
|
|
* they were already created the function does nothing and returns.
|
|
* If it fails to create either, an ObjectCreationException is thrown.
|
|
*
|
|
* @param[in] dimension A vector containing the width and height
|
|
* @param[in] title The title of the create window
|
|
*/
|
|
void Create(Vector2u dimension, const std::string& title,
|
|
Uint32 windowFlags);
|
|
|
|
/**
|
|
* @brief Destroys the window.
|
|
*/
|
|
void Close();
|
|
|
|
/**
|
|
* @brief Wether or not the window object is created
|
|
*
|
|
* @return True if the window is open, False if not
|
|
*/
|
|
bool IsOpen() const;
|
|
|
|
/**
|
|
* @brief A non-blocking event polling function
|
|
*
|
|
* @param[out] event An object to write the latest event to
|
|
* @return True if there was an event, False if there wasn't
|
|
*/
|
|
bool PollEvent(SDL_Event* event);
|
|
|
|
/**
|
|
* @brief A blocking event polling function
|
|
*
|
|
* @param[out] event An object to write the latest event to
|
|
* @return True if an event was polled
|
|
*/
|
|
bool WaitEvent(SDL_Event* event);
|
|
|
|
|
|
/**
|
|
* @brief Returns the current position of the window
|
|
*
|
|
* @return A vector with the current position relative to the top left corner of the display
|
|
*/
|
|
Vector2i GetPosition() const;
|
|
|
|
/**
|
|
* @brief Sets a new window position
|
|
*
|
|
* @param[in] position A vector with the new position
|
|
*/
|
|
void SetPosition(Vector2i position);
|
|
|
|
/**
|
|
* @brief Sets a new window position
|
|
*
|
|
* @param[in] x The new x position
|
|
* @param[in] y The new y position
|
|
*/
|
|
void SetPosition(int x, int y);
|
|
|
|
|
|
/**
|
|
* @brief Gets the current window size
|
|
*
|
|
* @return A vector with the windows size
|
|
*/
|
|
Vector2u GetSize() const;
|
|
|
|
/**
|
|
* @brief Sets a new window size
|
|
*
|
|
* @param[in] size A vector with the new size
|
|
*/
|
|
void SetSize(Vector2u size);
|
|
|
|
/**
|
|
* @brief Sets a new window size
|
|
*
|
|
* @param[in] width The new width of the window
|
|
* @param[in] height The new height of the window
|
|
*/
|
|
void SetSize(unsigned int width, unsigned int height);
|
|
|
|
|
|
/**
|
|
* @brief Gets the current window title
|
|
*
|
|
* @return The title of the widnow
|
|
*/
|
|
std::string GetTitle() const;
|
|
|
|
/**
|
|
* @brief Sets a new window title
|
|
*
|
|
* @param[in] title The new window title
|
|
*/
|
|
void SetTitle(std::string title);
|
|
|
|
/**
|
|
* @brief Returns a constant pointer to the SDL_Window
|
|
*
|
|
* @return A constant pointer to SDL_Window
|
|
*/
|
|
SDL_Window* const GetWindow() const;
|
|
|
|
/**
|
|
* @brief Set the windows visibility
|
|
*
|
|
* @param[in] visible The new visibility setting
|
|
*/
|
|
void SetVisible(bool visible);
|
|
|
|
/**
|
|
* @brief (De)activates VSync !globally!
|
|
*
|
|
* @param[in] vsync Wether to enable or disable vsync
|
|
*/
|
|
void SetVsync(bool vsync);
|
|
|
|
/**
|
|
* @brief Hides/Shows the mouse cursor inside the windos
|
|
*
|
|
* @param[in] visible The new visibility of the cursor
|
|
*/
|
|
void SetMouseCursorVisible(bool visible);
|
|
|
|
/**
|
|
* @brief Traps the mouse cursor inside the window
|
|
*
|
|
* @param[in] grabbed Wether to (un)trap the cursor
|
|
*/
|
|
void SetMouseCursorGrabbed(bool grabbed);
|
|
|
|
/**
|
|
* @brief Sets the window icon to an array of RGBA values
|
|
*
|
|
* @param[in] width Width of the icon (in px)
|
|
* @param[in] height Height of the icon (in px)
|
|
* @param[in] pixels Array of color data (RGBA as seperate 8-Bit integer values)
|
|
*/
|
|
void SetIcon(Uint32 width, Uint32 height, const Uint8* pixels);
|
|
|
|
/**
|
|
* @brief Sets the window icon to an array of RGBA values
|
|
*
|
|
* @param[in] width Width of the icon (in px)
|
|
* @param[in] height Height of the icon (in px)
|
|
* @param[in] pixels Array of color data (RGBA as one 32-Bit integer value)
|
|
*/
|
|
void SetIcon(Uint32 width, Uint32 height, const Uint32* pixels);
|
|
|
|
/**
|
|
* @brief Sets the window icon to a SDL_Surface
|
|
*
|
|
* @param[in] icon A SDL_Surface* holding the icon data
|
|
*/
|
|
void SetIcon(SDL_Surface* icon);
|
|
|
|
/**
|
|
* @brief Changes the mouse cursor
|
|
*
|
|
* @param[in] cursor A pointer to a SDL_Cursor containing cursor data
|
|
*/
|
|
void SetMouseCursor(SDL_Cursor* cursor);
|
|
|
|
/**
|
|
* @brief Changes the mouse cursor
|
|
*
|
|
* @param[in] surface A pointer to a SDL_Surface containing sprite data
|
|
* @param[in] clickspot The effective position of the cursor relative to the top left of the sprite
|
|
*/
|
|
void SetMouseCursor(SDL_Surface* surface, Vector2u clickspot);
|
|
|
|
/**
|
|
* @brief Changes the mouse cursor
|
|
*
|
|
* @param[in] pixels An array of color data (RGBA as seperate 8-bit values)
|
|
* @param[in] size Size of the cursor
|
|
* @param[in] clickspot The effective position of the cursor relative to the top left of the sprite
|
|
*/
|
|
void SetMouseCursor(const Uint8* pixels, Vector2u size, Vector2u clickspot);
|
|
|
|
/**
|
|
* @brief Changes the mouse cursor
|
|
*
|
|
* @param[in] pixels An array of color data (RGBA as one 32-bit value)
|
|
* @param[in] size Size of the cursor
|
|
* @param[in] clickspot The effective position of the cursor relative to the top left of the sprite
|
|
*/
|
|
void SetMouseCursor(const Uint32* pixels, Vector2u size, Vector2u clickspot);
|
|
|
|
protected:
|
|
SDL_Window* window;
|
|
|
|
protected:
|
|
/**
|
|
* @brief This function is called after Create() finishes
|
|
*/
|
|
virtual void OnCreate();
|
|
|
|
/**
|
|
* @brief This function is called after a SDL_WINDOWEVENT_RESIZED is polled.
|
|
* (PollEvent() must be called for this to work)
|
|
*
|
|
* @return True if the resize event should be popped from the event queue before
|
|
returning the polled event to the user
|
|
*/
|
|
virtual bool OnResize();
|
|
|
|
/**
|
|
* @brief This function is called after Close() finishes.
|
|
*/
|
|
virtual void OnClose();
|
|
};
|
|
SDLU_END |