This commit is contained in:
Daniel Collin 2012-11-08 21:51:45 +01:00
commit 67af924cb9
8 changed files with 117 additions and 90 deletions

View File

@ -16,15 +16,6 @@
#include "../../sync/base.h" #include "../../sync/base.h"
#include "../../sync/data.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; float value = 0.0f;
const char *str = "---"; const char *str = "---";
struct sync_track** tracks = getTracks(); struct sync_track** tracks = getTracks();
const int sizeY = s_editorData.trackViewInfo.windowSizeY; const int sizeY = s_editorData.trackViewInfo.windowSizeY;
active_track = getActiveTrack(); active_track = getActiveTrack();
current_row = s_editorData.trackViewInfo.rowPos; current_row = s_editorData.trackViewInfo.rowPos;
@ -137,6 +128,7 @@ static void drawStatus()
const struct sync_track* track = tracks[active_track]; const struct sync_track* track = tracks[active_track];
int row = s_editorData.trackViewInfo.rowPos; int row = s_editorData.trackViewInfo.rowPos;
int idx = key_idx_floor(track, row); int idx = key_idx_floor(track, row);
if (idx >= 0) if (idx >= 0)
{ {
switch (track->keys[idx].type) 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) 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) if (trackPos >= track_count)
continue; continue;
size_t trackIndex = trackPos; t = tracks[trackIndex];
struct sync_track* t = tracks[trackIndex];
for (j = 0; j < bufferHeight; ++j) for (j = 0; j < bufferHeight; ++j)
{ {
@ -354,7 +348,7 @@ bool Editor_keyDown(int key, int modifiers)
case EMGUI_ARROW_RIGHT: case EMGUI_ARROW_RIGHT:
{ {
int track = getActiveTrack(); track++; int track = getActiveTrack() + 1;
int track_count = getTrackCount(); int track_count = getTrackCount();
if (track >= track_count) 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_height = s_copyData.bufferHeight;
const int buffer_size = s_copyData.count; const int buffer_size = s_copyData.count;
const int track_count = getTrackCount(); const int track_count = getTrackCount();
int i, trackPos;
if (!s_copyData.entries) if (!s_copyData.entries)
return false; return false;
@ -413,7 +408,7 @@ bool Editor_keyDown(int key, int modifiers)
deleteArea(row_pos, active_track, buffer_width, buffer_height); 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]; 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 >= 0);
assert(ce->keyFrame.row < buffer_height); assert(ce->keyFrame.row < buffer_height);
size_t trackPos = active_track + ce->track; trackPos = active_track + ce->track;
if (trackPos < track_count) if (trackPos < track_count)
{ {
size_t trackIndex = trackPos; size_t trackIndex = trackPos;
@ -469,11 +464,12 @@ bool Editor_keyDown(int key, int modifiers)
for (row = selectTop; row <= selectBottom; ++row) for (row = selectTop; row <= selectBottom; ++row)
{ {
struct track_key newKey;
int idx = sync_find_key(t, row); int idx = sync_find_key(t, row);
if (idx < 0) if (idx < 0)
continue; continue;
struct track_key newKey = t->keys[idx]; newKey = t->keys[idx];
newKey.value += bias_value; newKey.value += bias_value;
sync_set_key(t, &newKey); sync_set_key(t, &newKey);
@ -497,7 +493,7 @@ bool Editor_keyDown(int key, int modifiers)
is_editing = true; is_editing = true;
} }
s_editBuffer[strlen(s_editBuffer)] = key; s_editBuffer[strlen(s_editBuffer)] = (char)key;
s_editorData.trackData.editText = s_editBuffer; s_editorData.trackData.editText = s_editBuffer;
return true; return true;
@ -508,14 +504,15 @@ bool Editor_keyDown(int key, int modifiers)
if (key != 27) if (key != 27)
{ {
const char* track_name;
struct track_key key; struct track_key key;
struct sync_track* track = tracks[active_track];
key.row = row_pos; key.row = row_pos;
key.value = atof(s_editBuffer); key.value = (float)atof(s_editBuffer);
key.type = 0; key.type = 0;
struct sync_track* track = tracks[active_track]; track_name = track->name;
const char* track_name = track->name;
sync_set_key(track, &key); sync_set_key(track, &key);
@ -524,14 +521,13 @@ bool Editor_keyDown(int key, int modifiers)
RemoteConnection_sendSetKeyCommand(track_name, &key); RemoteConnection_sendSetKeyCommand(track_name, &key);
} }
handled_key = true;
is_editing = false; is_editing = false;
s_editorData.trackData.editText = 0; s_editorData.trackData.editText = 0;
} }
if (key == 'i') if (key == 'i')
{ {
struct track_key newKey;
struct sync_track* track = tracks[active_track]; struct sync_track* track = tracks[active_track];
int row = viewInfo->rowPos; int row = viewInfo->rowPos;
@ -540,7 +536,7 @@ bool Editor_keyDown(int key, int modifiers)
return false; return false;
// copy and modify // copy and modify
struct track_key newKey = track->keys[idx]; newKey = track->keys[idx];
newKey.type = ((newKey.type + 1) % KEY_TYPE_COUNT); newKey.type = ((newKey.type + 1) % KEY_TYPE_COUNT);
sync_set_key(track, &newKey); sync_set_key(track, &newKey);

View File

@ -66,7 +66,9 @@
* Do we have threading support? * Do we have threading support?
*/ */
#if defined(__APPLE__)
#define HAVE_PTHREAD_H 1 #define HAVE_PTHREAD_H 1
#endif
/* /*

View File

@ -127,19 +127,20 @@ static bool setBlocking(int sock, bool blocking)
bool RemoteConnection_createListner() bool RemoteConnection_createListner()
{ {
struct sockaddr_in sin;
int yes = 1;
s_serverSocket = socket(AF_INET, SOCK_STREAM, 0); s_serverSocket = socket(AF_INET, SOCK_STREAM, 0);
if (s_serverSocket == INVALID_SOCKET) if (s_serverSocket == INVALID_SOCKET)
return false; return false;
struct sockaddr_in sin;
memset(&sin, 0, sizeof sin); memset(&sin, 0, sizeof sin);
sin.sin_family = AF_INET; sin.sin_family = AF_INET;
sin.sin_addr.s_addr = INADDR_ANY; sin.sin_addr.s_addr = INADDR_ANY;
sin.sin_port = htons(1338); sin.sin_port = htons(1338);
int yes = 1;
if (setsockopt(s_serverSocket, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) == -1) if (setsockopt(s_serverSocket, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) == -1)
{ {
perror("setsockopt"); perror("setsockopt");

View File

@ -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 startX, int startY, int startPos, int endPos, int endSizeY,
int trackId, int selectLeft, int selectRight, int selectTop, int selectBottom) int trackId, int selectLeft, int selectRight, int selectTop, int selectBottom)
{ {
uint y; int y, y_offset;
int size = min_track_size; 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) if (track)
{ {
@ -78,10 +81,9 @@ static int renderChannel(const TrackViewInfo* viewInfo, struct sync_track* track
Emgui_setDefaultFont(); Emgui_setDefaultFont();
} }
uint32_t color = Emgui_color32(40, 40, 40, 255);
Emgui_drawBorder(color, color, startX, startY - font_size * 2, size, endSizeY); Emgui_drawBorder(color, color, startX, startY - font_size * 2, size, endSizeY);
int y_offset = startY; y_offset = startY;// + font_size / 2;
if (startPos < 0) if (startPos < 0)
{ {
@ -95,7 +97,10 @@ static int renderChannel(const TrackViewInfo* viewInfo, struct sync_track* track
{ {
int offset = startX + 6; int offset = startX + 6;
int idx = -1; int idx = -1;
int fidx;
enum key_type interpolationType;
uint32_t color;
bool selected;
float value = 0.0f; float value = 0.0f;
if (track) 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 // This is kinda crappy implementation as we will overdraw this quite a bit but might be fine
int fidx = idx >= 0 ? idx : -idx - 2; fidx = idx >= 0 ? idx : -idx - 2;
enum key_type interpolationType = (fidx >= 0) ? track->keys[fidx].type : KEY_STEP; interpolationType = (fidx >= 0) ? track->keys[fidx].type : KEY_STEP;
uint32_t color = 0;
switch (interpolationType) 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); 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) if (selected)
Emgui_fill(Emgui_color32(0x4f, 0x4f, 0x4f, 0x3f), startX, y_offset - font_size/2, size, font_size); 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) void TrackView_render(const TrackViewInfo* viewInfo, TrackData* trackData)
{ {
uint i = 0;
struct sync_data* syncData = &trackData->syncData; struct sync_data* syncData = &trackData->syncData;
const int sel_track = trackData->activeTrack; 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 // Calc to position the selection in the ~middle of the screen
const int adjust_top_size = 3 * font_size; adjust_top_size = 3 * font_size;
const int mid_screen_y = (viewInfo->windowSizeY / 2) & ~(font_size - 1); mid_screen_y = (viewInfo->windowSizeY / 2) & ~(font_size - 1);
const int y_pos_row = viewInfo->rowPos - (mid_screen_y / font_size); y_pos_row = viewInfo->rowPos - (mid_screen_y / font_size);
// TODO: Calculate how many channels we can draw given the width // TODO: Calculate how many channels we can draw given the width
int end_row = viewInfo->windowSizeY / font_size; end_row = viewInfo->windowSizeY / font_size;
int y_end_border = viewInfo->windowSizeY - 32; // adjust to have some space at the end of the screen 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); printRowNumbers(2, adjust_top_size, end_row, y_pos_row, font_size, 8, y_end_border);
if (syncData->num_tracks == 0) 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, 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); 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); Emgui_fill(color, 0, mid_screen_y + adjust_top_size, viewInfo->windowSizeX, font_size + 2);
return; return;
} }
int selectLeft = mini(viewInfo->selectStartTrack, viewInfo->selectStopTrack); num_tracks = syncData->num_tracks;
int selectRight = maxi(viewInfo->selectStartTrack, viewInfo->selectStopTrack); max_render_tracks = viewInfo->windowSizeX / min_track_size;
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;
if (num_tracks > max_render_tracks) if (num_tracks > max_render_tracks)
num_tracks = max_render_tracks; num_tracks = max_render_tracks;
int start_track = 0;
if (sel_track > 3) if (sel_track > 3)
start_track = sel_track - 3; start_track = sel_track - 3;
int x_pos = 40; end_track = emini(start_track + num_tracks, syncData->num_tracks);
const int end_track = mini(start_track + num_tracks, syncData->num_tracks);
for (i = start_track; i < end_track; ++i) for (i = start_track; i < end_track; ++i)
{ {
int editRow = -1; int size, editRow = -1;
if (sel_track == i && trackData->editText) if (sel_track == i && trackData->editText)
editRow = viewInfo->rowPos; 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, 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); i, selectLeft, selectRight, selectTop, selectBottom);
if (sel_track == i) if (sel_track == i)
{ {
@ -223,7 +230,6 @@ void TrackView_render(const TrackViewInfo* viewInfo, TrackData* trackData)
x_pos += size; x_pos += size;
} }
uint32_t color = Emgui_color32(127, 127, 127, 56); Emgui_fill(Emgui_color32(127, 127, 127, 56), 0, mid_screen_y + adjust_top_size, viewInfo->windowSizeX, font_size + 1);
Emgui_fill(color, 0, mid_screen_y + adjust_top_size, viewInfo->windowSizeX, font_size + 1);
} }

View File

@ -12,7 +12,8 @@
static void parseXml(mxml_node_t* rootNode, TrackData* trackData) 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; //struct sync_track** tracks = trackData->syncData.tracks;
mxml_node_t* node = rootNode; mxml_node_t* node = rootNode;
@ -57,6 +58,7 @@ static void parseXml(mxml_node_t* rootNode, TrackData* trackData)
if (!strcmp("track", element_name)) if (!strcmp("track", element_name))
{ {
int i; int i;
struct sync_track* track;
// TODO: Create the new track/channel here // 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); track_index = TrackData_createGetTrack(trackData, track_name);
printf("track_index %d\n", track_index); 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 // 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* value = mxmlElementGetAttr(node, "value");
const char* interpolation = mxmlElementGetAttr(node, "interpolation"); const char* interpolation = mxmlElementGetAttr(node, "interpolation");
struct track_key k;
k.row = atoi(row); k.row = atoi(row);
k.value = (float)(atof(value)); k.value = (float)(atof(value));
k.type = (atoi(interpolation)); k.type = (atoi(interpolation));
int is_key = is_key_frame(track, k.row); is_key = is_key_frame(track, k.row);
assert(!is_key); assert(!is_key);
sync_set_key(track, &k); sync_set_key(track, &k);
@ -152,6 +153,8 @@ int LoadSave_saveRocketXML(const char* path, TrackData* trackData)
{ {
mxml_node_t* xml; mxml_node_t* xml;
mxml_node_t* tracks; mxml_node_t* tracks;
FILE* fp;
size_t p;
struct sync_data* sync_data = &trackData->syncData; 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 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"); mxml_node_t* track = mxmlNewElement(tracks, "track");
mxmlElementSetAttr(track, "name", t->name); 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 temp0[256];
char temp1[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); mxmlSaveFile(xml, fp, MXML_NO_CALLBACK);
fclose(fp); fclose(fp);

View File

@ -1,8 +1,10 @@
#pragma once #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) if (a > b)
return a; 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) if (a < b)
return a; return a;

View File

@ -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 { Build {
Units = "units.lua", Units = "units.lua",
@ -5,21 +30,7 @@ Build {
SyntaxExtensions = { "tundra.syntax.glob", "tundra.syntax.osx-bundle" }, SyntaxExtensions = { "tundra.syntax.glob", "tundra.syntax.osx-bundle" },
Configs = { Configs = {
{ Config { Name = "macosx-clang", DefaultOnHost = "macosx", Inherit = macosx, Tools = { "clang-osx" } },
Name = "macosx-clang", Config { Name = "win32-msvc", DefaultOnHost = { "windows" }, Inherit = win32, Tools = { "msvc" } },
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" },
},
},
},
}, },
} }

View File

@ -97,7 +97,7 @@ Program {
Sources = { Sources = {
FGlob { FGlob {
Dir = "ogl_editor/src", Dir = "ogl_editor/src",
Extensions = { ".c", ".m" }, Extensions = { ".c" },
Filters = { Filters = {
{ Pattern = "macosx"; Config = "macosx-*-*" }, { Pattern = "macosx"; Config = "macosx-*-*" },
{ Pattern = "windows"; Config = { "win32-*-*", "win64-*-*" } }, { Pattern = "windows"; Config = { "win32-*-*", "win64-*-*" } },
@ -106,8 +106,6 @@ Program {
}, },
} }
Default "editor"
local rocketBundle = OsxBundle local rocketBundle = OsxBundle
{ {
Depends = { "editor" }, 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