//
//  Window.cpp
//  Framework
//
//  Created by John Ryland on 5/10/17.
//  Copyright © 2017 John Ryland. All rights reserved.
//


#include "Window.h"
#include "../Platform/Platform.h"


Window::Window()
{
  m_platformHandle = CreateWindow();
}


Window::~Window()
{
  DestroyWindow(m_platformHandle);
}


void Window::setWindowStyle(int a_styleFlags)
{
  SetWindowStyle(m_platformHandle, a_styleFlags);
}


void Window::setGeometry(int a_x, int a_y, int a_width, int a_height)
{
  SetWindowGeometry(m_platformHandle, a_x, a_y, a_width, a_height);
}


void Window::setTitle(const char* a_title)
{
  SetWindowTitle(m_platformHandle, a_title);
}


void Window::show()
{
  ShowWindow(m_platformHandle);
}


View::View(const Window& a_parent)
{
  m_platformHandle = CreateView(a_parent.m_platformHandle);
}


View::~View()
{
  DestroyView(m_platformHandle);
}


void View::setGeometry(int a_x, int a_y, int a_width, int a_height)
{
  SetViewGeometry(m_platformHandle, a_x, a_y, a_width, a_height);
}


void View::setColor(float a_red, float a_green, float a_blue, float a_alpha)
{
  SetViewColor(m_platformHandle, a_red, a_green, a_blue, a_alpha);
}


void View::onMouseEvent(std::function<void(const MouseEvent&)> a_callback)
{
  SetViewOnMouseEvent(m_platformHandle, a_callback);
}


GLView::GLView(const Window& a_parent)
{
  m_platformHandle = CreateGLView(a_parent.m_platformHandle);
}


GLView::~GLView()
{
  DestroyGLView(m_platformHandle);
}


void GLView::setGeometry(int a_x, int a_y, int a_width, int a_height)
{
  SetGLViewGeometry(m_platformHandle, a_x, a_y, a_width, a_height);
}


void GLView::onPrepare(std::function<void()> a_callback)
{
  SetGLViewOnPrepare(m_platformHandle, a_callback);
}


void GLView::onUpdate(std::function<void()> a_callback)
{
  SetGLViewOnUpdate(m_platformHandle, a_callback);
}


void GLView::onDraw(std::function<void()> a_callback)
{
  SetGLViewOnDraw(m_platformHandle, a_callback);
}


void GLView::onClose(std::function<void()> a_callback)
{
  SetGLViewOnClose(m_platformHandle, a_callback);
}


void GLView::onResize(std::function<void(float a_width, float a_height)> a_callback)
{
  SetGLViewOnResize(m_platformHandle, a_callback);
}


void GLView::onMouseEvent(std::function<void(const MouseEvent&)> a_callback)
{
  SetGLViewOnMouseEvent(m_platformHandle, a_callback);
}


Label::Label(const Window& a_parent)
{
  m_platformHandle = CreateWindowLabel(a_parent.m_platformHandle);
}


Label::Label(const View& a_parent)
{
  m_platformHandle = CreateViewLabel(a_parent.m_platformHandle);
}


Label::~Label()
{
  DestroyLabel(m_platformHandle);
}


void Label::setGeometry(int a_x, int a_y, int a_width, int a_height)
{
  SetLabelGeometry(m_platformHandle, a_x, a_y, a_width, a_height);
}


void Label::setColor(float a_red, float a_green, float a_blue, float a_alpha)
{
  SetLabelColor(m_platformHandle, a_red, a_green, a_blue, a_alpha);
}


void Label::setText(const char* a_text)
{
  SetLabelText(m_platformHandle, a_text);
}


void Label::setFontSize(int a_size)
{
  SetLabelFontSize(m_platformHandle, a_size);
}


void Label::onMouseEvent(std::function<void(const MouseEvent&)> a_callback)
{
  SetLabelOnMouseEvent(m_platformHandle, a_callback);
}

