Esempio n. 1
0
static int getTrackSize(TrackViewInfo* viewInfo, Track* track)
{
    if (track->folded)
        return track_size_folded;

    if (track->width == 0)
    {
        Emgui_setFont(viewInfo->smallFontId);
        track->width = (Emgui_getTextSize(track->displayName) & 0xffff) + 31;
        track->width = emaxi(track->width, min_track_size);
    }

    return track->width;
}
Esempio n. 2
0
static int renderGroup(Group* group, Track* startTrack, int posX, int* trackOffset, struct TrackInfo info, TrackData* trackData)
{
    int i, startTrackIndex = 0, size, track_count = group->trackCount;
    const int oldY = info.startY;
    const int windowSizeX = info.viewInfo->windowSizeX;

    drawFoldButton(posX + 6, oldY - (font_size + 5), &group->folded, true);

    Emgui_setFont(info.viewInfo->smallFontId);

    startTrackIndex = findStartTrack(group, startTrack);

    size = getGroupSize(info.viewInfo, group, startTrackIndex);

    renderGroupHeader(group, posX, oldY, size, info.viewInfo->windowSizeX);

    info.startPos += 5;
    info.startY += 40;

    *trackOffset += (track_count - startTrackIndex);

    if (!group->folded)
    {
        for (i = startTrackIndex; i < track_count; ++i)
        {
            Track* t = group->t.tracks[i];
            posX += renderChannel(&info, posX, t, false);

            if (posX >= windowSizeX)
            {
                if (trackData->activeTrack >= i)
                    info.viewInfo->startTrack++;

                return size;
            }
        }
    }
    else
    {
        renderChannel(&info, posX, group->t.tracks[0], true);
    }

    Emgui_setDefaultFont();

    return size;
}
Esempio n. 3
0
static void drawStatus()
{
	int size = 0;
	const int sizeY = s_editorData.trackViewInfo.windowSizeY;
	const int sizeX = s_editorData.trackViewInfo.windowSizeX;
	const int prevRow = getRowPos(); 

	Emgui_setFont(s_editorData.trackViewInfo.smallFontId);

	Emgui_fill(Emgui_color32(20, 20, 20, 255), 2, sizeY - 15, sizeX - 3, 13); 
	Emgui_drawBorder(Emgui_color32(10, 10, 10, 255), Emgui_color32(10, 10, 10, 255), 0, sizeY - 17, sizeX - 2, 15); 

	size = drawConnectionStatus(0, sizeY);
	size += drawCurrentValue(size, sizeY);
	size += drawNameValue("Row", size, sizeY, &s_editorData.trackViewInfo.rowPos, 0, 20000 - 1, s_currentRow);
	size += drawNameValue("Start Row", size, sizeY, &s_editorData.trackData.startRow, 0, 10000000, s_startRow);
	size += drawNameValue("End Row", size, sizeY, &s_editorData.trackData.endRow, 0, 10000000, s_endRow);

	if (getRowPos() != prevRow)
		RemoteConnection_sendSetRowCommand(getRowPos());

	Emgui_setDefaultFont();
}
Esempio n. 4
0
bool TrackView_render(TrackViewInfo* viewInfo, TrackData* trackData)
{
    struct TrackInfo info;
    int start_track = 0; //viewInfo->startTrack;
    int x_pos = 128;
    int end_track = 0;
    int i = 0;
    //int track_size;
    int adjust_top_size;
    int mid_screen_y ;
    int y_pos_row, end_row, y_end_border;

    s_needsUpdate = false;

    // Calc to position the selection in the ~middle of the screen

    adjust_top_size = 5 * 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

    end_row = viewInfo->windowSizeY / font_size;
    y_end_border = viewInfo->windowSizeY - 48; // adjust to have some space at the end of the screen

    // Shared info for all tracks

    info.editText = trackData->editText;
    info.selectLeft = emini(viewInfo->selectStartTrack, viewInfo->selectStopTrack);
    info.selectRight = emaxi(viewInfo->selectStartTrack, viewInfo->selectStopTrack);
    info.selectTop  = emini(viewInfo->selectStartRow, viewInfo->selectStopRow);
    info.selectBottom = emaxi(viewInfo->selectStartRow, viewInfo->selectStopRow);
    info.viewInfo = viewInfo;
    info.trackData = trackData;
    info.startY = adjust_top_size;
    info.startPos = y_pos_row;
    info.endPos = y_pos_row + end_row;
    info.endSizeY = y_end_border;
    info.midPos = mid_screen_y + adjust_top_size;

    if (trackData->groupCount == 0)
        return false;

    x_pos = TrackView_getStartOffset() + -viewInfo->startPixel;

    printRowNumbers(2, adjust_top_size, end_row, y_pos_row, font_size, trackData->highlightRowStep, y_end_border);
    Emgui_drawBorder(border_color, border_color, 48, info.startY - font_size * 4, viewInfo->windowSizeX - 80, (info.endSizeY - info.startY) + 40);

    Emgui_setLayer(1);
    Emgui_setScissor(48, 0, viewInfo->windowSizeX - 80, viewInfo->windowSizeY);
    Emgui_setFont(viewInfo->smallFontId);

    ///sel_track = setActiveTrack(viewInfo, trackData, trackData->activeTrack, x_pos);

    //if (sel_track != trackData->activeTrack)
    //	TrackData_setActiveTrack(trackData, sel_track);

    for (i = start_track, end_track = trackData->syncData.num_tracks; i < end_track; )
    {
        Track* track = &trackData->tracks[i];
        Group* group = track->group;

        if (group->trackCount == 1)
        {
            int track_size = getTrackSize(viewInfo, track);

            if ((x_pos + track_size > 0) && (x_pos < viewInfo->windowSizeX))
            {
                // if selected track is less than the first rendered track then we need to reset it to this one

                Emgui_setFont(info.viewInfo->smallFontId);
                renderChannel(&info, x_pos, track, false);
            }

            x_pos += track_size;
            ++i;
        }
        else
        {
            x_pos += renderGroup(group, track, x_pos, &i, info, trackData);
        }
    }

    Emgui_setDefaultFont();

    Emgui_fill(Emgui_color32(127, 127, 127, 56), 0, mid_screen_y + adjust_top_size, viewInfo->windowSizeX, font_size + 1);

    //Emgui_setLayer(1);
    //drawBookmarks(trackData, 2, adjust_top_size, end_row, y_pos_row, viewInfo->windowSizeX, y_end_border);

    Emgui_setLayer(0);

    return s_needsUpdate;
}
Esempio n. 5
0
static int renderChannel(struct TrackInfo* info, int startX, Track* trackData, bool valuesOnly)
{
    int y, y_offset;
    int text_size = 0;
    int size = min_track_size;
    int startPos = info->startPos;
    const int trackIndex = trackData->index;
    const int endPos = info->endPos;
    struct sync_track* track = 0;
    const uint32_t color = trackData->color;
    bool folded = false;

    if (!valuesOnly)
    {
        drawFoldButton(startX + 6, info->startY - (font_size + 5), &trackData->folded, trackData->active);

        folded = trackData->folded;

        if (info->trackData->syncData.tracks)
            track = info->trackData->syncData.tracks[trackData->index];

        size = renderName(trackData->displayName, startX, info->startY - (font_size * 2), min_track_size, folded, trackData->active);

        if (folded)
        {
            text_size = size;
            size = track_size_folded;
        }

        if (trackData->active)
        {
            if (drawColorButton(color, startX + 4, info->startY - colorbar_adjust, size))
            {
                Dialog_showColorPicker(&trackData->color);

                if (trackData->color != color)
                    s_needsUpdate = true;
            }
        }
        else
        {
            Emgui_fill(border_color, startX + 4, info->startY - colorbar_adjust, size - 8, 8);
        }
    }

    Emgui_setDefaultFont();

    y_offset = info->startY;

    folded = valuesOnly ? true : folded;
    size = valuesOnly ? track_size_folded : size;

    if (valuesOnly)
    {
        Emgui_fill(border_color, startX + size, info->startY - font_size * 4, 2, (info->endSizeY - info->startY) + 40);
        Emgui_fill(border_color, startX, info->startY - font_size * 4, 2, (info->endSizeY - info->startY) + 40);
    }
    else
    {
        Emgui_drawBorder(border_color, border_color, startX, info->startY - font_size * 4, size, (info->endSizeY - info->startY) + 40);
    }

    // if folded we should skip rendering the rows that are covered by the text

    if (folded)
    {
        int skip_rows = (text_size + font_size * 2) / font_size;

        if (startPos + skip_rows > 0)
        {
            startPos += skip_rows;
            y_offset += skip_rows * font_size;
        }
    }

    if (startPos < 0)
    {
        y_offset = info->startY + (font_size * -startPos);
        startPos = 0;
    }

    y_offset += font_size_half;

    for (y = startPos; y < endPos; ++y)
    {
        int idx = -1;
        int offset = startX + 6;
        bool selected;

        if (track)
            idx = sync_find_key(track, y);

        renderInterpolation(info, track, size, idx, offset, y_offset, folded);

        if (!(trackData->selected && info->viewInfo->rowPos == y && info->editText))
            renderText(info, track, y, idx, offset, y_offset, folded);

        selected = (trackIndex >= info->selectLeft && trackIndex <= info->selectRight) &&
                   (y >= info->selectTop && y <= info->selectBottom);

        if (selected)
            Emgui_fill(selection_color, startX, y_offset - font_size_half, size, font_size);

        if (y != 0)
        {
            if (TrackData_hasBookmark(info->trackData, y))
                Emgui_fill(bookmark_color, startX, y_offset - font_size_half, size, 8);
        }

        y_offset += font_size;

        if (y_offset > (info->endSizeY + font_size_half))
            break;
    }

    if (!Emgui_hasKeyboardFocus())
    {
        if (trackData->selected)
        {
            Emgui_fill(trackData->group->folded ? dark_active_track_color : active_track_color, startX, info->midPos, size, font_size + 1);

            if (info->editText)
                Emgui_drawText(info->editText, startX + 2, info->midPos, Emgui_color32(255, 255, 255, 255));
        }
    }

    Emgui_setFont(info->viewInfo->smallFontId);

    return size;
}