diff --git a/ogl_editor/src/Editor.c b/ogl_editor/src/Editor.c index 2d57679..cdc4f6f 100644 --- a/ogl_editor/src/Editor.c +++ b/ogl_editor/src/Editor.c @@ -16,15 +16,6 @@ #include "../../sync/base.h" #include "../../sync/data.h" -/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -#if defined(EMGUI_MACOSX) -#define FONT_PATH "/Library/Fonts/" -#elif defined(EMGUI_WINDOWS) -#define FONT_PATH "C:\\Windows\\Fonts\\" -#else -#error "Unsupported platform" -#endif /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -127,7 +118,7 @@ static void drawStatus() float value = 0.0f; const char *str = "---"; struct sync_track** tracks = getTracks(); - const int sizeY = s_editorData.trackViewInfo.windowSizeY; + const int sizeY = s_editorData.trackViewInfo.windowSizeY; active_track = getActiveTrack(); current_row = s_editorData.trackViewInfo.rowPos; @@ -137,6 +128,7 @@ static void drawStatus() const struct sync_track* track = tracks[active_track]; int row = s_editorData.trackViewInfo.rowPos; int idx = key_idx_floor(track, row); + if (idx >= 0) { switch (track->keys[idx].type) @@ -229,12 +221,14 @@ static void deleteArea(int rowPos, int track, int bufferWidth, int bufferHeight) for (i = 0; i < bufferWidth; ++i) { - size_t trackPos = track + i; + struct sync_track* t; + int trackPos = track + i; + int trackIndex = trackPos; + if (trackPos >= track_count) continue; - size_t trackIndex = trackPos; - struct sync_track* t = tracks[trackIndex]; + t = tracks[trackIndex]; for (j = 0; j < bufferHeight; ++j) { @@ -354,7 +348,7 @@ bool Editor_keyDown(int key, int modifiers) case EMGUI_ARROW_RIGHT: { - int track = getActiveTrack(); track++; + int track = getActiveTrack() + 1; int track_count = getTrackCount(); if (track >= track_count) @@ -405,6 +399,7 @@ bool Editor_keyDown(int key, int modifiers) const int buffer_height = s_copyData.bufferHeight; const int buffer_size = s_copyData.count; const int track_count = getTrackCount(); + int i, trackPos; if (!s_copyData.entries) return false; @@ -413,7 +408,7 @@ bool Editor_keyDown(int key, int modifiers) deleteArea(row_pos, active_track, buffer_width, buffer_height); - for (int i = 0; i < buffer_size; ++i) + for (i = 0; i < buffer_size; ++i) { const CopyEntry* ce = &s_copyData.entries[i]; @@ -422,7 +417,7 @@ bool Editor_keyDown(int key, int modifiers) assert(ce->keyFrame.row >= 0); assert(ce->keyFrame.row < buffer_height); - size_t trackPos = active_track + ce->track; + trackPos = active_track + ce->track; if (trackPos < track_count) { size_t trackIndex = trackPos; @@ -469,11 +464,12 @@ bool Editor_keyDown(int key, int modifiers) for (row = selectTop; row <= selectBottom; ++row) { + struct track_key newKey; int idx = sync_find_key(t, row); if (idx < 0) continue; - struct track_key newKey = t->keys[idx]; + newKey = t->keys[idx]; newKey.value += bias_value; sync_set_key(t, &newKey); @@ -497,7 +493,7 @@ bool Editor_keyDown(int key, int modifiers) is_editing = true; } - s_editBuffer[strlen(s_editBuffer)] = key; + s_editBuffer[strlen(s_editBuffer)] = (char)key; s_editorData.trackData.editText = s_editBuffer; return true; @@ -508,14 +504,15 @@ bool Editor_keyDown(int key, int modifiers) if (key != 27) { + const char* track_name; struct track_key key; + struct sync_track* track = tracks[active_track]; key.row = row_pos; - key.value = atof(s_editBuffer); + key.value = (float)atof(s_editBuffer); key.type = 0; - struct sync_track* track = tracks[active_track]; - const char* track_name = track->name; + track_name = track->name; sync_set_key(track, &key); @@ -524,14 +521,13 @@ bool Editor_keyDown(int key, int modifiers) RemoteConnection_sendSetKeyCommand(track_name, &key); } - handled_key = true; - is_editing = false; s_editorData.trackData.editText = 0; } if (key == 'i') { + struct track_key newKey; struct sync_track* track = tracks[active_track]; int row = viewInfo->rowPos; @@ -540,7 +536,7 @@ bool Editor_keyDown(int key, int modifiers) return false; // copy and modify - struct track_key newKey = track->keys[idx]; + newKey = track->keys[idx]; newKey.type = ((newKey.type + 1) % KEY_TYPE_COUNT); sync_set_key(track, &newKey); diff --git a/ogl_editor/src/External/mxml/config.h b/ogl_editor/src/External/mxml/config.h index 1f59ba3..9c3df99 100644 --- a/ogl_editor/src/External/mxml/config.h +++ b/ogl_editor/src/External/mxml/config.h @@ -66,7 +66,9 @@ * Do we have threading support? */ +#if defined(__APPLE__) #define HAVE_PTHREAD_H 1 +#endif /* diff --git a/ogl_editor/src/RemoteConnection.c b/ogl_editor/src/RemoteConnection.c index 30e2a27..f5eaec7 100644 --- a/ogl_editor/src/RemoteConnection.c +++ b/ogl_editor/src/RemoteConnection.c @@ -127,19 +127,20 @@ static bool setBlocking(int sock, bool blocking) bool RemoteConnection_createListner() { + struct sockaddr_in sin; + int yes = 1; + s_serverSocket = socket(AF_INET, SOCK_STREAM, 0); if (s_serverSocket == INVALID_SOCKET) return false; - struct sockaddr_in sin; memset(&sin, 0, sizeof sin); sin.sin_family = AF_INET; sin.sin_addr.s_addr = INADDR_ANY; sin.sin_port = htons(1338); - int yes = 1; if (setsockopt(s_serverSocket, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) == -1) { perror("setsockopt"); diff --git a/ogl_editor/src/TrackView.c b/ogl_editor/src/TrackView.c index e964973..7756d44 100644 --- a/ogl_editor/src/TrackView.c +++ b/ogl_editor/src/TrackView.c @@ -56,8 +56,11 @@ static int renderChannel(const TrackViewInfo* viewInfo, struct sync_track* track int startX, int startY, int startPos, int endPos, int endSizeY, int trackId, int selectLeft, int selectRight, int selectTop, int selectBottom) { - uint y; + int y, y_offset; int size = min_track_size; + uint32_t color = Emgui_color32(40, 40, 40, 255); + + Emgui_drawBorder(color, color, startX, startY - 20, 160, 600); if (track) { @@ -78,10 +81,9 @@ static int renderChannel(const TrackViewInfo* viewInfo, struct sync_track* track Emgui_setDefaultFont(); } - uint32_t color = Emgui_color32(40, 40, 40, 255); Emgui_drawBorder(color, color, startX, startY - font_size * 2, size, endSizeY); - int y_offset = startY; + y_offset = startY;// + font_size / 2; if (startPos < 0) { @@ -95,7 +97,10 @@ static int renderChannel(const TrackViewInfo* viewInfo, struct sync_track* track { int offset = startX + 6; int idx = -1; - + int fidx; + enum key_type interpolationType; + uint32_t color; + bool selected; float value = 0.0f; if (track) @@ -103,10 +108,8 @@ static int renderChannel(const TrackViewInfo* viewInfo, struct sync_track* track // This is kinda crappy implementation as we will overdraw this quite a bit but might be fine - int fidx = idx >= 0 ? idx : -idx - 2; - enum key_type interpolationType = (fidx >= 0) ? track->keys[fidx].type : KEY_STEP; - - uint32_t color = 0; + fidx = idx >= 0 ? idx : -idx - 2; + interpolationType = (fidx >= 0) ? track->keys[fidx].type : KEY_STEP; switch (interpolationType) { @@ -137,7 +140,7 @@ static int renderChannel(const TrackViewInfo* viewInfo, struct sync_track* track Emgui_drawText("---", offset, y_offset - font_size / 2, color); } - bool selected = (trackId >= selectLeft && trackId <= selectRight) && (y >= selectTop && y < selectBottom); + selected = (trackId >= selectLeft && trackId <= selectRight) && (y >= selectTop && y < selectBottom); if (selected) Emgui_fill(Emgui_color32(0x4f, 0x4f, 0x4f, 0x3f), startX, y_offset - font_size/2, size, font_size); @@ -155,62 +158,66 @@ static int renderChannel(const TrackViewInfo* viewInfo, struct sync_track* track void TrackView_render(const TrackViewInfo* viewInfo, TrackData* trackData) { - uint i = 0; struct sync_data* syncData = &trackData->syncData; const int sel_track = trackData->activeTrack; + uint32_t color = Emgui_color32(127, 127, 127, 56); + int num_tracks; + int max_render_tracks; + int start_track = 0; + int x_pos = 40; + int end_track = 0; + int i = 0; + int adjust_top_size; + int mid_screen_y ; + int y_pos_row, end_row, y_end_border; + + int selectLeft = emini(viewInfo->selectStartTrack, viewInfo->selectStopTrack); + int selectRight = emaxi(viewInfo->selectStartTrack, viewInfo->selectStopTrack); + int selectTop = emini(viewInfo->selectStartRow, viewInfo->selectStopRow); + int selectBottom = emaxi(viewInfo->selectStartRow, viewInfo->selectStopRow); // Calc to position the selection in the ~middle of the screen - const int adjust_top_size = 3 * font_size; - const int mid_screen_y = (viewInfo->windowSizeY / 2) & ~(font_size - 1); - const int y_pos_row = viewInfo->rowPos - (mid_screen_y / font_size); + adjust_top_size = 3 * font_size; + mid_screen_y = (viewInfo->windowSizeY / 2) & ~(font_size - 1); + y_pos_row = viewInfo->rowPos - (mid_screen_y / font_size); // TODO: Calculate how many channels we can draw given the width - int end_row = viewInfo->windowSizeY / font_size; - int y_end_border = viewInfo->windowSizeY - 32; // adjust to have some space at the end of the screen + end_row = viewInfo->windowSizeY / font_size; + y_end_border = viewInfo->windowSizeY - 32; // adjust to have some space at the end of the screen printRowNumbers(2, adjust_top_size, end_row, y_pos_row, font_size, 8, y_end_border); if (syncData->num_tracks == 0) { + uint32_t color = Emgui_color32(127, 127, 127, 56); renderChannel(0, 0, -1, 40 + (i * 64), adjust_top_size, y_pos_row, y_pos_row + end_row, y_end_border, 0, 0, 0, 0, 0); - uint32_t color = Emgui_color32(127, 127, 127, 56); Emgui_fill(color, 0, mid_screen_y + adjust_top_size, viewInfo->windowSizeX, font_size + 2); return; } - int selectLeft = mini(viewInfo->selectStartTrack, viewInfo->selectStopTrack); - int selectRight = maxi(viewInfo->selectStartTrack, viewInfo->selectStopTrack); - int selectTop = mini(viewInfo->selectStartRow, viewInfo->selectStopRow); - int selectBottom = maxi(viewInfo->selectStartRow, viewInfo->selectStopRow); - - int num_tracks = syncData->num_tracks; - - int max_render_tracks = viewInfo->windowSizeX / min_track_size; + num_tracks = syncData->num_tracks; + max_render_tracks = viewInfo->windowSizeX / min_track_size; if (num_tracks > max_render_tracks) num_tracks = max_render_tracks; - int start_track = 0; - if (sel_track > 3) start_track = sel_track - 3; - int x_pos = 40; - - const int end_track = mini(start_track + num_tracks, syncData->num_tracks); + end_track = emini(start_track + num_tracks, syncData->num_tracks); for (i = start_track; i < end_track; ++i) { - int editRow = -1; + int size, editRow = -1; if (sel_track == i && trackData->editText) editRow = viewInfo->rowPos; - int size = renderChannel(viewInfo, syncData->tracks[i], editRow, x_pos, adjust_top_size, y_pos_row, y_pos_row + end_row, y_end_border, - i, selectLeft, selectRight, selectTop, selectBottom); + size = renderChannel(viewInfo, syncData->tracks[i], editRow, x_pos, adjust_top_size, y_pos_row, y_pos_row + end_row, y_end_border, + i, selectLeft, selectRight, selectTop, selectBottom); if (sel_track == i) { @@ -223,7 +230,6 @@ void TrackView_render(const TrackViewInfo* viewInfo, TrackData* trackData) x_pos += size; } - uint32_t color = Emgui_color32(127, 127, 127, 56); - Emgui_fill(color, 0, mid_screen_y + adjust_top_size, viewInfo->windowSizeX, font_size + 1); + Emgui_fill(Emgui_color32(127, 127, 127, 56), 0, mid_screen_y + adjust_top_size, viewInfo->windowSizeX, font_size + 1); } diff --git a/ogl_editor/src/loadsave.c b/ogl_editor/src/loadsave.c index 66b9a60..d2b609b 100644 --- a/ogl_editor/src/loadsave.c +++ b/ogl_editor/src/loadsave.c @@ -12,7 +12,8 @@ static void parseXml(mxml_node_t* rootNode, TrackData* trackData) { - int track_index = 0; + struct track_key k; + int is_key, track_index = 0; //struct sync_track** tracks = trackData->syncData.tracks; mxml_node_t* node = rootNode; @@ -57,6 +58,7 @@ static void parseXml(mxml_node_t* rootNode, TrackData* trackData) if (!strcmp("track", element_name)) { int i; + struct sync_track* track; // TODO: Create the new track/channel here @@ -65,7 +67,7 @@ static void parseXml(mxml_node_t* rootNode, TrackData* trackData) track_index = TrackData_createGetTrack(trackData, track_name); printf("track_index %d\n", track_index); - struct sync_track* track = trackData->syncData.tracks[track_index]; + track = trackData->syncData.tracks[track_index]; // If we already have this track loaded we delete all the existing keys @@ -90,12 +92,11 @@ static void parseXml(mxml_node_t* rootNode, TrackData* trackData) const char* value = mxmlElementGetAttr(node, "value"); const char* interpolation = mxmlElementGetAttr(node, "interpolation"); - struct track_key k; k.row = atoi(row); k.value = (float)(atof(value)); k.type = (atoi(interpolation)); - int is_key = is_key_frame(track, k.row); + is_key = is_key_frame(track, k.row); assert(!is_key); sync_set_key(track, &k); @@ -152,6 +153,8 @@ int LoadSave_saveRocketXML(const char* path, TrackData* trackData) { mxml_node_t* xml; mxml_node_t* tracks; + FILE* fp; + size_t p; struct sync_data* sync_data = &trackData->syncData; @@ -160,13 +163,14 @@ int LoadSave_saveRocketXML(const char* path, TrackData* trackData) mxmlElementSetAttr(tracks, "rows", "1000000"); // TODO: Fix me - for (size_t i = 0; i < sync_data->num_tracks; ++i) + for (p = 0; p < sync_data->num_tracks; ++p) { - const struct sync_track* t = sync_data->tracks[i]; + int i; + const struct sync_track* t = sync_data->tracks[p]; mxml_node_t* track = mxmlNewElement(tracks, "track"); mxmlElementSetAttr(track, "name", t->name); - for (int i = 0; i < (int)t->num_keys; ++i) + for (i = 0; i < (int)t->num_keys; ++i) { char temp0[256]; char temp1[256]; @@ -192,7 +196,7 @@ int LoadSave_saveRocketXML(const char* path, TrackData* trackData) } } - FILE* fp = fopen(path, "wt"); + fp = fopen(path, "wt"); mxmlSaveFile(xml, fp, MXML_NO_CALLBACK); fclose(fp); diff --git a/ogl_editor/src/minmax.h b/ogl_editor/src/minmax.h index 6e239e6..5d4abd5 100644 --- a/ogl_editor/src/minmax.h +++ b/ogl_editor/src/minmax.h @@ -1,8 +1,10 @@ #pragma once +#include "Types.h" + /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -static inline int maxi(int a, int b) +static EMGUI_INLINE int maxi(int a, int b) { if (a > b) return a; @@ -12,7 +14,7 @@ static inline int maxi(int a, int b) /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -static inline int mini(int a, int b) +static EMGUI_INLINE int mini(int a, int b) { if (a < b) return a; diff --git a/tundra.lua b/tundra.lua index d7d0f43..73fbeb4 100644 --- a/tundra.lua +++ b/tundra.lua @@ -1,3 +1,28 @@ +local macosx = { + Env = { + CPPDEFS = { "EMGUI_MACOSX" }, + CCOPTS = { + -- "-Weverything", + "-Wno-deprecated-declarations", -- TickCount issue no Mountain Lion (needs to be fixed) + "-I.", "-DMACOSX", "-Wall", + { "-O0", "-g"; Config = "*-*-debug" }, + { "-O3"; Config = "*-*-release" }, + }, + }, + + Frameworks = { "Cocoa" }, +} + +local win32 = { + Env = { + GENERATE_PDB = "1", + CCOPTS = { + "/W4", "/I.", "/DWIN32", "/D_CRT_SECURE_NO_WARNINGS", + { "/Od"; Config = "*-*-debug" }, + { "/O2"; Config = "*-*-release" }, + }, + }, +} Build { Units = "units.lua", @@ -5,21 +30,7 @@ Build { SyntaxExtensions = { "tundra.syntax.glob", "tundra.syntax.osx-bundle" }, Configs = { - { - Name = "macosx-clang", - DefaultOnHost = "macosx", - Tools = { "clang-osx" }, - Env = { - LIBPATH = { "/usr/lib/gcc/i686-apple-darwin10/4.2.1/x86_64" }, - CPPDEFS = { "SDLROCKET_MACOSX" }, - CCOPTS = { - { "-g", "-O0" ; Config = { "*-gcc-debug", "*-clang-debug" } }, - { "-g", "-O3" ; Config = { "*-clang-release" } } - }, - CXXOPTS = { - { "-g", "-O0"; Config = "macosx-clang-debug" }, - }, - }, - }, + Config { Name = "macosx-clang", DefaultOnHost = "macosx", Inherit = macosx, Tools = { "clang-osx" } }, + Config { Name = "win32-msvc", DefaultOnHost = { "windows" }, Inherit = win32, Tools = { "msvc" } }, }, } diff --git a/units.lua b/units.lua index d1983d0..bb11120 100644 --- a/units.lua +++ b/units.lua @@ -97,7 +97,7 @@ Program { Sources = { FGlob { Dir = "ogl_editor/src", - Extensions = { ".c", ".m" }, + Extensions = { ".c" }, Filters = { { Pattern = "macosx"; Config = "macosx-*-*" }, { Pattern = "windows"; Config = { "win32-*-*", "win64-*-*" } }, @@ -106,8 +106,6 @@ Program { }, } -Default "editor" - local rocketBundle = OsxBundle { Depends = { "editor" }, @@ -120,6 +118,13 @@ local rocketBundle = OsxBundle }, } -Default(rocketBundle) +local native = require('tundra.native') + +if native.platform == "macosx" then + Default(rocketBundle) +else + Default "editor" +end +