removed SDL_Rect and SDL_Point
This commit is contained in:
		@@ -968,7 +968,7 @@ static void processKeydown(Code* code, SDL_Keycode keycode)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static void processGestures(Code* code)
 | 
					static void processGestures(Code* code)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	SDL_Point point = {0, 0};
 | 
						tic_point point = {0, 0};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(getGesturePos(&point))
 | 
						if(getGesturePos(&point))
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@@ -1276,7 +1276,7 @@ static void textGoToTick(Code* code)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static void drawOutlineBar(Code* code, s32 x, s32 y)
 | 
					static void drawOutlineBar(Code* code, s32 x, s32 y)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	SDL_Rect rect = {x, y, TIC80_WIDTH - x, TIC80_HEIGHT - y};
 | 
						tic_rect rect = {x, y, TIC80_WIDTH - x, TIC80_HEIGHT - y};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(checkMousePos(&rect))
 | 
						if(checkMousePos(&rect))
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@@ -1429,7 +1429,7 @@ static void drawCodeToolbar(Code* code)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	for(s32 i = 0; i < Count; i++)
 | 
						for(s32 i = 0; i < Count; i++)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		SDL_Rect rect = {TIC80_WIDTH + (i - Count) * Size, 0, Size, Size};
 | 
							tic_rect rect = {TIC80_WIDTH + (i - Count) * Size, 0, Size, Size};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		bool over = false;
 | 
							bool over = false;
 | 
				
			||||||
		if(checkMousePos(&rect))
 | 
							if(checkMousePos(&rect))
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -47,14 +47,14 @@ struct Code
 | 
				
			|||||||
		s32 delay;
 | 
							s32 delay;
 | 
				
			||||||
	} cursor;
 | 
						} cursor;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	SDL_Rect rect;
 | 
						tic_rect rect;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	struct
 | 
						struct
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		s32 x;
 | 
							s32 x;
 | 
				
			||||||
		s32 y;
 | 
							s32 y;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		SDL_Point start;
 | 
							tic_point start;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		bool active;
 | 
							bool active;
 | 
				
			||||||
		bool gesture;
 | 
							bool gesture;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2493,7 +2493,7 @@ static void setScroll(Console* console, s32 val)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static void processGesture(Console* console)
 | 
					static void processGesture(Console* console)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	SDL_Point point = {0, 0};
 | 
						tic_point point = {0, 0};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(getGesturePos(&point))
 | 
						if(getGesturePos(&point))
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -28,7 +28,7 @@ static void drawButton(Dialog* dlg, const char* label, s32 x, s32 y, u8 color, u
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	enum {BtnWidth = 20, BtnHeight = 9};
 | 
						enum {BtnWidth = 20, BtnHeight = 9};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	SDL_Rect rect = {x, y, BtnWidth, BtnHeight};
 | 
						tic_rect rect = {x, y, BtnWidth, BtnHeight};
 | 
				
			||||||
	bool down = false;
 | 
						bool down = false;
 | 
				
			||||||
	bool over = false;
 | 
						bool over = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -121,12 +121,12 @@ static void drawDialog(Dialog* dlg)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	tic_mem* tic = dlg->tic;
 | 
						tic_mem* tic = dlg->tic;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	SDL_Rect rect = {(TIC80_WIDTH - Width)/2, (TIC80_HEIGHT - Height)/2, Width, Height};
 | 
						tic_rect rect = {(TIC80_WIDTH - Width)/2, (TIC80_HEIGHT - Height)/2, Width, Height};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rect.x -= dlg->pos.x;
 | 
						rect.x -= dlg->pos.x;
 | 
				
			||||||
	rect.y -= dlg->pos.y;
 | 
						rect.y -= dlg->pos.y;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	SDL_Rect header = {rect.x, rect.y-(TOOLBAR_SIZE-1), rect.w, TOOLBAR_SIZE};
 | 
						tic_rect header = {rect.x, rect.y-(TOOLBAR_SIZE-1), rect.w, TOOLBAR_SIZE};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(checkMousePos(&header))
 | 
						if(checkMousePos(&header))
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@@ -151,7 +151,7 @@ static void drawDialog(Dialog* dlg)
 | 
				
			|||||||
		dlg->pos.x = dlg->drag.start.x - getMouseX();
 | 
							dlg->pos.x = dlg->drag.start.x - getMouseX();
 | 
				
			||||||
		dlg->pos.y = dlg->drag.start.y - getMouseY();
 | 
							dlg->pos.y = dlg->drag.start.y - getMouseY();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		SDL_Rect rect = {0, 0, TIC80_WIDTH, TIC80_HEIGHT};
 | 
							tic_rect rect = {0, 0, TIC80_WIDTH, TIC80_HEIGHT};
 | 
				
			||||||
		if(!checkMouseDown(&rect, tic_mouse_left))
 | 
							if(!checkMouseDown(&rect, tic_mouse_left))
 | 
				
			||||||
			dlg->drag.active = false;
 | 
								dlg->drag.active = false;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -39,11 +39,11 @@ struct Dialog
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	u32 focus;
 | 
						u32 focus;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	SDL_Point pos;
 | 
						tic_point pos;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	struct
 | 
						struct
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		SDL_Point start;
 | 
							tic_point start;
 | 
				
			||||||
		bool active;
 | 
							bool active;
 | 
				
			||||||
	} drag;
 | 
						} drag;
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										68
									
								
								src/map.c
									
									
									
									
									
								
							
							
						
						
									
										68
									
								
								src/map.c
									
									
									
									
									
								
							@@ -47,14 +47,14 @@ static void normalizeMap(s32* x, s32* y)
 | 
				
			|||||||
	while(*y >= MAX_SCROLL_Y) *y -= MAX_SCROLL_Y;
 | 
						while(*y >= MAX_SCROLL_Y) *y -= MAX_SCROLL_Y;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static SDL_Point getTileOffset(Map* map)
 | 
					static tic_point getTileOffset(Map* map)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return (SDL_Point){(map->sheet.rect.w - 1)*TIC_SPRITESIZE / 2, (map->sheet.rect.h - 1)*TIC_SPRITESIZE / 2};
 | 
						return (tic_point){(map->sheet.rect.w - 1)*TIC_SPRITESIZE / 2, (map->sheet.rect.h - 1)*TIC_SPRITESIZE / 2};
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void getMouseMap(Map* map, s32* x, s32* y)
 | 
					static void getMouseMap(Map* map, s32* x, s32* y)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	SDL_Point offset = getTileOffset(map);
 | 
						tic_point offset = getTileOffset(map);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	s32 mx = getMouseX() + map->scroll.x - offset.x;
 | 
						s32 mx = getMouseX() + map->scroll.x - offset.x;
 | 
				
			||||||
	s32 my = getMouseY() + map->scroll.y - offset.y;
 | 
						s32 my = getMouseY() + map->scroll.y - offset.y;
 | 
				
			||||||
@@ -83,7 +83,7 @@ static s32 drawWorldButton(Map* map, s32 x, s32 y)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	x -= Size;
 | 
						x -= Size;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	SDL_Rect rect = {x, y, Size, ICON_SIZE};
 | 
						tic_rect rect = {x, y, Size, ICON_SIZE};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	bool over = false;
 | 
						bool over = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -121,7 +121,7 @@ static s32 drawGridButton(Map* map, s32 x, s32 y)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	x -= ICON_SIZE;
 | 
						x -= ICON_SIZE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	SDL_Rect rect = {x, y, ICON_SIZE, ICON_SIZE};
 | 
						tic_rect rect = {x, y, ICON_SIZE, ICON_SIZE};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	bool over = false;
 | 
						bool over = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -170,7 +170,7 @@ static s32 drawSheetButton(Map* map, s32 x, s32 y)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	x -= ICON_SIZE;
 | 
						x -= ICON_SIZE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	SDL_Rect rect = {x, y, ICON_SIZE, ICON_SIZE};
 | 
						tic_rect rect = {x, y, ICON_SIZE, ICON_SIZE};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	bool over = false;
 | 
						bool over = false;
 | 
				
			||||||
	if(checkMousePos(&rect))
 | 
						if(checkMousePos(&rect))
 | 
				
			||||||
@@ -195,7 +195,7 @@ static s32 drawToolButton(Map* map, s32 x, s32 y, const u8* Icon, s32 width, con
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	x -= width;
 | 
						x -= width;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	SDL_Rect rect = {x, y, width, ICON_SIZE};
 | 
						tic_rect rect = {x, y, width, ICON_SIZE};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	bool over = false;
 | 
						bool over = false;
 | 
				
			||||||
	if(checkMousePos(&rect))
 | 
						if(checkMousePos(&rect))
 | 
				
			||||||
@@ -293,7 +293,7 @@ static void drawTileIndex(Map* map, s32 x, s32 y)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	if(map->sheet.show)
 | 
						if(map->sheet.show)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		SDL_Rect rect = {TIC80_WIDTH - TIC_SPRITESHEET_SIZE - 1, TOOLBAR_SIZE, TIC_SPRITESHEET_SIZE, TIC_SPRITESHEET_SIZE};
 | 
							tic_rect rect = {TIC80_WIDTH - TIC_SPRITESHEET_SIZE - 1, TOOLBAR_SIZE, TIC_SPRITESHEET_SIZE, TIC_SPRITESHEET_SIZE};
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		if(checkMousePos(&rect))
 | 
							if(checkMousePos(&rect))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
@@ -308,7 +308,7 @@ static void drawTileIndex(Map* map, s32 x, s32 y)
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		SDL_Rect rect = {MAP_X, MAP_Y, MAP_WIDTH, MAP_HEIGHT};
 | 
							tic_rect rect = {MAP_X, MAP_Y, MAP_WIDTH, MAP_HEIGHT};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if(checkMousePos(&rect))
 | 
							if(checkMousePos(&rect))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
@@ -346,7 +346,7 @@ static void drawSheet(Map* map, s32 x, s32 y)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	if(!map->sheet.show)return;
 | 
						if(!map->sheet.show)return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	SDL_Rect rect = {x, y, TIC_SPRITESHEET_SIZE, TIC_SPRITESHEET_SIZE};
 | 
						tic_rect rect = {x, y, TIC_SPRITESHEET_SIZE, TIC_SPRITESHEET_SIZE};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	map->tic->api.rect_border(map->tic, rect.x - 1, rect.y - 1, rect.w + 2, rect.h + 2, (tic_color_white));
 | 
						map->tic->api.rect_border(map->tic, rect.x - 1, rect.y - 1, rect.w + 2, rect.h + 2, (tic_color_white));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -355,7 +355,7 @@ static void drawSheetOvr(Map* map, s32 x, s32 y)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	if(!map->sheet.show)return;
 | 
						if(!map->sheet.show)return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	SDL_Rect rect = {x, y, TIC_SPRITESHEET_SIZE, TIC_SPRITESHEET_SIZE};
 | 
						tic_rect rect = {x, y, TIC_SPRITESHEET_SIZE, TIC_SPRITESHEET_SIZE};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(checkMousePos(&rect))
 | 
						if(checkMousePos(&rect))
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@@ -376,14 +376,14 @@ static void drawSheetOvr(Map* map, s32 x, s32 y)
 | 
				
			|||||||
				s32 rr = SDL_max(mx, map->sheet.start.x);
 | 
									s32 rr = SDL_max(mx, map->sheet.start.x);
 | 
				
			||||||
				s32 rb = SDL_max(my, map->sheet.start.y);
 | 
									s32 rb = SDL_max(my, map->sheet.start.y);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				map->sheet.rect = (SDL_Rect){rl, rt, rr-rl+1, rb-rt+1};
 | 
									map->sheet.rect = (tic_rect){rl, rt, rr-rl+1, rb-rt+1};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				map->mode = MAP_DRAW_MODE;
 | 
									map->mode = MAP_DRAW_MODE;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			else
 | 
								else
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				map->sheet.drag = true;
 | 
									map->sheet.drag = true;
 | 
				
			||||||
				map->sheet.start = (SDL_Point){mx, my};
 | 
									map->sheet.start = (tic_point){mx, my};
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
@@ -447,7 +447,7 @@ static void drawTileCursor(Map* map)
 | 
				
			|||||||
	if(map->scroll.active)
 | 
						if(map->scroll.active)
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	SDL_Point offset = getTileOffset(map);
 | 
						tic_point offset = getTileOffset(map);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	s32 mx = getMouseX() + map->scroll.x - offset.x;
 | 
						s32 mx = getMouseX() + map->scroll.x - offset.x;
 | 
				
			||||||
	s32 my = getMouseY() + map->scroll.y - offset.y;
 | 
						s32 my = getMouseY() + map->scroll.y - offset.y;
 | 
				
			||||||
@@ -478,7 +478,7 @@ static void drawTileCursor(Map* map)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static void processMouseDrawMode(Map* map)
 | 
					static void processMouseDrawMode(Map* map)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	SDL_Rect rect = {MAP_X, MAP_Y, MAP_WIDTH, MAP_HEIGHT};
 | 
						tic_rect rect = {MAP_X, MAP_Y, MAP_WIDTH, MAP_HEIGHT};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	setCursor(SDL_SYSTEM_CURSOR_HAND);
 | 
						setCursor(SDL_SYSTEM_CURSOR_HAND);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -500,7 +500,7 @@ static void processMouseDrawMode(Map* map)
 | 
				
			|||||||
		else
 | 
							else
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			map->canvas.draw	= true;
 | 
								map->canvas.draw	= true;
 | 
				
			||||||
			map->canvas.start = (SDL_Point){tx, ty};
 | 
								map->canvas.start = (tic_point){tx, ty};
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
@@ -514,13 +514,13 @@ static void processMouseDrawMode(Map* map)
 | 
				
			|||||||
		getMouseMap(map, &tx, &ty);
 | 
							getMouseMap(map, &tx, &ty);
 | 
				
			||||||
		s32 index = map->tic->api.map_get(map->tic, map->src, tx, ty);
 | 
							s32 index = map->tic->api.map_get(map->tic, map->src, tx, ty);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		map->sheet.rect = (SDL_Rect){index % SHEET_COLS, index / SHEET_COLS, 1, 1};
 | 
							map->sheet.rect = (tic_rect){index % SHEET_COLS, index / SHEET_COLS, 1, 1};
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void processScrolling(Map* map, bool pressed)
 | 
					static void processScrolling(Map* map, bool pressed)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	SDL_Rect rect = {MAP_X, MAP_Y, MAP_WIDTH, MAP_HEIGHT};
 | 
						tic_rect rect = {MAP_X, MAP_Y, MAP_WIDTH, MAP_HEIGHT};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(map->scroll.active)
 | 
						if(map->scroll.active)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@@ -549,7 +549,7 @@ static void processScrolling(Map* map, bool pressed)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static void processMouseDragMode(Map* map)
 | 
					static void processMouseDragMode(Map* map)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	SDL_Rect rect = {MAP_X, MAP_Y, MAP_WIDTH, MAP_HEIGHT};
 | 
						tic_rect rect = {MAP_X, MAP_Y, MAP_WIDTH, MAP_HEIGHT};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	processScrolling(map, checkMouseDown(&rect, tic_mouse_left) || 
 | 
						processScrolling(map, checkMouseDown(&rect, tic_mouse_left) || 
 | 
				
			||||||
		checkMouseDown(&rect, tic_mouse_right));
 | 
							checkMouseDown(&rect, tic_mouse_right));
 | 
				
			||||||
@@ -557,7 +557,7 @@ static void processMouseDragMode(Map* map)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static void resetSelection(Map* map)
 | 
					static void resetSelection(Map* map)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	map->select.rect = (SDL_Rect){0,0,0,0};
 | 
						map->select.rect = (tic_rect){0,0,0,0};
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void drawSelectionRect(Map* map, s32 x, s32 y, s32 w, s32 h)
 | 
					static void drawSelectionRect(Map* map, s32 x, s32 y, s32 w, s32 h)
 | 
				
			||||||
@@ -582,7 +582,7 @@ static void drawPasteData(Map* map)
 | 
				
			|||||||
	s32 mx = getMouseX() + map->scroll.x - (w - 1)*TIC_SPRITESIZE / 2;
 | 
						s32 mx = getMouseX() + map->scroll.x - (w - 1)*TIC_SPRITESIZE / 2;
 | 
				
			||||||
	s32 my = getMouseY() + map->scroll.y - (h - 1)*TIC_SPRITESIZE / 2;
 | 
						s32 my = getMouseY() + map->scroll.y - (h - 1)*TIC_SPRITESIZE / 2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	SDL_Rect rect = {MAP_X, MAP_Y, MAP_WIDTH, MAP_HEIGHT};
 | 
						tic_rect rect = {MAP_X, MAP_Y, MAP_WIDTH, MAP_HEIGHT};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(checkMouseClick(&rect, tic_mouse_left))
 | 
						if(checkMouseClick(&rect, tic_mouse_left))
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@@ -626,7 +626,7 @@ static void normalizeMapRect(s32* x, s32* y)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static void processMouseSelectMode(Map* map)
 | 
					static void processMouseSelectMode(Map* map)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	SDL_Rect rect = {MAP_X, MAP_Y, MAP_WIDTH, MAP_HEIGHT};
 | 
						tic_rect rect = {MAP_X, MAP_Y, MAP_WIDTH, MAP_HEIGHT};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(checkMousePos(&rect))
 | 
						if(checkMousePos(&rect))
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@@ -651,13 +651,13 @@ static void processMouseSelectMode(Map* map)
 | 
				
			|||||||
					s32 rr = SDL_max(mx, map->select.start.x);
 | 
										s32 rr = SDL_max(mx, map->select.start.x);
 | 
				
			||||||
					s32 rb = SDL_max(my, map->select.start.y);
 | 
										s32 rb = SDL_max(my, map->select.start.y);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					map->select.rect = (SDL_Rect){rl, rt, rr - rl + 1, rb - rt + 1};
 | 
										map->select.rect = (tic_rect){rl, rt, rr - rl + 1, rb - rt + 1};
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				else
 | 
									else
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					map->select.drag = true;
 | 
										map->select.drag = true;
 | 
				
			||||||
					map->select.start = (SDL_Point){mx, my};
 | 
										map->select.start = (tic_point){mx, my};
 | 
				
			||||||
					map->select.rect = (SDL_Rect){map->select.start.x, map->select.start.y, 1, 1};
 | 
										map->select.rect = (tic_rect){map->select.start.x, map->select.start.y, 1, 1};
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			else if(map->select.drag)
 | 
								else if(map->select.drag)
 | 
				
			||||||
@@ -673,8 +673,8 @@ static void processMouseSelectMode(Map* map)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
typedef struct
 | 
					typedef struct
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	SDL_Point* data;
 | 
						tic_point* data;
 | 
				
			||||||
	SDL_Point* head;
 | 
						tic_point* head;
 | 
				
			||||||
} FillStack;
 | 
					} FillStack;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static bool push(FillStack* stack, s32 x, s32 y)
 | 
					static bool push(FillStack* stack, s32 x, s32 y)
 | 
				
			||||||
@@ -732,7 +732,7 @@ static void fillMap(Map* map, s32 x, s32 y, u8 tile)
 | 
				
			|||||||
	static FillStack stack = {NULL, NULL};
 | 
						static FillStack stack = {NULL, NULL};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(!stack.data)
 | 
						if(!stack.data)
 | 
				
			||||||
		stack.data = (SDL_Point*)SDL_malloc(FILL_STACK_SIZE * sizeof(SDL_Point));
 | 
							stack.data = (tic_point*)SDL_malloc(FILL_STACK_SIZE * sizeof(tic_point));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	stack.head = NULL;
 | 
						stack.head = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -790,7 +790,7 @@ static void fillMap(Map* map, s32 x, s32 y, u8 tile)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static void processMouseFillMode(Map* map)
 | 
					static void processMouseFillMode(Map* map)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	SDL_Rect rect = {MAP_X, MAP_Y, MAP_WIDTH, MAP_HEIGHT};
 | 
						tic_rect rect = {MAP_X, MAP_Y, MAP_WIDTH, MAP_HEIGHT};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	setCursor(SDL_SYSTEM_CURSOR_HAND);
 | 
						setCursor(SDL_SYSTEM_CURSOR_HAND);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -808,7 +808,7 @@ static void processMouseFillMode(Map* map)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static void drawSelection(Map* map)
 | 
					static void drawSelection(Map* map)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	SDL_Rect* sel = &map->select.rect;
 | 
						tic_rect* sel = &map->select.rect;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(sel->w > 0 && sel->h > 0)
 | 
						if(sel->w > 0 && sel->h > 0)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@@ -859,7 +859,7 @@ static void drawGrid(Map* map)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static void drawMapOvr(Map* map)
 | 
					static void drawMapOvr(Map* map)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	SDL_Rect rect = {MAP_X, MAP_Y, MAP_WIDTH, MAP_HEIGHT};
 | 
						tic_rect rect = {MAP_X, MAP_Y, MAP_WIDTH, MAP_HEIGHT};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	s32 scrollX = map->scroll.x % TIC_SPRITESIZE;
 | 
						s32 scrollX = map->scroll.x % TIC_SPRITESIZE;
 | 
				
			||||||
	s32 scrollY = map->scroll.y % TIC_SPRITESIZE;
 | 
						s32 scrollY = map->scroll.y % TIC_SPRITESIZE;
 | 
				
			||||||
@@ -933,7 +933,7 @@ static void redo(Map* map)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static void copySelectionToClipboard(Map* map)
 | 
					static void copySelectionToClipboard(Map* map)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	SDL_Rect* sel = &map->select.rect;
 | 
						tic_rect* sel = &map->select.rect;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(sel->w > 0 && sel->h > 0)
 | 
						if(sel->w > 0 && sel->h > 0)
 | 
				
			||||||
	{	
 | 
						{	
 | 
				
			||||||
@@ -971,7 +971,7 @@ static void copyToClipboard(Map* map)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static void deleteSelection(Map* map)
 | 
					static void deleteSelection(Map* map)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	SDL_Rect* sel = &map->select.rect;
 | 
						tic_rect* sel = &map->select.rect;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(sel->w > 0 && sel->h > 0)
 | 
						if(sel->w > 0 && sel->h > 0)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@@ -1079,7 +1079,7 @@ static void processKeyup(Map* map, SDL_Keycode keycode)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static void processGesture(Map* map)
 | 
					static void processGesture(Map* map)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	SDL_Point point = {0, 0};
 | 
						tic_point point = {0, 0};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(getGesturePos(&point))
 | 
						if(getGesturePos(&point))
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										12
									
								
								src/map.h
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								src/map.h
									
									
									
									
									
								
							@@ -46,14 +46,14 @@ struct Map
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		bool grid;
 | 
							bool grid;
 | 
				
			||||||
		bool draw;
 | 
							bool draw;
 | 
				
			||||||
		SDL_Point start;
 | 
							tic_point start;
 | 
				
			||||||
	} canvas;
 | 
						} canvas;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	struct
 | 
						struct
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		bool show;
 | 
							bool show;
 | 
				
			||||||
		SDL_Rect rect;
 | 
							tic_rect rect;
 | 
				
			||||||
		SDL_Point start;
 | 
							tic_point start;
 | 
				
			||||||
		bool drag;
 | 
							bool drag;
 | 
				
			||||||
	} sheet;
 | 
						} sheet;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -62,7 +62,7 @@ struct Map
 | 
				
			|||||||
		s32 x;
 | 
							s32 x;
 | 
				
			||||||
		s32 y;
 | 
							s32 y;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		SDL_Point start;
 | 
							tic_point start;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		bool active;
 | 
							bool active;
 | 
				
			||||||
		bool gesture;
 | 
							bool gesture;
 | 
				
			||||||
@@ -71,8 +71,8 @@ struct Map
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	struct
 | 
						struct
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		SDL_Rect rect;
 | 
							tic_rect rect;
 | 
				
			||||||
		SDL_Point start;
 | 
							tic_point start;
 | 
				
			||||||
		bool drag;
 | 
							bool drag;
 | 
				
			||||||
	} select;
 | 
						} select;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										22
									
								
								src/menu.c
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								src/menu.c
									
									
									
									
									
								
							@@ -63,9 +63,9 @@ static void exitToTIC(Menu* menu)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static void(*const MenuHandlers[])(Menu*) = {resumeGame, resetGame, gamepadConfig, NULL, exitToTIC};
 | 
					static void(*const MenuHandlers[])(Menu*) = {resumeGame, resetGame, gamepadConfig, NULL, exitToTIC};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static SDL_Rect getRect(Menu* menu)
 | 
					static tic_rect getRect(Menu* menu)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	SDL_Rect rect = {(TIC80_WIDTH - DIALOG_WIDTH)/2, (TIC80_HEIGHT - DIALOG_HEIGHT)/2, DIALOG_WIDTH, DIALOG_HEIGHT};
 | 
						tic_rect rect = {(TIC80_WIDTH - DIALOG_WIDTH)/2, (TIC80_HEIGHT - DIALOG_HEIGHT)/2, DIALOG_WIDTH, DIALOG_HEIGHT};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rect.x -= menu->pos.x;
 | 
						rect.x -= menu->pos.x;
 | 
				
			||||||
	rect.y -= menu->pos.y;
 | 
						rect.y -= menu->pos.y;
 | 
				
			||||||
@@ -74,11 +74,11 @@ static SDL_Rect getRect(Menu* menu)
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
static void drawDialog(Menu* menu)
 | 
					static void drawDialog(Menu* menu)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	SDL_Rect rect = getRect(menu);
 | 
						tic_rect rect = getRect(menu);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	tic_mem* tic = menu->tic;
 | 
						tic_mem* tic = menu->tic;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	SDL_Rect header = {rect.x, rect.y-(TOOLBAR_SIZE-1), rect.w, TOOLBAR_SIZE};
 | 
						tic_rect header = {rect.x, rect.y-(TOOLBAR_SIZE-1), rect.w, TOOLBAR_SIZE};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(checkMousePos(&header))
 | 
						if(checkMousePos(&header))
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@@ -103,7 +103,7 @@ static void drawDialog(Menu* menu)
 | 
				
			|||||||
		menu->pos.x = menu->drag.start.x - getMouseX();
 | 
							menu->pos.x = menu->drag.start.x - getMouseX();
 | 
				
			||||||
		menu->pos.y = menu->drag.start.y - getMouseY();
 | 
							menu->pos.y = menu->drag.start.y - getMouseY();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		SDL_Rect rect = {0, 0, TIC80_WIDTH, TIC80_HEIGHT};
 | 
							tic_rect rect = {0, 0, TIC80_WIDTH, TIC80_HEIGHT};
 | 
				
			||||||
		if(!checkMouseDown(&rect, tic_mouse_left))
 | 
							if(!checkMouseDown(&rect, tic_mouse_left))
 | 
				
			||||||
			menu->drag.active = false;
 | 
								menu->drag.active = false;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -133,7 +133,7 @@ static void drawTabDisabled(Menu* menu, s32 x, s32 y, s32 id)
 | 
				
			|||||||
	enum{Width = 15, Height = 7};
 | 
						enum{Width = 15, Height = 7};
 | 
				
			||||||
	tic_mem* tic = menu->tic;
 | 
						tic_mem* tic = menu->tic;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	SDL_Rect rect = {x, y, Width, Height};
 | 
						tic_rect rect = {x, y, Width, Height};
 | 
				
			||||||
	bool over = false;
 | 
						bool over = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(menu->gamepad.tab != id && checkMousePos(&rect))
 | 
						if(menu->gamepad.tab != id && checkMousePos(&rect))
 | 
				
			||||||
@@ -189,7 +189,7 @@ static void drawPlayerButtons(Menu* menu, s32 x, s32 y)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	for(s32 i = 0; i < Buttons; i++)
 | 
						for(s32 i = 0; i < Buttons; i++)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		SDL_Rect rect = {x + i / Rows * (Width+2), y + (i%Rows)*(Height+1), Width, TIC_SPRITESIZE};
 | 
							tic_rect rect = {x + i / Rows * (Width+2), y + (i%Rows)*(Height+1), Width, TIC_SPRITESIZE};
 | 
				
			||||||
		bool over = false;
 | 
							bool over = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		s32 index = i+menu->gamepad.tab * Buttons;
 | 
							s32 index = i+menu->gamepad.tab * Buttons;
 | 
				
			||||||
@@ -246,11 +246,11 @@ static void drawGamepadMenu(Menu* menu)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	tic_mem* tic = menu->tic;
 | 
						tic_mem* tic = menu->tic;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	SDL_Rect dlgRect = getRect(menu);
 | 
						tic_rect dlgRect = getRect(menu);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	static const char Label[] = "BACK";
 | 
						static const char Label[] = "BACK";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	SDL_Rect rect = {dlgRect.x + 25, dlgRect.y + 49, (sizeof(Label)-1)*TIC_FONT_WIDTH, TIC_FONT_HEIGHT};
 | 
						tic_rect rect = {dlgRect.x + 25, dlgRect.y + 49, (sizeof(Label)-1)*TIC_FONT_WIDTH, TIC_FONT_HEIGHT};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	bool over = false;
 | 
						bool over = false;
 | 
				
			||||||
	bool down = false;
 | 
						bool down = false;
 | 
				
			||||||
@@ -311,14 +311,14 @@ static void drawMainMenu(Menu* menu)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	drawDialog(menu);
 | 
						drawDialog(menu);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	SDL_Rect rect = getRect(menu);
 | 
						tic_rect rect = getRect(menu);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		for(s32 i = 0; i < COUNT_OF(Rows); i++)
 | 
							for(s32 i = 0; i < COUNT_OF(Rows); i++)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			if(!*Rows[i])continue;
 | 
								if(!*Rows[i])continue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			SDL_Rect label = {rect.x + 22, rect.y + (TIC_FONT_HEIGHT+1)*i + 16, 86, TIC_FONT_HEIGHT+1};
 | 
								tic_rect label = {rect.x + 22, rect.y + (TIC_FONT_HEIGHT+1)*i + 16, 86, TIC_FONT_HEIGHT+1};
 | 
				
			||||||
			bool over = false;
 | 
								bool over = false;
 | 
				
			||||||
			bool down = false;
 | 
								bool down = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -46,11 +46,11 @@ struct Menu
 | 
				
			|||||||
		s32 selected;
 | 
							s32 selected;
 | 
				
			||||||
	} gamepad;
 | 
						} gamepad;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	SDL_Point pos;
 | 
						tic_point pos;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	struct
 | 
						struct
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		SDL_Point start;
 | 
							tic_point start;
 | 
				
			||||||
		bool active;
 | 
							bool active;
 | 
				
			||||||
	} drag;
 | 
						} drag;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										42
									
								
								src/music.c
									
									
									
									
									
								
							
							
						
						
									
										42
									
								
								src/music.c
									
									
									
									
									
								
							@@ -91,7 +91,7 @@ static void drawEditbox(Music* music, s32 x, s32 y, s32 value, void(*set)(Music*
 | 
				
			|||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		SDL_Rect rect = { x, y, TIC_FONT_WIDTH, TIC_FONT_HEIGHT };
 | 
							tic_rect rect = { x, y, TIC_FONT_WIDTH, TIC_FONT_HEIGHT };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		bool over = false;
 | 
							bool over = false;
 | 
				
			||||||
		bool down = false;
 | 
							bool down = false;
 | 
				
			||||||
@@ -113,7 +113,7 @@ static void drawEditbox(Music* music, s32 x, s32 y, s32 value, void(*set)(Music*
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		x += TIC_FONT_WIDTH;
 | 
							x += TIC_FONT_WIDTH;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		SDL_Rect rect = { x-1, y-1, TIC_FONT_WIDTH*2+1, TIC_FONT_HEIGHT+1 };
 | 
							tic_rect rect = { x-1, y-1, TIC_FONT_WIDTH*2+1, TIC_FONT_HEIGHT+1 };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (checkMousePos(&rect))
 | 
							if (checkMousePos(&rect))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
@@ -145,7 +145,7 @@ static void drawEditbox(Music* music, s32 x, s32 y, s32 value, void(*set)(Music*
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		x += 2*TIC_FONT_WIDTH;
 | 
							x += 2*TIC_FONT_WIDTH;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		SDL_Rect rect = { x, y, TIC_FONT_WIDTH, TIC_FONT_HEIGHT };
 | 
							tic_rect rect = { x, y, TIC_FONT_WIDTH, TIC_FONT_HEIGHT };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		bool over = false;
 | 
							bool over = false;
 | 
				
			||||||
		bool down = false;
 | 
							bool down = false;
 | 
				
			||||||
@@ -197,7 +197,7 @@ static void drawSwitch(Music* music, s32 x, s32 y, const char* label, s32 value,
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		x += (s32)strlen(label)*TIC_FONT_WIDTH;
 | 
							x += (s32)strlen(label)*TIC_FONT_WIDTH;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		SDL_Rect rect = { x, y, TIC_FONT_WIDTH, TIC_FONT_HEIGHT };
 | 
							tic_rect rect = { x, y, TIC_FONT_WIDTH, TIC_FONT_HEIGHT };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		bool over = false;
 | 
							bool over = false;
 | 
				
			||||||
		bool down = false;
 | 
							bool down = false;
 | 
				
			||||||
@@ -227,7 +227,7 @@ static void drawSwitch(Music* music, s32 x, s32 y, const char* label, s32 value,
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		x += (value > 99 ? 3 : 2)*TIC_FONT_WIDTH;
 | 
							x += (value > 99 ? 3 : 2)*TIC_FONT_WIDTH;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		SDL_Rect rect = { x, y, TIC_FONT_WIDTH, TIC_FONT_HEIGHT };
 | 
							tic_rect rect = { x, y, TIC_FONT_WIDTH, TIC_FONT_HEIGHT };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		bool over = false;
 | 
							bool over = false;
 | 
				
			||||||
		bool down = false;
 | 
							bool down = false;
 | 
				
			||||||
@@ -546,8 +546,8 @@ static void stopTrack(Music* music)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static void resetSelection(Music* music)
 | 
					static void resetSelection(Music* music)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	music->tracker.select.start = (SDL_Point){-1, -1};
 | 
						music->tracker.select.start = (tic_point){-1, -1};
 | 
				
			||||||
	music->tracker.select.rect = (SDL_Rect){0, 0, 0, 0};
 | 
						music->tracker.select.rect = (tic_rect){0, 0, 0, 0};
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void deleteSelection(Music* music)
 | 
					static void deleteSelection(Music* music)
 | 
				
			||||||
@@ -556,7 +556,7 @@ static void deleteSelection(Music* music)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	if(pattern)
 | 
						if(pattern)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		SDL_Rect rect = music->tracker.select.rect;
 | 
							tic_rect rect = music->tracker.select.rect;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if(rect.h <= 0)
 | 
							if(rect.h <= 0)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
@@ -580,7 +580,7 @@ static void copyToClipboard(Music* music, bool cut)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	if(pattern)
 | 
						if(pattern)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		SDL_Rect rect = music->tracker.select.rect;
 | 
							tic_rect rect = music->tracker.select.rect;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if(rect.h <= 0)
 | 
							if(rect.h <= 0)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
@@ -731,8 +731,8 @@ static void updateSelection(Music* music)
 | 
				
			|||||||
	s32 rr = SDL_max(music->tracker.col, music->tracker.select.start.x);
 | 
						s32 rr = SDL_max(music->tracker.col, music->tracker.select.start.x);
 | 
				
			||||||
	s32 rb = SDL_max(music->tracker.row, music->tracker.select.start.y);
 | 
						s32 rb = SDL_max(music->tracker.row, music->tracker.select.start.y);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	SDL_Rect* rect = &music->tracker.select.rect;
 | 
						tic_rect* rect = &music->tracker.select.rect;
 | 
				
			||||||
	*rect = (SDL_Rect){rl, rt, rr - rl + 1, rb - rt + 1};
 | 
						*rect = (tic_rect){rl, rt, rr - rl + 1, rb - rt + 1};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(rect->x % CHANNEL_COLS + rect->w > CHANNEL_COLS)
 | 
						if(rect->x % CHANNEL_COLS + rect->w > CHANNEL_COLS)
 | 
				
			||||||
		resetSelection(music);
 | 
							resetSelection(music);
 | 
				
			||||||
@@ -996,7 +996,7 @@ static void selectAll(Music* music)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	s32 col = music->tracker.col - music->tracker.col % CHANNEL_COLS;
 | 
						s32 col = music->tracker.col - music->tracker.col % CHANNEL_COLS;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	music->tracker.select.start = (SDL_Point){col, 0};
 | 
						music->tracker.select.start = (tic_point){col, 0};
 | 
				
			||||||
	music->tracker.col = col + CHANNEL_COLS-1;
 | 
						music->tracker.col = col + CHANNEL_COLS-1;
 | 
				
			||||||
	music->tracker.row = MUSIC_PATTERN_ROWS-1;
 | 
						music->tracker.row = MUSIC_PATTERN_ROWS-1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1134,7 +1134,7 @@ static void drawTrackerFrames(Music* music, s32 x, s32 y)
 | 
				
			|||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		SDL_Rect rect = { x - Border, y - Border, Width, MUSIC_FRAMES * TIC_FONT_HEIGHT + Border };
 | 
							tic_rect rect = { x - Border, y - Border, Width, MUSIC_FRAMES * TIC_FONT_HEIGHT + Border };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (checkMousePos(&rect))
 | 
							if (checkMousePos(&rect))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
@@ -1216,7 +1216,7 @@ static void drawTrackerChannel(Music* music, s32 x, s32 y, s32 channel)
 | 
				
			|||||||
		Width = TIC_FONT_WIDTH * 8 + Border,
 | 
							Width = TIC_FONT_WIDTH * 8 + Border,
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	SDL_Rect rect = {x - Border, y - Border, Width, Rows*TIC_FONT_HEIGHT + Border};
 | 
						tic_rect rect = {x - Border, y - Border, Width, Rows*TIC_FONT_HEIGHT + Border};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(checkMousePos(&rect))
 | 
						if(checkMousePos(&rect))
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@@ -1237,7 +1237,7 @@ static void drawTrackerChannel(Music* music, s32 x, s32 y, s32 channel)
 | 
				
			|||||||
			else
 | 
								else
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				resetSelection(music);
 | 
									resetSelection(music);
 | 
				
			||||||
				music->tracker.select.start = (SDL_Point){col, row};
 | 
									music->tracker.select.start = (tic_point){col, row};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				music->tracker.select.drag = true;
 | 
									music->tracker.select.drag = true;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@@ -1246,7 +1246,7 @@ static void drawTrackerChannel(Music* music, s32 x, s32 y, s32 channel)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	if(music->tracker.select.drag)
 | 
						if(music->tracker.select.drag)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		SDL_Rect rect = {0, 0, TIC80_WIDTH, TIC80_HEIGHT};
 | 
							tic_rect rect = {0, 0, TIC80_WIDTH, TIC80_HEIGHT};
 | 
				
			||||||
		if(!checkMouseDown(&rect, tic_mouse_left))
 | 
							if(!checkMouseDown(&rect, tic_mouse_left))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			music->tracker.select.drag = false;
 | 
								music->tracker.select.drag = false;
 | 
				
			||||||
@@ -1274,7 +1274,7 @@ static void drawTrackerChannel(Music* music, s32 x, s32 y, s32 channel)
 | 
				
			|||||||
		// draw selection
 | 
							// draw selection
 | 
				
			||||||
		if (selectedChannel)
 | 
							if (selectedChannel)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			SDL_Rect rect = music->tracker.select.rect;
 | 
								tic_rect rect = music->tracker.select.rect;
 | 
				
			||||||
			if (rect.h > 1 && i >= rect.y && i < rect.y + rect.h)
 | 
								if (rect.h > 1 && i >= rect.y && i < rect.y + rect.h)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				s32 sx = x - 1;
 | 
									s32 sx = x - 1;
 | 
				
			||||||
@@ -1346,7 +1346,7 @@ static void drawTumbler(Music* music, s32 x, s32 y, s32 index)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	enum{On=36, Off = 52, Size=5, Chroma=14};
 | 
						enum{On=36, Off = 52, Size=5, Chroma=14};
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	SDL_Rect rect = {x, y, Size, Size};
 | 
						tic_rect rect = {x, y, Size, Size};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(checkMousePos(&rect))
 | 
						if(checkMousePos(&rect))
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@@ -1438,7 +1438,7 @@ static void drawPlayButtons(Music* music)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	for (s32 i = 0; i < Count; i++)
 | 
						for (s32 i = 0; i < Count; i++)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		SDL_Rect rect = { Offset + Width * i, 0, Width, Height };
 | 
							tic_rect rect = { Offset + Width * i, 0, Width, Height };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		bool over = false;
 | 
							bool over = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1490,7 +1490,7 @@ static void drawModeTabs(Music* music)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	for (s32 i = 0; i < Count; i++)
 | 
						for (s32 i = 0; i < Count; i++)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		SDL_Rect rect = { TIC80_WIDTH - Width * (Count - i), 0, Width, Height };
 | 
							tic_rect rect = { TIC80_WIDTH - Width * (Count - i), 0, Width, Height };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		static const s32 Tabs[] = { MUSIC_PIANO_TAB, MUSIC_TRACKER_TAB };
 | 
							static const s32 Tabs[] = { MUSIC_PIANO_TAB, MUSIC_TRACKER_TAB };
 | 
				
			||||||
@@ -1544,7 +1544,7 @@ static void scrollNotes(Music* music, s32 delta)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	if(pattern)
 | 
						if(pattern)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		SDL_Rect rect = music->tracker.select.rect;
 | 
							tic_rect rect = music->tracker.select.rect;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if(rect.h <= 0)
 | 
							if(rect.h <= 0)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -54,8 +54,8 @@ struct Music
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		struct
 | 
							struct
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			SDL_Point start;
 | 
								tic_point start;
 | 
				
			||||||
			SDL_Rect rect;
 | 
								tic_rect rect;
 | 
				
			||||||
			bool drag;
 | 
								bool drag;
 | 
				
			||||||
		} select;
 | 
							} select;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										40
									
								
								src/sfx.c
									
									
									
									
									
								
							
							
						
						
									
										40
									
								
								src/sfx.c
									
									
									
									
									
								
							@@ -68,7 +68,7 @@ static void drawSwitch(Sfx* sfx, s32 x, s32 y, const char* label, s32 value, voi
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		x += (s32)strlen(label)*TIC_FONT_WIDTH;
 | 
							x += (s32)strlen(label)*TIC_FONT_WIDTH;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		SDL_Rect rect = {x, y, TIC_FONT_WIDTH, TIC_FONT_HEIGHT};
 | 
							tic_rect rect = {x, y, TIC_FONT_WIDTH, TIC_FONT_HEIGHT};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if(checkMousePos(&rect))
 | 
							if(checkMousePos(&rect))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
@@ -90,7 +90,7 @@ static void drawSwitch(Sfx* sfx, s32 x, s32 y, const char* label, s32 value, voi
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		x += 2*TIC_FONT_WIDTH;
 | 
							x += 2*TIC_FONT_WIDTH;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		SDL_Rect rect = {x, y, TIC_FONT_WIDTH, TIC_FONT_HEIGHT};
 | 
							tic_rect rect = {x, y, TIC_FONT_WIDTH, TIC_FONT_HEIGHT};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if(checkMousePos(&rect))
 | 
							if(checkMousePos(&rect))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
@@ -207,7 +207,7 @@ static void drawWaveButtons(Sfx* sfx, s32 x, s32 y)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	for(s32 i = 0; i < Count; i++)
 | 
						for(s32 i = 0; i < Count; i++)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		SDL_Rect rect = {x, y + (Count - i - 1)*(Height+Gap), Width, Height};
 | 
							tic_rect rect = {x, y + (Count - i - 1)*(Height+Gap), Width, Height};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		bool over = false;
 | 
							bool over = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -238,7 +238,7 @@ static void drawWaveButtons(Sfx* sfx, s32 x, s32 y)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			enum{Size = 5};
 | 
								enum{Size = 5};
 | 
				
			||||||
			SDL_Rect iconRect = {x+Width+HGap, y + (Count - i - 1)*(Height+Gap), Size, Size};
 | 
								tic_rect iconRect = {x+Width+HGap, y + (Count - i - 1)*(Height+Gap), Size, Size};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			bool over = false;
 | 
								bool over = false;
 | 
				
			||||||
			if(checkMousePos(&iconRect))
 | 
								if(checkMousePos(&iconRect))
 | 
				
			||||||
@@ -295,7 +295,7 @@ static void drawCanvasTabs(Sfx* sfx, s32 x, s32 y)
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		s32 size = sfx->tic->api.text(sfx->tic, Labels[i], 0, -TIC_FONT_HEIGHT, (tic_color_black));
 | 
							s32 size = sfx->tic->api.text(sfx->tic, Labels[i], 0, -TIC_FONT_HEIGHT, (tic_color_black));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		SDL_Rect rect = {x - size, sy, size, TIC_FONT_HEIGHT};
 | 
							tic_rect rect = {x - size, sy, size, TIC_FONT_HEIGHT};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if(checkMousePos(&rect))
 | 
							if(checkMousePos(&rect))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
@@ -318,7 +318,7 @@ static void drawCanvasTabs(Sfx* sfx, s32 x, s32 y)
 | 
				
			|||||||
		{
 | 
							{
 | 
				
			||||||
			static const char Label[] = "x16";
 | 
								static const char Label[] = "x16";
 | 
				
			||||||
			enum{Width = (sizeof Label - 1) * TIC_FONT_WIDTH};
 | 
								enum{Width = (sizeof Label - 1) * TIC_FONT_WIDTH};
 | 
				
			||||||
			SDL_Rect rect = {(x - Width)/2, y + Height * 6, Width, TIC_FONT_HEIGHT};
 | 
								tic_rect rect = {(x - Width)/2, y + Height * 6, Width, TIC_FONT_HEIGHT};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if(checkMousePos(&rect))
 | 
								if(checkMousePos(&rect))
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
@@ -335,7 +335,7 @@ static void drawCanvasTabs(Sfx* sfx, s32 x, s32 y)
 | 
				
			|||||||
		{
 | 
							{
 | 
				
			||||||
			static const char Label[] = "DOWN";
 | 
								static const char Label[] = "DOWN";
 | 
				
			||||||
			enum{Width = (sizeof Label - 1) * TIC_FONT_WIDTH};
 | 
								enum{Width = (sizeof Label - 1) * TIC_FONT_WIDTH};
 | 
				
			||||||
			SDL_Rect rect = {(x - Width)/2, y + Height * 6, Width, TIC_FONT_HEIGHT};
 | 
								tic_rect rect = {(x - Width)/2, y + Height * 6, Width, TIC_FONT_HEIGHT};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if(checkMousePos(&rect))
 | 
								if(checkMousePos(&rect))
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
@@ -370,7 +370,7 @@ static void drawCanvas(Sfx* sfx, s32 x, s32 y)
 | 
				
			|||||||
			sfx->tic->api.rect(sfx->tic, x + tickIndex * CANVAS_SIZE, y, CANVAS_SIZE + 1, CANVAS_HEIGHT + 1, (tic_color_white));
 | 
								sfx->tic->api.rect(sfx->tic, x + tickIndex * CANVAS_SIZE, y, CANVAS_SIZE + 1, CANVAS_HEIGHT + 1, (tic_color_white));
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	SDL_Rect rect = {x, y, CANVAS_WIDTH, CANVAS_HEIGHT};
 | 
						tic_rect rect = {x, y, CANVAS_WIDTH, CANVAS_HEIGHT};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	tic_sample* effect = getEffect(sfx);
 | 
						tic_sample* effect = getEffect(sfx);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -451,16 +451,16 @@ static void drawPiano(Sfx* sfx, s32 x, s32 y)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	static const s32 ButtonIndixes[] = {0, 2, 4, 5, 7, 9, 11, 1, 3, -1, 6, 8, 10};
 | 
						static const s32 ButtonIndixes[] = {0, 2, 4, 5, 7, 9, 11, 1, 3, -1, 6, 8, 10};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	SDL_Rect buttons[COUNT_OF(ButtonIndixes)];
 | 
						tic_rect buttons[COUNT_OF(ButtonIndixes)];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for(s32 i = 0; i < COUNT_OF(buttons); i++)
 | 
						for(s32 i = 0; i < COUNT_OF(buttons); i++)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		buttons[i] = i < PIANO_WHITE_BUTTONS 
 | 
							buttons[i] = i < PIANO_WHITE_BUTTONS 
 | 
				
			||||||
			? (SDL_Rect){x + (PIANO_BUTTON_WIDTH+1)*i, y, PIANO_BUTTON_WIDTH + 1, PIANO_BUTTON_HEIGHT}
 | 
								? (tic_rect){x + (PIANO_BUTTON_WIDTH+1)*i, y, PIANO_BUTTON_WIDTH + 1, PIANO_BUTTON_HEIGHT}
 | 
				
			||||||
			: (SDL_Rect){x + (7 + 3) * (i - PIANO_WHITE_BUTTONS) + 6, y, 7, 8};
 | 
								: (tic_rect){x + (7 + 3) * (i - PIANO_WHITE_BUTTONS) + 6, y, 7, 8};
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	SDL_Rect rect = {x, y, PIANO_WIDTH, PIANO_HEIGHT};
 | 
						tic_rect rect = {x, y, PIANO_WIDTH, PIANO_HEIGHT};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(checkMousePos(&rect))
 | 
						if(checkMousePos(&rect))
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@@ -470,7 +470,7 @@ static void drawPiano(Sfx* sfx, s32 x, s32 y)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		for(s32 i = COUNT_OF(buttons) - 1; i >= 0; i--)
 | 
							for(s32 i = COUNT_OF(buttons) - 1; i >= 0; i--)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			SDL_Rect* rect = buttons + i;
 | 
								tic_rect* rect = buttons + i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if(checkMousePos(rect))
 | 
								if(checkMousePos(rect))
 | 
				
			||||||
				if(ButtonIndixes[i] >= 0)
 | 
									if(ButtonIndixes[i] >= 0)
 | 
				
			||||||
@@ -484,7 +484,7 @@ static void drawPiano(Sfx* sfx, s32 x, s32 y)
 | 
				
			|||||||
		{
 | 
							{
 | 
				
			||||||
			for(s32 i = COUNT_OF(buttons) - 1; i >= 0; i--)
 | 
								for(s32 i = COUNT_OF(buttons) - 1; i >= 0; i--)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				SDL_Rect* rect = buttons + i;
 | 
									tic_rect* rect = buttons + i;
 | 
				
			||||||
				s32 index = ButtonIndixes[i];
 | 
									s32 index = ButtonIndixes[i];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				if(index >= 0)
 | 
									if(index >= 0)
 | 
				
			||||||
@@ -502,7 +502,7 @@ static void drawPiano(Sfx* sfx, s32 x, s32 y)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	for(s32 i = 0; i < COUNT_OF(buttons); i++)
 | 
						for(s32 i = 0; i < COUNT_OF(buttons); i++)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		SDL_Rect* rect = buttons + i;
 | 
							tic_rect* rect = buttons + i;
 | 
				
			||||||
		bool white = i < PIANO_WHITE_BUTTONS;
 | 
							bool white = i < PIANO_WHITE_BUTTONS;
 | 
				
			||||||
		s32 index = ButtonIndixes[i];
 | 
							s32 index = ButtonIndixes[i];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -525,7 +525,7 @@ static void drawOctavePanel(Sfx* sfx, s32 x, s32 y)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	for(s32 i = 0; i < OCTAVES; i++)
 | 
						for(s32 i = 0; i < OCTAVES; i++)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		SDL_Rect rect = {x + i * (TIC_FONT_WIDTH + Gap), y, TIC_FONT_WIDTH, TIC_FONT_HEIGHT};
 | 
							tic_rect rect = {x + i * (TIC_FONT_WIDTH + Gap), y, TIC_FONT_WIDTH, TIC_FONT_HEIGHT};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if(checkMousePos(&rect))
 | 
							if(checkMousePos(&rect))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
@@ -761,7 +761,7 @@ static void drawModeTabs(Sfx* sfx)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	for (s32 i = 0; i < Count; i++)
 | 
						for (s32 i = 0; i < Count; i++)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		SDL_Rect rect = { TIC80_WIDTH - Width * (Count - i), 0, Width, Height };
 | 
							tic_rect rect = { TIC80_WIDTH - Width * (Count - i), 0, Width, Height };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		bool over = false;
 | 
							bool over = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -794,7 +794,7 @@ static void drawSfxToolbar(Sfx* sfx)
 | 
				
			|||||||
	s32 x = TIC80_WIDTH - Width - TIC_SPRITESIZE*3;
 | 
						s32 x = TIC80_WIDTH - Width - TIC_SPRITESIZE*3;
 | 
				
			||||||
	s32 y = 1;
 | 
						s32 y = 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	SDL_Rect rect = {x, y, Width, TIC_FONT_HEIGHT};
 | 
						tic_rect rect = {x, y, Width, TIC_FONT_HEIGHT};
 | 
				
			||||||
	bool over = false;
 | 
						bool over = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(checkMousePos(&rect))
 | 
						if(checkMousePos(&rect))
 | 
				
			||||||
@@ -871,7 +871,7 @@ static void drawWaveformBar(Sfx* sfx, s32 x, s32 y)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	for(s32 i = 0; i < ENVELOPES_COUNT; i++)
 | 
						for(s32 i = 0; i < ENVELOPES_COUNT; i++)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		SDL_Rect rect = {x + (i%Cols)*(Width+Gap), y + (i/Cols)*(Height+Gap), Width, Height};
 | 
							tic_rect rect = {x + (i%Cols)*(Width+Gap), y + (i/Cols)*(Height+Gap), Width, Height};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if(checkMousePos(&rect))
 | 
							if(checkMousePos(&rect))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
@@ -911,7 +911,7 @@ static void drawWaveformCanvas(Sfx* sfx, s32 x, s32 y)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	enum {Rows = CANVAS_ROWS, Width = ENVELOPE_VALUES * CANVAS_SIZE, Height = CANVAS_HEIGHT};
 | 
						enum {Rows = CANVAS_ROWS, Width = ENVELOPE_VALUES * CANVAS_SIZE, Height = CANVAS_HEIGHT};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	SDL_Rect rect = {x, y, Width, Height};
 | 
						tic_rect rect = {x, y, Width, Height};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sfx->tic->api.rect(sfx->tic, rect.x, rect.y, rect.w, rect.h, (tic_color_dark_red));
 | 
						sfx->tic->api.rect(sfx->tic, rect.x, rect.y, rect.w, rect.h, (tic_color_dark_red));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										92
									
								
								src/sprite.c
									
									
									
									
									
								
							
							
						
						
									
										92
									
								
								src/sprite.c
									
									
									
									
									
								
							@@ -33,7 +33,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static void clearCanvasSelection(Sprite* sprite)
 | 
					static void clearCanvasSelection(Sprite* sprite)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	SDL_memset(&sprite->select.rect, 0, sizeof(SDL_Rect));
 | 
						SDL_memset(&sprite->select.rect, 0, sizeof(tic_rect));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static u8 getSheetPixel(Sprite* sprite, s32 x, s32 y)
 | 
					static u8 getSheetPixel(Sprite* sprite, s32 x, s32 y)
 | 
				
			||||||
@@ -70,12 +70,12 @@ static void drawSelection(Sprite* sprite, s32 x, s32 y, s32 w, s32 h)
 | 
				
			|||||||
	for(s32 i = (y+h-1); i >= y; i--) 	{ sprite->tic->api.pixel(sprite->tic, x, i, index++ % Step ? color : 0);}
 | 
						for(s32 i = (y+h-1); i >= y; i--) 	{ sprite->tic->api.pixel(sprite->tic, x, i, index++ % Step ? color : 0);}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static SDL_Rect getSpriteRect(Sprite* sprite)
 | 
					static tic_rect getSpriteRect(Sprite* sprite)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	s32 x = getIndexPosX(sprite);
 | 
						s32 x = getIndexPosX(sprite);
 | 
				
			||||||
	s32 y = getIndexPosY(sprite);
 | 
						s32 y = getIndexPosY(sprite);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return (SDL_Rect){x, y, sprite->size, sprite->size};
 | 
						return (tic_rect){x, y, sprite->size, sprite->size};
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void drawCursorBorder(Sprite* sprite, s32 x, s32 y, s32 w, s32 h)
 | 
					static void drawCursorBorder(Sprite* sprite, s32 x, s32 y, s32 w, s32 h)
 | 
				
			||||||
@@ -86,7 +86,7 @@ static void drawCursorBorder(Sprite* sprite, s32 x, s32 y, s32 w, s32 h)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static void processPickerCanvasMouse(Sprite* sprite, s32 x, s32 y, s32 sx, s32 sy)
 | 
					static void processPickerCanvasMouse(Sprite* sprite, s32 x, s32 y, s32 sx, s32 sy)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	SDL_Rect rect = {x, y, CANVAS_SIZE, CANVAS_SIZE};
 | 
						tic_rect rect = {x, y, CANVAS_SIZE, CANVAS_SIZE};
 | 
				
			||||||
	const s32 Size = CANVAS_SIZE / sprite->size;
 | 
						const s32 Size = CANVAS_SIZE / sprite->size;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(checkMousePos(&rect))
 | 
						if(checkMousePos(&rect))
 | 
				
			||||||
@@ -111,7 +111,7 @@ static void processPickerCanvasMouse(Sprite* sprite, s32 x, s32 y, s32 sx, s32 s
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static void processDrawCanvasMouse(Sprite* sprite, s32 x, s32 y, s32 sx, s32 sy)
 | 
					static void processDrawCanvasMouse(Sprite* sprite, s32 x, s32 y, s32 sx, s32 sy)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	SDL_Rect rect = {x, y, CANVAS_SIZE, CANVAS_SIZE};
 | 
						tic_rect rect = {x, y, CANVAS_SIZE, CANVAS_SIZE};
 | 
				
			||||||
	const s32 Size = CANVAS_SIZE / sprite->size;
 | 
						const s32 Size = CANVAS_SIZE / sprite->size;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(checkMousePos(&rect))
 | 
						if(checkMousePos(&rect))
 | 
				
			||||||
@@ -167,7 +167,7 @@ static void pasteSelection(Sprite* sprite)
 | 
				
			|||||||
		for(s32 sx = l; sx < r; sx++)
 | 
							for(s32 sx = l; sx < r; sx++)
 | 
				
			||||||
			setSheetPixel(sprite, sx, sy, sprite->select.back[i++]);
 | 
								setSheetPixel(sprite, sx, sy, sprite->select.back[i++]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	SDL_Rect* rect = &sprite->select.rect;
 | 
						tic_rect* rect = &sprite->select.rect;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	l += rect->x;
 | 
						l += rect->x;
 | 
				
			||||||
	t += rect->y;
 | 
						t += rect->y;
 | 
				
			||||||
@@ -183,7 +183,7 @@ static void pasteSelection(Sprite* sprite)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static void copySelection(Sprite* sprite)
 | 
					static void copySelection(Sprite* sprite)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	SDL_Rect rect = getSpriteRect(sprite);
 | 
						tic_rect rect = getSpriteRect(sprite);
 | 
				
			||||||
	s32 r = rect.x + rect.w;
 | 
						s32 r = rect.x + rect.w;
 | 
				
			||||||
	s32 b = rect.y + rect.h;
 | 
						s32 b = rect.y + rect.h;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -192,7 +192,7 @@ static void copySelection(Sprite* sprite)
 | 
				
			|||||||
			sprite->select.back[i++] = getSheetPixel(sprite, sx, sy);
 | 
								sprite->select.back[i++] = getSheetPixel(sprite, sx, sy);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		SDL_Rect* rect = &sprite->select.rect;
 | 
							tic_rect* rect = &sprite->select.rect;
 | 
				
			||||||
		SDL_memset(sprite->select.front, 0, CANVAS_SIZE * CANVAS_SIZE);
 | 
							SDL_memset(sprite->select.front, 0, CANVAS_SIZE * CANVAS_SIZE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		for(s32 j = rect->y, index = 0; j < (rect->y + rect->h); j++)
 | 
							for(s32 j = rect->y, index = 0; j < (rect->y + rect->h); j++)
 | 
				
			||||||
@@ -207,7 +207,7 @@ static void copySelection(Sprite* sprite)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static void processSelectCanvasMouse(Sprite* sprite, s32 x, s32 y)
 | 
					static void processSelectCanvasMouse(Sprite* sprite, s32 x, s32 y)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	SDL_Rect rect = {x, y, CANVAS_SIZE, CANVAS_SIZE};
 | 
						tic_rect rect = {x, y, CANVAS_SIZE, CANVAS_SIZE};
 | 
				
			||||||
	const s32 Size = CANVAS_SIZE / sprite->size;
 | 
						const s32 Size = CANVAS_SIZE / sprite->size;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(checkMousePos(&rect))
 | 
						if(checkMousePos(&rect))
 | 
				
			||||||
@@ -234,13 +234,13 @@ static void processSelectCanvasMouse(Sprite* sprite, s32 x, s32 y)
 | 
				
			|||||||
				s32 rr = SDL_max(x, sprite->select.start.x);
 | 
									s32 rr = SDL_max(x, sprite->select.start.x);
 | 
				
			||||||
				s32 rb = SDL_max(y, sprite->select.start.y);
 | 
									s32 rb = SDL_max(y, sprite->select.start.y);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				sprite->select.rect = (SDL_Rect){rl, rt, rr - rl + 1, rb - rt + 1};
 | 
									sprite->select.rect = (tic_rect){rl, rt, rr - rl + 1, rb - rt + 1};
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			else
 | 
								else
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				sprite->select.drag = true;
 | 
									sprite->select.drag = true;
 | 
				
			||||||
				sprite->select.start = (SDL_Point){mx / Size, my / Size};
 | 
									sprite->select.start = (tic_point){mx / Size, my / Size};
 | 
				
			||||||
				sprite->select.rect = (SDL_Rect){sprite->select.start.x, sprite->select.start.y, 1, 1};
 | 
									sprite->select.rect = (tic_rect){sprite->select.start.x, sprite->select.start.y, 1, 1};
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else if(sprite->select.drag)
 | 
							else if(sprite->select.drag)
 | 
				
			||||||
@@ -274,7 +274,7 @@ static void replaceColor(Sprite* sprite, s32 l, s32 t, s32 r, s32 b, s32 x, s32
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static void processFillCanvasMouse(Sprite* sprite, s32 x, s32 y, s32 l, s32 t)
 | 
					static void processFillCanvasMouse(Sprite* sprite, s32 x, s32 y, s32 l, s32 t)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	SDL_Rect rect = {x, y, CANVAS_SIZE, CANVAS_SIZE};
 | 
						tic_rect rect = {x, y, CANVAS_SIZE, CANVAS_SIZE};
 | 
				
			||||||
	const s32 Size = CANVAS_SIZE / sprite->size;
 | 
						const s32 Size = CANVAS_SIZE / sprite->size;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(checkMousePos(&rect))
 | 
						if(checkMousePos(&rect))
 | 
				
			||||||
@@ -323,7 +323,7 @@ static void drawBrushSlider(Sprite* sprite, s32 x, s32 y)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	enum {Count = 4, Size = 5};
 | 
						enum {Count = 4, Size = 5};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	SDL_Rect rect = {x, y, Size, (Size+1)*Count};
 | 
						tic_rect rect = {x, y, Size, (Size+1)*Count};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	bool over = false;
 | 
						bool over = false;
 | 
				
			||||||
	if(checkMousePos(&rect))
 | 
						if(checkMousePos(&rect))
 | 
				
			||||||
@@ -386,7 +386,7 @@ static void drawCanvas(Sprite* sprite, s32 x, s32 y)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static void drawCanvasOvr(Sprite* sprite, s32 x, s32 y)
 | 
					static void drawCanvasOvr(Sprite* sprite, s32 x, s32 y)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	SDL_Rect rect = getSpriteRect(sprite);
 | 
						tic_rect rect = getSpriteRect(sprite);
 | 
				
			||||||
	s32 r = rect.x + rect.w;
 | 
						s32 r = rect.x + rect.w;
 | 
				
			||||||
	s32 b = rect.y + rect.h;
 | 
						s32 b = rect.y + rect.h;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -414,7 +414,7 @@ static void drawCanvasOvr(Sprite* sprite, s32 x, s32 y)
 | 
				
			|||||||
		}		
 | 
							}		
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	SDL_Rect canvasRect = {x, y, CANVAS_SIZE, CANVAS_SIZE};
 | 
						tic_rect canvasRect = {x, y, CANVAS_SIZE, CANVAS_SIZE};
 | 
				
			||||||
	if(checkMouseDown(&canvasRect, SDL_BUTTON_MIDDLE))
 | 
						if(checkMouseDown(&canvasRect, SDL_BUTTON_MIDDLE))
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		s32 mx = getMouseX() - x;
 | 
							s32 mx = getMouseX() - x;
 | 
				
			||||||
@@ -425,35 +425,35 @@ static void drawCanvasOvr(Sprite* sprite, s32 x, s32 y)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static void upCanvas(Sprite* sprite)
 | 
					static void upCanvas(Sprite* sprite)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	SDL_Rect* rect = &sprite->select.rect;
 | 
						tic_rect* rect = &sprite->select.rect;
 | 
				
			||||||
	if(rect->y > 0) rect->y--;
 | 
						if(rect->y > 0) rect->y--;
 | 
				
			||||||
	pasteSelection(sprite);
 | 
						pasteSelection(sprite);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void downCanvas(Sprite* sprite)
 | 
					static void downCanvas(Sprite* sprite)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	SDL_Rect* rect = &sprite->select.rect;
 | 
						tic_rect* rect = &sprite->select.rect;
 | 
				
			||||||
	if(rect->y + rect->h < sprite->size) rect->y++;
 | 
						if(rect->y + rect->h < sprite->size) rect->y++;
 | 
				
			||||||
	pasteSelection(sprite);
 | 
						pasteSelection(sprite);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void leftCanvas(Sprite* sprite)
 | 
					static void leftCanvas(Sprite* sprite)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	SDL_Rect* rect = &sprite->select.rect;
 | 
						tic_rect* rect = &sprite->select.rect;
 | 
				
			||||||
	if(rect->x > 0) rect->x--;
 | 
						if(rect->x > 0) rect->x--;
 | 
				
			||||||
	pasteSelection(sprite);
 | 
						pasteSelection(sprite);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void rightCanvas(Sprite* sprite)
 | 
					static void rightCanvas(Sprite* sprite)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	SDL_Rect* rect = &sprite->select.rect;
 | 
						tic_rect* rect = &sprite->select.rect;
 | 
				
			||||||
	if(rect->x + rect->w < sprite->size) rect->x++;
 | 
						if(rect->x + rect->w < sprite->size) rect->x++;
 | 
				
			||||||
	pasteSelection(sprite);
 | 
						pasteSelection(sprite);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void rotateSelectRect(Sprite* sprite)
 | 
					static void rotateSelectRect(Sprite* sprite)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	SDL_Rect rect = sprite->select.rect;
 | 
						tic_rect rect = sprite->select.rect;
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	s32 selection_center_x = rect.x + rect.w/2;
 | 
						s32 selection_center_x = rect.x + rect.w/2;
 | 
				
			||||||
	s32 selection_center_y = rect.y + rect.h/2;
 | 
						s32 selection_center_y = rect.y + rect.h/2;
 | 
				
			||||||
@@ -488,7 +488,7 @@ static void rotateCanvas(Sprite* sprite)
 | 
				
			|||||||
	if(buffer)
 | 
						if(buffer)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			SDL_Rect rect = sprite->select.rect;
 | 
								tic_rect rect = sprite->select.rect;
 | 
				
			||||||
			const s32 Size = rect.h * rect.w;
 | 
								const s32 Size = rect.h * rect.w;
 | 
				
			||||||
			s32 diff = 0;
 | 
								s32 diff = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -513,7 +513,7 @@ static void rotateCanvas(Sprite* sprite)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static void deleteCanvas(Sprite* sprite)
 | 
					static void deleteCanvas(Sprite* sprite)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	SDL_Rect* rect = &sprite->select.rect;
 | 
						tic_rect* rect = &sprite->select.rect;
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	s32 left = getIndexPosX(sprite) + rect->x;
 | 
						s32 left = getIndexPosX(sprite) + rect->x;
 | 
				
			||||||
	s32 top = getIndexPosY(sprite) + rect->y;
 | 
						s32 top = getIndexPosY(sprite) + rect->y;
 | 
				
			||||||
@@ -531,7 +531,7 @@ static void deleteCanvas(Sprite* sprite)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static void flipCanvasHorz(Sprite* sprite)
 | 
					static void flipCanvasHorz(Sprite* sprite)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	SDL_Rect* rect = &sprite->select.rect;
 | 
						tic_rect* rect = &sprite->select.rect;
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	s32 sprite_x = getIndexPosX(sprite);
 | 
						s32 sprite_x = getIndexPosX(sprite);
 | 
				
			||||||
	s32 sprite_y = getIndexPosY(sprite);
 | 
						s32 sprite_y = getIndexPosY(sprite);
 | 
				
			||||||
@@ -553,7 +553,7 @@ static void flipCanvasHorz(Sprite* sprite)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static void flipCanvasVert(Sprite* sprite)
 | 
					static void flipCanvasVert(Sprite* sprite)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	SDL_Rect* rect = &sprite->select.rect;
 | 
						tic_rect* rect = &sprite->select.rect;
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	s32 sprite_x = getIndexPosX(sprite);
 | 
						s32 sprite_x = getIndexPosX(sprite);
 | 
				
			||||||
	s32 sprite_y = getIndexPosY(sprite);
 | 
						s32 sprite_y = getIndexPosY(sprite);
 | 
				
			||||||
@@ -619,7 +619,7 @@ static void drawMoveButtons(Sprite* sprite)
 | 
				
			|||||||
			0b00000000,
 | 
								0b00000000,
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		static const SDL_Rect Rects[] = 
 | 
							static const tic_rect Rects[] = 
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			{x + (CANVAS_SIZE - TIC_SPRITESIZE)/2, y - TIC_SPRITESIZE, TIC_SPRITESIZE, TIC_SPRITESIZE/2},
 | 
								{x + (CANVAS_SIZE - TIC_SPRITESIZE)/2, y - TIC_SPRITESIZE, TIC_SPRITESIZE, TIC_SPRITESIZE/2},
 | 
				
			||||||
			{x + (CANVAS_SIZE - TIC_SPRITESIZE)/2, y + CANVAS_SIZE + TIC_SPRITESIZE/2, TIC_SPRITESIZE, TIC_SPRITESIZE/2},
 | 
								{x + (CANVAS_SIZE - TIC_SPRITESIZE)/2, y + CANVAS_SIZE + TIC_SPRITESIZE/2, TIC_SPRITESIZE, TIC_SPRITESIZE/2},
 | 
				
			||||||
@@ -668,7 +668,7 @@ static void drawRGBSlider(Sprite* sprite, s32 x, s32 y, u8* value)
 | 
				
			|||||||
			0b00000000,
 | 
								0b00000000,
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		SDL_Rect rect = {x, y-2, Size, 5};
 | 
							tic_rect rect = {x, y-2, Size, 5};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if(checkMousePos(&rect))
 | 
							if(checkMousePos(&rect))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
@@ -710,7 +710,7 @@ static void drawRGBSlider(Sprite* sprite, s32 x, s32 y, u8* value)
 | 
				
			|||||||
			0b00000000,
 | 
								0b00000000,
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		SDL_Rect rect = {x - 4, y - 1, 2, 3};
 | 
							tic_rect rect = {x - 4, y - 1, 2, 3};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		bool down = false;
 | 
							bool down = false;
 | 
				
			||||||
		if(checkMousePos(&rect))
 | 
							if(checkMousePos(&rect))
 | 
				
			||||||
@@ -748,7 +748,7 @@ static void drawRGBSlider(Sprite* sprite, s32 x, s32 y, u8* value)
 | 
				
			|||||||
			0b00000000,
 | 
								0b00000000,
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		SDL_Rect rect = {x + Size + 2, y - 1, 2, 3};
 | 
							tic_rect rect = {x + Size + 2, y - 1, 2, 3};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		bool down = false;
 | 
							bool down = false;
 | 
				
			||||||
		if(checkMousePos(&rect))
 | 
							if(checkMousePos(&rect))
 | 
				
			||||||
@@ -796,7 +796,7 @@ static void drawRGBTools(Sprite* sprite, s32 x, s32 y)
 | 
				
			|||||||
			0b00000000,	
 | 
								0b00000000,	
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		SDL_Rect rect = {x, y, Size, Size};
 | 
							tic_rect rect = {x, y, Size, Size};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		bool over = false;
 | 
							bool over = false;
 | 
				
			||||||
				bool down = false;
 | 
									bool down = false;
 | 
				
			||||||
@@ -840,7 +840,7 @@ static void drawRGBTools(Sprite* sprite, s32 x, s32 y)
 | 
				
			|||||||
			0b00000000,
 | 
								0b00000000,
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		SDL_Rect rect = {x + 8, y, Size, Size};
 | 
							tic_rect rect = {x + 8, y, Size, Size};
 | 
				
			||||||
		bool over = false;
 | 
							bool over = false;
 | 
				
			||||||
		bool down = false;
 | 
							bool down = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -898,7 +898,7 @@ static void drawRGBSlidersOvr(Sprite* sprite, s32 x, s32 y)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static void drawPalette(Sprite* sprite, s32 x, s32 y)
 | 
					static void drawPalette(Sprite* sprite, s32 x, s32 y)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	SDL_Rect rect = {x, y, PALETTE_WIDTH-1, PALETTE_HEIGHT-1};
 | 
						tic_rect rect = {x, y, PALETTE_WIDTH-1, PALETTE_HEIGHT-1};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(checkMousePos(&rect))
 | 
						if(checkMousePos(&rect))
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@@ -946,7 +946,7 @@ static void drawPalette(Sprite* sprite, s32 x, s32 y)
 | 
				
			|||||||
			0b11111111,
 | 
								0b11111111,
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		SDL_Rect rect = {x + PALETTE_WIDTH + 3, y + (PALETTE_HEIGHT-8)/2-1, 8, 8};
 | 
							tic_rect rect = {x + PALETTE_WIDTH + 3, y + (PALETTE_HEIGHT-8)/2-1, 8, 8};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		bool down = false;
 | 
							bool down = false;
 | 
				
			||||||
		bool over = false;
 | 
							bool over = false;
 | 
				
			||||||
@@ -1040,7 +1040,7 @@ static void updateSpriteSize(Sprite* sprite, s32 size)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static void drawSheet(Sprite* sprite, s32 x, s32 y)
 | 
					static void drawSheet(Sprite* sprite, s32 x, s32 y)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	SDL_Rect rect = {x, y, TIC_SPRITESHEET_SIZE, TIC_SPRITESHEET_SIZE};
 | 
						tic_rect rect = {x, y, TIC_SPRITESHEET_SIZE, TIC_SPRITESHEET_SIZE};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sprite->tic->api.rect_border(sprite->tic, rect.x - 1, rect.y - 1, rect.w + 2, rect.h + 2, (tic_color_white));
 | 
						sprite->tic->api.rect_border(sprite->tic, rect.x - 1, rect.y - 1, rect.w + 2, rect.h + 2, (tic_color_white));
 | 
				
			||||||
	sprite->tic->api.rect(sprite->tic, rect.x, rect.y, rect.w, rect.h, (tic_color_black));
 | 
						sprite->tic->api.rect(sprite->tic, rect.x, rect.y, rect.w, rect.h, (tic_color_black));
 | 
				
			||||||
@@ -1059,7 +1059,7 @@ static void drawSheet(Sprite* sprite, s32 x, s32 y)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static void drawSheetOvr(Sprite* sprite, s32 x, s32 y)
 | 
					static void drawSheetOvr(Sprite* sprite, s32 x, s32 y)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	SDL_Rect rect = {x, y, TIC_SPRITESHEET_SIZE, TIC_SPRITESHEET_SIZE};
 | 
						tic_rect rect = {x, y, TIC_SPRITESHEET_SIZE, TIC_SPRITESHEET_SIZE};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for(s32 j = 0, index = (sprite->index - sprite->index % TIC_BANK_SPRITES); j < rect.h; j += TIC_SPRITESIZE)
 | 
						for(s32 j = 0, index = (sprite->index - sprite->index % TIC_BANK_SPRITES); j < rect.h; j += TIC_SPRITESIZE)
 | 
				
			||||||
		for(s32 i = 0; i < rect.w; i += TIC_SPRITESIZE, index++)
 | 
							for(s32 i = 0; i < rect.w; i += TIC_SPRITESIZE, index++)
 | 
				
			||||||
@@ -1074,7 +1074,7 @@ static void drawSheetOvr(Sprite* sprite, s32 x, s32 y)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static void flipSpriteHorz(Sprite* sprite)
 | 
					static void flipSpriteHorz(Sprite* sprite)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	SDL_Rect rect = getSpriteRect(sprite);
 | 
						tic_rect rect = getSpriteRect(sprite);
 | 
				
			||||||
	s32 r = rect.x + rect.w/2;
 | 
						s32 r = rect.x + rect.w/2;
 | 
				
			||||||
	s32 b = rect.y + rect.h;
 | 
						s32 b = rect.y + rect.h;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1091,7 +1091,7 @@ static void flipSpriteHorz(Sprite* sprite)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static void flipSpriteVert(Sprite* sprite)
 | 
					static void flipSpriteVert(Sprite* sprite)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	SDL_Rect rect = getSpriteRect(sprite);
 | 
						tic_rect rect = getSpriteRect(sprite);
 | 
				
			||||||
	s32 r = rect.x + rect.w;
 | 
						s32 r = rect.x + rect.w;
 | 
				
			||||||
	s32 b = rect.y + rect.h/2;
 | 
						s32 b = rect.y + rect.h/2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1114,7 +1114,7 @@ static void rotateSprite(Sprite* sprite)
 | 
				
			|||||||
	if(buffer)
 | 
						if(buffer)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			SDL_Rect rect = getSpriteRect(sprite);
 | 
								tic_rect rect = getSpriteRect(sprite);
 | 
				
			||||||
			s32 r = rect.x + rect.w;
 | 
								s32 r = rect.x + rect.w;
 | 
				
			||||||
			s32 b = rect.y + rect.h;
 | 
								s32 b = rect.y + rect.h;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1135,7 +1135,7 @@ static void rotateSprite(Sprite* sprite)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static void deleteSprite(Sprite* sprite)
 | 
					static void deleteSprite(Sprite* sprite)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	SDL_Rect rect = getSpriteRect(sprite);
 | 
						tic_rect rect = getSpriteRect(sprite);
 | 
				
			||||||
	s32 r = rect.x + rect.w;
 | 
						s32 r = rect.x + rect.w;
 | 
				
			||||||
	s32 b = rect.y + rect.h;
 | 
						s32 b = rect.y + rect.h;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1200,7 +1200,7 @@ static void drawSpriteTools(Sprite* sprite, s32 x, s32 y)
 | 
				
			|||||||
		bool pushed = false;
 | 
							bool pushed = false;
 | 
				
			||||||
		bool over = false;
 | 
							bool over = false;
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		SDL_Rect rect = {x + i * Gap, y, TIC_SPRITESIZE, TIC_SPRITESIZE};
 | 
							tic_rect rect = {x + i * Gap, y, TIC_SPRITESIZE, TIC_SPRITESIZE};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if(checkMousePos(&rect))
 | 
							if(checkMousePos(&rect))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
@@ -1283,7 +1283,7 @@ static void drawTools(Sprite* sprite, s32 x, s32 y)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	for(s32 i = 0; i < COUNT_OF(Icons)/BITS_IN_BYTE; i++)
 | 
						for(s32 i = 0; i < COUNT_OF(Icons)/BITS_IN_BYTE; i++)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		SDL_Rect rect = {x + i * Gap, y, TIC_SPRITESIZE, TIC_SPRITESIZE};
 | 
							tic_rect rect = {x + i * Gap, y, TIC_SPRITESIZE, TIC_SPRITESIZE};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		bool over = false;
 | 
							bool over = false;
 | 
				
			||||||
		if(checkMousePos(&rect))
 | 
							if(checkMousePos(&rect))
 | 
				
			||||||
@@ -1341,7 +1341,7 @@ static void copyToClipboard(Sprite* sprite)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	if(buffer)
 | 
						if(buffer)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		SDL_Rect rect = getSpriteRect(sprite);
 | 
							tic_rect rect = getSpriteRect(sprite);
 | 
				
			||||||
		s32 r = rect.x + rect.w;
 | 
							s32 r = rect.x + rect.w;
 | 
				
			||||||
		s32 b = rect.y + rect.h;
 | 
							s32 b = rect.y + rect.h;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1373,7 +1373,7 @@ static void copyFromClipboard(Sprite* sprite)
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		if(fromClipboard(buffer, size, true, false))
 | 
							if(fromClipboard(buffer, size, true, false))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			SDL_Rect rect = getSpriteRect(sprite);
 | 
								tic_rect rect = getSpriteRect(sprite);
 | 
				
			||||||
			s32 r = rect.x + rect.w;
 | 
								s32 r = rect.x + rect.w;
 | 
				
			||||||
			s32 b = rect.y + rect.h;
 | 
								s32 b = rect.y + rect.h;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1510,7 +1510,7 @@ static void drawSpriteToolbar(Sprite* sprite)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	// draw sprite size control
 | 
						// draw sprite size control
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		SDL_Rect rect = {TIC80_WIDTH - 58, 1, 23, 5};
 | 
							tic_rect rect = {TIC80_WIDTH - 58, 1, 23, 5};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if(checkMousePos(&rect))
 | 
							if(checkMousePos(&rect))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
@@ -1547,7 +1547,7 @@ static void drawSpriteToolbar(Sprite* sprite)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		static const char Label[] = "BG";
 | 
							static const char Label[] = "BG";
 | 
				
			||||||
		SDL_Rect rect = {TIC80_WIDTH - 2 * TIC_FONT_WIDTH - 2, 0, 2 * TIC_FONT_WIDTH + 1, TIC_SPRITESIZE-1};
 | 
							tic_rect rect = {TIC80_WIDTH - 2 * TIC_FONT_WIDTH - 2, 0, 2 * TIC_FONT_WIDTH + 1, TIC_SPRITESIZE-1};
 | 
				
			||||||
		sprite->tic->api.rect(sprite->tic, rect.x, rect.y, rect.w, rect.h, bg ? (tic_color_black) : (tic_color_gray));
 | 
							sprite->tic->api.rect(sprite->tic, rect.x, rect.y, rect.w, rect.h, bg ? (tic_color_black) : (tic_color_gray));
 | 
				
			||||||
		sprite->tic->api.fixed_text(sprite->tic, Label, rect.x+1, rect.y+1, (tic_color_white));
 | 
							sprite->tic->api.fixed_text(sprite->tic, Label, rect.x+1, rect.y+1, (tic_color_white));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1567,7 +1567,7 @@ static void drawSpriteToolbar(Sprite* sprite)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		static const char Label[] = "FG";
 | 
							static const char Label[] = "FG";
 | 
				
			||||||
		SDL_Rect rect = {TIC80_WIDTH - 4 * TIC_FONT_WIDTH - 4, 0, 2 * TIC_FONT_WIDTH + 1, TIC_SPRITESIZE-1};
 | 
							tic_rect rect = {TIC80_WIDTH - 4 * TIC_FONT_WIDTH - 4, 0, 2 * TIC_FONT_WIDTH + 1, TIC_SPRITESIZE-1};
 | 
				
			||||||
		sprite->tic->api.rect(sprite->tic, rect.x, rect.y, rect.w, rect.h, bg ? (tic_color_gray) : (tic_color_black));
 | 
							sprite->tic->api.rect(sprite->tic, rect.x, rect.y, rect.w, rect.h, bg ? (tic_color_gray) : (tic_color_black));
 | 
				
			||||||
		sprite->tic->api.fixed_text(sprite->tic, Label, rect.x+1, rect.y+1, (tic_color_white));
 | 
							sprite->tic->api.fixed_text(sprite->tic, Label, rect.x+1, rect.y+1, (tic_color_white));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -44,8 +44,8 @@ struct Sprite
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	struct
 | 
						struct
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		SDL_Rect rect;
 | 
							tic_rect rect;
 | 
				
			||||||
		SDL_Point start;
 | 
							tic_point start;
 | 
				
			||||||
		bool drag;
 | 
							bool drag;
 | 
				
			||||||
		u8* back;
 | 
							u8* back;
 | 
				
			||||||
		u8* front;
 | 
							u8* front;
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										170
									
								
								src/studio.c
									
									
									
									
									
								
							
							
						
						
									
										170
									
								
								src/studio.c
									
									
									
									
									
								
							@@ -70,8 +70,8 @@ typedef struct
 | 
				
			|||||||
	bool down;
 | 
						bool down;
 | 
				
			||||||
	bool click;
 | 
						bool click;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	SDL_Point start;
 | 
						tic_point start;
 | 
				
			||||||
	SDL_Point end;
 | 
						tic_point end;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
} MouseState;
 | 
					} MouseState;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -115,7 +115,7 @@ static struct
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	struct
 | 
						struct
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		// SDL_Point cursor;
 | 
							// tic_point cursor;
 | 
				
			||||||
		// u32 button;
 | 
							// u32 button;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		MouseState state[3];
 | 
							MouseState state[3];
 | 
				
			||||||
@@ -127,7 +127,7 @@ static struct
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	struct
 | 
						struct
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		SDL_Point pos;
 | 
							tic_point pos;
 | 
				
			||||||
		bool active;
 | 
							bool active;
 | 
				
			||||||
	} gesture;
 | 
						} gesture;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -151,11 +151,11 @@ static struct
 | 
				
			|||||||
	// 	struct
 | 
						// 	struct
 | 
				
			||||||
	// 	{
 | 
						// 	{
 | 
				
			||||||
	// 		s32 size;
 | 
						// 		s32 size;
 | 
				
			||||||
	// 		SDL_Point axis;
 | 
						// 		tic_point axis;
 | 
				
			||||||
	// 		SDL_Point a;
 | 
						// 		tic_point a;
 | 
				
			||||||
	// 		SDL_Point b;
 | 
						// 		tic_point b;
 | 
				
			||||||
	// 		SDL_Point x;
 | 
						// 		tic_point x;
 | 
				
			||||||
	// 		SDL_Point y;
 | 
						// 		tic_point y;
 | 
				
			||||||
	// 	} part;
 | 
						// 	} part;
 | 
				
			||||||
	// } gamepad;
 | 
						// } gamepad;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -574,7 +574,7 @@ static void drawExtrabar(tic_mem* tic)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	for(s32 i = 0; i < sizeof Icons / BITS_IN_BYTE; i++)
 | 
						for(s32 i = 0; i < sizeof Icons / BITS_IN_BYTE; i++)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		SDL_Rect rect = {x + i*Size, y, Size, Size};
 | 
							tic_rect rect = {x + i*Size, y, Size, Size};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		u8 bgcolor = (tic_color_white);
 | 
							u8 bgcolor = (tic_color_white);
 | 
				
			||||||
		u8 color = (tic_color_light_blue);
 | 
							u8 color = (tic_color_light_blue);
 | 
				
			||||||
@@ -613,7 +613,7 @@ static void drawBankIcon(s32 x, s32 y)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	tic_mem* tic = studioImpl.studio.tic;
 | 
						tic_mem* tic = studioImpl.studio.tic;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	SDL_Rect rect = {x, y, TIC_FONT_WIDTH, TIC_FONT_HEIGHT};
 | 
						tic_rect rect = {x, y, TIC_FONT_WIDTH, TIC_FONT_HEIGHT};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	static const u8 Icon[] =
 | 
						static const u8 Icon[] =
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@@ -657,7 +657,7 @@ static void drawBankIcon(s32 x, s32 y)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		for(s32 i = 0; i < TIC_EDITOR_BANKS; i++)
 | 
							for(s32 i = 0; i < TIC_EDITOR_BANKS; i++)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			SDL_Rect rect = {x + 2 + (i+1)*Size, 0, Size, Size};
 | 
								tic_rect rect = {x + 2 + (i+1)*Size, 0, Size, Size};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			bool over = false;
 | 
								bool over = false;
 | 
				
			||||||
			if(checkMousePos(&rect))
 | 
								if(checkMousePos(&rect))
 | 
				
			||||||
@@ -693,7 +693,7 @@ static void drawBankIcon(s32 x, s32 y)
 | 
				
			|||||||
				0b00000000,
 | 
									0b00000000,
 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			SDL_Rect rect = {x + 4 + (TIC_EDITOR_BANKS+1)*Size, 0, Size, Size};
 | 
								tic_rect rect = {x + 4 + (TIC_EDITOR_BANKS+1)*Size, 0, Size, Size};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			bool over = false;
 | 
								bool over = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -796,7 +796,7 @@ void drawToolbar(tic_mem* tic, u8 color, bool bg)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	for(s32 i = 0; i < COUNT_OF(Modes); i++)
 | 
						for(s32 i = 0; i < COUNT_OF(Modes); i++)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		SDL_Rect rect = {i * Size, 0, Size, Size};
 | 
							tic_rect rect = {i * Size, 0, Size, Size};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		bool over = false;
 | 
							bool over = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1111,34 +1111,42 @@ s32 getMouseY()
 | 
				
			|||||||
	return tic->ram.input.mouse.y;
 | 
						return tic->ram.input.mouse.y;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool checkMousePos(const SDL_Rect* rect)
 | 
					static inline bool pointInRect(const tic_point* pt, const tic_rect* rect)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	SDL_Point pos = {getMouseX(), getMouseY()};
 | 
						return (pt->x >= rect->x) 
 | 
				
			||||||
	return SDL_PointInRect(&pos, rect);
 | 
							&& (pt->x < (rect->x + rect->w)) 
 | 
				
			||||||
 | 
							&& (pt->y >= rect->y)
 | 
				
			||||||
 | 
							&& (pt->y < (rect->y + rect->h));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool checkMouseClick(const SDL_Rect* rect, s32 button)
 | 
					bool checkMousePos(const tic_rect* rect)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						tic_point pos = {getMouseX(), getMouseY()};
 | 
				
			||||||
 | 
						return pointInRect(&pos, rect);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool checkMouseClick(const tic_rect* rect, s32 button)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	MouseState* state = &studioImpl.mouse.state[button];
 | 
						MouseState* state = &studioImpl.mouse.state[button];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	bool value = state->click
 | 
						bool value = state->click
 | 
				
			||||||
		&& SDL_PointInRect(&state->start, rect)
 | 
							&& pointInRect(&state->start, rect)
 | 
				
			||||||
		&& SDL_PointInRect(&state->end, rect);
 | 
							&& pointInRect(&state->end, rect);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(value) state->click = false;
 | 
						if(value) state->click = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return value;
 | 
						return value;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool checkMouseDown(const SDL_Rect* rect, s32 button)
 | 
					bool checkMouseDown(const tic_rect* rect, s32 button)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	MouseState* state = &studioImpl.mouse.state[button];
 | 
						MouseState* state = &studioImpl.mouse.state[button];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return state->down && SDL_PointInRect(&state->start, rect);
 | 
						return state->down && pointInRect(&state->start, rect);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool getGesturePos(SDL_Point* pos)
 | 
					bool getGesturePos(tic_point* pos)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if(studioImpl.gesture.active)
 | 
						if(studioImpl.gesture.active)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@@ -1245,7 +1253,7 @@ bool studioCartChanged()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// static void updateGamepadParts();
 | 
					// static void updateGamepadParts();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// static void calcTextureRect(SDL_Rect* rect)
 | 
					// static void calcTextureRect(tic_rect* rect)
 | 
				
			||||||
// {
 | 
					// {
 | 
				
			||||||
// 	SDL_GetWindowSize(studioImpl.window, &rect->w, &rect->h);
 | 
					// 	SDL_GetWindowSize(studioImpl.window, &rect->w, &rect->h);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1293,7 +1301,7 @@ static void processGamepadMapping()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// #if !defined(__EMSCRIPTEN__) && !defined(__MACOSX__)
 | 
					// #if !defined(__EMSCRIPTEN__) && !defined(__MACOSX__)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// static bool checkTouch(const SDL_Rect* rect, s32* x, s32* y)
 | 
					// static bool checkTouch(const tic_rect* rect, s32* x, s32* y)
 | 
				
			||||||
// {
 | 
					// {
 | 
				
			||||||
// 	s32 devices = SDL_GetNumTouchDevices();
 | 
					// 	s32 devices = SDL_GetNumTouchDevices();
 | 
				
			||||||
// 	s32 width = 0, height = 0;
 | 
					// 	s32 width = 0, height = 0;
 | 
				
			||||||
@@ -1327,8 +1335,8 @@ static void processGamepadMapping()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// 				if (finger && finger->pressure > 0.0f)
 | 
					// 				if (finger && finger->pressure > 0.0f)
 | 
				
			||||||
// 				{
 | 
					// 				{
 | 
				
			||||||
// 					SDL_Point point = { (s32)(finger->x * width), (s32)(finger->y * height) };
 | 
					// 					tic_point point = { (s32)(finger->x * width), (s32)(finger->y * height) };
 | 
				
			||||||
// 					if (SDL_PointInRect(&point, rect))
 | 
					// 					if (pointInRect(&point, rect))
 | 
				
			||||||
// 					{
 | 
					// 					{
 | 
				
			||||||
// 						*x = point.x;
 | 
					// 						*x = point.x;
 | 
				
			||||||
// 						*y = point.y;
 | 
					// 						*y = point.y;
 | 
				
			||||||
@@ -1350,7 +1358,7 @@ static void processGamepadMapping()
 | 
				
			|||||||
// 	s32 x = 0, y = 0;
 | 
					// 	s32 x = 0, y = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 	{
 | 
					// 	{
 | 
				
			||||||
// 		SDL_Rect axis = {studioImpl.gamepad.part.axis.x, studioImpl.gamepad.part.axis.y, size*3, size*3};
 | 
					// 		tic_rect axis = {studioImpl.gamepad.part.axis.x, studioImpl.gamepad.part.axis.y, size*3, size*3};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 		if(checkTouch(&axis, &x, &y))
 | 
					// 		if(checkTouch(&axis, &x, &y))
 | 
				
			||||||
// 		{
 | 
					// 		{
 | 
				
			||||||
@@ -1381,22 +1389,22 @@ static void processGamepadMapping()
 | 
				
			|||||||
// 	}
 | 
					// 	}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 	{
 | 
					// 	{
 | 
				
			||||||
// 		SDL_Rect a = {studioImpl.gamepad.part.a.x, studioImpl.gamepad.part.a.y, size, size};
 | 
					// 		tic_rect a = {studioImpl.gamepad.part.a.x, studioImpl.gamepad.part.a.y, size, size};
 | 
				
			||||||
// 		if(checkTouch(&a, &x, &y)) studioImpl.gamepad.touch.first.a = true;
 | 
					// 		if(checkTouch(&a, &x, &y)) studioImpl.gamepad.touch.first.a = true;
 | 
				
			||||||
// 	}
 | 
					// 	}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 	{
 | 
					// 	{
 | 
				
			||||||
// 		SDL_Rect b = {studioImpl.gamepad.part.b.x, studioImpl.gamepad.part.b.y, size, size};
 | 
					// 		tic_rect b = {studioImpl.gamepad.part.b.x, studioImpl.gamepad.part.b.y, size, size};
 | 
				
			||||||
// 		if(checkTouch(&b, &x, &y)) studioImpl.gamepad.touch.first.b = true;
 | 
					// 		if(checkTouch(&b, &x, &y)) studioImpl.gamepad.touch.first.b = true;
 | 
				
			||||||
// 	}
 | 
					// 	}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 	{
 | 
					// 	{
 | 
				
			||||||
// 		SDL_Rect xb = {studioImpl.gamepad.part.x.x, studioImpl.gamepad.part.x.y, size, size};
 | 
					// 		tic_rect xb = {studioImpl.gamepad.part.x.x, studioImpl.gamepad.part.x.y, size, size};
 | 
				
			||||||
// 		if(checkTouch(&xb, &x, &y)) studioImpl.gamepad.touch.first.x = true;
 | 
					// 		if(checkTouch(&xb, &x, &y)) studioImpl.gamepad.touch.first.x = true;
 | 
				
			||||||
// 	}
 | 
					// 	}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 	{
 | 
					// 	{
 | 
				
			||||||
// 		SDL_Rect yb = {studioImpl.gamepad.part.y.x, studioImpl.gamepad.part.y.y, size, size};
 | 
					// 		tic_rect yb = {studioImpl.gamepad.part.y.x, studioImpl.gamepad.part.y.y, size, size};
 | 
				
			||||||
// 		if(checkTouch(&yb, &x, &y)) studioImpl.gamepad.touch.first.y = true;
 | 
					// 		if(checkTouch(&yb, &x, &y)) studioImpl.gamepad.touch.first.y = true;
 | 
				
			||||||
// 	}
 | 
					// 	}
 | 
				
			||||||
// }
 | 
					// }
 | 
				
			||||||
@@ -1587,7 +1595,7 @@ static void processGesture()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	if(fingers == Fingers)
 | 
						if(fingers == Fingers)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		SDL_Point point = {0, 0};
 | 
							tic_point point = {0, 0};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		for(s32 f = 0; f < fingers; f++)
 | 
							for(s32 f = 0; f < fingers; f++)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
@@ -1611,7 +1619,7 @@ static void processGesture()
 | 
				
			|||||||
// 	studioImpl.mouse.button = SDL_GetMouseState(&studioImpl.mouse.cursor.x, &studioImpl.mouse.cursor.y);
 | 
					// 	studioImpl.mouse.button = SDL_GetMouseState(&studioImpl.mouse.cursor.x, &studioImpl.mouse.cursor.y);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 	{
 | 
					// 	{
 | 
				
			||||||
// 		SDL_Rect rect = {0, 0, 0, 0};
 | 
					// 		tic_rect rect = {0, 0, 0, 0};
 | 
				
			||||||
// 		calcTextureRect(&rect);
 | 
					// 		calcTextureRect(&rect);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 		if(rect.w) studioImpl.mouse.cursor.x = (studioImpl.mouse.cursor.x - rect.x) * TIC80_WIDTH / rect.w;
 | 
					// 		if(rect.w) studioImpl.mouse.cursor.x = (studioImpl.mouse.cursor.x - rect.x) * TIC80_WIDTH / rect.w;
 | 
				
			||||||
@@ -1675,7 +1683,7 @@ static void saveProject()
 | 
				
			|||||||
	else showPopupMessage("SAVE ERROR :(");
 | 
						else showPopupMessage("SAVE ERROR :(");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void screen2buffer(u32* buffer, const u32* pixels, SDL_Rect rect)
 | 
					static void screen2buffer(u32* buffer, const u32* pixels, tic_rect rect)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	pixels += rect.y * TIC80_FULLWIDTH;
 | 
						pixels += rect.y * TIC80_FULLWIDTH;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1701,7 +1709,7 @@ static void setCoverImage()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	// 	if(buffer)
 | 
						// 	if(buffer)
 | 
				
			||||||
	// 	{
 | 
						// 	{
 | 
				
			||||||
	// 		SDL_Rect rect = {OFFSET_LEFT, OFFSET_TOP, TIC80_WIDTH, TIC80_HEIGHT};
 | 
						// 		tic_rect rect = {OFFSET_LEFT, OFFSET_TOP, TIC80_WIDTH, TIC80_HEIGHT};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// 		screen2buffer(buffer, tic->screen, rect);
 | 
						// 		screen2buffer(buffer, tic->screen, rect);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1778,7 +1786,7 @@ static void takeScreenshot()
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static inline bool wasKeyPressed(s32 key)
 | 
					static inline bool isKeyWasDownOnce(s32 key)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	tic_mem* tic = studioImpl.studio.tic;
 | 
						tic_mem* tic = studioImpl.studio.tic;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1836,13 +1844,13 @@ static void processShortcuts()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	if(alt)
 | 
						if(alt)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if(wasKeyPressed(tic_key_grave)) setStudioMode(TIC_CONSOLE_MODE);
 | 
							if(isKeyWasDownOnce(tic_key_grave)) setStudioMode(TIC_CONSOLE_MODE);
 | 
				
			||||||
		else if(wasKeyPressed(tic_key_1)) setStudioMode(TIC_CODE_MODE);
 | 
							else if(isKeyWasDownOnce(tic_key_1)) setStudioMode(TIC_CODE_MODE);
 | 
				
			||||||
		else if(wasKeyPressed(tic_key_2)) setStudioMode(TIC_SPRITE_MODE);
 | 
							else if(isKeyWasDownOnce(tic_key_2)) setStudioMode(TIC_SPRITE_MODE);
 | 
				
			||||||
		else if(wasKeyPressed(tic_key_3)) setStudioMode(TIC_MAP_MODE);
 | 
							else if(isKeyWasDownOnce(tic_key_3)) setStudioMode(TIC_MAP_MODE);
 | 
				
			||||||
		else if(wasKeyPressed(tic_key_4)) setStudioMode(TIC_SFX_MODE);
 | 
							else if(isKeyWasDownOnce(tic_key_4)) setStudioMode(TIC_SFX_MODE);
 | 
				
			||||||
		else if(wasKeyPressed(tic_key_5)) setStudioMode(TIC_MUSIC_MODE);
 | 
							else if(isKeyWasDownOnce(tic_key_5)) setStudioMode(TIC_MUSIC_MODE);
 | 
				
			||||||
		else if(wasKeyPressed(tic_key_return)) goFullscreen();
 | 
							else if(isKeyWasDownOnce(tic_key_return)) goFullscreen();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// switch(event->keysym.sym)
 | 
							// switch(event->keysym.sym)
 | 
				
			||||||
		// {
 | 
							// {
 | 
				
			||||||
@@ -1857,12 +1865,12 @@ static void processShortcuts()
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	else if(ctrl)
 | 
						else if(ctrl)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if(wasKeyPressed(tic_key_pageup)) changeStudioMode(-1);
 | 
							if(isKeyWasDownOnce(tic_key_pageup)) changeStudioMode(-1);
 | 
				
			||||||
		else if(wasKeyPressed(tic_key_pagedown)) changeStudioMode(1);
 | 
							else if(isKeyWasDownOnce(tic_key_pagedown)) changeStudioMode(1);
 | 
				
			||||||
		else if(wasKeyPressed(tic_key_q)) exitStudio();
 | 
							else if(isKeyWasDownOnce(tic_key_q)) exitStudio();
 | 
				
			||||||
		else if(wasKeyPressed(tic_key_r)) runProject();
 | 
							else if(isKeyWasDownOnce(tic_key_r)) runProject();
 | 
				
			||||||
		else if(wasKeyPressed(tic_key_return)) runProject();
 | 
							else if(isKeyWasDownOnce(tic_key_return)) runProject();
 | 
				
			||||||
		else if(wasKeyPressed(tic_key_s)) saveProject();
 | 
							else if(isKeyWasDownOnce(tic_key_s)) saveProject();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//         switch(event->keysym.sym)
 | 
					//         switch(event->keysym.sym)
 | 
				
			||||||
@@ -1873,18 +1881,18 @@ static void processShortcuts()
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if(wasKeyPressed(tic_key_f1)) setStudioMode(TIC_CODE_MODE);
 | 
							if(isKeyWasDownOnce(tic_key_f1)) setStudioMode(TIC_CODE_MODE);
 | 
				
			||||||
		else if(wasKeyPressed(tic_key_f2)) setStudioMode(TIC_SPRITE_MODE);
 | 
							else if(isKeyWasDownOnce(tic_key_f2)) setStudioMode(TIC_SPRITE_MODE);
 | 
				
			||||||
		else if(wasKeyPressed(tic_key_f3)) setStudioMode(TIC_MAP_MODE);
 | 
							else if(isKeyWasDownOnce(tic_key_f3)) setStudioMode(TIC_MAP_MODE);
 | 
				
			||||||
		else if(wasKeyPressed(tic_key_f4)) setStudioMode(TIC_SFX_MODE);
 | 
							else if(isKeyWasDownOnce(tic_key_f4)) setStudioMode(TIC_SFX_MODE);
 | 
				
			||||||
		else if(wasKeyPressed(tic_key_f5)) setStudioMode(TIC_MUSIC_MODE);
 | 
							else if(isKeyWasDownOnce(tic_key_f5)) setStudioMode(TIC_MUSIC_MODE);
 | 
				
			||||||
		else if(wasKeyPressed(tic_key_f7)) setCoverImage();
 | 
							else if(isKeyWasDownOnce(tic_key_f7)) setCoverImage();
 | 
				
			||||||
		else if(wasKeyPressed(tic_key_f8)) takeScreenshot();
 | 
							else if(isKeyWasDownOnce(tic_key_f8)) takeScreenshot();
 | 
				
			||||||
#if !defined(__EMSCRIPTEN__)
 | 
					#if !defined(__EMSCRIPTEN__)
 | 
				
			||||||
		else if(wasKeyPressed(tic_key_f9)) startVideoRecord();
 | 
							else if(isKeyWasDownOnce(tic_key_f9)) startVideoRecord();
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
		else if(wasKeyPressed(tic_key_f11)) goFullscreen();
 | 
							else if(isKeyWasDownOnce(tic_key_f11)) goFullscreen();
 | 
				
			||||||
		else if(wasKeyPressed(tic_key_escape))
 | 
							else if(isKeyWasDownOnce(tic_key_escape))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			Code* code = studioImpl.editor[studioImpl.bank.index.code].code;
 | 
								Code* code = studioImpl.editor[studioImpl.bank.index.code].code;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -2253,7 +2261,7 @@ static void recordFrame(u32* pixels)
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		if(studioImpl.video.frame < studioImpl.video.frames)
 | 
							if(studioImpl.video.frame < studioImpl.video.frames)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			SDL_Rect rect = {0, 0, TIC80_FULLWIDTH, TIC80_FULLHEIGHT};
 | 
								tic_rect rect = {0, 0, TIC80_FULLWIDTH, TIC80_FULLHEIGHT};
 | 
				
			||||||
			screen2buffer(studioImpl.video.buffer + (TIC80_FULLWIDTH*TIC80_FULLHEIGHT) * studioImpl.video.frame, pixels, rect);
 | 
								screen2buffer(studioImpl.video.buffer + (TIC80_FULLWIDTH*TIC80_FULLHEIGHT) * studioImpl.video.frame, pixels, rect);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if(studioImpl.video.frame % TIC_FRAMERATE < TIC_FRAMERATE / 2)
 | 
								if(studioImpl.video.frame % TIC_FRAMERATE < TIC_FRAMERATE / 2)
 | 
				
			||||||
@@ -2275,7 +2283,7 @@ static void recordFrame(u32* pixels)
 | 
				
			|||||||
// static void blitTexture()
 | 
					// static void blitTexture()
 | 
				
			||||||
// {
 | 
					// {
 | 
				
			||||||
// 	tic_mem* tic = studioImpl.studio.tic;
 | 
					// 	tic_mem* tic = studioImpl.studio.tic;
 | 
				
			||||||
// 	SDL_Rect rect = {0, 0, 0, 0};
 | 
					// 	tic_rect rect = {0, 0, 0, 0};
 | 
				
			||||||
// 	calcTextureRect(&rect);
 | 
					// 	calcTextureRect(&rect);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 	void* pixels = NULL;
 | 
					// 	void* pixels = NULL;
 | 
				
			||||||
@@ -2320,8 +2328,8 @@ static void recordFrame(u32* pixels)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// 	{
 | 
					// 	{
 | 
				
			||||||
// 		enum {Header = OFFSET_TOP};
 | 
					// 		enum {Header = OFFSET_TOP};
 | 
				
			||||||
// 		SDL_Rect srcRect = {0, 0, TIC80_FULLWIDTH, Header};
 | 
					// 		tic_rect srcRect = {0, 0, TIC80_FULLWIDTH, Header};
 | 
				
			||||||
// 		SDL_Rect dstRect = {0};
 | 
					// 		tic_rect dstRect = {0};
 | 
				
			||||||
// 		SDL_GetWindowSize(studioImpl.window, &dstRect.w, &dstRect.h);
 | 
					// 		SDL_GetWindowSize(studioImpl.window, &dstRect.w, &dstRect.h);
 | 
				
			||||||
// 		dstRect.h = rect.y;
 | 
					// 		dstRect.h = rect.y;
 | 
				
			||||||
// 		SDL_RenderCopy(studioImpl.renderer, studioImpl.texture, &srcRect, &dstRect);
 | 
					// 		SDL_RenderCopy(studioImpl.renderer, studioImpl.texture, &srcRect, &dstRect);
 | 
				
			||||||
@@ -2329,8 +2337,8 @@ static void recordFrame(u32* pixels)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// 	{
 | 
					// 	{
 | 
				
			||||||
// 		enum {Header = OFFSET_TOP};
 | 
					// 		enum {Header = OFFSET_TOP};
 | 
				
			||||||
// 		SDL_Rect srcRect = {0, TIC80_FULLHEIGHT - Header, TIC80_FULLWIDTH, Header};
 | 
					// 		tic_rect srcRect = {0, TIC80_FULLHEIGHT - Header, TIC80_FULLWIDTH, Header};
 | 
				
			||||||
// 		SDL_Rect dstRect = {0};
 | 
					// 		tic_rect dstRect = {0};
 | 
				
			||||||
// 		SDL_GetWindowSize(studioImpl.window, &dstRect.w, &dstRect.h);
 | 
					// 		SDL_GetWindowSize(studioImpl.window, &dstRect.w, &dstRect.h);
 | 
				
			||||||
// 		dstRect.y = rect.y + rect.h;
 | 
					// 		dstRect.y = rect.y + rect.h;
 | 
				
			||||||
// 		dstRect.h = rect.y;
 | 
					// 		dstRect.h = rect.y;
 | 
				
			||||||
@@ -2340,8 +2348,8 @@ static void recordFrame(u32* pixels)
 | 
				
			|||||||
// 	{
 | 
					// 	{
 | 
				
			||||||
// 		enum {Header = OFFSET_TOP};
 | 
					// 		enum {Header = OFFSET_TOP};
 | 
				
			||||||
// 		enum {Left = OFFSET_LEFT};
 | 
					// 		enum {Left = OFFSET_LEFT};
 | 
				
			||||||
// 		SDL_Rect srcRect = {0, Header, Left, TIC80_HEIGHT};
 | 
					// 		tic_rect srcRect = {0, Header, Left, TIC80_HEIGHT};
 | 
				
			||||||
// 		SDL_Rect dstRect = {0};
 | 
					// 		tic_rect dstRect = {0};
 | 
				
			||||||
// 		SDL_GetWindowSize(studioImpl.window, &dstRect.w, &dstRect.h);
 | 
					// 		SDL_GetWindowSize(studioImpl.window, &dstRect.w, &dstRect.h);
 | 
				
			||||||
// 		dstRect.y = rect.y;
 | 
					// 		dstRect.y = rect.y;
 | 
				
			||||||
// 		dstRect.h = rect.h;
 | 
					// 		dstRect.h = rect.h;
 | 
				
			||||||
@@ -2352,7 +2360,7 @@ static void recordFrame(u32* pixels)
 | 
				
			|||||||
// 		enum {Top = OFFSET_TOP};
 | 
					// 		enum {Top = OFFSET_TOP};
 | 
				
			||||||
// 		enum {Left = OFFSET_LEFT};
 | 
					// 		enum {Left = OFFSET_LEFT};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 		SDL_Rect srcRect = {Left, Top, TIC80_WIDTH, TIC80_HEIGHT};
 | 
					// 		tic_rect srcRect = {Left, Top, TIC80_WIDTH, TIC80_HEIGHT};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 		SDL_RenderCopy(studioImpl.renderer, studioImpl.texture, &srcRect, &rect);
 | 
					// 		SDL_RenderCopy(studioImpl.renderer, studioImpl.texture, &srcRect, &rect);
 | 
				
			||||||
// 	}
 | 
					// 	}
 | 
				
			||||||
@@ -2393,12 +2401,12 @@ static void blitCursor(const u8* in)
 | 
				
			|||||||
	// 	SDL_UnlockTexture(studioImpl.mouse.texture);
 | 
						// 	SDL_UnlockTexture(studioImpl.mouse.texture);
 | 
				
			||||||
	// }
 | 
						// }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// SDL_Rect rect = {0, 0, 0, 0};
 | 
						// tic_rect rect = {0, 0, 0, 0};
 | 
				
			||||||
	// calcTextureRect(&rect);
 | 
						// calcTextureRect(&rect);
 | 
				
			||||||
	// s32 scale = rect.w / TIC80_WIDTH;
 | 
						// s32 scale = rect.w / TIC80_WIDTH;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// SDL_Rect src = {0, 0, TIC_SPRITESIZE, TIC_SPRITESIZE};
 | 
						// tic_rect src = {0, 0, TIC_SPRITESIZE, TIC_SPRITESIZE};
 | 
				
			||||||
	// SDL_Rect dst = {0, 0, TIC_SPRITESIZE * scale, TIC_SPRITESIZE * scale};
 | 
						// tic_rect dst = {0, 0, TIC_SPRITESIZE * scale, TIC_SPRITESIZE * scale};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// SDL_GetMouseState(&dst.x, &dst.y);
 | 
						// SDL_GetMouseState(&dst.x, &dst.y);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -2557,7 +2565,7 @@ static void renderStudio()
 | 
				
			|||||||
// {
 | 
					// {
 | 
				
			||||||
// 	s32 tileSize = TIC_SPRITESIZE;
 | 
					// 	s32 tileSize = TIC_SPRITESIZE;
 | 
				
			||||||
// 	s32 offset = 0;
 | 
					// 	s32 offset = 0;
 | 
				
			||||||
// 	SDL_Rect rect;
 | 
					// 	tic_rect rect;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 	const s32 JoySize = 3;
 | 
					// 	const s32 JoySize = 3;
 | 
				
			||||||
// 	SDL_GetWindowSize(studioImpl.window, &rect.w, &rect.h);
 | 
					// 	SDL_GetWindowSize(studioImpl.window, &rect.w, &rect.h);
 | 
				
			||||||
@@ -2574,11 +2582,11 @@ static void renderStudio()
 | 
				
			|||||||
// 	}
 | 
					// 	}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 	studioImpl.gamepad.part.size = tileSize;
 | 
					// 	studioImpl.gamepad.part.size = tileSize;
 | 
				
			||||||
// 	studioImpl.gamepad.part.axis = (SDL_Point){0, offset};
 | 
					// 	studioImpl.gamepad.part.axis = (tic_point){0, offset};
 | 
				
			||||||
// 	studioImpl.gamepad.part.a = (SDL_Point){rect.w - 2*tileSize, 2*tileSize + offset};
 | 
					// 	studioImpl.gamepad.part.a = (tic_point){rect.w - 2*tileSize, 2*tileSize + offset};
 | 
				
			||||||
// 	studioImpl.gamepad.part.b = (SDL_Point){rect.w - 1*tileSize, 1*tileSize + offset};
 | 
					// 	studioImpl.gamepad.part.b = (tic_point){rect.w - 1*tileSize, 1*tileSize + offset};
 | 
				
			||||||
// 	studioImpl.gamepad.part.x = (SDL_Point){rect.w - 3*tileSize, 1*tileSize + offset};
 | 
					// 	studioImpl.gamepad.part.x = (tic_point){rect.w - 3*tileSize, 1*tileSize + offset};
 | 
				
			||||||
// 	studioImpl.gamepad.part.y = (SDL_Point){rect.w - 2*tileSize, 0*tileSize + offset};
 | 
					// 	studioImpl.gamepad.part.y = (tic_point){rect.w - 2*tileSize, 0*tileSize + offset};
 | 
				
			||||||
// }
 | 
					// }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// static void renderGamepad()
 | 
					// static void renderGamepad()
 | 
				
			||||||
@@ -2586,7 +2594,7 @@ static void renderStudio()
 | 
				
			|||||||
// 	if(studioImpl.gamepad.show || studioImpl.gamepad.alpha); else return;
 | 
					// 	if(studioImpl.gamepad.show || studioImpl.gamepad.alpha); else return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 	const s32 tileSize = studioImpl.gamepad.part.size;
 | 
					// 	const s32 tileSize = studioImpl.gamepad.part.size;
 | 
				
			||||||
// 	const SDL_Point axis = studioImpl.gamepad.part.axis;
 | 
					// 	const tic_point axis = studioImpl.gamepad.part.axis;
 | 
				
			||||||
// 	typedef struct { bool press; s32 x; s32 y;} Tile;
 | 
					// 	typedef struct { bool press; s32 x; s32 y;} Tile;
 | 
				
			||||||
// 	const Tile Tiles[] =
 | 
					// 	const Tile Tiles[] =
 | 
				
			||||||
// 	{
 | 
					// 	{
 | 
				
			||||||
@@ -2606,8 +2614,8 @@ static void renderStudio()
 | 
				
			|||||||
// 	for(s32 i = 0; i < COUNT_OF(Tiles); i++)
 | 
					// 	for(s32 i = 0; i < COUNT_OF(Tiles); i++)
 | 
				
			||||||
// 	{
 | 
					// 	{
 | 
				
			||||||
// 		const Tile* tile = Tiles + i;
 | 
					// 		const Tile* tile = Tiles + i;
 | 
				
			||||||
// 		SDL_Rect src = {(tile->press ? ButtonsCount + i : i) * TIC_SPRITESIZE, 0, TIC_SPRITESIZE, TIC_SPRITESIZE};
 | 
					// 		tic_rect src = {(tile->press ? ButtonsCount + i : i) * TIC_SPRITESIZE, 0, TIC_SPRITESIZE, TIC_SPRITESIZE};
 | 
				
			||||||
// 		SDL_Rect dest = {tile->x, tile->y, tileSize, tileSize};
 | 
					// 		tic_rect dest = {tile->x, tile->y, tileSize, tileSize};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 		SDL_RenderCopy(studioImpl.renderer, studioImpl.gamepad.texture, &src, &dest);
 | 
					// 		SDL_RenderCopy(studioImpl.renderer, studioImpl.gamepad.texture, &src, &dest);
 | 
				
			||||||
// 	}
 | 
					// 	}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										18
									
								
								src/studio.h
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								src/studio.h
									
									
									
									
									
								
							@@ -122,16 +122,26 @@ typedef enum
 | 
				
			|||||||
	TIC_SURF_MODE,
 | 
						TIC_SURF_MODE,
 | 
				
			||||||
} EditorMode;
 | 
					} EditorMode;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef struct
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						s32 x, y;
 | 
				
			||||||
 | 
					} tic_point;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef struct
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						s32 x, y, w, h;
 | 
				
			||||||
 | 
					} tic_rect;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// SDL_Event* pollEvent();
 | 
					// SDL_Event* pollEvent();
 | 
				
			||||||
void setCursor(SDL_SystemCursor id);
 | 
					void setCursor(SDL_SystemCursor id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
s32 getMouseX();
 | 
					s32 getMouseX();
 | 
				
			||||||
s32 getMouseY();
 | 
					s32 getMouseY();
 | 
				
			||||||
bool checkMousePos(const SDL_Rect* rect);
 | 
					bool checkMousePos(const tic_rect* rect);
 | 
				
			||||||
bool checkMouseClick(const SDL_Rect* rect, s32 button);
 | 
					bool checkMouseClick(const tic_rect* rect, s32 button);
 | 
				
			||||||
bool checkMouseDown(const SDL_Rect* rect, s32 button);
 | 
					bool checkMouseDown(const tic_rect* rect, s32 button);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool getGesturePos(SDL_Point* pos);
 | 
					bool getGesturePos(tic_point* pos);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// const u8* getKeyboard();
 | 
					// const u8* getKeyboard();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -38,7 +38,7 @@ static void drawGrid(World* world)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	world->tic->api.rect_border(world->tic, 0, 0, TIC80_WIDTH, TIC80_HEIGHT, color);
 | 
						world->tic->api.rect_border(world->tic, 0, 0, TIC80_WIDTH, TIC80_HEIGHT, color);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	SDL_Rect rect = {0, 0, TIC80_WIDTH, TIC80_HEIGHT};
 | 
						tic_rect rect = {0, 0, TIC80_WIDTH, TIC80_HEIGHT};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(checkMousePos(&rect))
 | 
						if(checkMousePos(&rect))
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user