예제 #1
0
파일: Editor.c 프로젝트: pixelmager/rocket
void Editor_updateTrackScroll()
{
	int track_start_offset, sel_track, total_track_width = 0;
	int track_start_pixel = s_editorData.trackViewInfo.startPixel;
	TrackData* track_data = getTrackData();
	TrackViewInfo* view_info = getTrackViewInfo(); 

	total_track_width = TrackView_getWidth(getTrackViewInfo(), getTrackData());
	track_start_offset = TrackView_getStartOffset();

	track_start_pixel = eclampi(track_start_pixel, 0, emaxi(total_track_width - (view_info->windowSizeX / 2), 0)); 

	sel_track = TrackView_getScrolledTrack(view_info, track_data, track_data->activeTrack, 
										   track_start_offset - track_start_pixel);

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

	s_editorData.trackViewInfo.startPixel = track_start_pixel;
}
예제 #2
0
bool TrackView_isSelectedTrackVisible(TrackViewInfo* viewInfo, TrackData* trackData, int track)
{
    return TrackView_getScrolledTrack(viewInfo, trackData, track, TrackView_getStartOffset() - viewInfo->startPixel) == track;
}
예제 #3
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;
}