Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/animation/time_scrub_ui.c
| Show First 20 Lines • Show All 86 Lines • ▼ Show 20 Lines | else { | ||||
| BLI_snprintf(r_str, max_len, "%d", frame); | BLI_snprintf(r_str, max_len, "%d", frame); | ||||
| } | } | ||||
| } | } | ||||
| static void draw_current_frame(const Scene *scene, | static void draw_current_frame(const Scene *scene, | ||||
| bool display_seconds, | bool display_seconds, | ||||
| const View2D *v2d, | const View2D *v2d, | ||||
| const rcti *scrub_region_rect, | const rcti *scrub_region_rect, | ||||
| int current_frame) | int current_frame, | ||||
| float sub_frame, | |||||
| bool draw_line) | |||||
| { | { | ||||
| const uiFontStyle *fstyle = UI_FSTYLE_WIDGET; | const uiFontStyle *fstyle = UI_FSTYLE_WIDGET; | ||||
| int frame_x = UI_view2d_view_to_region_x(v2d, current_frame); | int frame_x = UI_view2d_view_to_region_x(v2d, current_frame); | ||||
| char frame_str[64]; | char frame_str[64]; | ||||
| get_current_time_str(scene, display_seconds, current_frame, sizeof(frame_str), frame_str); | get_current_time_str(scene, display_seconds, current_frame, sizeof(frame_str), frame_str); | ||||
| float text_width = UI_fontstyle_string_width(fstyle, frame_str); | float text_width = UI_fontstyle_string_width(fstyle, frame_str); | ||||
| float box_width = MAX2(text_width + 8 * UI_DPI_FAC, 24 * UI_DPI_FAC); | float box_width = MAX2(text_width + 8 * UI_DPI_FAC, 24 * UI_DPI_FAC); | ||||
| float box_padding = 3 * UI_DPI_FAC; | float box_padding = 3 * UI_DPI_FAC; | ||||
| float bg_color[4]; | float bg_color[4]; | ||||
| UI_GetThemeColorShade4fv(TH_CFRAME, -5, bg_color); | UI_GetThemeColorShade4fv(TH_CFRAME, -5, bg_color); | ||||
| if (draw_line) { | |||||
| /* Draw vertical line to from the bottom of the current frame box to the bottom of the screen. | |||||
| */ | |||||
| const float subframe_x = UI_view2d_view_to_region_x(v2d, current_frame + sub_frame); | |||||
| GPU_line_width(2.0f); | |||||
| GPUVertFormat *format = immVertexFormat(); | |||||
| uint pos = GPU_vertformat_attr_add(format, "pos", GPU_COMP_F32, 2, GPU_FETCH_FLOAT); | |||||
| immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR); | |||||
| immUniformThemeColor(TH_CFRAME); | |||||
| immBegin(GPU_PRIM_LINES, 2); | |||||
| immVertex2f(pos, subframe_x, scrub_region_rect->ymax - box_padding); | |||||
| immVertex2f(pos, subframe_x, 0.0f); | |||||
| immEnd(); | |||||
| immUnbindProgram(); | |||||
| } | |||||
| UI_draw_roundbox_corner_set(UI_CNR_ALL); | UI_draw_roundbox_corner_set(UI_CNR_ALL); | ||||
| UI_draw_roundbox_3fv_alpha(true, | UI_draw_roundbox_3fv_alpha(true, | ||||
| frame_x - box_width / 2 + U.pixelsize / 2, | frame_x - box_width / 2 + U.pixelsize / 2, | ||||
| scrub_region_rect->ymin + box_padding, | scrub_region_rect->ymin + box_padding, | ||||
| frame_x + box_width / 2 + U.pixelsize / 2, | frame_x + box_width / 2 + U.pixelsize / 2, | ||||
| scrub_region_rect->ymax - box_padding, | scrub_region_rect->ymax - box_padding, | ||||
| 4 * UI_DPI_FAC, | 4 * UI_DPI_FAC, | ||||
| Show All 13 Lines | static void draw_current_frame(const Scene *scene, | ||||
| UI_GetThemeColor4ubv(TH_HEADER_TEXT_HI, text_color); | UI_GetThemeColor4ubv(TH_HEADER_TEXT_HI, text_color); | ||||
| UI_fontstyle_draw_simple(fstyle, | UI_fontstyle_draw_simple(fstyle, | ||||
| frame_x - text_width / 2 + U.pixelsize / 2, | frame_x - text_width / 2 + U.pixelsize / 2, | ||||
| get_centered_text_y(scrub_region_rect), | get_centered_text_y(scrub_region_rect), | ||||
| frame_str, | frame_str, | ||||
| text_color); | text_color); | ||||
| } | } | ||||
| void ED_time_scrub_draw_current_frame(const ARegion *region, | |||||
| const Scene *scene, | |||||
| bool display_seconds, | |||||
| bool draw_line) | |||||
| { | |||||
| const View2D *v2d = ®ion->v2d; | |||||
| GPU_matrix_push_projection(); | |||||
| wmOrtho2_region_pixelspace(region); | |||||
| rcti scrub_region_rect; | |||||
| get_time_scrub_region_rect(region, &scrub_region_rect); | |||||
| draw_current_frame(scene, | |||||
| display_seconds, | |||||
| v2d, | |||||
| &scrub_region_rect, | |||||
| scene->r.cfra, | |||||
| scene->r.subframe, | |||||
| draw_line); | |||||
| GPU_matrix_pop_projection(); | |||||
| } | |||||
| void ED_time_scrub_draw(const ARegion *region, | void ED_time_scrub_draw(const ARegion *region, | ||||
| const Scene *scene, | const Scene *scene, | ||||
| bool display_seconds, | bool display_seconds, | ||||
| bool discrete_frames) | bool discrete_frames) | ||||
| { | { | ||||
| const View2D *v2d = ®ion->v2d; | const View2D *v2d = ®ion->v2d; | ||||
| GPU_matrix_push_projection(); | GPU_matrix_push_projection(); | ||||
| Show All 10 Lines | if (discrete_frames) { | ||||
| UI_view2d_draw_scale_x__discrete_frames_or_seconds( | UI_view2d_draw_scale_x__discrete_frames_or_seconds( | ||||
| region, v2d, &numbers_rect, scene, display_seconds, TH_TEXT); | region, v2d, &numbers_rect, scene, display_seconds, TH_TEXT); | ||||
| } | } | ||||
| else { | else { | ||||
| UI_view2d_draw_scale_x__frames_or_seconds( | UI_view2d_draw_scale_x__frames_or_seconds( | ||||
| region, v2d, &numbers_rect, scene, display_seconds, TH_TEXT); | region, v2d, &numbers_rect, scene, display_seconds, TH_TEXT); | ||||
| } | } | ||||
| draw_current_frame(scene, display_seconds, v2d, &scrub_region_rect, scene->r.cfra); | |||||
| GPU_matrix_pop_projection(); | GPU_matrix_pop_projection(); | ||||
| } | } | ||||
| bool ED_time_scrub_event_in_region(const ARegion *region, const wmEvent *event) | bool ED_time_scrub_event_in_region(const ARegion *region, const wmEvent *event) | ||||
| { | { | ||||
| rcti rect = region->winrct; | rcti rect = region->winrct; | ||||
| rect.ymin = rect.ymax - UI_TIME_SCRUB_MARGIN_Y; | rect.ymin = rect.ymax - UI_TIME_SCRUB_MARGIN_Y; | ||||
| return BLI_rcti_isect_pt(&rect, event->x, event->y); | return BLI_rcti_isect_pt(&rect, event->x, event->y); | ||||
| ▲ Show 20 Lines • Show All 42 Lines • Show Last 20 Lines | |||||