Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/space_view3d/space_view3d.c
| Show First 20 Lines • Show All 507 Lines • ▼ Show 20 Lines | |||||
| { | { | ||||
| if (!view3d_drop_in_main_region_poll(C, event)) { | if (!view3d_drop_in_main_region_poll(C, event)) { | ||||
| return false; | return false; | ||||
| } | } | ||||
| return WM_drag_is_ID_type(drag, id_type); | return WM_drag_is_ID_type(drag, id_type); | ||||
| } | } | ||||
| static bool view3d_ob_drop_poll(bContext *C, | static bool view3d_ob_drop_poll(bContext *C, wmDrag *drag, const wmEvent *event) | ||||
| wmDrag *drag, | |||||
| const wmEvent *event, | |||||
| const char **UNUSED(r_tooltip)) | |||||
| { | { | ||||
| return view3d_drop_id_in_main_region_poll(C, drag, event, ID_OB); | return view3d_drop_id_in_main_region_poll(C, drag, event, ID_OB); | ||||
| } | } | ||||
| static bool view3d_collection_drop_poll(bContext *C, | static bool view3d_collection_drop_poll(bContext *C, wmDrag *drag, const wmEvent *event) | ||||
| wmDrag *drag, | |||||
| const wmEvent *event, | |||||
| const char **UNUSED(r_tooltip)) | |||||
| { | { | ||||
| return view3d_drop_id_in_main_region_poll(C, drag, event, ID_GR); | return view3d_drop_id_in_main_region_poll(C, drag, event, ID_GR); | ||||
| } | } | ||||
| static bool view3d_mat_drop_poll(bContext *C, | static bool view3d_mat_drop_poll(bContext *C, wmDrag *drag, const wmEvent *event) | ||||
| wmDrag *drag, | |||||
| const wmEvent *event, | |||||
| const char **UNUSED(r_tooltip)) | |||||
| { | { | ||||
| return view3d_drop_id_in_main_region_poll(C, drag, event, ID_MA); | return view3d_drop_id_in_main_region_poll(C, drag, event, ID_MA); | ||||
| } | } | ||||
| static bool view3d_object_data_drop_poll(bContext *C, | static bool view3d_object_data_drop_poll(bContext *C, wmDrag *drag, const wmEvent *event) | ||||
| wmDrag *drag, | |||||
| const wmEvent *event, | |||||
| const char **r_tooltip) | |||||
| { | { | ||||
| ID_Type id_type = view3d_drop_id_in_main_region_poll_get_id_type(C, drag, event); | ID_Type id_type = view3d_drop_id_in_main_region_poll_get_id_type(C, drag, event); | ||||
| if (id_type) { | if (id_type && OB_DATA_SUPPORT_ID(id_type)) { | ||||
| if (OB_DATA_SUPPORT_ID(id_type)) { | |||||
| *r_tooltip = TIP_("Create object instance from object-data"); | |||||
| return true; | return true; | ||||
| } | } | ||||
| } | |||||
| return false; | return false; | ||||
| } | } | ||||
| static bool view3d_ima_drop_poll(bContext *C, | static char *view3d_object_data_drop_tooltip(bContext *C, wmDrag *drag, const wmEvent *event) | ||||
| wmDrag *drag, | { | ||||
| const wmEvent *event, | return BLI_strdup(TIP_("Create object instance from object-data")); | ||||
| const char **UNUSED(r_tooltip)) | } | ||||
| static bool view3d_ima_drop_poll(bContext *C, wmDrag *drag, const wmEvent *event) | |||||
| { | { | ||||
| if (ED_region_overlap_isect_any_xy(CTX_wm_area(C), &event->x)) { | if (ED_region_overlap_isect_any_xy(CTX_wm_area(C), &event->x)) { | ||||
| return false; | return false; | ||||
| } | } | ||||
| if (drag->type == WM_DRAG_PATH) { | if (drag->type == WM_DRAG_PATH) { | ||||
| /* rule might not work? */ | /* rule might not work? */ | ||||
| return (ELEM(drag->icon, 0, ICON_FILE_IMAGE, ICON_FILE_MOVIE)); | return (ELEM(drag->icon, 0, ICON_FILE_IMAGE, ICON_FILE_MOVIE)); | ||||
| } | } | ||||
| return WM_drag_is_ID_type(drag, ID_IM); | return WM_drag_is_ID_type(drag, ID_IM); | ||||
| } | } | ||||
| static bool view3d_ima_bg_is_camera_view(bContext *C) | static bool view3d_ima_bg_is_camera_view(bContext *C) | ||||
| { | { | ||||
| RegionView3D *rv3d = CTX_wm_region_view3d(C); | RegionView3D *rv3d = CTX_wm_region_view3d(C); | ||||
| if ((rv3d && (rv3d->persp == RV3D_CAMOB))) { | if ((rv3d && (rv3d->persp == RV3D_CAMOB))) { | ||||
| View3D *v3d = CTX_wm_view3d(C); | View3D *v3d = CTX_wm_view3d(C); | ||||
| if (v3d && v3d->camera && v3d->camera->type == OB_CAMERA) { | if (v3d && v3d->camera && v3d->camera->type == OB_CAMERA) { | ||||
| return true; | return true; | ||||
| } | } | ||||
| } | } | ||||
| return false; | return false; | ||||
| } | } | ||||
| static bool view3d_ima_bg_drop_poll(bContext *C, | static bool view3d_ima_bg_drop_poll(bContext *C, wmDrag *drag, const wmEvent *event) | ||||
| wmDrag *drag, | |||||
| const wmEvent *event, | |||||
| const char **r_tooltip) | |||||
| { | { | ||||
| if (!view3d_ima_drop_poll(C, drag, event, r_tooltip)) { | if (!view3d_ima_drop_poll(C, drag, event)) { | ||||
| return false; | return false; | ||||
| } | } | ||||
| if (ED_view3d_is_object_under_cursor(C, event->mval)) { | if (ED_view3d_is_object_under_cursor(C, event->mval)) { | ||||
| return false; | return false; | ||||
| } | } | ||||
| return view3d_ima_bg_is_camera_view(C); | return view3d_ima_bg_is_camera_view(C); | ||||
| } | } | ||||
| static bool view3d_ima_empty_drop_poll(bContext *C, | static bool view3d_ima_empty_drop_poll(bContext *C, wmDrag *drag, const wmEvent *event) | ||||
| wmDrag *drag, | |||||
| const wmEvent *event, | |||||
| const char **r_tooltip) | |||||
| { | { | ||||
| if (!view3d_ima_drop_poll(C, drag, event, r_tooltip)) { | if (!view3d_ima_drop_poll(C, drag, event)) { | ||||
| return false; | return false; | ||||
| } | } | ||||
| Object *ob = ED_view3d_give_object_under_cursor(C, event->mval); | Object *ob = ED_view3d_give_object_under_cursor(C, event->mval); | ||||
| if (ob == NULL) { | if (ob == NULL) { | ||||
| return true; | return true; | ||||
| } | } | ||||
| if (ob->type == OB_EMPTY && ob->empty_drawtype == OB_EMPTY_IMAGE) { | if (ob->type == OB_EMPTY && ob->empty_drawtype == OB_EMPTY_IMAGE) { | ||||
| return true; | return true; | ||||
| } | } | ||||
| return false; | return false; | ||||
| } | } | ||||
| static bool view3d_volume_drop_poll(bContext *UNUSED(C), | static bool view3d_volume_drop_poll(bContext *UNUSED(C), | ||||
| wmDrag *drag, | wmDrag *drag, | ||||
| const wmEvent *UNUSED(event), | const wmEvent *UNUSED(event)) | ||||
| const char **UNUSED(r_tooltip)) | |||||
| { | { | ||||
| return (drag->type == WM_DRAG_PATH) && (drag->icon == ICON_FILE_VOLUME); | return (drag->type == WM_DRAG_PATH) && (drag->icon == ICON_FILE_VOLUME); | ||||
| } | } | ||||
| static void view3d_ob_drop_copy(wmDrag *drag, wmDropBox *drop) | static void view3d_ob_drop_copy(wmDrag *drag, wmDropBox *drop) | ||||
| { | { | ||||
| ID *id = WM_drag_get_local_ID_or_import_from_asset(drag, ID_OB); | ID *id = WM_drag_get_local_ID_or_import_from_asset(drag, ID_OB); | ||||
| ▲ Show 20 Lines • Show All 62 Lines • ▼ Show 20 Lines | |||||
| static void view3d_dropboxes(void) | static void view3d_dropboxes(void) | ||||
| { | { | ||||
| ListBase *lb = WM_dropboxmap_find("View3D", SPACE_VIEW3D, RGN_TYPE_WINDOW); | ListBase *lb = WM_dropboxmap_find("View3D", SPACE_VIEW3D, RGN_TYPE_WINDOW); | ||||
| WM_dropbox_add(lb, | WM_dropbox_add(lb, | ||||
| "OBJECT_OT_add_named", | "OBJECT_OT_add_named", | ||||
| view3d_ob_drop_poll, | view3d_ob_drop_poll, | ||||
| view3d_ob_drop_copy, | view3d_ob_drop_copy, | ||||
| WM_drag_free_imported_drag_ID); | WM_drag_free_imported_drag_ID, | ||||
| NULL); | |||||
| WM_dropbox_add(lb, | WM_dropbox_add(lb, | ||||
| "OBJECT_OT_drop_named_material", | "OBJECT_OT_drop_named_material", | ||||
| view3d_mat_drop_poll, | view3d_mat_drop_poll, | ||||
| view3d_id_drop_copy, | view3d_id_drop_copy, | ||||
| WM_drag_free_imported_drag_ID); | WM_drag_free_imported_drag_ID, | ||||
| NULL); | |||||
| WM_dropbox_add(lb, | WM_dropbox_add(lb, | ||||
| "VIEW3D_OT_background_image_add", | "VIEW3D_OT_background_image_add", | ||||
| view3d_ima_bg_drop_poll, | view3d_ima_bg_drop_poll, | ||||
| view3d_id_path_drop_copy, | view3d_id_path_drop_copy, | ||||
| WM_drag_free_imported_drag_ID); | WM_drag_free_imported_drag_ID, | ||||
| NULL); | |||||
| WM_dropbox_add(lb, | WM_dropbox_add(lb, | ||||
| "OBJECT_OT_drop_named_image", | "OBJECT_OT_drop_named_image", | ||||
| view3d_ima_empty_drop_poll, | view3d_ima_empty_drop_poll, | ||||
| view3d_id_path_drop_copy, | view3d_id_path_drop_copy, | ||||
| WM_drag_free_imported_drag_ID); | WM_drag_free_imported_drag_ID, | ||||
| NULL); | |||||
| WM_dropbox_add(lb, | WM_dropbox_add(lb, | ||||
| "OBJECT_OT_volume_import", | "OBJECT_OT_volume_import", | ||||
| view3d_volume_drop_poll, | view3d_volume_drop_poll, | ||||
| view3d_id_path_drop_copy, | view3d_id_path_drop_copy, | ||||
| WM_drag_free_imported_drag_ID); | WM_drag_free_imported_drag_ID, | ||||
| NULL); | |||||
| WM_dropbox_add(lb, | WM_dropbox_add(lb, | ||||
| "OBJECT_OT_collection_instance_add", | "OBJECT_OT_collection_instance_add", | ||||
| view3d_collection_drop_poll, | view3d_collection_drop_poll, | ||||
| view3d_collection_drop_copy, | view3d_collection_drop_copy, | ||||
| WM_drag_free_imported_drag_ID); | WM_drag_free_imported_drag_ID, | ||||
| NULL); | |||||
| WM_dropbox_add(lb, | WM_dropbox_add(lb, | ||||
| "OBJECT_OT_data_instance_add", | "OBJECT_OT_data_instance_add", | ||||
| view3d_object_data_drop_poll, | view3d_object_data_drop_poll, | ||||
| view3d_id_drop_copy_with_type, | view3d_id_drop_copy_with_type, | ||||
| WM_drag_free_imported_drag_ID); | WM_drag_free_imported_drag_ID, | ||||
| view3d_object_data_drop_tooltip); | |||||
| } | } | ||||
| static void view3d_widgets(void) | static void view3d_widgets(void) | ||||
| { | { | ||||
| wmGizmoMapType *gzmap_type = WM_gizmomaptype_ensure( | wmGizmoMapType *gzmap_type = WM_gizmomaptype_ensure( | ||||
| &(const struct wmGizmoMapType_Params){SPACE_VIEW3D, RGN_TYPE_WINDOW}); | &(const struct wmGizmoMapType_Params){SPACE_VIEW3D, RGN_TYPE_WINDOW}); | ||||
| WM_gizmogrouptype_append_and_link(gzmap_type, VIEW3D_GGT_xform_gizmo_context); | WM_gizmogrouptype_append_and_link(gzmap_type, VIEW3D_GGT_xform_gizmo_context); | ||||
| ▲ Show 20 Lines • Show All 1,044 Lines • Show Last 20 Lines | |||||