static void draw_plane_marker_ex(SpaceClip *sc, Scene *scene, MovieTrackingPlaneTrack *plane_track, MovieTrackingPlaneMarker *plane_marker, bool is_active_track, bool draw_outline, int width, int height) { bool tiny = (sc->flag & SC_SHOW_TINY_MARKER) != 0; bool is_selected_track = plane_track->flag & SELECT; bool draw_plane_quad = plane_track->image == NULL || plane_track->image_opacity == 0.0f; float px[2]; if (draw_outline) { UI_ThemeColor(TH_MARKER_OUTLINE); } else { float color[3], selected_color[3]; plane_track_colors(is_active_track, color, selected_color); if (is_selected_track) { glColor3fv(selected_color); } else { glColor3fv(color); } } px[0] = 1.0f / width / sc->zoom; px[1] = 1.0f / height / sc->zoom; /* Draw image */ if (draw_outline == false) { draw_plane_marker_image(scene, plane_track, plane_marker); } if (draw_outline) { if (!tiny) { glLineWidth(3.0f); } } else if (tiny) { glLineStipple(3, 0xaaaa); glEnable(GL_LINE_STIPPLE); } if (draw_plane_quad) { /* Draw rectangle itself. */ glBegin(GL_LINE_LOOP); glVertex2fv(plane_marker->corners[0]); glVertex2fv(plane_marker->corners[1]); glVertex2fv(plane_marker->corners[2]); glVertex2fv(plane_marker->corners[3]); glEnd(); /* Draw axis. */ if (!draw_outline) { float end_point[2]; glPushAttrib(GL_COLOR_BUFFER_BIT | GL_CURRENT_BIT); getArrowEndPoint(width, height, sc->zoom, plane_marker->corners[0], plane_marker->corners[1], end_point); glColor3f(1.0, 0.0, 0.0f); glBegin(GL_LINES); glVertex2fv(plane_marker->corners[0]); glVertex2fv(end_point); glEnd(); getArrowEndPoint(width, height, sc->zoom, plane_marker->corners[0], plane_marker->corners[3], end_point); glColor3f(0.0, 1.0, 0.0f); glBegin(GL_LINES); glVertex2fv(plane_marker->corners[0]); glVertex2fv(end_point); glEnd(); glPopAttrib(); } } /* Draw sliders. */ if (is_selected_track) { int i; for (i = 0; i < 4; i++) { draw_marker_slide_square(plane_marker->corners[i][0], plane_marker->corners[i][1], 3.0f * px[0], 3.0f * px[1], draw_outline, px); } } if (draw_outline) { if (!tiny) { glLineWidth(1.0f); } } else if (tiny) { glDisable(GL_LINE_STIPPLE); } }
static void draw_marker_slide_zones(SpaceClip *sc, MovieTrackingTrack *track, MovieTrackingMarker *marker, const float marker_pos[2], int outline, int sel, int act, int width, int height) { float dx, dy, patdx, patdy, searchdx, searchdy; int tiny = sc->flag & SC_SHOW_TINY_MARKER; float col[3], scol[3], px[2], side; if ((tiny && outline) || (marker->flag & MARKER_DISABLED)) return; if (!TRACK_VIEW_SELECTED(sc, track) || track->flag & TRACK_LOCKED) return; track_colors(track, act, col, scol); if (outline) { glLineWidth(3.0f); UI_ThemeColor(TH_MARKER_OUTLINE); } glPushMatrix(); glTranslatef(marker_pos[0], marker_pos[1], 0); dx = 6.0f / width / sc->zoom; dy = 6.0f / height / sc->zoom; side = get_shortest_pattern_side(marker); patdx = min_ff(dx * 2.0f / 3.0f, side / 6.0f) * UI_DPI_FAC; patdy = min_ff(dy * 2.0f / 3.0f, side * width / height / 6.0f) * UI_DPI_FAC; searchdx = min_ff(dx, (marker->search_max[0] - marker->search_min[0]) / 6.0f) * UI_DPI_FAC; searchdy = min_ff(dy, (marker->search_max[1] - marker->search_min[1]) / 6.0f) * UI_DPI_FAC; px[0] = 1.0f / sc->zoom / width / sc->scale; px[1] = 1.0f / sc->zoom / height / sc->scale; if ((sc->flag & SC_SHOW_MARKER_SEARCH) && ((track->search_flag & SELECT) == sel || outline)) { if (!outline) { if (track->search_flag & SELECT) glColor3fv(scol); else glColor3fv(col); } /* search offset square */ draw_marker_slide_square(marker->search_min[0], marker->search_max[1], searchdx, searchdy, outline, px); /* search re-sizing triangle */ draw_marker_slide_triangle(marker->search_max[0], marker->search_min[1], searchdx, searchdy, outline, px); } if ((sc->flag & SC_SHOW_MARKER_PATTERN) && ((track->pat_flag & SELECT) == sel || outline)) { int i; float pat_min[2], pat_max[2]; /* float dx = 12.0f / width, dy = 12.0f / height;*/ /* XXX UNUSED */ float tilt_ctrl[2]; if (!outline) { if (track->pat_flag & SELECT) glColor3fv(scol); else glColor3fv(col); } /* pattern's corners sliding squares */ for (i = 0; i < 4; i++) { draw_marker_slide_square(marker->pattern_corners[i][0], marker->pattern_corners[i][1], patdx / 1.5f, patdy / 1.5f, outline, px); } /* ** sliders to control overall pattern ** */ add_v2_v2v2(tilt_ctrl, marker->pattern_corners[1], marker->pattern_corners[2]); BKE_tracking_marker_pattern_minmax(marker, pat_min, pat_max); glEnable(GL_LINE_STIPPLE); glLineStipple(3, 0xaaaa); #if 0 /* TODO: disable for now, needs better approach visualizing this */ glBegin(GL_LINE_LOOP); glVertex2f(pat_min[0] - dx, pat_min[1] - dy); glVertex2f(pat_max[0] + dx, pat_min[1] - dy); glVertex2f(pat_max[0] + dx, pat_max[1] + dy); glVertex2f(pat_min[0] - dx, pat_max[1] + dy); glEnd(); /* marker's offset slider */ draw_marker_slide_square(pat_min[0] - dx, pat_max[1] + dy, patdx, patdy, outline, px); /* pattern re-sizing triangle */ draw_marker_slide_triangle(pat_max[0] + dx, pat_min[1] - dy, patdx, patdy, outline, px); #endif glBegin(GL_LINES); glVertex2f(0.0f, 0.0f); glVertex2fv(tilt_ctrl); glEnd(); glDisable(GL_LINE_STIPPLE); /* slider to control pattern tilt */ draw_marker_slide_square(tilt_ctrl[0], tilt_ctrl[1], patdx, patdy, outline, px); } glPopMatrix(); if (outline) glLineWidth(1.0f); }
static void draw_plane_marker_ex(SpaceClip *sc, Scene *scene, MovieTrackingPlaneTrack *plane_track, MovieTrackingPlaneMarker *plane_marker, bool is_active_track, bool draw_outline, int width, int height) { bool tiny = (sc->flag & SC_SHOW_TINY_MARKER) != 0; bool is_selected_track = (plane_track->flag & SELECT) != 0; const bool has_image = plane_track->image != NULL && BKE_image_has_ibuf(plane_track->image, NULL); const bool draw_plane_quad = !has_image || plane_track->image_opacity == 0.0f; float px[2]; if (draw_outline) { UI_ThemeColor(TH_MARKER_OUTLINE); } else { float color[3], selected_color[3]; plane_track_colors(is_active_track, color, selected_color); if (is_selected_track) { glColor3fv(selected_color); } else { glColor3fv(color); } } px[0] = 1.0f / width / sc->zoom; px[1] = 1.0f / height / sc->zoom; /* Draw image */ if (draw_outline == false) { draw_plane_marker_image(scene, plane_track, plane_marker); } if (draw_plane_quad) { const bool stipple = !draw_outline && tiny; const bool thick = draw_outline && !tiny; if (stipple) { GPU_basic_shader_bind_enable(GPU_SHADER_LINE | GPU_SHADER_STIPPLE); GPU_basic_shader_line_stipple(3, 0xAAAA); } else { GPU_basic_shader_bind_enable(GPU_SHADER_LINE); } GPU_basic_shader_line_width(thick ? 3.0f : 1.0f); /* Draw rectangle itself. */ glBegin(GL_LINE_LOOP); glVertex2fv(plane_marker->corners[0]); glVertex2fv(plane_marker->corners[1]); glVertex2fv(plane_marker->corners[2]); glVertex2fv(plane_marker->corners[3]); glEnd(); /* Draw axis. */ if (!draw_outline) { float end_point[2]; glPushAttrib(GL_COLOR_BUFFER_BIT | GL_CURRENT_BIT); glBegin(GL_LINES); getArrowEndPoint(width, height, sc->zoom, plane_marker->corners[0], plane_marker->corners[1], end_point); glColor3f(1.0, 0.0, 0.0f); glVertex2fv(plane_marker->corners[0]); glVertex2fv(end_point); getArrowEndPoint(width, height, sc->zoom, plane_marker->corners[0], plane_marker->corners[3], end_point); glColor3f(0.0, 1.0, 0.0f); glVertex2fv(plane_marker->corners[0]); glVertex2fv(end_point); glEnd(); glPopAttrib(); } if (stipple) { GPU_basic_shader_bind_disable(GPU_SHADER_LINE | GPU_SHADER_STIPPLE); } else { GPU_basic_shader_bind_disable(GPU_SHADER_LINE); } } /* Draw sliders. */ if (is_selected_track) { int i; for (i = 0; i < 4; i++) { draw_marker_slide_square(plane_marker->corners[i][0], plane_marker->corners[i][1], 3.0f * px[0], 3.0f * px[1], draw_outline, px); } } }