void renderGroup(Group& group, float alpha) { typedef std::vector <Group*>::iterator GroupIterType; for(GroupIterType iter = group.getOrderedChildGroups(); iter != group.getOrderedLastGroup(); ++iter) { renderGroup(**iter, alpha); } typedef std::vector <Shape*>::iterator LeafIterType; for(LeafIterType iter = group.getOrderedChildLeaves(); iter != group.getOrderedLastLeaf(); ++iter) { (*iter)->render(alpha); } }
void Scene::render(float alpha) { renderGroup(_root, alpha); }
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; }