[Bf-blender-cvs] [effc0487106] master: T90371: Asset: Drop Material Tooltip.

Jeroen Bakker noreply at git.blender.org
Wed Aug 4 08:59:09 CEST 2021


Commit: effc0487106bc74590acf35a61541597b1149daa
Author: Jeroen Bakker
Date:   Wed Aug 4 08:58:19 2021 +0200
Branches: master
https://developer.blender.org/rBeffc0487106bc74590acf35a61541597b1149daa

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

===================================================================

M	source/blender/editors/include/ED_object.h
M	source/blender/editors/object/object_relations.c
M	source/blender/editors/space_outliner/outliner_dragdrop.c
M	source/blender/editors/space_view3d/space_view3d.c
M	source/blender/windowmanager/WM_types.h
M	source/blender/windowmanager/intern/wm_dragdrop.c

===================================================================

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));



More information about the Bf-blender-cvs mailing list