#ifndef GRAPHICS_H
#define GRAPHICS_H
#include <stdint.h>
#include "Namespace.h"
BEGIN_NAMESPACE
enum CUTE_PixelFormat
{
CUTE_ARGB8888,
CUTE_ABGR8888,
CUTE_RGBA8888,
CUTE_BGRA8888,
CUTE_XRGB8888,
CUTE_XBGR8888,
CUTE_RGBX8888,
CUTE_BGRX8888,
CUTE_RGB888,
CUTE_BGR888,
CUTE_RGB565,
CUTE_XRGB1555,
CUTE_ARGB1555,
CUTE_YUV422,
CUTE_PAL8,
CUTE_PAL4,
};
struct CUTE_PaintTarget
{
uint32_t* m_pixels;
int m_strideBytes;
int m_width;
int m_height;
CUTE_PixelFormat m_format;
};
enum CUTE_LogLevel
{
CUTE_FATAL_ERROR = 0,
CUTE_CRITICAL_ERROR,
CUTE_ERROR,
CUTE_WARNING,
CUTE_DEBUG,
CUTE_VERBOSE_DEBUG
};
enum CUTE_MouseButtonFlags
{
CUTE_NO_MOUSE_BUTTONS = 0,
CUTE_LEFT_MOUSE_BUTTON = 1,
CUTE_MIDDLE_MOUSE_BUTTON = 2,
CUTE_RIGHT_MOUSE_BUTTON = 4
};
enum CUTE_GradientType
{
CUTE_RADIAL_GRADIENT,
CUTE_CONIC_GRADIENT,
CUTE_LINEAR_GRADIENT
};
struct CUTE_MouseState
{
int m_mouseX;
int m_mouseY;
int m_mouseWheelDelta;
CUTE_MouseButtonFlags m_buttons;
};
enum CUTE_KeyFlags
{
CUTE_KEY_UP = 0,
CUTE_KEY_DOWN = 1,
CUTE_KEY_REPEAT = 3
};
struct CUTE_KeyState
{
int m_keyCode;
CUTE_KeyFlags m_state;
};
struct CUTE_Gradient
{
CUTE_GradientType m_type;
uint32_t m_color1;
uint32_t m_color2; // TODO: gradient stops
int m_flags; // reflect?
union {
struct {
int m_centerX, m_centerY;
int m_distance;
} m_radial;
struct {
int m_centerX, m_centerY;
} m_conic;
struct {
int m_x1, m_y1, m_x2, m_y2;
} m_linear;
} m_data;
};
void CUTE_GetTextExtents(CUTE_PaintTarget* a_target, const char* a_fontFamily, int a_size, const char* a_utf8String, int& a_width, int& a_height);
void CUTE_DrawText(CUTE_PaintTarget* a_target, uint32_t a_color, const char* a_fontFamily, int a_size, int a_x, int a_y, const char* a_utf8String, ...);
void CUTE_LogMessage(CUTE_LogLevel a_level, const char* a_formatString, ...);
void CUTE_DrawRectangleAlpha(CUTE_PaintTarget* a_target, uint32_t a_color, int a_x, int a_y, int a_width, int a_height);
void CUTE_DrawRectangle(CUTE_PaintTarget* a_target, uint32_t a_color, int a_x, int a_y, int a_width, int a_height);
void CUTE_DrawEllipse(CUTE_PaintTarget* a_target, uint32_t a_color, int a_x, int a_y, int a_width, int a_height, bool a_smoothEdge);
void CUTE_DrawGradient(CUTE_PaintTarget* a_target, CUTE_Gradient a_gradient, int a_x, int a_y, int a_width, int a_height);
void CUTE_DrawLine(CUTE_PaintTarget* a_target, uint32_t a_color, int a_x1, int a_y1, int a_x2, int a_y2);
void CUTE_DrawPixels(CUTE_PaintTarget* a_target, uint32_t* a_bits, int a_x, int a_y, int a_width, int a_height, int a_xOffset, int a_yOffset, int a_pixelsWidth, int a_pixelsHeight);
void CUTE_DrawPixelsAlpha(CUTE_PaintTarget* a_target, uint32_t* a_bits, int a_x, int a_y, int a_width, int a_height, int a_xOffset, int a_yOffset, int a_pixelsWidth, int a_pixelsHeight);
void CUTE_DrawPixelsAlphaBlended(CUTE_PaintTarget* a_target, uint32_t* a_bits, int a_x, int a_y, int a_width, int a_height, int a_xOffset, int a_yOffset, int a_pixelsWidth, int a_pixelsHeight, int a_alpha);
void CUTE_DrawPixmapFile(CUTE_PaintTarget* a_target, const char* file, int x, int y, int x1, int y1, int x2, int y2);
//void LoadImage(const char* file, int a_w, int a_h, uint32_t*& a_pixels, bool chromaKeyed = true);
//void CUTE_DrawNumber(CUTE_PaintTarget* a_target, uint32_t col, int x, int y, int num, int width);
END_NAMESPACE
#endif // GRAPHICS_H