diff options
author | Tianwei Shen <shentianweipku@gmail.com> | 2016-08-02 19:04:12 +0300 |
---|---|---|
committer | Tianwei Shen <shentianweipku@gmail.com> | 2016-08-02 19:04:12 +0300 |
commit | 8e66dbdf9788c7b0f11d4d2a588f148719afc742 (patch) | |
tree | 5ad1f872b17d4e561bd59957cd451c54d3d05860 /source/blender/editors/space_clip | |
parent | 9527950b37bc782514a43fbbd79179c17d41c1bb (diff) |
seperate zoom from SpaceClip to RegionSpaceClip
- mark zoom in SpaceClip as deprecated
- known issue: versioning is not done
Diffstat (limited to 'source/blender/editors/space_clip')
-rw-r--r-- | source/blender/editors/space_clip/clip_draw.c | 68 | ||||
-rw-r--r-- | source/blender/editors/space_clip/clip_editor.c | 73 | ||||
-rw-r--r-- | source/blender/editors/space_clip/clip_ops.c | 55 | ||||
-rw-r--r-- | source/blender/editors/space_clip/space_clip.c | 41 | ||||
-rw-r--r-- | source/blender/editors/space_clip/tracking_ops.c | 8 | ||||
-rw-r--r-- | source/blender/editors/space_clip/tracking_ops_plane.c | 8 |
6 files changed, 146 insertions, 107 deletions
diff --git a/source/blender/editors/space_clip/clip_draw.c b/source/blender/editors/space_clip/clip_draw.c index 99e12021382..f59df488683 100644 --- a/source/blender/editors/space_clip/clip_draw.c +++ b/source/blender/editors/space_clip/clip_draw.c @@ -472,7 +472,7 @@ static void draw_track_path(SpaceClip *sc, MovieClip *UNUSED(clip), MovieTrackin glEnd(); } -static void draw_marker_outline(SpaceClip *sc, MovieTrackingTrack *track, MovieTrackingMarker *marker, +static void draw_marker_outline(SpaceClip *sc, ARegion *ar, MovieTrackingTrack *track, MovieTrackingMarker *marker, const float marker_pos[2], int width, int height) { int tiny = sc->flag & SC_SHOW_TINY_MARKER; @@ -481,8 +481,9 @@ static void draw_marker_outline(SpaceClip *sc, MovieTrackingTrack *track, MovieT UI_ThemeColor(TH_MARKER_OUTLINE); - px[0] = 1.0f / width / sc->zoom; - px[1] = 1.0f / height / sc->zoom; + RegionSpaceClip *rsc = (RegionSpaceClip*) ar->regiondata; + px[0] = 1.0f / width / rsc->zoom; + px[1] = 1.0f / height / rsc->zoom; glLineWidth(tiny ? 1.0f : 3.0f); @@ -586,7 +587,7 @@ static void track_colors(MovieTrackingTrack *track, int act, int link, float col } } -static void draw_marker_areas(SpaceClip *sc, MovieTrackingTrack *track, MovieTrackingMarker *marker, +static void draw_marker_areas(SpaceClip *sc, ARegion *ar, MovieTrackingTrack *track, MovieTrackingMarker *marker, const float marker_pos[2], int width, int height, int act, int sel) { int tiny = sc->flag & SC_SHOW_TINY_MARKER; @@ -597,8 +598,9 @@ static void draw_marker_areas(SpaceClip *sc, MovieTrackingTrack *track, MovieTra bool link = is_track_linked(tracking, track); track_colors(track, act, link, col, scol); - px[0] = 1.0f / width / sc->zoom; - px[1] = 1.0f / height / sc->zoom; + RegionSpaceClip *rsc = (RegionSpaceClip*) ar->regiondata; + px[0] = 1.0f / width / rsc->zoom; + px[1] = 1.0f / height / rsc->zoom; glLineWidth(1.0f); @@ -806,7 +808,7 @@ static void draw_marker_slide_triangle(float x, float y, float dx, float dy, int glEnd(); } -static void draw_marker_slide_zones(SpaceClip *sc, MovieTrackingTrack *track, MovieTrackingMarker *marker, +static void draw_marker_slide_zones(SpaceClip *sc, ARegion *ar, 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; @@ -830,8 +832,9 @@ static void draw_marker_slide_zones(SpaceClip *sc, MovieTrackingTrack *track, Mo glPushMatrix(); glTranslate2fv(marker_pos); - dx = 6.0f / width / sc->zoom; - dy = 6.0f / height / sc->zoom; + RegionSpaceClip *rsc = (RegionSpaceClip*) ar->regiondata; + dx = 6.0f / width / rsc->zoom; + dy = 6.0f / height / rsc->zoom; side = get_shortest_pattern_side(marker); patdx = min_ff(dx * 2.0f / 3.0f, side / 6.0f) * UI_DPI_FAC; @@ -840,8 +843,8 @@ static void draw_marker_slide_zones(SpaceClip *sc, MovieTrackingTrack *track, Mo 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; + px[0] = 1.0f / rsc->zoom / width / sc->scale; + px[1] = 1.0f / rsc->zoom / height / sc->scale; if ((sc->flag & SC_SHOW_MARKER_SEARCH) && ((track->search_flag & SELECT) == sel || outline)) { if (!outline) { @@ -1122,7 +1125,7 @@ static void draw_plane_marker_image(Scene *scene, BKE_image_release_ibuf(image, ibuf, lock); } -static void draw_plane_marker_ex(SpaceClip *sc, Scene *scene, MovieTrackingPlaneTrack *plane_track, +static void draw_plane_marker_ex(SpaceClip *sc, ARegion *ar, Scene *scene, MovieTrackingPlaneTrack *plane_track, MovieTrackingPlaneMarker *plane_marker, bool is_active_track, bool draw_outline, int width, int height) { @@ -1147,8 +1150,9 @@ static void draw_plane_marker_ex(SpaceClip *sc, Scene *scene, MovieTrackingPlane } } - px[0] = 1.0f / width / sc->zoom; - px[1] = 1.0f / height / sc->zoom; + RegionSpaceClip *rsc = (RegionSpaceClip*) ar->regiondata; + px[0] = 1.0f / width / rsc->zoom; + px[1] = 1.0f / height / rsc->zoom; /* Draw image */ if (draw_outline == false) { @@ -1185,12 +1189,12 @@ static void draw_plane_marker_ex(SpaceClip *sc, Scene *scene, MovieTrackingPlane glBegin(GL_LINES); - getArrowEndPoint(width, height, sc->zoom, plane_marker->corners[0], plane_marker->corners[1], end_point); + getArrowEndPoint(width, height, rsc->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); + getArrowEndPoint(width, height, rsc->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); @@ -1218,28 +1222,28 @@ static void draw_plane_marker_ex(SpaceClip *sc, Scene *scene, MovieTrackingPlane } } -static void draw_plane_marker_outline(SpaceClip *sc, Scene *scene, MovieTrackingPlaneTrack *plane_track, +static void draw_plane_marker_outline(SpaceClip *sc, ARegion *ar, Scene *scene, MovieTrackingPlaneTrack *plane_track, MovieTrackingPlaneMarker *plane_marker, int width, int height) { - draw_plane_marker_ex(sc, scene, plane_track, plane_marker, false, true, width, height); + draw_plane_marker_ex(sc, ar, scene, plane_track, plane_marker, false, true, width, height); } -static void draw_plane_marker(SpaceClip *sc, Scene *scene, MovieTrackingPlaneTrack *plane_track, +static void draw_plane_marker(SpaceClip *sc, ARegion *ar, Scene *scene, MovieTrackingPlaneTrack *plane_track, MovieTrackingPlaneMarker *plane_marker, bool is_active_track, int width, int height) { - draw_plane_marker_ex(sc, scene, plane_track, plane_marker, is_active_track, false, width, height); + draw_plane_marker_ex(sc, ar, scene, plane_track, plane_marker, is_active_track, false, width, height); } -static void draw_plane_track(SpaceClip *sc, Scene *scene, MovieTrackingPlaneTrack *plane_track, +static void draw_plane_track(SpaceClip *sc, ARegion *ar, Scene *scene, MovieTrackingPlaneTrack *plane_track, int framenr, bool is_active_track, int width, int height) { MovieTrackingPlaneMarker *plane_marker; plane_marker = BKE_tracking_plane_marker_get(plane_track, framenr); - draw_plane_marker_outline(sc, scene, plane_track, plane_marker, width, height); - draw_plane_marker(sc, scene, plane_track, plane_marker, is_active_track, width, height); + draw_plane_marker_outline(sc, ar, scene, plane_track, plane_marker, width, height); + draw_plane_marker(sc, ar, scene, plane_track, plane_marker, is_active_track, width, height); } /* Draw all kind of tracks. */ @@ -1283,7 +1287,7 @@ static void draw_tracking_tracks(SpaceClip *sc, Scene *scene, ARegion *ar, Movie plane_track = plane_track->next) { if ((plane_track->flag & PLANE_TRACK_HIDDEN) == 0) { - draw_plane_track(sc, scene, plane_track, framenr, plane_track == active_plane_track, width, height); + draw_plane_track(sc, ar, scene, plane_track, framenr, plane_track == active_plane_track, width, height); } } @@ -1348,10 +1352,10 @@ static void draw_tracking_tracks(SpaceClip *sc, Scene *scene, ARegion *ar, Movie if (MARKER_VISIBLE(sc, track, marker)) { copy_v2_v2(cur_pos, fp ? fp : marker->pos); - draw_marker_outline(sc, track, marker, cur_pos, width, height); - draw_marker_areas(sc, track, marker, cur_pos, width, height, 0, 0); - draw_marker_slide_zones(sc, track, marker, cur_pos, 1, 0, 0, width, height); - draw_marker_slide_zones(sc, track, marker, cur_pos, 0, 0, 0, width, height); + draw_marker_outline(sc, ar, track, marker, cur_pos, width, height); + draw_marker_areas(sc, ar, track, marker, cur_pos, width, height, 0, 0); + draw_marker_slide_zones(sc, ar, track, marker, cur_pos, 1, 0, 0, width, height); + draw_marker_slide_zones(sc, ar, track, marker, cur_pos, 0, 0, 0, width, height); if (fp) fp += 2; @@ -1374,8 +1378,8 @@ static void draw_tracking_tracks(SpaceClip *sc, Scene *scene, ARegion *ar, Movie if (!act) { copy_v2_v2(cur_pos, fp ? fp : marker->pos); - draw_marker_areas(sc, track, marker, cur_pos, width, height, 0, 1); - draw_marker_slide_zones(sc, track, marker, cur_pos, 0, 1, 0, width, height); + draw_marker_areas(sc, ar, track, marker, cur_pos, width, height, 0, 1); + draw_marker_slide_zones(sc, ar, track, marker, cur_pos, 0, 1, 0, width, height); } if (fp) @@ -1394,8 +1398,8 @@ static void draw_tracking_tracks(SpaceClip *sc, Scene *scene, ARegion *ar, Movie if (MARKER_VISIBLE(sc, act_track, marker)) { copy_v2_v2(cur_pos, active_pos ? active_pos : marker->pos); - draw_marker_areas(sc, act_track, marker, cur_pos, width, height, 1, 1); - draw_marker_slide_zones(sc, act_track, marker, cur_pos, 0, 1, 1, width, height); + draw_marker_areas(sc, ar, act_track, marker, cur_pos, width, height, 1, 1); + draw_marker_slide_zones(sc, ar, act_track, marker, cur_pos, 0, 1, 1, width, height); } } } diff --git a/source/blender/editors/space_clip/clip_editor.c b/source/blender/editors/space_clip/clip_editor.c index 9577dae264d..f46c75e515b 100644 --- a/source/blender/editors/space_clip/clip_editor.c +++ b/source/blender/editors/space_clip/clip_editor.c @@ -418,6 +418,7 @@ static bool selected_boundbox(const bContext *C, float min[2], float max[2]) bool ED_clip_view_selection(const bContext *C, ARegion *ar, bool fit) { SpaceClip *sc = CTX_wm_space_clip(C); + RegionSpaceClip *rsc = (RegionSpaceClip*) ar->regiondata; int w, h, frame_width, frame_height; float min[2], max[2]; @@ -451,8 +452,8 @@ bool ED_clip_view_selection(const bContext *C, ARegion *ar, bool fit) newzoom = 1.0f / power_of_2(1.0f / min_ff(zoomx, zoomy)); - if (fit || sc->zoom > newzoom) - sc->zoom = newzoom; + if (fit || rsc->zoom > newzoom) + rsc->zoom = newzoom; } return true; @@ -679,7 +680,27 @@ void ED_space_clip_set_secondary_clip(bContext *C, bScreen *screen, SpaceClip *s /* ******** split view when changing to correspondence mode ******** */ void ED_clip_update_correspondence_mode(bContext *C, SpaceClip *sc) { - ARegion *ar = CTX_wm_region(C); + /* search forward and backward to find the drawing region */ + ARegion *ar_origin = CTX_wm_region(C); + bool find_draw_region = false; + ARegion *ar = ar_origin; + while (ar && !find_draw_region) { + if (ar->regiontype == RGN_TYPE_WINDOW) { + find_draw_region = true; + break; + } + ar = ar->prev; + } + /* recover to the current ARegion and search backwards*/ + ar = ar_origin; + while (ar && !find_draw_region) { + if (ar->regiontype == RGN_TYPE_WINDOW) { + find_draw_region = true; + break; + } + ar = ar->next; + } + BLI_assert(find_draw_region == true && ar != NULL); /* some rules related to changing between correspondence mode and other mode*/ if (ar->regiontype != RGN_TYPE_WINDOW) { @@ -687,11 +708,11 @@ void ED_clip_update_correspondence_mode(bContext *C, SpaceClip *sc) } else if (ar->alignment == RGN_ALIGN_VSPLIT) { ///* Exit split-view */ - //ScrArea *sa = CTX_wm_area(C); - //ARegion *arn; + ScrArea *sa = CTX_wm_area(C); + ARegion *arn; - ///* keep current region */ - //ar->alignment = 0; + /* keep current region */ + ar->alignment = 0; //if (sa->spacetype == SPACE_VIEW3D) { // ARegion *ar_iter; @@ -747,25 +768,25 @@ void ED_clip_update_correspondence_mode(bContext *C, SpaceClip *sc) ARegion *newar = BKE_area_region_copy(sa->type, ar); BLI_addtail(&sa->regionbase, newar); - ///* lock views and set them */ - //if (sa->spacetype == SPACE_CLIP) { - // View3D *v3d = sa->spacedata.first; - // int index_qsplit = 0; - - // /* run ED_view3d_lock() so the correct 'rv3d->viewquat' is set, - // * otherwise when restoring rv3d->localvd the 'viewquat' won't - // * match the 'view', set on entering localview See: [#26315], - // * - // * We could avoid manipulating rv3d->localvd here if exiting - // * localview with a 4-split would assign these view locks */ - // RegionView3D *rv3d = ar->regiondata; - // const char viewlock = (rv3d->viewlock_quad & RV3D_VIEWLOCK_INIT) ? - // (rv3d->viewlock_quad & ~RV3D_VIEWLOCK_INIT) : RV3D_LOCKED; - - // region_quadview_init_rv3d(sa, ar, viewlock, ED_view3d_lock_view_from_index(index_qsplit++), RV3D_ORTHO); - // region_quadview_init_rv3d(sa, (ar = ar->next), viewlock, ED_view3d_lock_view_from_index(index_qsplit++), RV3D_ORTHO); - // region_quadview_init_rv3d(sa, (ar = ar->next), viewlock, ED_view3d_lock_view_from_index(index_qsplit++), RV3D_ORTHO); - //} + /* lock views and set them */ + if (sa->spacetype == SPACE_CLIP) { + SpaceClip *sc = sa->spacedata.first; + int index_qsplit = 0; + + /* run ED_view3d_lock() so the correct 'rv3d->viewquat' is set, + * otherwise when restoring rv3d->localvd the 'viewquat' won't + * match the 'view', set on entering localview See: [#26315], + * + * We could avoid manipulating rv3d->localvd here if exiting + * localview with a 4-split would assign these view locks */ + RegionSpaceClip *rsc = ar->regiondata; + //const char viewlock = (rv3d->viewlock_quad & RV3D_VIEWLOCK_INIT) ? + // (rv3d->viewlock_quad & ~RV3D_VIEWLOCK_INIT) : RV3D_LOCKED; + + //region_quadview_init_rv3d(sa, ar, viewlock, ED_view3d_lock_view_from_index(index_qsplit++), RV3D_ORTHO); + //region_quadview_init_rv3d(sa, (ar = ar->next), viewlock, ED_view3d_lock_view_from_index(index_qsplit++), RV3D_ORTHO); + //region_quadview_init_rv3d(sa, (ar = ar->next), viewlock, ED_view3d_lock_view_from_index(index_qsplit++), RV3D_ORTHO); + } ED_area_tag_redraw(sa); WM_event_add_notifier(C, NC_SCREEN | NA_EDITED, NULL); } diff --git a/source/blender/editors/space_clip/clip_ops.c b/source/blender/editors/space_clip/clip_ops.c index 0f85c69333c..924cd71a08a 100644 --- a/source/blender/editors/space_clip/clip_ops.c +++ b/source/blender/editors/space_clip/clip_ops.c @@ -91,24 +91,25 @@ static void sclip_zoom_set(const bContext *C, float zoom, float location[2]) SpaceClip *sc = CTX_wm_space_clip(C); ARegion *ar = CTX_wm_region(C); - float oldzoom = sc->zoom; + RegionSpaceClip *rsc = CTX_wm_region_clip(C); + float oldzoom = rsc->zoom; int width, height; - sc->zoom = zoom; + rsc->zoom = zoom; - if (sc->zoom < 0.1f || sc->zoom > 4.0f) { + if (rsc->zoom < 0.1f || rsc->zoom > 4.0f) { /* check zoom limits */ ED_space_clip_get_size(sc, &width, &height); - width *= sc->zoom; - height *= sc->zoom; + width *= rsc->zoom; + height *= rsc->zoom; if ((width < 4) && (height < 4)) - sc->zoom = oldzoom; - else if (BLI_rcti_size_x(&ar->winrct) <= sc->zoom) - sc->zoom = oldzoom; - else if (BLI_rcti_size_y(&ar->winrct) <= sc->zoom) - sc->zoom = oldzoom; + rsc->zoom = oldzoom; + else if (BLI_rcti_size_x(&ar->winrct) <= rsc->zoom) + rsc->zoom = oldzoom; + else if (BLI_rcti_size_y(&ar->winrct) <= rsc->zoom) + rsc->zoom = oldzoom; } if ((U.uiflag & USER_ZOOM_TO_MOUSEPOS) && location) { @@ -116,8 +117,8 @@ static void sclip_zoom_set(const bContext *C, float zoom, float location[2]) ED_space_clip_get_size(sc, &width, &height); - dx = ((location[0] - 0.5f) * width - sc->xof) * (sc->zoom - oldzoom) / sc->zoom; - dy = ((location[1] - 0.5f) * height - sc->yof) * (sc->zoom - oldzoom) / sc->zoom; + dx = ((location[0] - 0.5f) * width - sc->xof) * (rsc->zoom - oldzoom) / rsc->zoom; + dy = ((location[1] - 0.5f) * height - sc->yof) * (rsc->zoom - oldzoom) / rsc->zoom; if (sc->flag & SC_LOCK_SELECTION) { sc->xlockof += dx; @@ -132,9 +133,9 @@ static void sclip_zoom_set(const bContext *C, float zoom, float location[2]) static void sclip_zoom_set_factor(const bContext *C, float zoomfac, float location[2]) { - SpaceClip *sc = CTX_wm_space_clip(C); + RegionSpaceClip *rsc = CTX_wm_region_data(C); - sclip_zoom_set(C, sc->zoom * zoomfac, location); + sclip_zoom_set(C, rsc->zoom * zoomfac, location); } static void sclip_zoom_set_factor_exec(bContext *C, const wmEvent *event, float factor) @@ -530,11 +531,11 @@ static int view_pan_exec(bContext *C, wmOperator *op) static int view_pan_invoke(bContext *C, wmOperator *op, const wmEvent *event) { if (event->type == MOUSEPAN) { - SpaceClip *sc = CTX_wm_space_clip(C); + RegionSpaceClip *rsc = CTX_wm_region_clip(C); float offset[2]; - offset[0] = (event->prevx - event->x) / sc->zoom; - offset[1] = (event->prevy - event->y) / sc->zoom; + offset[0] = (event->prevx - event->x) / rsc->zoom; + offset[1] = (event->prevy - event->y) / rsc->zoom; RNA_float_set_array(op->ptr, "offset", offset); @@ -551,15 +552,15 @@ static int view_pan_invoke(bContext *C, wmOperator *op, const wmEvent *event) static int view_pan_modal(bContext *C, wmOperator *op, const wmEvent *event) { - SpaceClip *sc = CTX_wm_space_clip(C); + RegionSpaceClip *rsc = CTX_wm_region_clip(C); ViewPanData *vpd = op->customdata; float offset[2]; switch (event->type) { case MOUSEMOVE: copy_v2_v2(vpd->vec, &vpd->xorig); - offset[0] = (vpd->x - event->x) / sc->zoom; - offset[1] = (vpd->y - event->y) / sc->zoom; + offset[0] = (vpd->x - event->x) / rsc->zoom; + offset[1] = (vpd->y - event->y) / rsc->zoom; RNA_float_set_array(op->ptr, "offset", offset); view_pan_exec(C, op); break; @@ -624,6 +625,7 @@ typedef struct ViewZoomData { static void view_zoom_init(bContext *C, wmOperator *op, const wmEvent *event) { SpaceClip *sc = CTX_wm_space_clip(C); + RegionSpaceClip *rsc = CTX_wm_region_clip(C); ARegion *ar = CTX_wm_region(C); ViewZoomData *vpd; @@ -638,7 +640,7 @@ static void view_zoom_init(bContext *C, wmOperator *op, const wmEvent *event) vpd->x = event->x; vpd->y = event->y; - vpd->zoom = sc->zoom; + vpd->zoom = rsc->zoom; vpd->event_type = event->type; ED_clip_mouse_pos(sc, ar, event->mval, vpd->location); @@ -648,11 +650,11 @@ static void view_zoom_init(bContext *C, wmOperator *op, const wmEvent *event) static void view_zoom_exit(bContext *C, wmOperator *op, bool cancel) { - SpaceClip *sc = CTX_wm_space_clip(C); + RegionSpaceClip *rsc = CTX_wm_region_clip(C); ViewZoomData *vpd = op->customdata; if (cancel) { - sc->zoom = vpd->zoom; + rsc->zoom = vpd->zoom; ED_region_tag_redraw(CTX_wm_region(C)); } @@ -705,7 +707,7 @@ static void view_zoom_apply(bContext *C, float factor; if (U.viewzoom == USER_ZOOM_CONT) { - SpaceClip *sclip = CTX_wm_space_clip(C); + RegionSpaceClip *rsc = CTX_wm_region_clip(C); double time = PIL_check_seconds_timer(); float time_step = (float)(time - vpd->timer_lastdraw); float fac; @@ -724,7 +726,7 @@ static void view_zoom_apply(bContext *C, zfac = 1.0f + ((fac / 20.0f) * time_step); vpd->timer_lastdraw = time; - factor = (sclip->zoom * zfac) / vpd->zoom; + factor = (rsc->zoom * zfac) / vpd->zoom; } else { float delta = event->x - vpd->x + event->y - vpd->y; @@ -1551,6 +1553,7 @@ static int clip_view_ndof_invoke(bContext *C, wmOperator *UNUSED(op), const wmEv return OPERATOR_CANCELLED; else { SpaceClip *sc = CTX_wm_space_clip(C); + RegionSpaceClip *rsc = CTX_wm_region_clip(C); ARegion *ar = CTX_wm_region(C); float pan_vec[3]; @@ -1559,7 +1562,7 @@ static int clip_view_ndof_invoke(bContext *C, wmOperator *UNUSED(op), const wmEv WM_event_ndof_pan_get(ndof, pan_vec, true); - mul_v2_fl(pan_vec, (speed * ndof->dt) / sc->zoom); + mul_v2_fl(pan_vec, (speed * ndof->dt) / rsc->zoom); pan_vec[2] *= -ndof->dt; sclip_zoom_set_factor(C, 1.0f + pan_vec[2], NULL); diff --git a/source/blender/editors/space_clip/space_clip.c b/source/blender/editors/space_clip/space_clip.c index 6480348ebe3..2f99e7d36f1 100644 --- a/source/blender/editors/space_clip/space_clip.c +++ b/source/blender/editors/space_clip/space_clip.c @@ -248,7 +248,7 @@ static SpaceLink *clip_new(const bContext *C) sc->spacetype = SPACE_CLIP; sc->flag = SC_SHOW_MARKER_PATTERN | SC_SHOW_TRACK_PATH | SC_SHOW_GRAPH_TRACKS_MOTION | SC_SHOW_GRAPH_FRAMES | SC_SHOW_GPENCIL; - sc->zoom = 1.0f; + //sc->zoom = 1.0f; sc->path_length = 20; sc->scopes.track_preview_height = 120; sc->around = V3D_AROUND_LOCAL_ORIGINS; @@ -303,6 +303,11 @@ static SpaceLink *clip_new(const bContext *C) BLI_addtail(&sc->regionbase, ar); ar->regiontype = RGN_TYPE_WINDOW; + /* region data for main region */ + RegionSpaceClip *rsc = MEM_callocN(sizeof(RegionSpaceClip), "region data for clip"); + rsc->zoom = 1.0f; + ar->regiondata = rsc; + return (SpaceLink *) sc; } @@ -1100,6 +1105,7 @@ static void clip_refresh(const bContext *C, ScrArea *sa) static void movieclip_main_area_set_view2d(const bContext *C, ARegion *ar) { SpaceClip *sc = CTX_wm_space_clip(C); + RegionSpaceClip *rsc = (RegionSpaceClip*) ar->regiondata; float x1, y1, w, h, aspx, aspy; int width, height, winx, winy; @@ -1122,19 +1128,19 @@ static void movieclip_main_area_set_view2d(const bContext *C, ARegion *ar) ar->v2d.mask.ymax = winy; /* which part of the image space do we see? */ - x1 = ar->winrct.xmin + (winx - sc->zoom * w) / 2.0f; - y1 = ar->winrct.ymin + (winy - sc->zoom * h) / 2.0f; + x1 = ar->winrct.xmin + (winx - rsc->zoom * w) / 2.0f; + y1 = ar->winrct.ymin + (winy - rsc->zoom * h) / 2.0f; - x1 -= sc->zoom * sc->xof; - y1 -= sc->zoom * sc->yof; + x1 -= rsc->zoom * sc->xof; + y1 -= rsc->zoom * sc->yof; /* relative display right */ - ar->v2d.cur.xmin = (ar->winrct.xmin - (float)x1) / sc->zoom; - ar->v2d.cur.xmax = ar->v2d.cur.xmin + ((float)winx / sc->zoom); + ar->v2d.cur.xmin = (ar->winrct.xmin - (float)x1) / rsc->zoom; + ar->v2d.cur.xmax = ar->v2d.cur.xmin + ((float)winx / rsc->zoom); /* relative display left */ - ar->v2d.cur.ymin = (ar->winrct.ymin - (float)y1) / sc->zoom; - ar->v2d.cur.ymax = ar->v2d.cur.ymin + ((float)winy / sc->zoom); + ar->v2d.cur.ymin = (ar->winrct.ymin - (float)y1) / rsc->zoom; + ar->v2d.cur.ymax = ar->v2d.cur.ymin + ((float)winy / rsc->zoom); /* normalize 0.0..1.0 */ ar->v2d.cur.xmin /= w; @@ -1147,6 +1153,7 @@ static void movieclip_main_area_set_view2d(const bContext *C, ARegion *ar) static void movieclip_secondary_clip_set_view2d(const bContext *C, ARegion *ar) { SpaceClip *sc = CTX_wm_space_clip(C); + RegionSpaceClip *rsc = (RegionSpaceClip*) ar->regiondata; float x1, y1, w, h, aspx, aspy; int width, height, winx, winy; @@ -1169,19 +1176,19 @@ static void movieclip_secondary_clip_set_view2d(const bContext *C, ARegion *ar) ar->v2d.mask.ymax = winy; /* which part of the image space do we see? */ - x1 = ar->winrct.xmin + (winx - sc->zoom * w) / 2.0f; - y1 = ar->winrct.ymin + (winy - sc->zoom * h) / 2.0f; + x1 = ar->winrct.xmin + (winx - rsc->zoom * w) / 2.0f; + y1 = ar->winrct.ymin + (winy - rsc->zoom * h) / 2.0f; - x1 -= sc->zoom * sc->xof; - y1 -= sc->zoom * sc->yof; + x1 -= rsc->zoom * sc->xof; + y1 -= rsc->zoom * sc->yof; /* relative display right */ - ar->v2d.cur.xmin = (ar->winrct.xmin - (float)x1) / sc->zoom; - ar->v2d.cur.xmax = ar->v2d.cur.xmin + ((float)winx / sc->zoom); + ar->v2d.cur.xmin = (ar->winrct.xmin - (float)x1) / rsc->zoom; + ar->v2d.cur.xmax = ar->v2d.cur.xmin + ((float)winx / rsc->zoom); /* relative display left */ - ar->v2d.cur.ymin = (ar->winrct.ymin - (float)y1) / sc->zoom; - ar->v2d.cur.ymax = ar->v2d.cur.ymin + ((float)winy / sc->zoom); + ar->v2d.cur.ymin = (ar->winrct.ymin - (float)y1) / rsc->zoom; + ar->v2d.cur.ymax = ar->v2d.cur.ymin + ((float)winy / rsc->zoom); /* normalize 0.0..1.0 */ ar->v2d.cur.xmin /= w; diff --git a/source/blender/editors/space_clip/tracking_ops.c b/source/blender/editors/space_clip/tracking_ops.c index 61bfa5b315b..79ae10ded06 100644 --- a/source/blender/editors/space_clip/tracking_ops.c +++ b/source/blender/editors/space_clip/tracking_ops.c @@ -594,6 +594,7 @@ MovieTrackingTrack *tracking_marker_check_slide(bContext *C, { const float distance_clip_squared = 12.0f * 12.0f; SpaceClip *sc = CTX_wm_space_clip(C); + RegionSpaceClip *rsc = CTX_wm_region_clip(C); ARegion *ar = CTX_wm_region(C); MovieClip *clip = ED_space_clip_get_clip(sc); @@ -724,7 +725,7 @@ MovieTrackingTrack *tracking_marker_check_slide(bContext *C, track = track->next; } - if (global_min_distance_squared < distance_clip_squared / sc->zoom) { + if (global_min_distance_squared < distance_clip_squared / rsc->zoom) { if (area_r) { *area_r = min_area; } @@ -856,6 +857,7 @@ static void free_slide_data(SlideMarkerData *data) static int slide_marker_modal(bContext *C, wmOperator *op, const wmEvent *event) { SpaceClip *sc = CTX_wm_space_clip(C); + RegionSpaceClip *rsc = CTX_wm_region_clip(C); ARegion *ar = CTX_wm_region(C); SlideMarkerData *data = (SlideMarkerData *)op->customdata; @@ -881,13 +883,13 @@ static int slide_marker_modal(bContext *C, wmOperator *op, const wmEvent *event) mdelta[0] = event->mval[0] - data->mval[0]; mdelta[1] = event->mval[1] - data->mval[1]; - dx = mdelta[0] / data->width / sc->zoom; + dx = mdelta[0] / data->width / rsc->zoom; if (data->lock) { dy = -dx / data->height * data->width; } else { - dy = mdelta[1] / data->height / sc->zoom; + dy = mdelta[1] / data->height / rsc->zoom; } if (data->accurate) { diff --git a/source/blender/editors/space_clip/tracking_ops_plane.c b/source/blender/editors/space_clip/tracking_ops_plane.c index 4332f3ea765..f945c6baf9d 100644 --- a/source/blender/editors/space_clip/tracking_ops_plane.c +++ b/source/blender/editors/space_clip/tracking_ops_plane.c @@ -138,6 +138,7 @@ static MovieTrackingPlaneTrack *tracking_plane_marker_check_slide( { const float distance_clip_squared = 12.0f * 12.0f; SpaceClip *sc = CTX_wm_space_clip(C); + RegionSpaceClip *rsc = CTX_wm_region_clip(C); ARegion *ar = CTX_wm_region(C); MovieClip *clip = ED_space_clip_get_clip(sc); MovieTracking *tracking = &clip->tracking; @@ -180,7 +181,7 @@ static MovieTrackingPlaneTrack *tracking_plane_marker_check_slide( } } - if (min_distance_squared < distance_clip_squared / sc->zoom) { + if (min_distance_squared < distance_clip_squared / rsc->zoom) { if (corner_r != NULL) { *corner_r = min_corner; } @@ -286,6 +287,7 @@ static int slide_plane_marker_modal(bContext *C, const wmEvent *event) { SpaceClip *sc = CTX_wm_space_clip(C); + RegionSpaceClip *rsc = CTX_wm_region_clip(C); MovieClip *clip = ED_space_clip_get_clip(sc); SlidePlaneMarkerData *data = (SlidePlaneMarkerData *) op->customdata; float dx, dy, mdelta[2]; @@ -307,8 +309,8 @@ static int slide_plane_marker_modal(bContext *C, mdelta[0] = event->mval[0] - data->previous_mval[0]; mdelta[1] = event->mval[1] - data->previous_mval[1]; - dx = mdelta[0] / data->width / sc->zoom; - dy = mdelta[1] / data->height / sc->zoom; + dx = mdelta[0] / data->width / rsc->zoom; + dy = mdelta[1] / data->height / rsc->zoom; if (data->accurate) { dx /= 5.0f; |