[Bf-blender-cvs] [2173e88f3b3] soc-2019-bevel-profiles: Merge branch 'master' into soc-2019-bevel-profiles
Hans Goudey
noreply at git.blender.org
Mon Aug 12 23:32:41 CEST 2019
Commit: 2173e88f3b3bb5a28a8520156dd54000993ce11e
Author: Hans Goudey
Date: Mon Aug 12 17:31:13 2019 -0400
Branches: soc-2019-bevel-profiles
https://developer.blender.org/rB2173e88f3b3bb5a28a8520156dd54000993ce11e
Merge branch 'master' into soc-2019-bevel-profiles
===================================================================
===================================================================
diff --cc source/blender/blenkernel/intern/scene.c
index a653233d260,1ef93427253..17c2417e86d
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@@ -177,12 -176,10 +177,12 @@@ ToolSettings *BKE_toolsettings_copy(Too
ts->particle.object = NULL;
/* duplicate Grease Pencil interpolation curve */
- ts->gp_interpolate.custom_ipo = curvemapping_copy(ts->gp_interpolate.custom_ipo);
+ ts->gp_interpolate.custom_ipo = BKE_curvemapping_copy(ts->gp_interpolate.custom_ipo);
/* duplicate Grease Pencil multiframe fallof */
- ts->gp_sculpt.cur_falloff = curvemapping_copy(ts->gp_sculpt.cur_falloff);
- ts->gp_sculpt.cur_primitive = curvemapping_copy(ts->gp_sculpt.cur_primitive);
+ ts->gp_sculpt.cur_falloff = BKE_curvemapping_copy(ts->gp_sculpt.cur_falloff);
+ ts->gp_sculpt.cur_primitive = BKE_curvemapping_copy(ts->gp_sculpt.cur_primitive);
+
+ ts->prwdgt = BKE_profilewidget_copy(ts->prwdgt);
return ts;
}
@@@ -219,16 -216,12 +219,16 @@@ void BKE_toolsettings_free(ToolSetting
}
/* free Grease Pencil multiframe falloff curve */
if (toolsettings->gp_sculpt.cur_falloff) {
- curvemapping_free(toolsettings->gp_sculpt.cur_falloff);
+ BKE_curvemapping_free(toolsettings->gp_sculpt.cur_falloff);
}
if (toolsettings->gp_sculpt.cur_primitive) {
- curvemapping_free(toolsettings->gp_sculpt.cur_primitive);
+ BKE_curvemapping_free(toolsettings->gp_sculpt.cur_primitive);
}
+ if (toolsettings->prwdgt) {
+ BKE_profilewidget_free(toolsettings->prwdgt);
+ }
+
MEM_freeN(toolsettings);
}
diff --cc source/blender/blenloader/intern/versioning_280.c
index 9e532b5fe23,15b4f513050..2ecf65e0aaa
--- a/source/blender/blenloader/intern/versioning_280.c
+++ b/source/blender/blenloader/intern/versioning_280.c
@@@ -3552,30 -3551,22 +3552,47 @@@ void blo_do_versions_280(FileData *fd,
{
/* Versioning code until next subversion bump goes here. */
+
+ /* Add custom profile widget to toolsettings for bevel tool */
- if (!DNA_struct_elem_find(
- fd->filesdna, "ToolSettings", "ProfileWidget", "prwdgt")) {
++ if (!DNA_struct_elem_find(fd->filesdna, "ToolSettings", "ProfileWidget", "prwdgt")) {
+ for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
+ ToolSettings *ts = scene->toolsettings;
+ if ((ts) && (ts->prwdgt == NULL)) {
+ ts->prwdgt = BKE_profilewidget_add(PROF_PRESET_LINE);
+ }
+ }
+ }
+
+ /* Add custom profile widget to bevel modifier */
+ if (!DNA_struct_elem_find(fd->filesdna, "BevelModifier", "ProfileWidget", "prwdgt")) {
+ for (Object *object = bmain->objects.first; object != NULL; object = object->id.next) {
+ for (ModifierData *md = object->modifiers.first; md; md = md->next) {
+ if (md->type == eModifierType_Bevel) {
+ BevelModifierData *bmd = (BevelModifierData *)md;
+ if (!bmd->prwdgt) {
+ bmd->prwdgt = BKE_profilewidget_add(PROF_PRESET_LINE);
+ }
+ }
+ }
+ }
+ }
++
+ if (U.view_rotate_sensitivity_turntable == 0) {
+ U.view_rotate_sensitivity_turntable = DEG2RADF(0.4f);
+ U.view_rotate_sensitivity_trackball = 1.0f;
+ }
+ for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
+ for (ScrArea *sa = screen->areabase.first; sa; sa = sa->next) {
+ for (SpaceLink *sl = sa->spacedata.first; sl; sl = sl->next) {
+ if (sl->spacetype == SPACE_TEXT) {
+ ListBase *regionbase = (sl == sa->spacedata.first) ? &sa->regionbase : &sl->regionbase;
+ ARegion *ar = do_versions_find_region_or_null(regionbase, RGN_TYPE_UI);
+ if (ar) {
+ ar->alignment = RGN_ALIGN_RIGHT;
+ }
+ }
+ }
+ }
+ }
}
}
diff --cc source/blender/editors/interface/interface_handlers.c
index c348743d96f,52933a89045..1bd8ec6510e
--- a/source/blender/editors/interface/interface_handlers.c
+++ b/source/blender/editors/interface/interface_handlers.c
@@@ -418,10 -417,7 +418,9 @@@ static uiButMultiState *ui_multibut_loo
static ColorBand but_copypaste_coba = {0};
static CurveMapping but_copypaste_curve = {0};
static bool but_copypaste_curve_alive = false;
+static ProfileWidget but_copypaste_profile = {0};
+static bool but_copypaste_profile_alive = false;
-
/** \} */
/* -------------------------------------------------------------------- */
@@@ -2637,8 -2588,7 +2636,8 @@@ static void ui_but_paste(bContext *C, u
void ui_but_clipboard_free(void)
{
- curvemapping_free_data(&but_copypaste_curve);
+ BKE_curvemapping_free_data(&but_copypaste_curve);
+ BKE_profilewidget_free_data(&but_copypaste_profile);
}
/** \} */
@@@ -6743,281 -6689,6 +6742,278 @@@ static int ui_do_but_CURVE
return WM_UI_HANDLER_CONTINUE;
}
+/* Same as ui_numedit_but_CURVE with some smaller changes */
+static bool ui_numedit_but_PROFILE(uiBlock *block,
+ uiBut *but,
+ uiHandleButtonData *data,
+ int evtx,
+ int evty,
+ bool snap,
+ const bool shift)
+{
+ ProfileWidget *prwdgt = (ProfileWidget *)but->poin;
+ ProfilePoint *pts = prwdgt->path;
+ float fx, fy, zoomx, zoomy;
+ int mx, my, dragx, dragy;
+ int a;
+ bool changed = false;
+
+ /* evtx evty and drag coords are absolute mousecoords,
+ * prevents errors when editing when layout changes */
+ mx = evtx;
+ my = evty;
+ ui_window_to_block(data->region, block, &mx, &my);
+ dragx = data->draglastx;
+ dragy = data->draglasty;
+ ui_window_to_block(data->region, block, &dragx, &dragy);
+
+ zoomx = BLI_rctf_size_x(&but->rect) / BLI_rctf_size_x(&prwdgt->view_rect);
+ zoomy = BLI_rctf_size_y(&but->rect) / BLI_rctf_size_y(&prwdgt->view_rect);
+
+ if (snap) {
+ float d[2];
+
+ d[0] = mx - data->dragstartx;
+ d[1] = my - data->dragstarty;
+
+ if (len_squared_v2(d) < (3.0f * 3.0f)) {
+ snap = false;
+ }
+ }
+
+ fx = (mx - dragx) / zoomx;
+ fy = (my - dragy) / zoomy;
+
+ if (data->dragsel != -1) {
+ ProfilePoint *point_last = NULL;
+ const float mval_factor = ui_mouse_scale_warp_factor(shift);
+ bool moved_point = false; /* for ctrl grid, can't use orig coords because of sorting */
+
+ fx *= mval_factor;
+ fy *= mval_factor;
+
+ /* Move all the points that aren't the last or the first */
+ for (a = 1; a < prwdgt->totpoint - 1; a++) {
+ if (pts[a].flag & PROF_SELECT) {
+ float origx = pts[a].x, origy = pts[a].y;
+ pts[a].x += fx;
+ pts[a].y += fy;
+ if (snap) {
+ pts[a].x = 0.125f * roundf(8.0f * pts[a].x);
+ pts[a].y = 0.125f * roundf(8.0f * pts[a].y);
+ }
+ if (!moved_point && (pts[a].x != origx || pts[a].y != origy)) {
+ moved_point = true;
+ }
+
+ point_last = &pts[a];
+ }
+ }
+
+ BKE_profilewidget_changed(prwdgt, false);
+
+ if (moved_point) {
+ data->draglastx = evtx;
+ data->draglasty = evty;
+ changed = true;
+#ifdef USE_CONT_MOUSE_CORRECT
+ /* note: using 'cmp_last' is weak since there may be multiple points selected,
+ * but in practice this isnt really an issue */
+ if (ui_but_is_cursor_warp(but)) {
+ /* OK but can go outside bounds */
+ data->ungrab_mval[0] = but->rect.xmin + ((point_last->x - prwdgt->view_rect.xmin) * zoomx);
+ data->ungrab_mval[1] = but->rect.ymin + ((point_last->y - prwdgt->view_rect.ymin) * zoomy);
+ BLI_rctf_clamp_pt_v(&but->rect, data->ungrab_mval);
+ }
+#endif
+ }
+ data->dragchange = true; /* mark for selection */
+ }
+ else {
+ /* clamp for clip */
+ if (prwdgt->flag & PROF_USE_CLIP) {
+ if (prwdgt->view_rect.xmin - fx < prwdgt->clip_rect.xmin) {
+ fx = prwdgt->view_rect.xmin - prwdgt->clip_rect.xmin;
+ }
+ else if (prwdgt->view_rect.xmax - fx > prwdgt->clip_rect.xmax) {
+ fx = prwdgt->view_rect.xmax - prwdgt->clip_rect.xmax;
+ }
+ if (prwdgt->view_rect.ymin - fy < prwdgt->clip_rect.ymin) {
+ fy = prwdgt->view_rect.ymin - prwdgt->clip_rect.ymin;
+ }
+ else if (prwdgt->view_rect.ymax - fy > prwdgt->clip_rect.ymax) {
+ fy = prwdgt->view_rect.ymax - prwdgt->clip_rect.ymax;
+ }
+ }
+
+ prwdgt->view_rect.xmin -= fx;
+ prwdgt->view_rect.ymin -= fy;
+ prwdgt->view_rect.xmax -= fx;
+ prwdgt->view_rect.ymax -= fy;
+
+ data->draglastx = evtx;
+ data->draglasty = evty;
+
+ changed = true;
+ }
+
+ return changed;
+}
+
- static int ui_do_but_PROFILE(bContext *C,
- uiBlock *block,
- uiBut *but,
- uiHandleButtonData *data,
- const wmEvent *event)
++static int ui_do_but_PROFILE(
++ bContext *C, uiBlock *block, uiBut *but, uiHandleButtonData *data, const wmEvent *event)
+{
+ int mx, my, i;
+
+ mx = event->x;
+ my = event->y;
+ ui_window_to_block(data->region, block, &mx, &my);
+
+ /* Move selected control points (hardcoded keymap) */
+ if (event->type == GKEY && event->val == KM_RELEASE) {
+ data->dragstartx = mx;
+ data->dragstarty = my;
+ data->draglastx = mx;
+ data->draglasty = my;
+ button_activate_state(C, but, BUTTON_STATE_NUM_EDITING);
+ return WM_UI_HANDLER_BREAK;
+ }
+
+ ProfileWidget *prwdgt = (ProfileWidget *)but->poin;
+
+ /* Delete selected control points (hardcoded keymap) */
+ if (event->type == XKEY && event->val == KM_RELEASE) {
+ BKE_profilewidget_remove(prwdgt, PROF_SELECT);
+ BKE_profilewidget_changed(prwdgt, false);
+ ED_region_tag_redraw(data->region);
+ return WM_UI_HANDLER_BREAK;
+ }
+
+ /* Selecting, adding, and starting point movements */
+ if (data->state == BUTTON_STATE_HIGHLIGHT) {
+ if (event
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list