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:
Diffstat (limited to 'source/blender/editors/util/ed_util.c')
-rw-r--r--source/blender/editors/util/ed_util.c620
1 files changed, 311 insertions, 309 deletions
diff --git a/source/blender/editors/util/ed_util.c b/source/blender/editors/util/ed_util.c
index e2405591141..503910d1734 100644
--- a/source/blender/editors/util/ed_util.c
+++ b/source/blender/editors/util/ed_util.c
@@ -75,310 +75,311 @@
#include "WM_api.h"
#include "RNA_access.h"
-
-
/* ********* general editor util funcs, not BKE stuff please! ********* */
void ED_editors_init_for_undo(Main *bmain)
{
- wmWindowManager *wm = bmain->wm.first;
- for (wmWindow *win = wm->windows.first; win; win = win->next) {
- ViewLayer *view_layer = WM_window_get_active_view_layer(win);
- Base *base = BASACT(view_layer);
- if (base != NULL) {
- Object *ob = base->object;
- if (ob->mode & OB_MODE_TEXTURE_PAINT) {
- Scene *scene = WM_window_get_active_scene(win);
-
- BKE_texpaint_slots_refresh_object(scene, ob);
- BKE_paint_proj_mesh_data_check(scene, ob, NULL, NULL, NULL, NULL);
- }
- }
- }
+ wmWindowManager *wm = bmain->wm.first;
+ for (wmWindow *win = wm->windows.first; win; win = win->next) {
+ ViewLayer *view_layer = WM_window_get_active_view_layer(win);
+ Base *base = BASACT(view_layer);
+ if (base != NULL) {
+ Object *ob = base->object;
+ if (ob->mode & OB_MODE_TEXTURE_PAINT) {
+ Scene *scene = WM_window_get_active_scene(win);
+
+ BKE_texpaint_slots_refresh_object(scene, ob);
+ BKE_paint_proj_mesh_data_check(scene, ob, NULL, NULL, NULL, NULL);
+ }
+ }
+ }
}
void ED_editors_init(bContext *C)
{
- struct Depsgraph *depsgraph = CTX_data_depsgraph(C);
- Main *bmain = CTX_data_main(C);
- Scene *scene = CTX_data_scene(C);
- wmWindowManager *wm = CTX_wm_manager(C);
-
- /* This is called during initialization, so we don't want to store any reports */
- ReportList *reports = CTX_wm_reports(C);
- int reports_flag_prev = reports->flag & ~RPT_STORE;
-
- SWAP(int, reports->flag, reports_flag_prev);
-
- /* Don't do undo pushes when calling an operator. */
- wm->op_undo_depth++;
-
- /* toggle on modes for objects that were saved with these enabled. for
- * e.g. linked objects we have to ensure that they are actually the
- * active object in this scene. */
- Object *obact = CTX_data_active_object(C);
- if (obact != NULL) {
- for (Object *ob = bmain->objects.first; ob; ob = ob->id.next) {
- int mode = ob->mode;
- if (mode == OB_MODE_OBJECT) {
- continue;
- }
- else if (BKE_object_has_mode_data(ob, mode)) {
- continue;
- }
- else if (ob->type == OB_GPENCIL) {
- /* For multi-edit mode we may already have mode data.
- * (grease pencil does not need it) */
- continue;
- }
-
- ID *ob_data = ob->data;
- ob->mode = OB_MODE_OBJECT;
- if ((ob->type == obact->type) &&
- !ID_IS_LINKED(ob) &&
- !(ob_data && ID_IS_LINKED(ob_data)))
- {
- if (mode == OB_MODE_EDIT) {
- ED_object_editmode_enter_ex(bmain, scene, ob, 0);
- }
- else if (mode == OB_MODE_POSE) {
- ED_object_posemode_enter_ex(bmain, ob);
- }
- else if (mode & OB_MODE_ALL_SCULPT) {
- if (obact == ob) {
- if (mode == OB_MODE_SCULPT) {
- ED_object_sculptmode_enter_ex(bmain, depsgraph, scene, ob, true, reports);
- }
- else if (mode == OB_MODE_VERTEX_PAINT) {
- ED_object_vpaintmode_enter_ex(bmain, depsgraph, wm, scene, ob);
- }
- else if (mode == OB_MODE_WEIGHT_PAINT) {
- ED_object_wpaintmode_enter_ex(bmain, depsgraph, wm, scene, ob);
- }
- else {
- BLI_assert(0);
- }
- }
- else {
- /* Create data for non-active objects which need it for
- * mode-switching but don't yet support multi-editing. */
- if (mode & OB_MODE_ALL_SCULPT) {
- ob->mode = mode;
- BKE_object_sculpt_data_create(ob);
- }
- }
- }
- else {
- /* TODO(campbell): avoid operator calls. */
- if (obact == ob) {
- ED_object_mode_toggle(C, mode);
- }
- }
- }
- }
- }
-
-
- /* image editor paint mode */
- if (scene) {
- ED_space_image_paint_update(bmain, wm, scene);
- }
-
- SWAP(int, reports->flag, reports_flag_prev);
- wm->op_undo_depth--;
+ struct Depsgraph *depsgraph = CTX_data_depsgraph(C);
+ Main *bmain = CTX_data_main(C);
+ Scene *scene = CTX_data_scene(C);
+ wmWindowManager *wm = CTX_wm_manager(C);
+
+ /* This is called during initialization, so we don't want to store any reports */
+ ReportList *reports = CTX_wm_reports(C);
+ int reports_flag_prev = reports->flag & ~RPT_STORE;
+
+ SWAP(int, reports->flag, reports_flag_prev);
+
+ /* Don't do undo pushes when calling an operator. */
+ wm->op_undo_depth++;
+
+ /* toggle on modes for objects that were saved with these enabled. for
+ * e.g. linked objects we have to ensure that they are actually the
+ * active object in this scene. */
+ Object *obact = CTX_data_active_object(C);
+ if (obact != NULL) {
+ for (Object *ob = bmain->objects.first; ob; ob = ob->id.next) {
+ int mode = ob->mode;
+ if (mode == OB_MODE_OBJECT) {
+ continue;
+ }
+ else if (BKE_object_has_mode_data(ob, mode)) {
+ continue;
+ }
+ else if (ob->type == OB_GPENCIL) {
+ /* For multi-edit mode we may already have mode data.
+ * (grease pencil does not need it) */
+ continue;
+ }
+
+ ID *ob_data = ob->data;
+ ob->mode = OB_MODE_OBJECT;
+ if ((ob->type == obact->type) && !ID_IS_LINKED(ob) && !(ob_data && ID_IS_LINKED(ob_data))) {
+ if (mode == OB_MODE_EDIT) {
+ ED_object_editmode_enter_ex(bmain, scene, ob, 0);
+ }
+ else if (mode == OB_MODE_POSE) {
+ ED_object_posemode_enter_ex(bmain, ob);
+ }
+ else if (mode & OB_MODE_ALL_SCULPT) {
+ if (obact == ob) {
+ if (mode == OB_MODE_SCULPT) {
+ ED_object_sculptmode_enter_ex(bmain, depsgraph, scene, ob, true, reports);
+ }
+ else if (mode == OB_MODE_VERTEX_PAINT) {
+ ED_object_vpaintmode_enter_ex(bmain, depsgraph, wm, scene, ob);
+ }
+ else if (mode == OB_MODE_WEIGHT_PAINT) {
+ ED_object_wpaintmode_enter_ex(bmain, depsgraph, wm, scene, ob);
+ }
+ else {
+ BLI_assert(0);
+ }
+ }
+ else {
+ /* Create data for non-active objects which need it for
+ * mode-switching but don't yet support multi-editing. */
+ if (mode & OB_MODE_ALL_SCULPT) {
+ ob->mode = mode;
+ BKE_object_sculpt_data_create(ob);
+ }
+ }
+ }
+ else {
+ /* TODO(campbell): avoid operator calls. */
+ if (obact == ob) {
+ ED_object_mode_toggle(C, mode);
+ }
+ }
+ }
+ }
+ }
+
+ /* image editor paint mode */
+ if (scene) {
+ ED_space_image_paint_update(bmain, wm, scene);
+ }
+
+ SWAP(int, reports->flag, reports_flag_prev);
+ wm->op_undo_depth--;
}
/* frees all editmode stuff */
void ED_editors_exit(Main *bmain, bool do_undo_system)
{
- if (!bmain) {
- return;
- }
-
- /* frees all editmode undos */
- if (do_undo_system && G_MAIN->wm.first) {
- wmWindowManager *wm = G_MAIN->wm.first;
- /* normally we don't check for NULL undo stack,
- * do here since it may run in different context. */
- if (wm->undo_stack) {
- BKE_undosys_stack_destroy(wm->undo_stack);
- wm->undo_stack = NULL;
- }
- }
-
- for (Object *ob = bmain->objects.first; ob; ob = ob->id.next) {
- if (ob->type == OB_MESH) {
- Mesh *me = ob->data;
- if (me->edit_mesh) {
- EDBM_mesh_free(me->edit_mesh);
- MEM_freeN(me->edit_mesh);
- me->edit_mesh = NULL;
- }
- }
- else if (ob->type == OB_ARMATURE) {
- bArmature *arm = ob->data;
- if (arm->edbo) {
- ED_armature_edit_free(ob->data);
- }
- }
- }
-
- /* global in meshtools... */
- ED_mesh_mirror_spatial_table(NULL, NULL, NULL, NULL, 'e');
- ED_mesh_mirror_topo_table(NULL, NULL, 'e');
+ if (!bmain) {
+ return;
+ }
+
+ /* frees all editmode undos */
+ if (do_undo_system && G_MAIN->wm.first) {
+ wmWindowManager *wm = G_MAIN->wm.first;
+ /* normally we don't check for NULL undo stack,
+ * do here since it may run in different context. */
+ if (wm->undo_stack) {
+ BKE_undosys_stack_destroy(wm->undo_stack);
+ wm->undo_stack = NULL;
+ }
+ }
+
+ for (Object *ob = bmain->objects.first; ob; ob = ob->id.next) {
+ if (ob->type == OB_MESH) {
+ Mesh *me = ob->data;
+ if (me->edit_mesh) {
+ EDBM_mesh_free(me->edit_mesh);
+ MEM_freeN(me->edit_mesh);
+ me->edit_mesh = NULL;
+ }
+ }
+ else if (ob->type == OB_ARMATURE) {
+ bArmature *arm = ob->data;
+ if (arm->edbo) {
+ ED_armature_edit_free(ob->data);
+ }
+ }
+ }
+
+ /* global in meshtools... */
+ ED_mesh_mirror_spatial_table(NULL, NULL, NULL, NULL, 'e');
+ ED_mesh_mirror_topo_table(NULL, NULL, 'e');
}
/* flush any temp data from object editing to DNA before writing files,
* rendering, copying, etc. */
bool ED_editors_flush_edits(Main *bmain, bool for_render)
{
- bool has_edited = false;
- Object *ob;
-
- /* loop through all data to find edit mode or object mode, because during
- * exiting we might not have a context for edit object and multiple sculpt
- * objects can exist at the same time */
- for (ob = bmain->objects.first; ob; ob = ob->id.next) {
- if (ob->mode & OB_MODE_SCULPT) {
- /* Don't allow flushing while in the middle of a stroke (frees data in use).
- * Auto-save prevents this from happening but scripts
- * may cause a flush on saving: T53986. */
- if ((ob->sculpt && ob->sculpt->cache) == 0) {
- /* flush multires changes (for sculpt) */
- multires_force_update(ob);
- has_edited = true;
-
- if (for_render) {
- /* flush changes from dynamic topology sculpt */
- BKE_sculptsession_bm_to_me_for_render(ob);
- }
- else {
- /* Set reorder=false so that saving the file doesn't reorder
- * the BMesh's elements */
- BKE_sculptsession_bm_to_me(ob, false);
- }
- }
- }
- else if (ob->mode & OB_MODE_EDIT) {
- /* get editmode results */
- has_edited = true;
- ED_object_editmode_load(bmain, ob);
- }
- }
-
- return has_edited;
+ bool has_edited = false;
+ Object *ob;
+
+ /* loop through all data to find edit mode or object mode, because during
+ * exiting we might not have a context for edit object and multiple sculpt
+ * objects can exist at the same time */
+ for (ob = bmain->objects.first; ob; ob = ob->id.next) {
+ if (ob->mode & OB_MODE_SCULPT) {
+ /* Don't allow flushing while in the middle of a stroke (frees data in use).
+ * Auto-save prevents this from happening but scripts
+ * may cause a flush on saving: T53986. */
+ if ((ob->sculpt && ob->sculpt->cache) == 0) {
+ /* flush multires changes (for sculpt) */
+ multires_force_update(ob);
+ has_edited = true;
+
+ if (for_render) {
+ /* flush changes from dynamic topology sculpt */
+ BKE_sculptsession_bm_to_me_for_render(ob);
+ }
+ else {
+ /* Set reorder=false so that saving the file doesn't reorder
+ * the BMesh's elements */
+ BKE_sculptsession_bm_to_me(ob, false);
+ }
+ }
+ }
+ else if (ob->mode & OB_MODE_EDIT) {
+ /* get editmode results */
+ has_edited = true;
+ ED_object_editmode_load(bmain, ob);
+ }
+ }
+
+ return has_edited;
}
/* ***** XXX: functions are using old blender names, cleanup later ***** */
-
/* now only used in 2d spaces, like time, ipo, nla, sima... */
/* XXX shift/ctrl not configurable */
-void apply_keyb_grid(int shift, int ctrl, float *val, float fac1, float fac2, float fac3, int invert)
+void apply_keyb_grid(
+ int shift, int ctrl, float *val, float fac1, float fac2, float fac3, int invert)
{
- /* fac1 is for 'nothing', fac2 for CTRL, fac3 for SHIFT */
- if (invert)
- ctrl = !ctrl;
-
- if (ctrl && shift) {
- if (fac3 != 0.0f) *val = fac3 * floorf(*val / fac3 + 0.5f);
- }
- else if (ctrl) {
- if (fac2 != 0.0f) *val = fac2 * floorf(*val / fac2 + 0.5f);
- }
- else {
- if (fac1 != 0.0f) *val = fac1 * floorf(*val / fac1 + 0.5f);
- }
+ /* fac1 is for 'nothing', fac2 for CTRL, fac3 for SHIFT */
+ if (invert)
+ ctrl = !ctrl;
+
+ if (ctrl && shift) {
+ if (fac3 != 0.0f)
+ *val = fac3 * floorf(*val / fac3 + 0.5f);
+ }
+ else if (ctrl) {
+ if (fac2 != 0.0f)
+ *val = fac2 * floorf(*val / fac2 + 0.5f);
+ }
+ else {
+ if (fac1 != 0.0f)
+ *val = fac1 * floorf(*val / fac1 + 0.5f);
+ }
}
-void unpack_menu(bContext *C, const char *opname, const char *id_name, const char *abs_name, const char *folder, struct PackedFile *pf)
+void unpack_menu(bContext *C,
+ const char *opname,
+ const char *id_name,
+ const char *abs_name,
+ const char *folder,
+ struct PackedFile *pf)
{
- Main *bmain = CTX_data_main(C);
- PointerRNA props_ptr;
- uiPopupMenu *pup;
- uiLayout *layout;
- char line[FILE_MAX + 100];
- wmOperatorType *ot = WM_operatortype_find(opname, 1);
-
- pup = UI_popup_menu_begin(C, IFACE_("Unpack File"), ICON_NONE);
- layout = UI_popup_menu_layout(pup);
-
- uiItemFullO_ptr(
- layout, ot, IFACE_("Remove Pack"), ICON_NONE,
- NULL, WM_OP_EXEC_DEFAULT, 0, &props_ptr);
- RNA_enum_set(&props_ptr, "method", PF_REMOVE);
- RNA_string_set(&props_ptr, "id", id_name);
-
- if (G.relbase_valid) {
- char local_name[FILE_MAXDIR + FILE_MAX], fi[FILE_MAX];
-
- BLI_split_file_part(abs_name, fi, sizeof(fi));
- BLI_snprintf(local_name, sizeof(local_name), "//%s/%s", folder, fi);
- if (!STREQ(abs_name, local_name)) {
- switch (checkPackedFile(BKE_main_blendfile_path(bmain), local_name, pf)) {
- case PF_NOFILE:
- BLI_snprintf(line, sizeof(line), IFACE_("Create %s"), local_name);
- uiItemFullO_ptr(layout, ot, line, ICON_NONE, NULL, WM_OP_EXEC_DEFAULT, 0, &props_ptr);
- RNA_enum_set(&props_ptr, "method", PF_WRITE_LOCAL);
- RNA_string_set(&props_ptr, "id", id_name);
-
- break;
- case PF_EQUAL:
- BLI_snprintf(line, sizeof(line), IFACE_("Use %s (identical)"), local_name);
- //uiItemEnumO_ptr(layout, ot, line, 0, "method", PF_USE_LOCAL);
- uiItemFullO_ptr(layout, ot, line, ICON_NONE, NULL, WM_OP_EXEC_DEFAULT, 0, &props_ptr);
- RNA_enum_set(&props_ptr, "method", PF_USE_LOCAL);
- RNA_string_set(&props_ptr, "id", id_name);
-
- break;
- case PF_DIFFERS:
- BLI_snprintf(line, sizeof(line), IFACE_("Use %s (differs)"), local_name);
- //uiItemEnumO_ptr(layout, ot, line, 0, "method", PF_USE_LOCAL);
- uiItemFullO_ptr(layout, ot, line, ICON_NONE, NULL, WM_OP_EXEC_DEFAULT, 0, &props_ptr);
- RNA_enum_set(&props_ptr, "method", PF_USE_LOCAL);
- RNA_string_set(&props_ptr, "id", id_name);
-
- BLI_snprintf(line, sizeof(line), IFACE_("Overwrite %s"), local_name);
- //uiItemEnumO_ptr(layout, ot, line, 0, "method", PF_WRITE_LOCAL);
- uiItemFullO_ptr(layout, ot, line, ICON_NONE, NULL, WM_OP_EXEC_DEFAULT, 0, &props_ptr);
- RNA_enum_set(&props_ptr, "method", PF_WRITE_LOCAL);
- RNA_string_set(&props_ptr, "id", id_name);
- break;
- }
- }
- }
-
- switch (checkPackedFile(BKE_main_blendfile_path(bmain), abs_name, pf)) {
- case PF_NOFILE:
- BLI_snprintf(line, sizeof(line), IFACE_("Create %s"), abs_name);
- //uiItemEnumO_ptr(layout, ot, line, 0, "method", PF_WRITE_ORIGINAL);
- uiItemFullO_ptr(layout, ot, line, ICON_NONE, NULL, WM_OP_EXEC_DEFAULT, 0, &props_ptr);
- RNA_enum_set(&props_ptr, "method", PF_WRITE_ORIGINAL);
- RNA_string_set(&props_ptr, "id", id_name);
- break;
- case PF_EQUAL:
- BLI_snprintf(line, sizeof(line), IFACE_("Use %s (identical)"), abs_name);
- //uiItemEnumO_ptr(layout, ot, line, 0, "method", PF_USE_ORIGINAL);
- uiItemFullO_ptr(layout, ot, line, ICON_NONE, NULL, WM_OP_EXEC_DEFAULT, 0, &props_ptr);
- RNA_enum_set(&props_ptr, "method", PF_USE_ORIGINAL);
- RNA_string_set(&props_ptr, "id", id_name);
- break;
- case PF_DIFFERS:
- BLI_snprintf(line, sizeof(line), IFACE_("Use %s (differs)"), abs_name);
- //uiItemEnumO_ptr(layout, ot, line, 0, "method", PF_USE_ORIGINAL);
- uiItemFullO_ptr(layout, ot, line, ICON_NONE, NULL, WM_OP_EXEC_DEFAULT, 0, &props_ptr);
- RNA_enum_set(&props_ptr, "method", PF_USE_ORIGINAL);
- RNA_string_set(&props_ptr, "id", id_name);
-
- BLI_snprintf(line, sizeof(line), IFACE_("Overwrite %s"), abs_name);
- //uiItemEnumO_ptr(layout, ot, line, 0, "method", PF_WRITE_ORIGINAL);
- uiItemFullO_ptr(layout, ot, line, ICON_NONE, NULL, WM_OP_EXEC_DEFAULT, 0, &props_ptr);
- RNA_enum_set(&props_ptr, "method", PF_WRITE_ORIGINAL);
- RNA_string_set(&props_ptr, "id", id_name);
- break;
- }
-
- UI_popup_menu_end(C, pup);
+ Main *bmain = CTX_data_main(C);
+ PointerRNA props_ptr;
+ uiPopupMenu *pup;
+ uiLayout *layout;
+ char line[FILE_MAX + 100];
+ wmOperatorType *ot = WM_operatortype_find(opname, 1);
+
+ pup = UI_popup_menu_begin(C, IFACE_("Unpack File"), ICON_NONE);
+ layout = UI_popup_menu_layout(pup);
+
+ uiItemFullO_ptr(
+ layout, ot, IFACE_("Remove Pack"), ICON_NONE, NULL, WM_OP_EXEC_DEFAULT, 0, &props_ptr);
+ RNA_enum_set(&props_ptr, "method", PF_REMOVE);
+ RNA_string_set(&props_ptr, "id", id_name);
+
+ if (G.relbase_valid) {
+ char local_name[FILE_MAXDIR + FILE_MAX], fi[FILE_MAX];
+
+ BLI_split_file_part(abs_name, fi, sizeof(fi));
+ BLI_snprintf(local_name, sizeof(local_name), "//%s/%s", folder, fi);
+ if (!STREQ(abs_name, local_name)) {
+ switch (checkPackedFile(BKE_main_blendfile_path(bmain), local_name, pf)) {
+ case PF_NOFILE:
+ BLI_snprintf(line, sizeof(line), IFACE_("Create %s"), local_name);
+ uiItemFullO_ptr(layout, ot, line, ICON_NONE, NULL, WM_OP_EXEC_DEFAULT, 0, &props_ptr);
+ RNA_enum_set(&props_ptr, "method", PF_WRITE_LOCAL);
+ RNA_string_set(&props_ptr, "id", id_name);
+
+ break;
+ case PF_EQUAL:
+ BLI_snprintf(line, sizeof(line), IFACE_("Use %s (identical)"), local_name);
+ //uiItemEnumO_ptr(layout, ot, line, 0, "method", PF_USE_LOCAL);
+ uiItemFullO_ptr(layout, ot, line, ICON_NONE, NULL, WM_OP_EXEC_DEFAULT, 0, &props_ptr);
+ RNA_enum_set(&props_ptr, "method", PF_USE_LOCAL);
+ RNA_string_set(&props_ptr, "id", id_name);
+
+ break;
+ case PF_DIFFERS:
+ BLI_snprintf(line, sizeof(line), IFACE_("Use %s (differs)"), local_name);
+ //uiItemEnumO_ptr(layout, ot, line, 0, "method", PF_USE_LOCAL);
+ uiItemFullO_ptr(layout, ot, line, ICON_NONE, NULL, WM_OP_EXEC_DEFAULT, 0, &props_ptr);
+ RNA_enum_set(&props_ptr, "method", PF_USE_LOCAL);
+ RNA_string_set(&props_ptr, "id", id_name);
+
+ BLI_snprintf(line, sizeof(line), IFACE_("Overwrite %s"), local_name);
+ //uiItemEnumO_ptr(layout, ot, line, 0, "method", PF_WRITE_LOCAL);
+ uiItemFullO_ptr(layout, ot, line, ICON_NONE, NULL, WM_OP_EXEC_DEFAULT, 0, &props_ptr);
+ RNA_enum_set(&props_ptr, "method", PF_WRITE_LOCAL);
+ RNA_string_set(&props_ptr, "id", id_name);
+ break;
+ }
+ }
+ }
+
+ switch (checkPackedFile(BKE_main_blendfile_path(bmain), abs_name, pf)) {
+ case PF_NOFILE:
+ BLI_snprintf(line, sizeof(line), IFACE_("Create %s"), abs_name);
+ //uiItemEnumO_ptr(layout, ot, line, 0, "method", PF_WRITE_ORIGINAL);
+ uiItemFullO_ptr(layout, ot, line, ICON_NONE, NULL, WM_OP_EXEC_DEFAULT, 0, &props_ptr);
+ RNA_enum_set(&props_ptr, "method", PF_WRITE_ORIGINAL);
+ RNA_string_set(&props_ptr, "id", id_name);
+ break;
+ case PF_EQUAL:
+ BLI_snprintf(line, sizeof(line), IFACE_("Use %s (identical)"), abs_name);
+ //uiItemEnumO_ptr(layout, ot, line, 0, "method", PF_USE_ORIGINAL);
+ uiItemFullO_ptr(layout, ot, line, ICON_NONE, NULL, WM_OP_EXEC_DEFAULT, 0, &props_ptr);
+ RNA_enum_set(&props_ptr, "method", PF_USE_ORIGINAL);
+ RNA_string_set(&props_ptr, "id", id_name);
+ break;
+ case PF_DIFFERS:
+ BLI_snprintf(line, sizeof(line), IFACE_("Use %s (differs)"), abs_name);
+ //uiItemEnumO_ptr(layout, ot, line, 0, "method", PF_USE_ORIGINAL);
+ uiItemFullO_ptr(layout, ot, line, ICON_NONE, NULL, WM_OP_EXEC_DEFAULT, 0, &props_ptr);
+ RNA_enum_set(&props_ptr, "method", PF_USE_ORIGINAL);
+ RNA_string_set(&props_ptr, "id", id_name);
+
+ BLI_snprintf(line, sizeof(line), IFACE_("Overwrite %s"), abs_name);
+ //uiItemEnumO_ptr(layout, ot, line, 0, "method", PF_WRITE_ORIGINAL);
+ uiItemFullO_ptr(layout, ot, line, ICON_NONE, NULL, WM_OP_EXEC_DEFAULT, 0, &props_ptr);
+ RNA_enum_set(&props_ptr, "method", PF_WRITE_ORIGINAL);
+ RNA_string_set(&props_ptr, "id", id_name);
+ break;
+ }
+
+ UI_popup_menu_end(C, pup);
}
/* ********************* generic callbacks for drawcall api *********************** */
@@ -388,32 +389,33 @@ void unpack_menu(bContext *C, const char *opname, const char *id_name, const cha
*/
void ED_region_draw_mouse_line_cb(const bContext *C, ARegion *ar, void *arg_info)
{
- wmWindow *win = CTX_wm_window(C);
- const float *mval_src = (float *)arg_info;
- const float mval_dst[2] = {win->eventstate->x - ar->winrct.xmin,
- win->eventstate->y - ar->winrct.ymin};
+ wmWindow *win = CTX_wm_window(C);
+ const float *mval_src = (float *)arg_info;
+ const float mval_dst[2] = {win->eventstate->x - ar->winrct.xmin,
+ win->eventstate->y - ar->winrct.ymin};
- const uint shdr_pos = GPU_vertformat_attr_add(immVertexFormat(), "pos", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
+ const uint shdr_pos = GPU_vertformat_attr_add(
+ immVertexFormat(), "pos", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
- GPU_line_width(1.0f);
+ GPU_line_width(1.0f);
- immBindBuiltinProgram(GPU_SHADER_2D_LINE_DASHED_UNIFORM_COLOR);
+ immBindBuiltinProgram(GPU_SHADER_2D_LINE_DASHED_UNIFORM_COLOR);
- float viewport_size[4];
- GPU_viewport_size_get_f(viewport_size);
- immUniform2f("viewport_size", viewport_size[2] / UI_DPI_FAC, viewport_size[3] / UI_DPI_FAC);
+ float viewport_size[4];
+ GPU_viewport_size_get_f(viewport_size);
+ immUniform2f("viewport_size", viewport_size[2] / UI_DPI_FAC, viewport_size[3] / UI_DPI_FAC);
- immUniform1i("colors_len", 0); /* "simple" mode */
- immUniformThemeColor(TH_VIEW_OVERLAY);
- immUniform1f("dash_width", 6.0f);
- immUniform1f("dash_factor", 0.5f);
+ immUniform1i("colors_len", 0); /* "simple" mode */
+ immUniformThemeColor(TH_VIEW_OVERLAY);
+ immUniform1f("dash_width", 6.0f);
+ immUniform1f("dash_factor", 0.5f);
- immBegin(GPU_PRIM_LINES, 2);
- immVertex2fv(shdr_pos, mval_src);
- immVertex2fv(shdr_pos, mval_dst);
- immEnd();
+ immBegin(GPU_PRIM_LINES, 2);
+ immVertex2fv(shdr_pos, mval_src);
+ immVertex2fv(shdr_pos, mval_dst);
+ immEnd();
- immUnbindProgram();
+ immUnbindProgram();
}
/**
@@ -423,30 +425,30 @@ void ED_region_draw_mouse_line_cb(const bContext *C, ARegion *ar, void *arg_info
*/
void ED_spacedata_id_remap(struct ScrArea *sa, struct SpaceLink *sl, ID *old_id, ID *new_id)
{
- SpaceType *st = BKE_spacetype_from_id(sl->spacetype);
+ SpaceType *st = BKE_spacetype_from_id(sl->spacetype);
- if (st && st->id_remap) {
- st->id_remap(sa, sl, old_id, new_id);
- }
+ if (st && st->id_remap) {
+ st->id_remap(sa, sl, old_id, new_id);
+ }
}
static int ed_flush_edits_exec(bContext *C, wmOperator *UNUSED(op))
{
- Main *bmain = CTX_data_main(C);
- ED_editors_flush_edits(bmain, false);
- return OPERATOR_FINISHED;
+ Main *bmain = CTX_data_main(C);
+ ED_editors_flush_edits(bmain, false);
+ return OPERATOR_FINISHED;
}
void ED_OT_flush_edits(wmOperatorType *ot)
{
- /* identifiers */
- ot->name = "Flush Edits";
- ot->description = "Flush edit data from active editing modes";
- ot->idname = "ED_OT_flush_edits";
+ /* identifiers */
+ ot->name = "Flush Edits";
+ ot->description = "Flush edit data from active editing modes";
+ ot->idname = "ED_OT_flush_edits";
- /* api callbacks */
- ot->exec = ed_flush_edits_exec;
+ /* api callbacks */
+ ot->exec = ed_flush_edits_exec;
- /* flags */
- ot->flag = OPTYPE_INTERNAL;
+ /* flags */
+ ot->flag = OPTYPE_INTERNAL;
}