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)
{
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("End Row", size, sizeY, &s_editorData.trackViewInfo.endRow, 0, 10000000, s_endRow);
printf("activeTrack %d\n", getActiveTrack());
Emgui_setDefaultFont();
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
static void drawHorizonalSlider()
{
const int sizeY = s_editorData.trackViewInfo.windowSizeY;
const int sizeX = s_editorData.trackViewInfo.windowSizeX;
int track_size;
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
@ -308,7 +330,7 @@ static bool internalUpdate()
Emgui_begin();
drawStatus();
//drawHorizonalSlider();
drawHorizonalSlider();
refresh = TrackView_render(&s_editorData.trackViewInfo, &s_editorData.trackData);
Emgui_end();

View File

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

View File

@ -11,6 +11,15 @@
#include "../../sync/data.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
int track_size_folded = 20;
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)
return track_size_folded;
size = (Emgui_getTextSize(track->displayName) & 0xffff) + 31;
size = emaxi(size, min_track_size);
if (track->width == 0)
{
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 text_size = (Emgui_getTextSize(group->name) & 0xffff) + 40;
if (group->width == 0)
group->width = (Emgui_getTextSize(group->name) & 0xffff) + 40;
if (group->folded)
return track_size_folded;
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;
}
@ -395,7 +407,7 @@ static int renderGroup(Group* group, Track* startTrack, int posX, int* trackOffs
startTrackIndex = findStartTrack(group, startTrack);
size = getGroupSize(trackData, group, startTrackIndex);
size = getGroupSize(group, startTrackIndex);
printf("size %d\n", size);
@ -444,7 +456,7 @@ bool TrackView_render(TrackViewInfo* viewInfo, TrackData* trackData)
int x_pos = 40;
int end_track = 0;
int i = 0;
int track_size;
//int track_size;
int adjust_top_size;
int mid_screen_y ;
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
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);
y_end_border = viewInfo->windowSizeY - 48; // adjust to have some space at the end of the screen
// Shared info for all tracks
@ -482,23 +492,25 @@ bool TrackView_render(TrackViewInfo* viewInfo, TrackData* trackData)
if (trackData->groupCount == 0)
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];
Group* group = track->group;
track_size = getTrackSize(trackData, track);
//track_size = getTrackSize(trackData, track);
if (group->trackCount == 1)
{
x_pos += renderChannel(&info, x_pos, track, false); ++i;
if (x_pos + track_size >= viewInfo->windowSizeX)
if (x_pos >= viewInfo->windowSizeX)
{
if (sel_track >= i)
viewInfo->startTrack++;
break;
}
x_pos += renderChannel(&info, x_pos, track, false);
++i;
}
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)
viewInfo->startTrack = emaxi(viewInfo->startTrack - 1, 0);
@ -514,3 +530,26 @@ bool TrackView_render(TrackViewInfo* viewInfo, TrackData* trackData)
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 endRow;
int startTrack;
int startPixel;
int smallFontId;
int selectStartTrack;
int selectStopTrack;
@ -28,4 +29,5 @@ typedef struct TrackViewInfo
void TrackView_init();
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
{
float x = (float)[theEvent deltaX];