Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeroen Bakker <jeroen@blender.org>2021-08-04 09:58:19 +0300
committerJeroen Bakker <jeroen@blender.org>2021-08-04 09:58:39 +0300
commiteffc0487106bc74590acf35a61541597b1149daa (patch)
tree893cd6d82930879d3e0e2734ce66243f4042f72d
parentcd92b2350fc20f6c91128881b5fd20dd173d2308 (diff)
T90371: Asset: Drop Material Tooltip.
This patch changes the drop named material tooltip to give feedback to the user what is going to happen when they invoke the change. There are 3 states: * "": Operator will be canceled as not all data is present (dropping on background.) * "Drop <named material> on <object name> (slot <slot number>, replacing <current material in slot>). * "Drop <named material> on <object name> (slot <slot number). Reviewed By: Severin Maniphest Tasks: T90371 Differential Revision: https://developer.blender.org/D12106
-rw-r--r--source/blender/editors/include/ED_object.h4
-rw-r--r--source/blender/editors/object/object_relations.c29
-rw-r--r--source/blender/editors/space_outliner/outliner_dragdrop.c8
-rw-r--r--source/blender/editors/space_view3d/space_view3d.c16
-rw-r--r--source/blender/windowmanager/WM_types.h4
-rw-r--r--source/blender/windowmanager/intern/wm_dragdrop.c7
6 files changed, 58 insertions, 10 deletions
diff --git a/source/blender/editors/include/ED_object.h b/source/blender/editors/include/ED_object.h
index 888dcd9d428..3141c8f707b 100644
--- a/source/blender/editors/include/ED_object.h
+++ b/source/blender/editors/include/ED_object.h
@@ -53,6 +53,7 @@ struct uiLayout;
struct wmKeyConfig;
struct wmOperator;
struct wmOperatorType;
+struct wmEvent;
/* object_edit.c */
/* context.object */
@@ -199,6 +200,9 @@ void ED_object_parent(struct Object *ob,
struct Object *parent,
const int type,
const char *substr);
+char *ED_object_ot_drop_named_material_tooltip(struct bContext *C,
+ struct PointerRNA *properties,
+ const struct wmEvent *event);
/* bitflags for enter/exit editmode */
enum {
diff --git a/source/blender/editors/object/object_relations.c b/source/blender/editors/object/object_relations.c
index f576c0c8517..92d0deb49d0 100644
--- a/source/blender/editors/object/object_relations.c
+++ b/source/blender/editors/object/object_relations.c
@@ -2723,6 +2723,35 @@ void OBJECT_OT_make_single_user(wmOperatorType *ot)
/** \name Drop Named Material on Object Operator
* \{ */
+char *ED_object_ot_drop_named_material_tooltip(bContext *C,
+ PointerRNA *properties,
+ const wmEvent *event)
+{
+ Base *base = ED_view3d_give_base_under_cursor(C, event->mval);
+
+ char name[MAX_ID_NAME - 2];
+ RNA_string_get(properties, "name", name);
+
+ if (base == NULL) {
+ return BLI_strdup("");
+ }
+
+ Object *ob = base->object;
+ int active_mat_slot = max_ii(ob->actcol, 1);
+ Material *prev_mat = BKE_object_material_get(ob, active_mat_slot);
+
+ char *result;
+ if (prev_mat) {
+ const char *tooltip = TIP_("Drop %s on %s (slot %d, replacing %s).");
+ result = BLI_sprintfN(tooltip, name, ob->id.name + 2, active_mat_slot, prev_mat->id.name + 2);
+ }
+ else {
+ const char *tooltip = TIP_("Drop %s on %s (slot %d).");
+ result = BLI_sprintfN(tooltip, name, ob->id.name + 2, active_mat_slot);
+ }
+ return result;
+}
+
static int drop_named_material_invoke(bContext *C, wmOperator *op, const wmEvent *event)
{
Main *bmain = CTX_data_main(C);
diff --git a/source/blender/editors/space_outliner/outliner_dragdrop.c b/source/blender/editors/space_outliner/outliner_dragdrop.c
index 36b2966dc43..11ad3abcd54 100644
--- a/source/blender/editors/space_outliner/outliner_dragdrop.c
+++ b/source/blender/editors/space_outliner/outliner_dragdrop.c
@@ -868,7 +868,8 @@ static bool datastack_drop_poll(bContext *C, wmDrag *drag, const wmEvent *event)
static char *datastack_drop_tooltip(bContext *UNUSED(C),
wmDrag *drag,
- const wmEvent *UNUSED(event))
+ const wmEvent *UNUSED(event),
+ struct wmDropBox *UNUSED(drop))
{
StackDropData *drop_data = drag->poin;
switch (drop_data->drop_action) {
@@ -1191,7 +1192,10 @@ static bool collection_drop_poll(bContext *C, wmDrag *drag, const wmEvent *event
return false;
}
-static char *collection_drop_tooltip(bContext *C, wmDrag *drag, const wmEvent *event)
+static char *collection_drop_tooltip(bContext *C,
+ wmDrag *drag,
+ const wmEvent *event,
+ wmDropBox *UNUSED(drop))
{
CollectionDrop data;
if (!event->shift && collection_drop_init(C, drag, event, &data)) {
diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c
index a2564469c16..0803b4c4776 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -53,6 +53,7 @@
#include "BKE_screen.h"
#include "BKE_workspace.h"
+#include "ED_object.h"
#include "ED_render.h"
#include "ED_screen.h"
#include "ED_space_api.h"
@@ -528,6 +529,16 @@ static bool view3d_mat_drop_poll(bContext *C, wmDrag *drag, const wmEvent *event
return view3d_drop_id_in_main_region_poll(C, drag, event, ID_MA);
}
+static char *view3d_mat_drop_tooltip(bContext *C,
+ wmDrag *drag,
+ const wmEvent *event,
+ struct wmDropBox *drop)
+{
+ wmDragAsset *asset_drag = WM_drag_get_asset_data(drag, ID_MA);
+ RNA_string_set(drop->ptr, "name", asset_drag->name);
+ return ED_object_ot_drop_named_material_tooltip(C, drop->ptr, event);
+}
+
static bool view3d_object_data_drop_poll(bContext *C, wmDrag *drag, const wmEvent *event)
{
ID_Type id_type = view3d_drop_id_in_main_region_poll_get_id_type(C, drag, event);
@@ -539,7 +550,8 @@ static bool view3d_object_data_drop_poll(bContext *C, wmDrag *drag, const wmEven
static char *view3d_object_data_drop_tooltip(bContext *UNUSED(C),
wmDrag *UNUSED(drag),
- const wmEvent *UNUSED(event))
+ const wmEvent *UNUSED(event),
+ wmDropBox *UNUSED(drop))
{
return BLI_strdup(TIP_("Create object instance from object-data"));
}
@@ -689,7 +701,7 @@ static void view3d_dropboxes(void)
view3d_mat_drop_poll,
view3d_id_drop_copy,
WM_drag_free_imported_drag_ID,
- NULL);
+ view3d_mat_drop_tooltip);
WM_dropbox_add(lb,
"VIEW3D_OT_background_image_add",
view3d_ima_bg_drop_poll,
diff --git a/source/blender/windowmanager/WM_types.h b/source/blender/windowmanager/WM_types.h
index 4d6cb941347..485d8e5a162 100644
--- a/source/blender/windowmanager/WM_types.h
+++ b/source/blender/windowmanager/WM_types.h
@@ -115,6 +115,7 @@ struct wmEvent;
struct wmOperator;
struct wmWindowManager;
struct wmDrag;
+struct wmDropBox;
#include "BLI_compiler_attrs.h"
#include "DNA_listBase.h"
@@ -937,7 +938,8 @@ typedef struct wmDragAsset {
typedef char *(*WMDropboxTooltipFunc)(struct bContext *,
struct wmDrag *,
- const struct wmEvent *event);
+ const struct wmEvent *event,
+ struct wmDropBox *drop);
typedef struct wmDrag {
struct wmDrag *next, *prev;
diff --git a/source/blender/windowmanager/intern/wm_dragdrop.c b/source/blender/windowmanager/intern/wm_dragdrop.c
index c58d3c53e03..dcbb502117e 100644
--- a/source/blender/windowmanager/intern/wm_dragdrop.c
+++ b/source/blender/windowmanager/intern/wm_dragdrop.c
@@ -220,14 +220,11 @@ void WM_drag_free_list(struct ListBase *lb)
}
}
-static char *dropbox_tooltip(bContext *C,
- wmDrag *drag,
- const wmEvent *event,
- const wmDropBox *drop)
+static char *dropbox_tooltip(bContext *C, wmDrag *drag, const wmEvent *event, wmDropBox *drop)
{
char *tooltip = NULL;
if (drop->tooltip) {
- tooltip = drop->tooltip(C, drag, event);
+ tooltip = drop->tooltip(C, drag, event, drop);
}
if (!tooltip) {
tooltip = BLI_strdup(WM_operatortype_name(drop->ot, drop->ptr));