This commit is contained in:
Daniel Collin 2012-11-26 00:07:30 +01:00
parent 447a86b2b1
commit bb784965d5
5 changed files with 106 additions and 27 deletions

View File

@ -56,6 +56,20 @@ static inline struct sync_track** getTracks()
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static inline TrackViewInfo* getTrackViewInfo()
{
return &s_editorData.trackViewInfo;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static inline TrackData* getTrackData()
{
return &s_editorData.trackData;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static inline void setActiveTrack(int track) static inline void setActiveTrack(int track)
{ {
const int current_track = s_editorData.trackData.activeTrack; const int current_track = s_editorData.trackData.activeTrack;
@ -281,22 +295,30 @@ static void drawStatus()
size += drawNameValue("Start Row", size, sizeY, &s_editorData.trackViewInfo.startRow, 0, 10000000, s_startRow); size += drawNameValue("Start Row", size, sizeY, &s_editorData.trackViewInfo.startRow, 0, 10000000, s_startRow);
size += drawNameValue("End Row", size, sizeY, &s_editorData.trackViewInfo.endRow, 0, 10000000, s_endRow); size += drawNameValue("End Row", size, sizeY, &s_editorData.trackViewInfo.endRow, 0, 10000000, s_endRow);
printf("activeTrack %d\n", getActiveTrack());
Emgui_setDefaultFont(); Emgui_setDefaultFont();
} }
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
static void drawHorizonalSlider() static void drawHorizonalSlider()
{ {
const int sizeY = s_editorData.trackViewInfo.windowSizeY; int track_size;
const int sizeX = s_editorData.trackViewInfo.windowSizeX; TrackViewInfo* info = getTrackViewInfo();
const int old_start = s_editorData.trackViewInfo.startTrack;
const int total_track_width = TrackView_getWidth(getTrackViewInfo(), getTrackData());
static int value = 0; track_size = emaxi(total_track_width - info->windowSizeX, 0) / 128;
Emgui_slider(sizeX - 20, 2, 14, sizeY - 20, 0, 40, EMGUI_SLIDERDIR_VERTICAL, 1, &value); Emgui_slider(0, info->windowSizeY - 36, info->windowSizeX, 14, 0, track_size, EMGUI_SLIDERDIR_HORIZONTAL, 1,
&s_editorData.trackViewInfo.startPixel);
if (old_start != s_editorData.trackViewInfo.startTrack)
{
setActiveTrack(s_editorData.trackViewInfo.startTrack);
}
} }
*/
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// In some cases we need an extra update in case some controls has been re-arranged in such fashion so // In some cases we need an extra update in case some controls has been re-arranged in such fashion so
@ -308,7 +330,7 @@ static bool internalUpdate()
Emgui_begin(); Emgui_begin();
drawStatus(); drawStatus();
//drawHorizonalSlider(); drawHorizonalSlider();
refresh = TrackView_render(&s_editorData.trackViewInfo, &s_editorData.trackData); refresh = TrackView_render(&s_editorData.trackViewInfo, &s_editorData.trackData);
Emgui_end(); Emgui_end();

View File

@ -28,6 +28,7 @@ typedef struct Track
struct Group* group; struct Group* group;
uint32_t color; uint32_t color;
int width; // width in pixels of the track
int index; int index;
bool hidden; bool hidden;
bool folded; bool folded;
@ -43,6 +44,7 @@ typedef struct Group
{ {
const char* name; const char* name;
char* displayName; char* displayName;
int width;
bool folded; bool folded;
union union

View File

@ -11,6 +11,15 @@
#include "../../sync/data.h" #include "../../sync/data.h"
#include "../../sync/track.h" #include "../../sync/track.h"
#if defined(__APPLE__)
#include <OpenGL/OpenGL.h>
#include <OpenGL/gl.h>
#else
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <gl/gl.h>
#endif
#define font_size 8 #define font_size 8
int track_size_folded = 20; int track_size_folded = 20;
int min_track_size = 100; int min_track_size = 100;
@ -229,33 +238,36 @@ static int findStartTrack(Group* group, Track* startTrack)
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static int getTrackSize(TrackData* trackData, Track* track) static int getTrackSize(Track* track)
{ {
int size = 0;
if (track->folded) if (track->folded)
return track_size_folded; return track_size_folded;
size = (Emgui_getTextSize(track->displayName) & 0xffff) + 31; if (track->width == 0)
size = emaxi(size, min_track_size); {
track->width = (Emgui_getTextSize(track->displayName) & 0xffff) + 31;
track->width = emaxi(track->width, min_track_size);
}
return size; return track->width;
} }
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int getGroupSize(TrackData* trackData, Group* group, int startTrack) int getGroupSize(Group* group, int startTrack)
{ {
int i, size = 0, count = group->trackCount; int i, size = 0, count = group->trackCount;
int text_size = (Emgui_getTextSize(group->name) & 0xffff) + 40;
if (group->width == 0)
group->width = (Emgui_getTextSize(group->name) & 0xffff) + 40;
if (group->folded) if (group->folded)
return track_size_folded; return track_size_folded;
for (i = startTrack; i < count; ++i) for (i = startTrack; i < count; ++i)
size += getTrackSize(trackData, group->t.tracks[i]); size += getTrackSize(group->t.tracks[i]);
size = emaxi(size, text_size); size = emaxi(size, group->width);
return size; return size;
} }
@ -395,7 +407,7 @@ static int renderGroup(Group* group, Track* startTrack, int posX, int* trackOffs
startTrackIndex = findStartTrack(group, startTrack); startTrackIndex = findStartTrack(group, startTrack);
size = getGroupSize(trackData, group, startTrackIndex); size = getGroupSize(group, startTrackIndex);
printf("size %d\n", size); printf("size %d\n", size);
@ -444,7 +456,7 @@ bool TrackView_render(TrackViewInfo* viewInfo, TrackData* trackData)
int x_pos = 40; int x_pos = 40;
int end_track = 0; int end_track = 0;
int i = 0; int i = 0;
int track_size; //int track_size;
int adjust_top_size; int adjust_top_size;
int mid_screen_y ; int mid_screen_y ;
int y_pos_row, end_row, y_end_border; int y_pos_row, end_row, y_end_border;
@ -460,9 +472,7 @@ bool TrackView_render(TrackViewInfo* viewInfo, TrackData* trackData)
// TODO: Calculate how many channels we can draw given the width // TODO: Calculate how many channels we can draw given the width
end_row = viewInfo->windowSizeY / font_size; end_row = viewInfo->windowSizeY / font_size;
y_end_border = viewInfo->windowSizeY - 32; // adjust to have some space at the end of the screen y_end_border = viewInfo->windowSizeY - 48; // 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);
// Shared info for all tracks // Shared info for all tracks
@ -482,23 +492,25 @@ bool TrackView_render(TrackViewInfo* viewInfo, TrackData* trackData)
if (trackData->groupCount == 0) if (trackData->groupCount == 0)
return false; return false;
for (i = start_track, end_track = (int)trackData->syncData.num_tracks; i < end_track; ) for (i = start_track, end_track = trackData->syncData.num_tracks; i < end_track; )
{ {
Track* track = &trackData->tracks[i]; Track* track = &trackData->tracks[i];
Group* group = track->group; Group* group = track->group;
track_size = getTrackSize(trackData, track); //track_size = getTrackSize(trackData, track);
if (group->trackCount == 1) if (group->trackCount == 1)
{ {
x_pos += renderChannel(&info, x_pos, track, false); ++i; if (x_pos >= viewInfo->windowSizeX)
if (x_pos + track_size >= viewInfo->windowSizeX)
{ {
if (sel_track >= i) if (sel_track >= i)
viewInfo->startTrack++; viewInfo->startTrack++;
break; break;
} }
x_pos += renderChannel(&info, x_pos, track, false);
++i;
} }
else else
{ {
@ -506,6 +518,10 @@ bool TrackView_render(TrackViewInfo* viewInfo, TrackData* trackData)
} }
} }
Emgui_setDefaultFont();
printRowNumbers(2, adjust_top_size, end_row, y_pos_row, font_size, 8, y_end_border);
if (sel_track < start_track) if (sel_track < start_track)
viewInfo->startTrack = emaxi(viewInfo->startTrack - 1, 0); viewInfo->startTrack = emaxi(viewInfo->startTrack - 1, 0);
@ -514,3 +530,26 @@ bool TrackView_render(TrackViewInfo* viewInfo, TrackData* trackData)
return s_needsUpdate; return s_needsUpdate;
} }
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int TrackView_getWidth(TrackViewInfo* viewInfo, struct TrackData* trackData)
{
int i, size = 0, group_count = trackData->groupCount;
if (trackData->groupCount == 0)
return 0;
for (i = 0; i < group_count; ++i)
{
Group* group = &trackData->groups[i];
if (group->trackCount == 1)
size += getTrackSize(group->t.track);
else
size += getGroupSize(group, 0);
}
return size;
}

View File

@ -16,6 +16,7 @@ typedef struct TrackViewInfo
int startRow; int startRow;
int endRow; int endRow;
int startTrack; int startTrack;
int startPixel;
int smallFontId; int smallFontId;
int selectStartTrack; int selectStartTrack;
int selectStopTrack; int selectStopTrack;
@ -28,4 +29,5 @@ typedef struct TrackViewInfo
void TrackView_init(); void TrackView_init();
bool TrackView_render(TrackViewInfo* viewInfo, struct TrackData* trackData); bool TrackView_render(TrackViewInfo* viewInfo, struct TrackData* trackData);
int TrackView_getWidth(TrackViewInfo* viewInfo, struct TrackData* trackData);

View File

@ -148,6 +148,20 @@ NSOpenGLContext* g_context = 0;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- (void)mouseDragged:(NSEvent *)event
{
NSWindow* window = [self window];
NSRect originalFrame = [window frame];
NSPoint location = [window mouseLocationOutsideOfEventStream];
NSRect adjustFrame = [NSWindow contentRectForFrameRect: originalFrame styleMask: NSTitledWindowMask];
Emgui_setMousePos((int)location.x, (int)adjustFrame.size.height - (int)location.y);
Editor_update();
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- (void)scrollWheel:(NSEvent *)theEvent - (void)scrollWheel:(NSEvent *)theEvent
{ {
float x = (float)[theEvent deltaX]; float x = (float)[theEvent deltaX];