//
// Window.h
// Framework
//
// Created by John Ryland on 5/10/17.
// Copyright © 2017 John Ryland. All rights reserved.
//
#pragma once
#ifndef Window_h
#define Window_h
#include <functional>
enum MouseButton
{
NoButton = 0,
LeftButton = 1 << 0,
MiddleButton = 1 << 1,
RightButton = 1 << 2,
};
struct MouseEvent
{
float m_x, m_y;
int m_buttons;
};
enum WindowStyleFlags
{
NoBorder = 0,
Titlebar = 1 << 0,
Closable = 1 << 1,
Minimizable = 1 << 2,
Resizable = 1 << 3,
Utility = 1 << 4,
};
class Window
{
public:
Window();
~Window();
void setWindowStyle(int a_styleFlags);
void setGeometry(int a_x, int a_y, int a_width, int a_height);
void setTitle(const char* a_title);
void show();
private:
friend class View;
friend class GLView;
friend class Label;
void* m_platformHandle;
};
class View
{
public:
View(const Window& a_parent);
~View();
void setGeometry(int a_x, int a_y, int a_width, int a_height);
void setColor(float a_red, float a_green, float a_blue, float a_alpha);
void onMouseEvent(std::function<void(const MouseEvent&)> a_callback);
private:
friend class Label;
void* m_platformHandle;
};
class GLView
{
public:
GLView(const Window& a_parent);
~GLView();
void setGeometry(int a_x, int a_y, int a_width, int a_height);
void onPrepare(std::function<void()> a_callback);
void onUpdate(std::function<void()> a_callback);
void onDraw(std::function<void()> a_callback);
void onClose(std::function<void()> a_callback);
void onResize(std::function<void(float a_width, float a_height)> a_callback);
void onMouseEvent(std::function<void(const MouseEvent&)> a_callback);
private:
void* m_platformHandle;
};
class Label
{
public:
Label(const Window& a_parent);
Label(const View& a_parent);
~Label();
void setGeometry(int a_x, int a_y, int a_width, int a_height);
void setColor(float a_red, float a_green, float a_blue, float a_alpha);
void setText(const char* a_text);
void setFontSize(int a_size);
void onMouseEvent(std::function<void(const MouseEvent&)> a_callback);
private:
void* m_platformHandle;
};
#endif /* Window_h */