Beispiel #1
0
static void copyFromClipboard(Sprite* sprite)
{
	if(sprite->editPalette)
		pasteColor(sprite);

	s32 size = sprite->size * sprite->size * TIC_PALETTE_BPP / BITS_IN_BYTE;
	u8* buffer = malloc(size);

	if(buffer)
	{
		if(fromClipboard(buffer, size, true, false))
		{
			tic_rect rect = getSpriteRect(sprite);
			s32 r = rect.x + rect.w;
			s32 b = rect.y + rect.h;

			for(s32 y = rect.y, i = 0; y < b; y++)
				for(s32 x = rect.x; x < r; x++)
					setSheetPixel(sprite, x, y, tic_tool_peek4(buffer, i++));

			history_add(sprite->history);
		}

		free(buffer);

	}
}
Beispiel #2
0
static void rotateSprite(Sprite* sprite)
{
	const s32 Size = sprite->size;
	u8* buffer = (u8*)malloc(Size * Size);

	if(buffer)
	{
		{
			tic_rect rect = getSpriteRect(sprite);
			s32 r = rect.x + rect.w;
			s32 b = rect.y + rect.h;

			for(s32 y = rect.y, i = 0; y < b; y++)
				for(s32 x = rect.x; x < r; x++)
					buffer[i++] = getSheetPixel(sprite, x, y);

			for(s32 y = rect.y, j = 0; y < b; y++, j++)
				for(s32 x = rect.x, i = 0; x < r; x++, i++)
					setSheetPixel(sprite, x, y, buffer[j + (Size-i-1)*Size]);

			history_add(sprite->history);
		}

		free(buffer);
	}
}
Beispiel #3
0
static void deleteSprite(Sprite* sprite)
{
	tic_rect rect = getSpriteRect(sprite);
	s32 r = rect.x + rect.w;
	s32 b = rect.y + rect.h;

	for(s32 y = rect.y; y < b; y++)
		for(s32 x = rect.x; x < r; x++)
			setSheetPixel(sprite, x, y, sprite->color2);

	clearCanvasSelection(sprite);

	history_add(sprite->history);
}
Beispiel #4
0
static void flipSpriteVert(Sprite* sprite)
{
	tic_rect rect = getSpriteRect(sprite);
	s32 r = rect.x + rect.w;
	s32 b = rect.y + rect.h/2;

	for(s32 y = rect.y, i = rect.y + rect.h - 1; y < b; y++, i--)
		for(s32 x = rect.x; x < r; x++)
		{
			u8 color = getSheetPixel(sprite, x, y);
			setSheetPixel(sprite, x, y, getSheetPixel(sprite, x, i));
			setSheetPixel(sprite, x, i, color);
		}

	history_add(sprite->history);
}
Beispiel #5
0
static void flipSpriteHorz(Sprite* sprite)
{
	tic_rect rect = getSpriteRect(sprite);
	s32 r = rect.x + rect.w/2;
	s32 b = rect.y + rect.h;

	for(s32 y = rect.y; y < b; y++)
		for(s32 x = rect.x, i = rect.x + rect.w - 1; x < r; x++, i--)
		{
			u8 color = getSheetPixel(sprite, x, y);
			setSheetPixel(sprite, x, y, getSheetPixel(sprite, i, y));
			setSheetPixel(sprite, i, y, color);
		}

	history_add(sprite->history);
}
Beispiel #6
0
static void copyToClipboard(Sprite* sprite)
{
	s32 size = sprite->size * sprite->size * TIC_PALETTE_BPP / BITS_IN_BYTE;
	u8* buffer = malloc(size);

	if(buffer)
	{
		tic_rect rect = getSpriteRect(sprite);
		s32 r = rect.x + rect.w;
		s32 b = rect.y + rect.h;

		for(s32 y = rect.y, i = 0; y < b; y++)
			for(s32 x = rect.x; x < r; x++)
				tic_tool_poke4(buffer, i++, getSheetPixel(sprite, x, y) & 0xf);

		toClipboard(buffer, size, true);

		free(buffer);
	}
}
Beispiel #7
0
wxBitmap gcThemeManager::getSprite(wxImage& img, const char* spriteId, const char* spriteName)
{
	SpriteRectI* rect = getSpriteRect(spriteId, spriteName);

	if (!rect || !img.IsOk())
		return wxBitmap();

	int w = rect->getW();
	int h = rect->getH();
	int x = rect->getX();
	int y = rect->getY();

	if (w < 0)
		w = img.GetWidth();

	if (h < 0)
		h =	img.GetHeight();

	if (w > img.GetWidth())
		w = img.GetWidth();

	if (h > img.GetHeight())
		h =	img.GetHeight();

	if (x < 0)
		x = 0;

	if (x > img.GetWidth() - w)
		x = 0;

	if (y < 0)
		y = 0;

	if (y > img.GetHeight() - h)
		y = 0;

	return wxBitmap( img.GetSubImage( wxRect(x,y,w,h) ) );
}
Beispiel #8
0
static void drawCanvasOvr(Sprite* sprite, s32 x, s32 y)
{
	tic_rect rect = getSpriteRect(sprite);
	s32 r = rect.x + rect.w;
	s32 b = rect.y + rect.h;

	const s32 Size = CANVAS_SIZE / sprite->size;

	for(s32 sy = rect.y, j = y; sy < b; sy++, j += Size)
		for(s32 sx = rect.x, i = x; sx < r; sx++, i += Size)
			sprite->tic->api.rect(sprite->tic, i, j, Size, Size, getSheetPixel(sprite, sx, sy));


	if(hasCanvasSelection(sprite))
		drawSelection(sprite, x + sprite->select.rect.x * Size - 1, y + sprite->select.rect.y * Size - 1, 
			sprite->select.rect.w * Size + 2, sprite->select.rect.h * Size + 2);

	if(!sprite->editPalette)
	{
		switch(sprite->mode)
		{
		case SPRITE_DRAW_MODE: 
			processDrawCanvasMouse(sprite, x, y, rect.x, rect.y);
			break;
		case SPRITE_PICK_MODE: processPickerCanvasMouse(sprite, x, y, rect.x, rect.y); break;
		case SPRITE_SELECT_MODE: processSelectCanvasMouse(sprite, x, y); break;
		case SPRITE_FILL_MODE: processFillCanvasMouse(sprite, x, y, rect.x, rect.y); break;
		}		
	}

	tic_rect canvasRect = {x, y, CANVAS_SIZE, CANVAS_SIZE};
	if(checkMouseDown(&canvasRect, tic_mouse_middle))
	{
		s32 mx = getMouseX() - x;
		s32 my = getMouseY() - y;
		sprite->color = getSheetPixel(sprite, rect.x + mx / Size, rect.y + my / Size);
	}
}
Beispiel #9
0
static void copySelection(Sprite* sprite)
{
	tic_rect rect = getSpriteRect(sprite);
	s32 r = rect.x + rect.w;
	s32 b = rect.y + rect.h;

	for(s32 sy = rect.y, i = 0; sy < b; sy++)
		for(s32 sx = rect.x; sx < r; sx++)
			sprite->select.back[i++] = getSheetPixel(sprite, sx, sy);

	{
		tic_rect* rect = &sprite->select.rect;
		memset(sprite->select.front, 0, CANVAS_SIZE * CANVAS_SIZE);

		for(s32 j = rect->y, index = 0; j < (rect->y + rect->h); j++)
			for(s32 i = rect->x; i < (rect->x + rect->w); i++)
			{
				u8* color = &sprite->select.back[i+j*sprite->size];
				sprite->select.front[index++] = *color;
				*color = sprite->color2;
			}
	}
}