#include "BKE_brush.h"
#include "BKE_global.h"
+#include "BKE_library.h"
#include "BKE_paint.h"
#include <stdlib.h>
#include <string.h>
+const char PAINT_CURSOR_SCULPT[3] = {255, 100, 100};
+const char PAINT_CURSOR_VERTEX_PAINT[3] = {255, 255, 255};
+const char PAINT_CURSOR_WEIGHT_PAINT[3] = {200, 200, 255};
+const char PAINT_CURSOR_TEXTURE_PAINT[3] = {255, 255, 255};
+
Paint *paint_get_active(Scene *sce)
{
if(sce && sce->basact && sce->basact->object) {
case OB_MODE_WEIGHT_PAINT:
return &ts->wpaint->paint;
case OB_MODE_TEXTURE_PAINT:
- break;
- //return &ts->imapaint->paint;
+ return &ts->imapaint.paint;
}
}
void paint_brush_set(Paint *p, Brush *br)
{
- if(p && p->brushes) {
- int i;
-
- /* See if there's already a slot with the brush */
- for(i = 0; i < p->brush_count; ++i) {
- if(p->brushes[i] == br) {
- p->active_brush_index = i;
- break;
+ if(p && !br) {
+ /* Setting to NULL removes the current slot */
+ paint_brush_slot_remove(p);
+ }
+ else if(p) {
+ int found = 0;
+
+ if(p->brushes) {
+ int i;
+
+ /* See if there's already a slot with the brush */
+ for(i = 0; i < p->brush_count; ++i) {
+ if(p->brushes[i] == br) {
+ p->active_brush_index = i;
+ found = 1;
+ break;
+ }
}
+
}
+ if(!found) {
+ paint_brush_slot_add(p);
+ id_us_plus(&br->id);
+ }
+
+ /* Make sure the current slot is the new brush */
+ p->brushes[p->active_brush_index] = br;
}
- else
- paint_brush_slot_add(p);
-
- /* Make sure the current slot is the new brush */
- p->brushes[p->active_brush_index] = br;
}
static void paint_brush_slots_alloc(Paint *p, const int count)
void paint_brush_slot_add(Paint *p)
{
- Brush **orig = p->brushes;
- int orig_count = p->brushes ? p->brush_count : 0;
+ if(p) {
+ Brush **orig = p->brushes;
+ int orig_count = p->brushes ? p->brush_count : 0;
- /* Increase size of brush slot array */
- paint_brush_slots_alloc(p, orig_count + 1);
- if(orig) {
- memcpy(p->brushes, orig, sizeof(Brush*) * orig_count);
- MEM_freeN(orig);
- }
+ /* Increase size of brush slot array */
+ paint_brush_slots_alloc(p, orig_count + 1);
+ if(orig) {
+ memcpy(p->brushes, orig, sizeof(Brush*) * orig_count);
+ MEM_freeN(orig);
+ }
- p->active_brush_index = orig_count;
+ p->active_brush_index = orig_count;
+ }
}
void paint_brush_slot_remove(Paint *p)
{
- if(p->brushes) {
+ if(p && p->brushes) {
Brush **orig = p->brushes;
int src, dst;
}
-void paint_init(Paint *p, const char *name)
+void paint_init(Paint *p, const char col[3])
{
Brush *brush;
/* If there's no brush, create one */
brush = paint_brush(p);
- brush_check_exists(&brush, name);
+ brush_check_exists(&brush, "Brush");
paint_brush_set(p, brush);
+
+ memcpy(p->paint_cursor_col, col, 3);
+ p->paint_cursor_col[3] = 128;
}
void free_paint(Paint *paint)
void copy_paint(Paint *orig, Paint *new)
{
- if(orig->brushes)
+ if(orig->brushes) {
+ int i;
new->brushes = MEM_dupallocN(orig->brushes);
+ for(i = 0; i < orig->brush_count; ++i)
+ id_us_plus((ID *)new->brushes[i]);
+ }
}