Commit: 27e0d6cbd03db5d6eeead80953842968b1343e25 Author: Campbell Barton Date: Fri Jul 6 09:10:07 2018 +0200 Branches: blender2.8 https://developer.blender.org/rB27e0d6cbd03db5d6eeead80953842968b1343e25
Fix image drag and drop - Dropping now creates empty images w/o holding Ctrl. - Dropping background images works when cursor over camera. =================================================================== M source/blender/editors/space_view3d/space_view3d.c M source/blender/editors/space_view3d/view3d_edit.c =================================================================== diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index 77beadccd5d..15d241a88cc 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -596,10 +596,23 @@ static bool view3d_ima_drop_poll(bContext *UNUSED(C), wmDrag *drag, const wmEven return 0; } +static bool view3d_ima_bg_is_camera_view(bContext *C) +{ + RegionView3D *rv3d = CTX_wm_region_view3d(C); + if ((rv3d && (rv3d->persp == RV3D_CAMOB))) { + View3D *v3d = CTX_wm_view3d(C); + if (v3d && v3d->camera && v3d->camera->type == OB_CAMERA) { + return true; + } + } + return false; +} + static bool view3d_ima_bg_drop_poll(bContext *C, wmDrag *drag, const wmEvent *event) { - if (event->ctrl) - return false; + if (view3d_ima_bg_is_camera_view(C)) { + return true; + } if (!ED_view3d_give_base_under_cursor(C, event->mval)) { return view3d_ima_drop_poll(C, drag, event); @@ -609,10 +622,14 @@ static bool view3d_ima_bg_drop_poll(bContext *C, wmDrag *drag, const wmEvent *ev static bool view3d_ima_empty_drop_poll(bContext *C, wmDrag *drag, const wmEvent *event) { + if (!view3d_ima_bg_is_camera_view(C)) { + return true; + } + Base *base = ED_view3d_give_base_under_cursor(C, event->mval); /* either holding and ctrl and no object, or dropping to empty */ - if (((base == NULL) && event->ctrl) || + if ((base == NULL) || ((base != NULL) && base->object->type == OB_EMPTY)) { return view3d_ima_drop_poll(C, drag, event); diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index 0078988e1b0..d4c2f5babb1 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -4427,30 +4427,40 @@ void VIEW3D_OT_navigate(wmOperatorType *ot) /** \name Background Image Add Operator * \{ */ -static CameraBGImage *background_image_add(bContext *C) -{ - Camera *cam = CTX_data_pointer_get_type(C, "camera", &RNA_Camera).data; - return BKE_camera_background_image_new(cam); +static Camera *background_image_camera_from_context(bContext *C) +{ + /* Needed to support drag-and-drop & camera buttons context. */ + View3D *v3d = CTX_wm_view3d(C); + if (v3d != NULL) { + if (v3d->camera && v3d->camera->data && v3d->camera->type == OB_CAMERA) { + return v3d->camera->data; + } + return NULL; + } + else { + return CTX_data_pointer_get_type(C, "camera", &RNA_Camera).data; + } } static int background_image_add_exec(bContext *C, wmOperator *UNUSED(op)) { - background_image_add(C); + Camera *cam = background_image_camera_from_context(C); + BKE_camera_background_image_new(cam); return OPERATOR_FINISHED; } static int background_image_add_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event)) { - Camera *cam = CTX_data_pointer_get_type(C, "camera", &RNA_Camera).data; + Camera *cam = background_image_camera_from_context(C); Image *ima; CameraBGImage *bgpic; ima = (Image *)WM_operator_drop_load_path(C, op, ID_IM); /* may be NULL, continue anyway */ - bgpic = background_image_add(C); + bgpic = BKE_camera_background_image_new(cam); bgpic->ima = ima; cam->flag |= CAM_SHOW_BG_IMAGE; @@ -4460,19 +4470,24 @@ static int background_image_add_invoke(bContext *C, wmOperator *op, const wmEven return OPERATOR_FINISHED; } +static bool background_image_add_poll(bContext *C) +{ + return background_image_camera_from_context(C) != NULL; +} + void VIEW3D_OT_background_image_add(wmOperatorType *ot) { /* identifiers */ /* note: having key shortcut here is bad practice, * but for now keep because this displays when dragging an image over the 3D viewport */ - ot->name = "Add Background Image (Ctrl for Empty Object)"; - ot->description = "Add a new background image (Ctrl for Empty Object)"; + ot->name = "Add Background Image"; + ot->description = "Add a new background image"; ot->idname = "VIEW3D_OT_background_image_add"; /* api callbacks */ ot->invoke = background_image_add_invoke; ot->exec = background_image_add_exec; - ot->poll = ED_operator_camera; + ot->poll = background_image_add_poll; /* flags */ ot->flag = OPTYPE_UNDO; _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs