From 706db2684c3e799e24b72378a9aba90928ebbb02 Mon Sep 17 00:00:00 2001 From: Daniel Collin Date: Mon, 22 Oct 2012 20:53:46 +0200 Subject: [PATCH] Moved over the hacky UI from the emgui example code --- ogl_editor/src/Editor.c | 197 +++++++++++++++++++++++++++++++++---- ogl_editor/src/macosx/RocketView.m | 2 +- 2 files changed, 181 insertions(+), 18 deletions(-) diff --git a/ogl_editor/src/Editor.c b/ogl_editor/src/Editor.c index ab27ca5..45b02c8 100644 --- a/ogl_editor/src/Editor.c +++ b/ogl_editor/src/Editor.c @@ -1,5 +1,8 @@ #include #include +#include +#include +#include typedef struct RETrack { @@ -17,10 +20,55 @@ typedef struct Editor int currentRow; } Editor; -//static Editor s_editor; +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +#if defined(EMGUI_MACOSX) +#define FONT_PATH "/Library/Fonts/" +#elif defined(EMGUI_WINDOWS) +#define FONT_PATH "C:\\Windows\\Fonts\\" +#else +#error "Unsupported platform" +#endif + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +typedef struct Channel +{ + char name[512]; + float values[1000]; + bool set[1000]; + int maxRange; + +} Channel; + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +static uint64_t fontIds[2]; +const int font_size = 12; +int start_pos = -19; +static Channel s_testChannel; + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void Editor_create() { + Emgui_create("foo"); + fontIds[0] = Emgui_loadFont("/Users/daniel/Library/Fonts/MicroKnight_v1.0.ttf", 11.0f); + memset(&s_testChannel, 0, sizeof(Channel)); + + s_testChannel.values[0] = 12.0f; + s_testChannel.set[0] = true; + + s_testChannel.values[1] = 0.00120f; + s_testChannel.set[1] = true; + + s_testChannel.values[2] = 0.120f; + s_testChannel.set[2] = true; + + s_testChannel.values[4] = 100.120f; + s_testChannel.set[4] = true; + + s_testChannel.maxRange = 1000; } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -45,37 +93,152 @@ void Editor_init() /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +static void printRowNumbers(int x, int y, int rowCount, int rowOffset, int rowSpacing, int maskBpm) +{ + int i; + + if (rowOffset < 0) + { + y += rowSpacing * -rowOffset; + rowOffset = 0; + } + + for (i = 0; i < rowCount; ++i) + { + char rowText[16]; + sprintf(rowText, "%04d\n", rowOffset); + + + if (rowOffset % maskBpm) + Emgui_drawText(rowText, x, y, Emgui_color32(0xa0, 0xa0, 0xa0, 0xff)); + else + Emgui_drawText(rowText, x, y, Emgui_color32(0xf0, 0xf0, 0xf0, 0xff)); + + y += rowSpacing; + rowOffset++; + } +} + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +void renderChannel(Channel* channel, int startX, int startY, int startPos, int endPos) +{ + uint x, y; + + uint32_t color = Emgui_color32(40, 40, 40, 255); + Emgui_drawBorder(color, color, startX, startY, 64, 600); + int y_offset = (startY + font_size) + font_size/2; + + if (startPos < 0) + { + y_offset = ((startY + font_size * -startPos) + font_size) + font_size/2; + startPos = 0; + endPos = 40; + } + + //int count = 0; + + //float values[40]; + + for (y = startPos; y < endPos; ++y) + { + int offset = startX + 6; + + float value = 0.0f; + bool set = false; + + if (y < channel->maxRange) + { + set = channel->set[y]; + value = channel->values[y]; + } + + if (set) + { + char valueText[16]; + + if (value < 0.0f) + sprintf(valueText, "%0.8f", value); + else + sprintf(valueText, "%8.4f", value); + + Emgui_drawText(valueText, offset, y_offset + (font_size / 2), Emgui_color32(255, 255, 255, 255)); + } + else + { + int points[64]; + int* points_ptr = (int*)&points[0]; + + for (x = 0; x < 6; ++x) + { + points_ptr[0] = offset + 0; + points_ptr[1] = y_offset; + points_ptr[2] = offset + 2; + points_ptr[3] = y_offset; + points_ptr[4] = offset + 4; + points_ptr[5] = y_offset; + + points_ptr += 6; + offset += 10; + } + + if (y & 7) + Emgui_drawDots(0x004f4f4f, (int*)&points[0], 18 * 2); + else + Emgui_drawDots(0x007f7f7f, (int*)&points[0], 18 * 2); + } + + y_offset += font_size; + } +} + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + void Editor_update() { + uint i = 0; //, channel_count = 10; + Emgui_begin(); - /* - RocketGui_beginHorizontalStackPanelXY(2, 2); + printRowNumbers(2, 42, 40, start_pos, font_size, 8); - if (RocketGui_button("PressMeNow!")) - { - RocketGui_textLabel("Pressed!"); - } - else - { - RocketGui_textLabel("No Press0r!"); - } + i = 0; - RocketGui_textLabel("Test"); - RocketGui_textLabel("Test2"); - RocketGui_textLabel("Test"); + //for (i = 0; i < channel_count; ++i) + renderChannel(&s_testChannel, 40 + (i * 64), 20, start_pos, start_pos + 40); - RocketGui_fill(0xff0203ff, 10, 10, 100, 100); - */ + uint32_t color = Emgui_color32(127, 127, 127, 56); + + Emgui_fill(color, 0, 257, 800, font_size + 3); Emgui_end(); } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -void Editor_keyDown(int keyCode) +void Editor_keyDown(int key) { + //printf("callBack %d\n", key); + switch (key) + { + case EMGUI_ARROW_DOWN : start_pos++; break; + case EMGUI_ARROW_UP : start_pos--; break; + } + + if (start_pos < -19) + start_pos = -19; + + if (key == '1') + { + int offset = start_pos + 19; + printf("offset %d\n", offset); + s_testChannel.values[offset] = 2.0f; + s_testChannel.set[offset] = true; + + if (offset > s_testChannel.maxRange) + s_testChannel.maxRange = offset; + } } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/ogl_editor/src/macosx/RocketView.m b/ogl_editor/src/macosx/RocketView.m index 6a4e221..21ef17d 100644 --- a/ogl_editor/src/macosx/RocketView.m +++ b/ogl_editor/src/macosx/RocketView.m @@ -73,7 +73,7 @@ Editor_keyDown(keyCode); Editor_update(); - [super keyDown:theEvent]; + //[super keyDown:theEvent]; } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////