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); } }
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); } }
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); }
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); }
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); }
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); } }
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) ) ); }
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); } }
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; } } }