Newer
Older
invertedlogic / invertedlogic / iLFramework / toolkit / include / Graphics.h
@John Ryland John Ryland on 10 Nov 2019 3 KB add framework
#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