Merge branch 'master' into blender2.8
authorCampbell Barton <ideasman42@gmail.com>
Fri, 9 Feb 2018 02:56:49 +0000 (13:56 +1100)
committerCampbell Barton <ideasman42@gmail.com>
Fri, 9 Feb 2018 02:56:49 +0000 (13:56 +1100)
1  2 
source/blender/editors/interface/CMakeLists.txt
source/blender/editors/sculpt_paint/sculpt.c
source/blender/editors/space_sequencer/sequencer_edit.c

index 94f377fb35ec2767fe652243837187e8564287cb,ede28b49dbee2a5e98caea70a287640b960f0cfe..523215da29e070322fa8aa77200ed0ad0a4546c6
@@@ -24,7 -24,6 +24,7 @@@ set(IN
        ../../blenkernel
        ../../blenlib
        ../../blentranslation
 +      ../../depsgraph
        ../../gpu
        ../../imbuf
        ../../makesdna
@@@ -70,7 -69,9 +70,9 @@@ set(SR
        view2d.c
        view2d_ops.c
  
+       interface_eyedropper_intern.h
        interface_intern.h
+       interface_regions_intern.h
  )
  
  if(WITH_INTERNATIONAL)
index d6b279008f0ed2631105fcd2c28fbbfa0720919f,d631a23bee06dbce344dc1c5a1a5883b47e7bcdb..5b59de06d0aecd26ff90e6fbf5c6e2860b3cee35
@@@ -56,6 -56,7 +56,6 @@@
  #include "BKE_brush.h"
  #include "BKE_ccg.h"
  #include "BKE_context.h"
 -#include "BKE_depsgraph.h"
  #include "BKE_global.h"
  #include "BKE_image.h"
  #include "BKE_key.h"
@@@ -71,8 -72,6 +71,8 @@@
  #include "BKE_subsurf.h"
  #include "BKE_colortools.h"
  
 +#include "DEG_depsgraph.h"
 +
  #include "WM_api.h"
  #include "WM_types.h"
  
@@@ -500,7 -499,8 +500,7 @@@ bool sculpt_get_redraw_rect(ARegion *ar
        return 1;
  }
  
 -void ED_sculpt_redraw_planes_get(float planes[4][4], ARegion *ar,
 -                                 RegionView3D *rv3d, Object *ob)
 +void ED_sculpt_redraw_planes_get(float planes[4][4], ARegion *ar, Object *ob)
  {
        PBVH *pbvh = ob->sculpt->pbvh;
        /* copy here, original will be used below */
  
        sculpt_extend_redraw_rect_previous(ob, &rect);
  
 -      paint_calc_redraw_planes(planes, ar, rv3d, ob, &rect);
 +      paint_calc_redraw_planes(planes, ar, ob, &rect);
  
        /* we will draw this rect, so now we can set it as the previous partial rect.
         * Note that we don't update with the union of previous/current (rect), only with
@@@ -2098,10 -2098,6 +2098,10 @@@ static void do_draw_brush(Sculpt *sd, O
        mul_v3_v3(offset, ss->cache->scale);
        mul_v3_fl(offset, bstrength);
  
 +      /* XXX - this shouldn't be necessary, but sculpting crashes in blender2.8 otherwise
 +       * initialize before threads so they can do curve mapping */
 +      curvemapping_initialize(brush->curve);
 +
        /* threaded loop over nodes */
        SculptThreadedTaskData data = {
            .sd = sd, .ob = ob, .brush = brush, .nodes = nodes,
@@@ -4082,10 -4078,8 +4082,10 @@@ static void sculpt_update_tex(const Sce
  
  int sculpt_mode_poll(bContext *C)
  {
 +      EvaluationContext eval_ctx;
 +      CTX_data_eval_ctx(C, &eval_ctx);
        Object *ob = CTX_data_active_object(C);
 -      return ob && ob->mode & OB_MODE_SCULPT;
 +      return ob && eval_ctx.object_mode & OB_MODE_SCULPT;
  }
  
  int sculpt_mode_poll_view3d(bContext *C)
@@@ -4597,19 -4591,15 +4597,17 @@@ static bool sculpt_any_smooth_mode(cons
                 (brush->mask_tool == BRUSH_MASK_SMOOTH)));
  }
  
- static void sculpt_stroke_modifiers_check(const bContext *C, Object *ob)
+ static void sculpt_stroke_modifiers_check(const bContext *C, Object *ob, const Brush *brush)
  {
        SculptSession *ss = ob->sculpt;
  
        if (ss->kb || ss->modifiers_active) {
-               Sculpt *sd = CTX_data_tool_settings(C)->sculpt;
-               Brush *brush = BKE_paint_brush(&sd->paint);
 +              EvaluationContext eval_ctx;
-               BKE_sculpt_update_mesh_elements(&eval_ctx, CTX_data_scene(C), sd, ob,
-                                           sculpt_any_smooth_mode(brush, ss->cache, 0), false);
 +              CTX_data_eval_ctx(C, &eval_ctx);
 -              BKE_sculpt_update_mesh_elements(scene, sd, ob, need_pmap, false);
+               Scene *scene = CTX_data_scene(C);
+               Sculpt *sd = scene->toolsettings->sculpt;
+               bool need_pmap = sculpt_any_smooth_mode(brush, ss->cache, 0);
++              BKE_sculpt_update_mesh_elements(&eval_ctx, scene, sd, ob, need_pmap, false);
        }
  }
  
@@@ -4694,7 -4684,7 +4692,7 @@@ static float sculpt_raycast_init
        RegionView3D *rv3d = vc->ar->regiondata;
  
        /* TODO: what if the segment is totally clipped? (return == 0) */
 -      ED_view3d_win_to_segment(vc->ar, vc->v3d, mouse, ray_start, ray_end, true);
 +      ED_view3d_win_to_segment(vc->depsgraph, vc->ar, vc->v3d, mouse, ray_start, ray_end, true);
  
        invert_m4_m4(obimat, ob->obmat);
        mul_m4_v3(obimat, ray_start);
@@@ -4738,7 -4728,9 +4736,9 @@@ bool sculpt_stroke_get_location(bContex
        cache = ss->cache;
        original = (cache) ? cache->original : 0;
  
-       sculpt_stroke_modifiers_check(C, ob);
+       const Brush *brush = BKE_paint_brush(BKE_paint_get_active_from_context(C));
+       sculpt_stroke_modifiers_check(C, ob, brush);
  
        depth = sculpt_raycast_init(&vc, mouse, ray_start, ray_end, ray_normal, original);
  
        }
  
        if (hit == false) {
-               const Brush *brush = BKE_paint_brush(BKE_paint_get_active_from_context(C));
                if (ELEM(brush->falloff_shape, PAINT_FALLOFF_SHAPE_TUBE)) {
                        SculptFindNearestToRayData srd = {
                                .original = original,
@@@ -4814,15 -4805,12 +4813,15 @@@ static bool sculpt_brush_stroke_init(bC
        Scene *scene = CTX_data_scene(C);
        Object *ob = CTX_data_active_object(C);
        Sculpt *sd = CTX_data_tool_settings(C)->sculpt;
 +      EvaluationContext eval_ctx;
        SculptSession *ss = CTX_data_active_object(C)->sculpt;
        Brush *brush = BKE_paint_brush(&sd->paint);
        int mode = RNA_enum_get(op->ptr, "mode");
        bool is_smooth;
        bool need_mask = false;
  
 +      CTX_data_eval_ctx(C, &eval_ctx);
 +
        if (brush->sculpt_tool == SCULPT_TOOL_MASK) {
                need_mask = true;
        }
        sculpt_brush_init_tex(scene, sd, ss);
  
        is_smooth = sculpt_any_smooth_mode(brush, NULL, mode);
 -      BKE_sculpt_update_mesh_elements(scene, sd, ob, is_smooth, need_mask);
 +      BKE_sculpt_update_mesh_elements(&eval_ctx, scene, sd, ob, is_smooth, need_mask);
  
        return 1;
  }
@@@ -4875,7 -4863,7 +4874,7 @@@ static void sculpt_flush_update(bContex
                GPU_drawobject_free(ob->derivedFinal);
  
        if (ss->kb || ss->modifiers_active) {
 -              DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
 +              DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
                ED_region_tag_redraw(ar);
        }
        else {
                        ED_region_tag_redraw_partial(ar, &r);
                }
        }
 +
 +      /* 2.8x - avoid full mesh update! */
 +      BKE_mesh_batch_cache_dirty(ob->data, BKE_MESH_BATCH_DIRTY_SCULPT_COORDS);
  }
  
  /* Returns whether the mouse/stylus is over the mesh (1)
@@@ -4955,7 -4940,7 +4954,7 @@@ static void sculpt_stroke_update_step(b
        SculptSession *ss = ob->sculpt;
        const Brush *brush = BKE_paint_brush(&sd->paint);
        
-       sculpt_stroke_modifiers_check(C, ob);
+       sculpt_stroke_modifiers_check(C, ob, brush);
        sculpt_update_cache_variants(C, sd, ob, itemptr);
        sculpt_restore_mesh(sd, ob);
  
         * Could be optimized later, but currently don't think it's so
         * much common scenario.
         *
 -       * Same applies to the DAG_id_tag_update() invoked from
 +       * Same applies to the DEG_id_tag_update() invoked from
         * sculpt_flush_update().
         */
        if (ss->modifiers_active) {
@@@ -5030,7 -5015,7 +5029,7 @@@ static void sculpt_stroke_done(const bC
                BLI_assert(brush == ss->cache->brush);  /* const, so we shouldn't change. */
                ups->draw_inverted = false;
  
-               sculpt_stroke_modifiers_check(C, ob);
+               sculpt_stroke_modifiers_check(C, ob, brush);
  
                /* Alt-Smooth */
                if (ss->cache->alt_smooth) {
  
                /* try to avoid calling this, only for e.g. linked duplicates now */
                if (((Mesh *)ob->data)->id.us > 1)
 -                      DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
 +                      DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
  
                WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
        }
@@@ -5221,7 -5206,7 +5220,7 @@@ void sculpt_pbvh_clear(Object *ob
                BKE_pbvh_free(ss->pbvh);
        ss->pbvh = NULL;
        if (dm)
 -              dm->getPBVH(NULL, dm);
 +              dm->getPBVH(NULL, dm, OB_MODE_OBJECT);
        BKE_object_free_derived_caches(ob);
  }
  
@@@ -5261,13 -5246,10 +5260,13 @@@ void sculpt_update_after_dynamic_topolo
  {
        Scene *scene = CTX_data_scene(C);
        Object *ob = CTX_data_active_object(C);
 +      EvaluationContext eval_ctx;
        Sculpt *sd = scene->toolsettings->sculpt;
  
 +      CTX_data_eval_ctx(C, &eval_ctx);
 +
        /* Create the PBVH */
 -      BKE_sculpt_update_mesh_elements(scene, sd, ob, false, false);
 +      BKE_sculpt_update_mesh_elements(&eval_ctx, scene, sd, ob, false, false);
        WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
  }
  
@@@ -5601,32 -5583,28 +5600,32 @@@ static void SCULPT_OT_symmetrize(wmOper
  
  /**** Toggle operator for turning sculpt mode on or off ****/
  
 -static void sculpt_init_session(Scene *scene, Object *ob)
 +static void sculpt_init_session(const bContext *C, Scene *scene, Object *ob)
  {
 +      EvaluationContext eval_ctx;
 +      CTX_data_eval_ctx(C, &eval_ctx);
 +
        /* Create persistent sculpt mode data */
        BKE_sculpt_toolsettings_data_ensure(scene);
  
        ob->sculpt = MEM_callocN(sizeof(SculptSession), "sculpt session");
 -      BKE_sculpt_update_mesh_elements(scene, scene->toolsettings->sculpt, ob, 0, false);
 +      BKE_sculpt_update_mesh_elements(&eval_ctx, scene, scene->toolsettings->sculpt, ob, 0, false);
  }
  
  
  static int sculpt_mode_toggle_exec(bContext *C, wmOperator *op)
  {
 +      WorkSpace *workspace = CTX_wm_workspace(C);
        Scene *scene = CTX_data_scene(C);
        Object *ob = CTX_data_active_object(C);
        const int mode_flag = OB_MODE_SCULPT;
 -      const bool is_mode_set = (ob->mode & mode_flag) != 0;
 +      const bool is_mode_set = (workspace->object_mode & mode_flag) != 0;
        Mesh *me;
        MultiresModifierData *mmd = BKE_sculpt_multires_active(scene, ob);
        int flush_recalc = 0;
  
        if (!is_mode_set) {
 -              if (!ED_object_mode_compat_set(C, ob, mode_flag, op->reports)) {
 +              if (!ED_object_mode_compat_set(C, workspace, mode_flag, op->reports)) {
                        return OPERATOR_CANCELLED;
                }
        }
                 * a consistent state.
                 */
                if (true || flush_recalc || (ob->sculpt && ob->sculpt->bm)) {
 -                      DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
 +                      DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
                }
  
                if (me->flag & ME_SCULPT_DYNAMIC_TOPOLOGY) {
                }
  
                /* Leave sculptmode */
 -              ob->mode &= ~mode_flag;
 +              workspace->object_mode &= ~mode_flag;
  
                BKE_sculptsession_free(ob);
  
        }
        else {
                /* Enter sculptmode */
 -              ob->mode |= mode_flag;
 +              workspace->object_mode |= mode_flag;
  
                if (flush_recalc)
 -                      DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
 +                      DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
  
                /* Create sculpt mode session data */
 -              if (ob->sculpt)
 +              if (ob->sculpt) {
                        BKE_sculptsession_free(ob);
 +              }
  
 -              sculpt_init_session(scene, ob);
 +              sculpt_init_session(C, scene, ob);
  
                /* Mask layer is required */
                if (mmd) {
@@@ -5855,7 -5832,9 +5854,9 @@@ static void sample_detail(bContext *C, 
        sd = CTX_data_tool_settings(C)->sculpt;
        ob = vc.obact;
  
-       sculpt_stroke_modifiers_check(C, ob);
+       Brush *brush = BKE_paint_brush(&sd->paint);
+       sculpt_stroke_modifiers_check(C, ob, brush);
  
        depth = sculpt_raycast_init(&vc, mouse, ray_start, ray_end, ray_normal, false);
  
index cb0c5bd37170c87a1cc670574f41345cd56d282f,29a7e11d8592507e6cab1efaf251e7e9011ee992..e1163fd32077d91ad31c4147f9cadd43e6b8ce19
@@@ -1265,6 -1265,7 +1265,6 @@@ typedef struct SlipData 
        int num_seq;
        bool slow;
        int slow_offset; /* offset at the point where offset was turned on */
 -      void *draw_handle;
        NumInput num_input;
  } SlipData;
  
@@@ -1299,6 -1300,21 +1299,6 @@@ static void transseq_restore(TransSeq *
        seq->len = ts->len;
  }
  
 -static void draw_slip_extensions(const bContext *C, ARegion *ar, void *data)
 -{
 -      Scene *scene = CTX_data_scene(C);
 -      SlipData *td = data;
 -      int i;
 -
 -      for (i = 0; i < td->num_seq; i++) {
 -              Sequence *seq = td->seq_array[i];
 -
 -              if ((seq->type != SEQ_TYPE_META) && td->trim[i]) {
 -                      draw_sequence_extensions(scene, ar, seq);
 -              }
 -      }
 -}
 -
  static int slip_add_sequences_rec(ListBase *seqbasep, Sequence **seq_array, bool *trim, int offset, bool do_trim)
  {
        Sequence *seq;
@@@ -1347,6 -1363,7 +1347,6 @@@ static int sequencer_slip_invoke(bConte
        SlipData *data;
        Scene *scene = CTX_data_scene(C);
        Editing *ed = BKE_sequencer_editing_get(scene, false);
 -      ARegion *ar = CTX_wm_region(C);
        float mouseloc[2];
        int num_seq, i;
        View2D *v2d = UI_view2d_fromcontext(C);
                transseq_backup(data->ts + i, data->seq_array[i]);
        }
  
 -      data->draw_handle = ED_region_draw_cb_activate(ar->type, draw_slip_extensions, data, REGION_DRAW_POST_VIEW);
 -
        UI_view2d_region_to_view(v2d, event->mval[0], event->mval[1], &mouseloc[0], &mouseloc[1]);
  
        copy_v2_v2_int(data->init_mouse, event->mval);
@@@ -1517,6 -1536,7 +1517,6 @@@ static int sequencer_slip_modal(bContex
        Scene *scene = CTX_data_scene(C);
        SlipData *data = (SlipData *)op->customdata;
        ScrArea *sa = CTX_wm_area(C);
 -      ARegion *ar = CTX_wm_region(C);
        const bool has_numInput = hasNumInput(&data->num_input);
        bool handled = true;
  
                case RETKEY:
                case SPACEKEY:
                {
 -                      ED_region_draw_cb_exit(ar->type, data->draw_handle);
                        MEM_freeN(data->seq_array);
                        MEM_freeN(data->trim);
                        MEM_freeN(data->ts);
                                BKE_sequence_calc(scene, seq);
                        }
  
 -                      ED_region_draw_cb_exit(ar->type, data->draw_handle);
 -
                        MEM_freeN(data->seq_array);
                        MEM_freeN(data->ts);
                        MEM_freeN(data->trim);
@@@ -2785,7 -2808,7 +2785,7 @@@ static int sequencer_view_zoom_ratio_ex
        float facx = BLI_rcti_size_x(&v2d->mask) / winx;
        float facy = BLI_rcti_size_y(&v2d->mask) / winy;
  
-       BLI_rctf_resize(&v2d->cur, floorf(winx * facx / ratio + 0.5f), floorf(winy * facy / ratio + 0.5f));
+       BLI_rctf_resize(&v2d->cur, ceilf(winx * facx / ratio + 0.5f), ceilf(winy * facy / ratio + 0.5f));
  
        ED_region_tag_redraw(CTX_wm_region(C));