Merge branch 'master' into blender2.8
authorCampbell Barton <ideasman42@gmail.com>
Tue, 27 Mar 2018 05:08:58 +0000 (07:08 +0200)
committerCampbell Barton <ideasman42@gmail.com>
Tue, 27 Mar 2018 05:08:58 +0000 (07:08 +0200)
1  2 
source/blender/editors/sculpt_paint/CMakeLists.txt
source/blender/editors/sculpt_paint/paint_curve.c
source/blender/editors/sculpt_paint/paint_intern.h

index 1a70938258126e84f029916d4c85bb6f871bae82,adead9a8b9e2aac03d026b805a4d8251f0fd2ff7..040bcc10ca2b6f230cc1a0118c4ac8e7bca9a5c6
@@@ -25,7 -25,6 +25,7 @@@ set(IN
        ../../blenlib
        ../../blentranslation
        ../../bmesh
 +      ../../depsgraph
        ../../gpu
        ../../imbuf
        ../../makesdna
@@@ -43,6 -42,7 +43,7 @@@ set(INC_SY
  set(SRC
        paint_cursor.c
        paint_curve.c
+       paint_curve_undo.c
        paint_hide.c
        paint_image.c
        paint_image_2d.c
index c9ad4a46a137e9c73a2a39314184c8ab6ec89447,8d9812f41d94f869894459475a6b9ec05b5fae97..fb8dea2af0e3a26d653bcd16f590ed0634b3b61e
  #include "DNA_screen_types.h"
  #include "DNA_space_types.h"
  #include "DNA_view3d_types.h"
 +#include "DNA_workspace_types.h"
  
  #include "BLI_math_vector.h"
- #include "BLI_string.h"
  
  #include "BKE_context.h"
  #include "BKE_main.h"
  #include "BKE_paint.h"
  
- #include "ED_paint.h"
 +#include "DEG_depsgraph.h"
 +
  #include "ED_view3d.h"
  
  #include "WM_api.h"
  #define PAINT_CURVE_SELECT_THRESHOLD 40.0f
  #define PAINT_CURVE_POINT_SELECT(pcp, i) (*(&pcp->bez.f1 + i) = SELECT)
  
  int paint_curve_poll(bContext *C)
  {
 +      const WorkSpace *workspace = CTX_wm_workspace(C);
        Object *ob = CTX_data_active_object(C);
        Paint *p;
        RegionView3D *rv3d = CTX_wm_region_view3d(C);
        SpaceImage *sima;
  
 -      if (rv3d && !(ob && ((ob->mode & OB_MODE_ALL_PAINT) != 0)))
 +      if (rv3d && !(ob && ((workspace->object_mode & OB_MODE_ALL_PAINT) != 0)))
                return false;
  
        sima = CTX_wm_space_image(C);
        return false;
  }
  
- /* Paint Curve Undo*/
- typedef struct UndoCurve {
-       struct UndoImageTile *next, *prev;
-       PaintCurvePoint *points; /* points of curve */
-       int tot_points;
-       int active_point;
-       char idname[MAX_ID_NAME];  /* name instead of pointer*/
- } UndoCurve;
- static void paintcurve_undo_restore(bContext *C, ListBase *lb)
- {
-       Paint *p = BKE_paint_get_active_from_context(C);
-       UndoCurve *uc;
-       PaintCurve *pc = NULL;
-       if (p->brush) {
-               pc = p->brush->paint_curve;
-       }
-       if (!pc)
-               return;
-       uc = (UndoCurve *)lb->first;
-       if (STREQLEN(uc->idname, pc->id.name, BLI_strnlen(uc->idname, sizeof(uc->idname)))) {
-               SWAP(PaintCurvePoint *, pc->points, uc->points);
-               SWAP(int, pc->tot_points, uc->tot_points);
-               SWAP(int, pc->add_index, uc->active_point);
-       }
- }
- static void paintcurve_undo_delete(ListBase *lb)
- {
-       UndoCurve *uc;
-       uc = (UndoCurve *)lb->first;
-       if (uc->points)
-               MEM_freeN(uc->points);
-       uc->points = NULL;
- }
- static void paintcurve_undo_begin(bContext *C, wmOperator *op, PaintCurve *pc)
- {
-       ePaintMode mode = BKE_paintmode_get_active_from_context(C);
-       ListBase *lb = NULL;
-       int undo_stack_id;
-       UndoCurve *uc;
-       switch (mode) {
-               case ePaintTexture2D:
-               case ePaintTextureProjective:
-                       undo_stack_id = UNDO_PAINT_IMAGE;
-                       break;
-               case ePaintSculpt:
-                       undo_stack_id = UNDO_PAINT_MESH;
-                       break;
-               default:
-                       /* do nothing, undo is handled by global */
-                       return;
-       }
-       ED_undo_paint_push_begin(undo_stack_id, op->type->name,
-                                paintcurve_undo_restore, paintcurve_undo_delete, NULL);
-       lb = undo_paint_push_get_list(undo_stack_id);
-       uc = MEM_callocN(sizeof(*uc), "Undo_curve");
-       lb->first = uc;
-       BLI_strncpy(uc->idname, pc->id.name, sizeof(uc->idname));
-       uc->tot_points = pc->tot_points;
-       uc->active_point = pc->add_index;
-       uc->points = MEM_dupallocN(pc->points);
-       undo_paint_push_count_alloc(undo_stack_id, sizeof(*uc) + sizeof(*pc->points) * pc->tot_points);
-       ED_undo_paint_push_end(undo_stack_id);
- }
  #define SEL_F1 (1 << 0)
  #define SEL_F2 (1 << 1)
  #define SEL_F3 (1 << 2)
@@@ -295,7 -203,7 +207,7 @@@ static void paintcurve_point_add(bConte
                br->paint_curve = pc = BKE_paint_curve_add(bmain, "PaintCurve");
        }
  
-       paintcurve_undo_begin(C, op, pc);
+       ED_paintcurve_undo_push(C, op, pc);
  
        pcp = MEM_mallocN((pc->tot_points + 1) * sizeof(PaintCurvePoint), "PaintCurvePoint");
        add_index = pc->add_index;
@@@ -394,7 -302,7 +306,7 @@@ static int paintcurve_delete_point_exec
                return OPERATOR_CANCELLED;
        }
  
-       paintcurve_undo_begin(C, op, pc);
+       ED_paintcurve_undo_push(C, op, pc);
  
  #define DELETE_TAG 2
  
@@@ -471,7 -379,7 +383,7 @@@ static bool paintcurve_point_select(bCo
        if (!pc)
                return false;
  
-       paintcurve_undo_begin(C, op, pc);
+       ED_paintcurve_undo_push(C, op, pc);
  
        if (toggle) {
                PaintCurvePoint *pcp;
@@@ -655,7 -563,7 +567,7 @@@ static int paintcurve_slide_invoke(bCon
                op->customdata = psd;
  
                if (do_select)
-                       paintcurve_undo_begin(C, op, pc);
+                       ED_paintcurve_undo_push(C, op, pc);
  
                /* first, clear all selection from points */
                for (i = 0; i < pc->tot_points; i++)
index 089a12dbd45e168b30364ec59adb5ee66a5418f5,52be4be4c0db957c5caecf198da606228fa286d9..ccca0d248a583c195a07af36cb82124397c5e69c
@@@ -43,6 -43,7 +43,7 @@@ struct MTex
  struct Object;
  struct PaintStroke;
  struct Paint;
+ struct PaintCurve;
  struct PointerRNA;
  struct rcti;
  struct Scene;
@@@ -155,10 -156,10 +156,10 @@@ void PAINT_OT_weight_sample_group(struc
  /* paint_vertex_proj.c */
  struct VertProjHandle;
  struct VertProjHandle *ED_vpaint_proj_handle_create(
 -        struct Scene *scene, struct Object *ob,
 +        const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *ob,
          struct DMCoNo **r_vcosnos);
  void  ED_vpaint_proj_handle_update(
 -        struct VertProjHandle *vp_handle,
 +        const struct EvaluationContext *eval_ctx, struct VertProjHandle *vp_handle,
          /* runtime vars */
          struct ARegion *ar, const float mval_fl[2]);
  void  ED_vpaint_proj_handle_free(
@@@ -252,6 -253,7 +253,6 @@@ bool paint_convert_bb_to_rect(struct rc
   * 2D screens-space bounding box into four 3D planes) */
  void paint_calc_redraw_planes(float planes[4][4],
                                const struct ARegion *ar,
 -                              struct RegionView3D *rv3d,
                                struct Object *ob,
                                const struct rcti *screen_rect);
  
@@@ -342,6 -344,9 +343,9 @@@ void PAINTCURVE_OT_slide(struct wmOpera
  void PAINTCURVE_OT_draw(struct wmOperatorType *ot);
  void PAINTCURVE_OT_cursor(struct wmOperatorType *ot);
  
+ /* paint_curve_undo.c */
+ void ED_paintcurve_undo_push(struct bContext *C, struct wmOperator *op, struct PaintCurve *pc);
  /* image painting blur kernel */
  typedef struct {
        float *wdata; /* actual kernel */