Tile graphics may now be loaded by specifying the directory in the tile editor and pressing the load button. It will then look for doors.png, equips.png, floors.png, items.png, npcs.png, players.png, and walls.png. If any of these are not found, some or all of the graphic sets will be unavailable (the program iterates through them and returns if any fail, so if the 3rd tileset to be loaded fails, all thereafter will not load). The set and id can also be specified, after which the tile's graphic will be displayed.

master
kts 2014-01-09 06:41:50 -08:00
parent b1aa56cade
commit 2c28c31bf8
18 changed files with 680 additions and 2837 deletions

View File

@ -1,9 +1,25 @@
#ifndef ASSETS_H
#define ASSETS_H
/* globals */
int g_set;
int g_id;
float g_scale_x;
float g_scale_y;
/* sets */
#define PLAYER 1
#define FLOOR 2
#define WALL 3
#define DOOR 4
#define ITEM 5
#define EQUIP 6
#define NPC 7
/* UI assets */
struct Element *first_element;
struct Element *last_element;
struct Element *focus_element;
struct Element *button_quit;
struct Element *text_console;
@ -28,4 +44,6 @@ struct Element *button_id;
struct Element *text_name;
struct Element *text_value;
struct Element *image_tile;
#endif

View File

@ -29,6 +29,12 @@ struct Element *newElement(int type) {
((struct TextInputElement*)element->data)->size = 8;
((struct TextInputElement*)element->data)->cursor = 0;
break;
case TYPE_IMAGE:
element->data = malloc(sizeof(struct ImageElement));
((struct ImageElement*)element->data)->width = 0;
((struct ImageElement*)element->data)->height = 0;
((struct ImageElement*)element->data)->image = NULL;
break;
default:
break;
}
@ -54,6 +60,12 @@ int setElementText(struct Element *element, const char *string) {
((struct TextElement*)element->data)->string[length] = '\0';
((struct TextElement*)element->data)->length = length;
break;
case TYPE_TEXT_INPUT:
realloc(((struct TextInputElement*)element->data)->string, length+1);
memcpy(((struct TextInputElement*)element->data)->string, string, length);
((struct TextInputElement*)element->data)->string[length] = '\0';
((struct TextInputElement*)element->data)->length = length;
((struct TextInputElement*)element->data)->cursor = length;
default:
break;
}
@ -70,6 +82,12 @@ int setElementText(struct Element *element, const char *string) {
((struct TextElement*)element->data)->string[0] = '\0';
((struct TextElement*)element->data)->length = 0;
break;
case TYPE_TEXT_INPUT:
realloc(((struct TextInputElement*)element->data)->string, 1);
((struct TextInputElement*)element->data)->string[0] = '\0';
((struct TextInputElement*)element->data)->length = 0;
((struct TextInputElement*)element->data)->cursor = 0;
break;
default:
break;
}
@ -106,6 +124,100 @@ int setElementUser(struct Element *element, void *user) {
return 0;
}
int setElementImage(struct Element *element, void *image, int width, int height) {
if (element->type == TYPE_IMAGE) {
((struct ImageElement*)element->data)->image = image;
((struct ImageElement*)element->data)->width = width;
((struct ImageElement*)element->data)->height = height;
return 0;
}
return -1;
}
/* dynamic setting ops */
int handleInputElement(struct Element *element, char ch) {
printf("got %d, want %d\n", ch, '\b');
if (element->type == TYPE_TEXT_INPUT) {
switch (ch) {
case 0:
break;
case 2: // left
if (((struct TextInputElement*)element->data)->cursor > 0) {
((struct TextInputElement*)element->data)->cursor--;
}
break;
case 3: // right
if (((struct TextInputElement*)element->data)->cursor < ((struct TextInputElement*)element->data)->length) {
((struct TextInputElement*)element->data)->cursor++;
}
break;
case '\b':
case 127:
if (((struct TextInputElement*)element->data)->cursor > 0) {
if (((struct TextInputElement*)element->data)->cursor < ((struct TextInputElement*)element->data)->length) {
((struct TextInputElement*)element->data)->length--;
int offset = ((struct TextInputElement*)element->data)->cursor;
char temp_string[256];
int i = offset;
int temp_offset = 0;
while(((struct TextInputElement*)element->data)->string[i] != '\0') {
temp_string[temp_offset++] = ((struct TextInputElement*)element->data)->string[i];
i++;
}
temp_string[temp_offset] = '\0';
// let's readd the end of the string after added char
((struct TextInputElement*)element->data)->cursor--;
i = offset-1;
temp_offset = 0;
while (temp_string[temp_offset] != '\0') {
((struct TextInputElement*)element->data)->string[i++] = temp_string[temp_offset++];
}
((struct TextInputElement*)element->data)->string[i] = '\0';
} else {
((struct TextInputElement*)element->data)->cursor--;
((struct TextInputElement*)element->data)->length--;
((struct TextInputElement*)element->data)->string[((struct TextInputElement*)element->data)->cursor] = '\0';
}
}
break;
default:
if (((struct TextInputElement*)element->data)->cursor < ((struct TextInputElement*)element->data)->size) {
if (((struct TextInputElement*)element->data)->cursor < ((struct TextInputElement*)element->data)->length) {
printf("adding %c, now is %s!\n", ch, ((struct TextInputElement*)element->data)->string);
((struct TextInputElement*)element->data)->length++;
int offset = ((struct TextInputElement*)element->data)->cursor;
char temp_string[256];
int i = offset;
int temp_offset = 0;
while(((struct TextInputElement*)element->data)->string[i] != '\0') {
temp_string[temp_offset++] = ((struct TextInputElement*)element->data)->string[i];
i++;
}
temp_string[temp_offset] = '\0';
((struct TextInputElement*)element->data)->string[((struct TextInputElement*)element->data)->cursor++] = ch;
// let's readd the end of the string after added char
i = offset+1;
temp_offset = 0;
while (temp_string[temp_offset] != '\0') {
((struct TextInputElement*)element->data)->string[i++] = temp_string[temp_offset++];
}
((struct TextInputElement*)element->data)->string[i] = '\0';
} else {
printf("adding %c, now is %s!\n", ch, ((struct TextInputElement*)element->data)->string);
((struct TextInputElement*)element->data)->length++;
((struct TextInputElement*)element->data)->string[((struct TextInputElement*)element->data)->cursor++] = ch;
((struct TextInputElement*)element->data)->string[((struct TextInputElement*)element->data)->cursor] = '\0';
}
}
break;
}
return 0;
} else {
return -1;
}
}
/* gettin' operations */
const char *getElementText(struct Element *element) {

View File

@ -8,6 +8,7 @@
#define STATE_PRESSED 1
#define STATE_HELD 2
#define STATE_DRAG 3
#define STATE_FOCUS 4
struct Element {
int x;
@ -26,6 +27,7 @@ struct Element *newElement(int type);
#define TYPE_TEXT 0
#define TYPE_BUTTON 1
#define TYPE_TEXT_INPUT 2
#define TYPE_IMAGE 3
struct ButtonElement {
int length;
@ -44,11 +46,19 @@ struct TextInputElement {
char *string;
};
struct ImageElement {
int width;
int height;
void *image;
};
int setElementText(struct Element *element, const char *string);
int setElementPosition(struct Element *element, int x, int y);
int setElementCallback(struct Element *element, void(*callback));
int setElementSize(struct Element *element, int size);
int setElementImage(struct Element *element, void *image, int width, int height);
const char *getElementText(struct Element *element);
int handleInputElement(struct Element *element, char ch);
#endif

View File

@ -29,6 +29,8 @@ int interfaceInit() {
loadFont(&font, font_images, font_images_length, 8, 8);
first_element = NULL;
last_element = NULL;
focus_element = NULL;
// load up our elements
button_quit = newElement(TYPE_BUTTON);
@ -90,6 +92,7 @@ int interfaceInit() {
input_set = newElement(TYPE_TEXT_INPUT);
setElementPosition(input_set, getElementWidth(text_set) + font.width + 4, 2 + font.height*8);
setElementSize(input_set, 3);
setElementText(input_set, "0");
addElement(input_set, menu_area);
button_set = newElement(TYPE_BUTTON);
@ -107,6 +110,7 @@ int interfaceInit() {
input_id = newElement(TYPE_TEXT_INPUT);
setElementPosition(input_id, getElementWidth(text_id) + font.width + 4, 2 + font.height*10);
setElementSize(input_id, 3);
setElementText(input_id, "0");
addElement(input_id, menu_area);
button_id = newElement(TYPE_BUTTON);
@ -117,8 +121,11 @@ int interfaceInit() {
SDL_FillRect(menu_area, NULL, SDL_MapRGB(menu_area->format, 8, 16, 12));
SDL_Rect tile_rect = { getElementWidth(button_id) + getElementWidth(text_id) + getElementWidth(input_id) + (font.width*3) + 4, 2 + font.height*8, 32, 32};
SDL_FillRect(menu_area, &tile_rect, SDL_MapRGB(menu_area->format, 0, 0, 0));
image_tile = newElement(TYPE_IMAGE);
setElementPosition(image_tile, getElementWidth(button_id) + getElementWidth(text_id) + getElementWidth(input_id) + (font.width*3) + 4, 2 + font.height*8);
SDL_Surface *tile_surface = SDL_CreateRGBSurface(menu_area->flags, 32, 32, menu_area->format->BitsPerPixel, menu_area->format->Rmask, menu_area->format->Gmask, menu_area->format->Bmask, menu_area->format->Amask);
setElementImage(image_tile, tile_surface, 32, 32);
addElement(image_tile, menu_area);
drawElement(button_quit);
drawElement(text_graphics);
@ -134,9 +141,13 @@ int interfaceInit() {
drawElement(text_id);
drawElement(input_id);
drawElement(button_id);
clearElement(text_console);
setElementText(text_console, "welcome to the tile editor");
drawElement(text_console);
drawElement(image_tile);
char cwd[128];
getcwd(cwd, sizeof(cwd));
printConsole(cwd);
//clearElement(text_console);
//setElementText(text_console, "welcome to the tile editor");
//drawElement(text_console);
SDL_BlitSurface(menu_area, NULL, screen, NULL);
@ -176,11 +187,19 @@ int interfaceLoop() {
case SDL_MOUSEMOTION:
handleMouseMove(&event.motion);
break;
case SDL_KEYDOWN:
if (event.key.state == SDL_PRESSED) {
handleKeyDown(&event.key);
}
break;
default:
break;
}
//SDL_BlitSurface(menu_area, &update_rect, screen, &update_rect);
//SDL_Surface *scaled_area = SDL_ScaleSurface(menu_area, 2.0f, 2.0f);
SDL_BlitSurface(menu_area, NULL, screen, NULL);
//SDL_BlitSurface(scaled_area, NULL, screen, NULL);
SDL_Flip(screen);
}
return 0;
@ -251,12 +270,28 @@ void drawElement(const struct Element *element) {
get_rect_son.y = element->y-1;
get_rect_son.w = (font.width * ((struct TextInputElement*)element->data)->size) + 4;
get_rect_son.h = font.height + 4;
SDL_FillRect(element->user, &get_rect_son, SDL_MapRGB(((SDL_Surface*)element->user)->format, 48, 48, 64));
if (element->state == STATE_FOCUS) {
SDL_FillRect(element->user, &get_rect_son, SDL_MapRGB(((SDL_Surface*)element->user)->format, 128, 128, 200));
} else {
SDL_FillRect(element->user, &get_rect_son, SDL_MapRGB(((SDL_Surface*)element->user)->format, 48, 48, 64));
}
get_rect_son.x = element->x;
get_rect_son.y = element->y;
get_rect_son.w = (font.width * ((struct TextInputElement*)element->data)->size) + 2;
get_rect_son.h = font.height + 2;
SDL_FillRect(element->user, &get_rect_son, SDL_MapRGB(((SDL_Surface*)element->user)->format, 32, 32, 48));
// draw string
drawString(&font, element->user, element->x+1, element->y+1, ((struct TextInputElement*)element->data)->string);
get_rect_son.x = element->x + (font.width * ((struct TextInputElement*)element->data)->cursor);
get_rect_son.y = element->y+1;
get_rect_son.w = 2;
get_rect_son.h = font.height;
SDL_FillRect(element->user, &get_rect_son, SDL_MapRGB(((SDL_Surface*)element->user)->format, 128, 128, 200));
break;
case TYPE_IMAGE:
get_rect_son.w = ((struct ImageElement*)element->data)->width;
get_rect_son.h = ((struct ImageElement*)element->data)->height;
SDL_BlitSurface(((struct ImageElement*)element->data)->image, NULL, element->user, &get_rect_son);
break;
}
}
@ -295,6 +330,9 @@ int getElementWidth(const struct Element* element) {
case TYPE_BUTTON:
return (font.width * ((struct ButtonElement*)element->data)->length) + 4;
break;
case TYPE_IMAGE:
return ((struct ImageElement*)element->data)->width;
break;
default:
break;
}
@ -312,6 +350,9 @@ int getElementHeight(const struct Element* element) {
case TYPE_BUTTON:
return font.height + 4;
break;
case TYPE_IMAGE:
return ((struct ImageElement*)element->data)->height;
break;
default:
break;
}
@ -320,6 +361,13 @@ int getElementHeight(const struct Element* element) {
/* begin handler functions */
void handleKeyDown(const SDL_KeyboardEvent *event) {
if (focus_element != NULL) {
handleInputElement(focus_element, event->keysym.unicode);
drawElement(focus_element);
}
}
void handleMouseDown(const SDL_MouseButtonEvent *event) {
struct Element *element = first_element;
int t_x, t_y, t_w, t_h = 0;
@ -331,10 +379,24 @@ void handleMouseDown(const SDL_MouseButtonEvent *event) {
t_x = element->x+2;
t_y = element->y+2;
break;
case TYPE_TEXT_INPUT:
t_w = element->x-1 +(font.width * ((struct TextInputElement*)element->data)->size) + 4;
t_h = element->y-1 + font.height + 4;
t_x = element->x-1;
t_y = element->y-1;
printf("coll: %dx%d from %dx%d to %dx%d\n", event->x, event->y, t_x, t_y, t_w, t_h);
break;
}
if ((t_x <= event->x && t_w >= event->x) && (t_y <= event->y && t_h >= event->y)) {
element->state = STATE_PRESSED;
if (last_element != NULL) {
if (last_element != element) {
last_element->state = STATE_NORMAL;
drawElement(last_element);
}
}
last_element = element;
printf("last element sent\n");
drawElement(element);
break;
}
@ -356,6 +418,12 @@ void handleMouseUp(const SDL_MouseButtonEvent *event) {
t_x = last_element->x+2;
t_y = last_element->y+2;
break;
case TYPE_TEXT_INPUT:
t_w = last_element->x-1 +(font.width * ((struct TextInputElement*)last_element->data)->size) + 4;
t_h = last_element->y-1 + font.height + 4;
t_x = last_element->x-1;
t_y = last_element->y-1;
break;
}
last_element->state = STATE_NORMAL;
drawElement(last_element);
@ -363,7 +431,15 @@ void handleMouseUp(const SDL_MouseButtonEvent *event) {
if (last_element->callback != NULL) {
last_element->callback();
}
if (last_element->type == TYPE_TEXT_INPUT) {
focus_element = last_element;
focus_element->state = STATE_FOCUS;
printf("focused on element!\n");
}
} else {
focus_element = NULL;
}
drawElement(last_element);
update_rect.x = t_x-2;
update_rect.y = t_y-2;
update_rect.w = t_w+2;
@ -378,36 +454,124 @@ void handleMouseMove(const SDL_MouseMotionEvent *event) {
/* button callback */
void loadGraphicsCallback() {
clearElement(text_console);
setElementText(text_console, "loading gfx");
drawElement(text_console);
printConsole("loading gfx");
int ret = 0;
char temp[64];
char temp_2[96];
sprintf(temp, "%s/%s", getElementText(input_graphics), "players.png");
//sprintf(temp_2, "loading players.png");
//printConsole(temp);
ret = loadSpritesheetFromFile(&player_sprites, temp, 16, 32, 6);
if (ret != 0)
return;
sprintf(temp, "%s/%s", getElementText(input_graphics), "items.png");
//sprintf(temp_2, "loading items.png");
//printConsole(temp);
ret = loadSpritesheetFromFile(&item_sprites, temp, 16, 32, 16);
if (ret != 0)
return;
sprintf(temp, "%s/%s", getElementText(input_graphics), "equips.png");
//sprintf(temp_2, "loading equips.png");
//printConsole(temp);
ret = loadSpritesheetFromFile(&equip_sprites, temp, 16, 32, 16);
if (ret != 0)
return;
sprintf(temp, "%s/%s", getElementText(input_graphics), "doors.png");
//sprintf(temp_2, "loading doors.png");
//printConsole(temp);
ret = loadSpritesheetFromFile(&door_sprites, temp, 16, 32, 16);
if (ret != 0)
return;
sprintf(temp, "%s/%s", getElementText(input_graphics), "npcs.png");
//sprintf(temp_2, "loading npcs.png");
//printConsole(temp);
ret = loadSpritesheetFromFile(&npc_sprites, temp, 16, 32, 16);
if (ret != 0)
return;
sprintf(temp, "%s/%s", getElementText(input_graphics), "floors.png");
//sprintf(temp_2, "loading floors.png");
//printConsole(temp);
ret = loadSpritesheetFromFile(&floor_sprites, temp, 16, 32, 16);
if (ret != 0)
return;
sprintf(temp, "%s/%s", getElementText(input_graphics), "walls.png");
//sprintf(temp_2, "loading walls.png");
//printConsole(temp);
ret = loadSpritesheetFromFile(&wall_sprites, temp, 16, 32, 16);
if (ret != 0)
return;
}
void loadDataCallback() {
clearElement(text_console);
setElementText(text_console, "loading data");
drawElement(text_console);
printConsole("loading data");
}
void saveDataCallback() {
clearElement(text_console);
setElementText(text_console, "saving data");
drawElement(text_console);
printConsole("saving data");
}
void setSetCallback() {
char temp[16];
sprintf(temp, "OK: using set %s", getElementText(input_set));
clearElement(text_console);
setElementText(text_console, temp);
drawElement(text_console);
printConsole(temp);
g_set = atoi(getElementText(input_set));
reloadImagePreview();
}
void setIdCallback() {
char temp[16];
sprintf(temp, "OK: using id %s", getElementText(input_id));
printConsole(temp);
g_id = atoi(getElementText(input_id));
reloadImagePreview();
}
void reloadImagePreview() {
struct Spritesheet *spritesheet;
switch (g_set) {
case PLAYER:
spritesheet = &player_sprites;
break;
case FLOOR:
spritesheet = &floor_sprites;
break;
case WALL:
spritesheet = &wall_sprites;
break;
case DOOR:
spritesheet = &door_sprites;
break;
case ITEM:
spritesheet = &item_sprites;
break;
case EQUIP:
spritesheet = &equip_sprites;
break;
case NPC:
spritesheet = &npc_sprites;
break;
default:
return;
break;
}
int y_offset = g_id / spritesheet->columns;
int x_offset = g_id - (y_offset * spritesheet->columns);
SDL_Rect sprite_offset = { x_offset*spritesheet->width, y_offset*spritesheet->height, spritesheet->width, spritesheet->height};
SDL_Rect render_position = {0, 0, spritesheet->width, spritesheet->height};
SDL_FillRect(((struct ImageElement *)image_tile->data)->image, NULL, SDL_MapRGB(menu_area->format, 96, 96, 128));
SDL_BlitSurface(spritesheet->spritesheet, &sprite_offset, ((struct ImageElement*)image_tile->data)->image, &render_position);
drawElement(image_tile);
}
void printConsole(const char *string) {
clearElement(text_console);
setElementText(text_console, temp);
setElementText(text_console, string);
drawElement(text_console);
}
@ -422,3 +586,114 @@ void loadFont(struct Font *font, unsigned char *memory, unsigned int length, int
void freeFont(struct Font *font) {
SDL_FreeSurface(font->surface);
}
/* spritesheet stuff */
int loadSpritesheetFromFile(struct Spritesheet *spritesheet, char *file_name, int width, int height, int columns) {
spritesheet->width = width;
spritesheet->height = height;
spritesheet->columns = columns;
spritesheet->spritesheet = IMG_Load(file_name);
if (spritesheet->spritesheet == NULL)
return -1;
spritesheet->scale_x = 1.0f;
spritesheet->scale_y = 1.0f;
spritesheet->s_spritesheet = SDL_ScaleSurface(spritesheet->spritesheet, 1.0f, 1.0f);
spritesheet->s_width = width;
spritesheet->s_height = height;
return 0;
}
void freeSpritesheet(struct Spritesheet *spritesheet) {
SDL_FreeSurface(spritesheet->s_spritesheet);
SDL_FreeSurface(spritesheet->spritesheet);
}
/* sdl helper stuff */
SDL_Surface *SDL_ScaleSurface(SDL_Surface *surface, float scale_x, float scale_y) {
long x;
long y;
long output_x;
long output_y;
long new_width = (long)((float)surface->w * scale_x+0.5f);
long new_height = (long)((float)surface->h * scale_y+0.5f);
SDL_Surface *new_surface = SDL_CreateRGBSurface(surface->flags, new_width, new_height, surface->format->BitsPerPixel, surface->format->Rmask, surface->format->Gmask, surface->format->Bmask, surface->format->Amask);
for (y = 0;y < surface->h;y++) {
for (x = 0;x < surface->w;x++) {
for (output_y = 0;output_y < scale_y; ++output_y) {
for (output_x = 0;output_x < scale_x; ++output_x) {
putpixel(new_surface, (Sint32)(scale_x*x) + output_x, (Sint32)(scale_y*y)+output_y, getpixel(surface, x, y));
}
}
}
}
return new_surface;
}
Uint32 getpixel(SDL_Surface *surface, int x, int y) {
if (y >= 0 && x >= 0 && x <= surface->w && y <= surface->h) {
int bpp = surface->format->BytesPerPixel;
/* Here p is the address to the pixel we want to retrieve */
Uint8 *p = (Uint8 *)surface->pixels + y * surface->pitch + x * bpp;
switch(bpp) {
case 1:
return *p;
break;
case 2:
return *(Uint16 *)p;
break;
case 3:
if(SDL_BYTEORDER == SDL_BIG_ENDIAN)
return p[0] << 16 | p[1] << 8 | p[2];
else
return p[0] | p[1] << 8 | p[2] << 16;
break;
case 4:
return *(Uint32 *)p;
break;
default:
return 0; /* shouldn't happen, but avoids warnings */
}
}
return 0;
}
void putpixel(SDL_Surface *surface, int x, int y, Uint32 pixel) {
if (y >= 0 && x >= 0 && x <= surface->w && y <= surface->h) {
int bpp = surface->format->BytesPerPixel;
/* Here p is the address to the pixel we want to set */
Uint8 *p = (Uint8 *)surface->pixels + y * surface->pitch + x * bpp;
switch(bpp) {
case 1:
*p = pixel;
break;
case 2:
*(Uint16 *)p = pixel;
break;
case 3:
if(SDL_BYTEORDER == SDL_BIG_ENDIAN) {
p[0] = (pixel >> 16) & 0xff;
p[1] = (pixel >> 8) & 0xff;
p[2] = pixel & 0xff;
} else {
p[0] = pixel & 0xff;
p[1] = (pixel >> 8) & 0xff;
p[2] = (pixel >> 16) & 0xff;
}
break;
case 4:
*(Uint32 *)p = pixel;
break;
}
}
}

View File

@ -17,12 +17,33 @@ struct Font {
int height;
SDL_Surface *surface;
};
void loadFont(struct Font *font, unsigned char *memory, unsigned int length, int width, int height);
void drawChar(const struct Font *font, SDL_Surface *surface, int x, int y, const char ch);
void drawString(const struct Font *font, SDL_Surface *surface, int x, int y, const char *string);
struct Spritesheet player_sprites;
struct Spritesheet item_sprites;
struct Spritesheet equip_sprites;
struct Spritesheet shadow_sprites;
struct Spritesheet npc_sprites;
struct Spritesheet door_sprites;
struct Spritesheet floor_sprites;
struct Spritesheet wall_sprites;
struct Spritesheet {
int width;
int height;
int s_width;
int s_height;
int columns;
float scale_x;
float scale_y;
SDL_Surface *spritesheet;
SDL_Surface *s_spritesheet;
};
int loadSpritesheetFromFile(struct Spritesheet *spritesheet, char *file_name, int width, int height, int columns);
void freeSpritesheet(struct Spritesheet *spritesheet);
void drawElement(const struct Element *element);
void clearElement(const struct Element *element);
@ -31,6 +52,7 @@ void addElement(struct Element *element, SDL_Surface *surface);
void handleMouseDown(const SDL_MouseButtonEvent *event);
void handleMouseUp(const SDL_MouseButtonEvent *event);
void handleMouseMove(const SDL_MouseMotionEvent *event);
void handleKeyDown(const SDL_KeyboardEvent *event);
int getElementWidth(const struct Element* element);
int getElementHeight(const struct Element* element);
@ -41,6 +63,14 @@ void saveDataCallback();
void setSetCallback();
void setIdCallback();
void reloadImagePreview();
void printConsole(const char *string);
void Quit();
/* sdl helper */
Uint32 getpixel(SDL_Surface *surface, int x, int y);
void putpixel(SDL_Surface *surface, int x, int y, Uint32 pixel);
SDL_Surface *SDL_ScaleSurface(SDL_Surface *surface, float scale_x, float scale_y);
#endif

BIN
xcode/build/.DS_Store vendored

Binary file not shown.

Binary file not shown.

View File

@ -267,8 +267,6 @@
<string>29B97315FDCFA39411CA2CEA</string>
<string>29B97317FDCFA39411CA2CEA</string>
<string>1C37FBAC04509CD000000102</string>
<string>2019282118725C39006071D0</string>
<string>201928941872766C006071D0</string>
<string>1C37FAAC04509CD000000102</string>
<string>1C37FABC05509CD000000102</string>
</array>
@ -298,7 +296,7 @@
<real>186</real>
</array>
<key>RubberWindowFrame</key>
<string>1280 601 810 423 1280 256 1024 768 </string>
<string>0 323 810 423 0 0 1024 746 </string>
</dict>
<key>Module</key>
<string>PBXSmartGroupTreeModule</string>
@ -309,8 +307,6 @@
<key>Dock</key>
<array>
<dict>
<key>BecomeActive</key>
<true/>
<key>ContentConfiguration</key>
<dict>
<key>PBXProjectModuleGUID</key>
@ -328,7 +324,7 @@
<key>_historyCapacity</key>
<integer>0</integer>
<key>bookmark</key>
<string>20192A301872D2E3006071D0</string>
<string>20E4F920187EEBA600D8069C</string>
<key>history</key>
<array>
<string>206D60391808F3A600C0DE49</string>
@ -369,7 +365,8 @@
<string>2019284D187269BC006071D0</string>
<string>201928951872766C006071D0</string>
<string>201928B51872794B006071D0</string>
<string>2019293D18729BEB006071D0</string>
<string>20E4F80618777D6600D8069C</string>
<string>20E4F88D1879228000D8069C</string>
</array>
<key>prevStack</key>
<array>
@ -412,12 +409,8 @@
<string>20EE4E33186EB2CB003FF203</string>
<string>20EE4E3D186EB345003FF203</string>
<string>2019284E187269BC006071D0</string>
<string>201928981872766C006071D0</string>
<string>201928991872766C006071D0</string>
<string>2019289A1872766C006071D0</string>
<string>2019289C1872766C006071D0</string>
<string>201928AD18727795006071D0</string>
<string>201928B71872794B006071D0</string>
<string>20E4F7691876B34100D8069C</string>
<string>20E4F80818777D6600D8069C</string>
</array>
</dict>
<key>SplitCount</key>
@ -431,7 +424,7 @@
<key>Frame</key>
<string>{{0, 0}, {602, 253}}</string>
<key>RubberWindowFrame</key>
<string>1280 601 810 423 1280 256 1024 768 </string>
<string>0 323 810 423 0 0 1024 746 </string>
</dict>
<key>Module</key>
<string>PBXNavigatorGroup</string>
@ -439,6 +432,8 @@
<string>253pt</string>
</dict>
<dict>
<key>BecomeActive</key>
<true/>
<key>ContentConfiguration</key>
<dict>
<key>PBXProjectModuleGUID</key>
@ -451,7 +446,7 @@
<key>Frame</key>
<string>{{0, 258}, {602, 124}}</string>
<key>RubberWindowFrame</key>
<string>1280 601 810 423 1280 256 1024 768 </string>
<string>0 323 810 423 0 0 1024 746 </string>
</dict>
<key>Module</key>
<string>XCDetailModule</string>
@ -475,9 +470,9 @@
</array>
<key>TableOfContents</key>
<array>
<string>20192850187269BC006071D0</string>
<string>20E4F7581876A33200D8069C</string>
<string>1CE0B1FE06471DED0097A5F4</string>
<string>20192851187269BC006071D0</string>
<string>20E4F7591876A33200D8069C</string>
<string>1CE0B20306471E060097A5F4</string>
<string>1CE0B20506471E060097A5F4</string>
</array>
@ -611,16 +606,15 @@
<integer>5</integer>
<key>WindowOrderList</key>
<array>
<string>201928CD18727FE6006071D0</string>
<string>201928CE18727FE6006071D0</string>
<string>1CD10A99069EF8BA00B06720</string>
<string>/Users/kts/Devel/timesynk/xcode/timesynk.xcodeproj</string>
<string>201929841872A750006071D0</string>
<string>20E4F7801876B63100D8069C</string>
<string>20E4F7811876B63100D8069C</string>
<string>1C78EAAD065D492600B07095</string>
<string>1CD10A99069EF8BA00B06720</string>
<string>20F6A1B417E95A6200BAD261</string>
<string>/Users/kts/Devel/timesynk/xcode/timesynk.xcodeproj</string>
</array>
<key>WindowString</key>
<string>1280 601 810 423 1280 256 1024 768 </string>
<string>0 323 810 423 0 0 1024 746 </string>
<key>WindowToolsV3</key>
<array>
<dict>
@ -650,7 +644,7 @@
<key>Frame</key>
<string>{{0, 0}, {500, 218}}</string>
<key>RubberWindowFrame</key>
<string>1411 417 500 500 1280 256 1024 768 </string>
<string>118 235 500 500 0 0 1024 746 </string>
</dict>
<key>Module</key>
<string>PBXNavigatorGroup</string>
@ -676,7 +670,7 @@
<key>Frame</key>
<string>{{0, 223}, {500, 236}}</string>
<key>RubberWindowFrame</key>
<string>1411 417 500 500 1280 256 1024 768 </string>
<string>118 235 500 500 0 0 1024 746 </string>
</dict>
<key>Module</key>
<string>PBXBuildResultsModule</string>
@ -699,18 +693,18 @@
<key>TableOfContents</key>
<array>
<string>20F6A1B417E95A6200BAD261</string>
<string>2019283E18726055006071D0</string>
<string>20E4F75C1876A40700D8069C</string>
<string>1CD0528F0623707200166675</string>
<string>XCMainBuildResultsModuleGUID</string>
</array>
<key>ToolbarConfiguration</key>
<string>xcode.toolbar.config.buildV3</string>
<key>WindowString</key>
<string>1411 417 500 500 1280 256 1024 768 </string>
<string>118 235 500 500 0 0 1024 746 </string>
<key>WindowToolGUID</key>
<string>20F6A1B417E95A6200BAD261</string>
<key>WindowToolIsVisible</key>
<true/>
<false/>
</dict>
<dict>
<key>FirstTimeWindowDisplayed</key>
@ -793,10 +787,10 @@
<key>Frame</key>
<string>{{383, 0}, {458, 207}}</string>
<key>RubberWindowFrame</key>
<string>1350 584 841 429 1280 256 1024 768 </string>
<string>133 266 841 429 0 0 1024 746 </string>
</dict>
<key>RubberWindowFrame</key>
<string>1350 584 841 429 1280 256 1024 768 </string>
<string>133 266 841 429 0 0 1024 746 </string>
</dict>
<key>Module</key>
<string>PBXDebugSessionModule</string>
@ -819,18 +813,18 @@
<key>TableOfContents</key>
<array>
<string>1CD10A99069EF8BA00B06720</string>
<string>2019283F18726055006071D0</string>
<string>20E4F75D1876A40700D8069C</string>
<string>1C162984064C10D400B95A72</string>
<string>2019284018726055006071D0</string>
<string>2019284118726055006071D0</string>
<string>2019284218726055006071D0</string>
<string>2019284318726055006071D0</string>
<string>2019284418726055006071D0</string>
<string>20E4F75E1876A40700D8069C</string>
<string>20E4F75F1876A40700D8069C</string>
<string>20E4F7601876A40700D8069C</string>
<string>20E4F7611876A40700D8069C</string>
<string>20E4F7621876A40700D8069C</string>
</array>
<key>ToolbarConfiguration</key>
<string>xcode.toolbar.config.debugV3</string>
<key>WindowString</key>
<string>1350 584 841 429 1280 256 1024 768 </string>
<string>133 266 841 429 0 0 1024 746 </string>
<key>WindowToolGUID</key>
<string>1CD10A99069EF8BA00B06720</string>
<key>WindowToolIsVisible</key>
@ -966,7 +960,7 @@
<key>Frame</key>
<string>{{0, 0}, {650, 209}}</string>
<key>RubberWindowFrame</key>
<string>1605 337 650 250 1280 256 1024 768 </string>
<string>367 75 650 250 0 0 1024 746 </string>
</dict>
<key>Module</key>
<string>PBXDebugCLIModule</string>
@ -989,17 +983,17 @@
<key>TableOfContents</key>
<array>
<string>1C78EAAD065D492600B07095</string>
<string>2019284518726055006071D0</string>
<string>20E4F7631876A40700D8069C</string>
<string>1C78EAAC065D492600B07095</string>
</array>
<key>ToolbarConfiguration</key>
<string>xcode.toolbar.config.consoleV3</string>
<key>WindowString</key>
<string>1605 337 650 250 1280 256 1024 768 </string>
<string>367 75 650 250 0 0 1024 746 </string>
<key>WindowToolGUID</key>
<string>1C78EAAD065D492600B07095</string>
<key>WindowToolIsVisible</key>
<true/>
<false/>
</dict>
<dict>
<key>Identifier</key>
@ -1205,7 +1199,7 @@
<real>168</real>
</array>
<key>RubberWindowFrame</key>
<string>1371 581 744 409 1280 256 1024 768 </string>
<string>91 306 744 409 0 0 1024 746 </string>
</dict>
<key>Module</key>
<string>PBXSmartGroupTreeModule</string>
@ -1225,7 +1219,7 @@
<key>Frame</key>
<string>{{190, 0}, {554, 368}}</string>
<key>RubberWindowFrame</key>
<string>1371 581 744 409 1280 256 1024 768 </string>
<string>91 306 744 409 0 0 1024 746 </string>
</dict>
<key>Module</key>
<string>XCDetailModule</string>
@ -1260,7 +1254,7 @@
<key>ToolbarConfiguration</key>
<string>xcode.toolbar.config.breakpointsV3</string>
<key>WindowString</key>
<string>1371 581 744 409 1280 256 1024 768 </string>
<string>91 306 744 409 0 0 1024 746 </string>
<key>WindowToolGUID</key>
<string>201929841872A750006071D0</string>
<key>WindowToolIsVisible</key>

File diff suppressed because it is too large Load Diff