UI cleanup:
authorAntony Riakiotakis <kalast@gmail.com>
Thu, 24 Jul 2014 09:39:04 +0000 (11:39 +0200)
committerAntony Riakiotakis <kalast@gmail.com>
Thu, 24 Jul 2014 09:39:04 +0000 (11:39 +0200)
New layer in texture painting will now allow entering image parameters,
similar to new image.

release/scripts/startup/bl_ui/space_view3d_toolbar.py
source/blender/blenloader/intern/versioning_270.c
source/blender/editors/sculpt_paint/paint_image.c
source/blender/editors/sculpt_paint/paint_image_proj.c
source/blender/editors/sculpt_paint/paint_intern.h
source/blender/makesdna/DNA_scene_types.h
source/blender/makesrna/intern/rna_sculpt_paint.c

index 4caf25cdb50eff9523aaf24732fd17d2482bea1a..39e6e2d368b7698f48f56569640bf67483976f8b 100644 (file)
@@ -1082,11 +1082,6 @@ class VIEW3D_PT_slots_projectpaint(View3DPanel, Panel):
             if not mat.use_nodes:
                 col.operator_menu_enum("paint.add_texture_paint_slot", "type")
 
-                row = col.row(align=True)
-                row.prop(settings, "slot_xresolution_default")
-                row.prop(settings, "slot_yresolution_default")
-                col.prop(settings, "slot_color_default")
-
                 slot = mat.texture_paint_slots[mat.paint_active_slot]
                 col.separator()
                 col.label("UV Layer")
index be6f985d7012fe2cfa492fe64412da18c5ac83b5..2e4d38eebcc98a3d492e76b41d826af96139ae12 100644 (file)
@@ -343,14 +343,8 @@ void blo_do_versions_270(FileData *fd, Library *UNUSED(lib), Main *main)
        }
 
        if (!MAIN_VERSION_ATLEAST(main, 271, 3)) {
-               Scene *sce;
                Brush *br;
 
-               for (sce = main->scene.first; sce; sce = sce->id.next) {
-                       sce->toolsettings->imapaint.slot_xresolution_default = 1024;
-                       sce->toolsettings->imapaint.slot_yresolution_default = 1024;
-               }
-
                for (br = main->brush.first; br; br = br->id.next) {
                        br->fill_threshold = 0.2f;
                }
index 0e765060967497f511795b5e62cfd80827f8095b..21def9fe6d401c8d7f812b418c556064d86dca27 100644 (file)
@@ -1372,7 +1372,7 @@ void paint_proj_mesh_data_ensure(bContext *C, Object *ob, wmOperator *op)
                        if (ma) {
                                has_material = true;
                                if (!ma->texpaintslot) {
-                                       proj_paint_add_slot(C, MAP_COL, ma);
+                                       proj_paint_add_slot(C, MAP_COL, ma, NULL);
                                }
                        }
                }
@@ -1385,7 +1385,7 @@ void paint_proj_mesh_data_ensure(bContext *C, Object *ob, wmOperator *op)
                Material *ma = BKE_material_add(CTX_data_main(C), "Material");
                /* no material found, just assign to first slot */
                assign_material(ob, ma, 1, BKE_MAT_ASSIGN_USERPREF);
-               proj_paint_add_slot(C, MAP_COL, ma);
+               proj_paint_add_slot(C, MAP_COL, ma, NULL);
        }
 
        me = BKE_mesh_from_object(ob);
@@ -1407,14 +1407,8 @@ void paint_proj_mesh_data_ensure(bContext *C, Object *ob, wmOperator *op)
                        Main *bmain = CTX_data_main(C);
                        float color[4] = {0.0, 0.0, 0.0, 1.0};
 
-                       /* should not be allowed, but just in case */
-                       if (imapaint->slot_xresolution_default == 0)
-                               imapaint->slot_xresolution_default = 1024;
-                       if (imapaint->slot_yresolution_default == 0)
-                               imapaint->slot_yresolution_default = 1024;
-
-                       width = imapaint->slot_xresolution_default;
-                       height = imapaint->slot_yresolution_default;
+                       width = 1024;
+                       height = 1024;
                        imapaint->stencil = BKE_image_add_generated(bmain, width, height, "Stencil", 32, false, IMA_GENTYPE_BLANK, color);
                }
        }
index 5c1af41e05d7de13527a513a9a04b36538852dc9..08cc964741e5fe5175eea711be63e74aa8e1f840 100644 (file)
@@ -4816,28 +4816,16 @@ static EnumPropertyItem layer_type_items[] = {
        {0, NULL, 0, NULL, NULL}
 };
 
-bool proj_paint_add_slot(bContext *C, int type, Material *ma)
+bool proj_paint_add_slot(bContext *C, int type, Material *ma, wmOperator *op)
 {
        Object *ob = CTX_data_active_object(C);
        Scene *scene = CTX_data_scene(C);
        int i;
-       ImagePaintSettings *imapaint = &CTX_data_tool_settings(C)->imapaint;
        bool use_nodes = BKE_scene_use_new_shading_nodes(scene);
-       int width;
-       int height;
 
        if (!ob)
                return false;
 
-       /* should not be allowed, but just in case */
-       if (imapaint->slot_xresolution_default == 0)
-               imapaint->slot_xresolution_default = 1024;
-       if (imapaint->slot_yresolution_default == 0)
-               imapaint->slot_yresolution_default = 1024;
-
-       width = imapaint->slot_xresolution_default;
-       height = imapaint->slot_yresolution_default;
-
        if (!ma)
                ma = give_current_material(ob, ob->actcol);
 
@@ -4866,13 +4854,22 @@ bool proj_paint_add_slot(bContext *C, int type, Material *ma)
                                if (mtex->tex) {
                                        char imagename[FILE_MAX];
                                        float color[4];
-                                       bool use_float = type == MAP_NORM;
-
-                                       copy_v4_v4(color, imapaint->slot_color_default);
-                                       if (use_float) {
-                                               mul_v3_fl(color, color[3]);
+                                       int width = 1024;
+                                       int height = 1024;
+                                       bool use_float = false;
+                                       short gen_type = IMA_GENTYPE_BLANK;
+                                       bool alpha = false;
+
+                                       if (op) {
+                                               width = RNA_int_get(op->ptr, "width");
+                                               height = RNA_int_get(op->ptr, "height");
+                                               use_float = RNA_boolean_get(op->ptr, "float");
+                                               gen_type = RNA_enum_get(op->ptr, "generated_type");
+                                               RNA_float_get_array(op->ptr, "color", color);
+                                               alpha = RNA_boolean_get(op->ptr, "alpha");
                                        }
-                                       else {
+
+                                       if (!use_float) {
                                                /* crappy workaround because we only upload straight color to OpenGL and that makes
                                                 * painting result on viewport too opaque */
                                                color[3] = 1.0;
@@ -4881,8 +4878,8 @@ bool proj_paint_add_slot(bContext *C, int type, Material *ma)
                                        /* take the second letter to avoid the ID identifier */
                                        BLI_snprintf(imagename, FILE_MAX, "%s_%s", &ma->id.name[2], name);
 
-                                       ima = mtex->tex->ima = BKE_image_add_generated(bmain, width, height, imagename, 32, use_float,
-                                                                                      IMA_GENTYPE_BLANK, color);
+                                       ima = mtex->tex->ima = BKE_image_add_generated(bmain, width, height, imagename, alpha ? 32 : 24, use_float,
+                                                                                      gen_type, color);
 
                                        BKE_texpaint_slot_refresh_cache(ma, false);
                                        BKE_image_signal(ima, NULL, IMA_SIGNAL_USER_NEW_IMAGE);
@@ -4904,17 +4901,28 @@ static int texture_paint_add_texture_paint_slot_exec(bContext *C, wmOperator *op
 {
        int type = RNA_enum_get(op->ptr, "type");
 
-       return proj_paint_add_slot(C, type, NULL) ? OPERATOR_FINISHED : OPERATOR_CANCELLED;
+       return proj_paint_add_slot(C, type, NULL, op);
+}
+
+
+static int texture_paint_add_texture_paint_slot_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
+{
+       return WM_operator_props_dialog_popup(C, op, 15 * UI_UNIT_X, 5 * UI_UNIT_Y);
 }
 
+
 void PAINT_OT_add_texture_paint_slot(wmOperatorType *ot)
 {
+       PropertyRNA *prop;
+       static float default_color[4] = {0.0f, 0.0f, 0.0f, 1.0f};
+
        /* identifiers */
        ot->name = "Add Texture Paint Slot";
        ot->description = "Add a texture paint slot";
        ot->idname = "PAINT_OT_add_texture_paint_slot";
 
        /* api callbacks */
+       ot->invoke = texture_paint_add_texture_paint_slot_invoke;
        ot->exec = texture_paint_add_texture_paint_slot_exec;
        ot->poll = ED_operator_region_view3d_active;
 
@@ -4922,5 +4930,17 @@ void PAINT_OT_add_texture_paint_slot(wmOperatorType *ot)
        ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
 
        /* properties */
-       ot->prop = RNA_def_enum(ot->srna, "type", layer_type_items, 0, "Type", "Merge method to use");
+       prop = RNA_def_enum(ot->srna, "type", layer_type_items, 0, "Type", "Merge method to use");
+       RNA_def_property_flag(prop, PROP_HIDDEN);
+       prop = RNA_def_int(ot->srna, "width", 1024, 1, INT_MAX, "Width", "Image width", 1, 16384);
+       RNA_def_property_subtype(prop, PROP_PIXEL);
+       prop = RNA_def_int(ot->srna, "height", 1024, 1, INT_MAX, "Height", "Image height", 1, 16384);
+       RNA_def_property_subtype(prop, PROP_PIXEL);
+       prop = RNA_def_float_color(ot->srna, "color", 4, NULL, 0.0f, FLT_MAX, "Color", "Default fill color", 0.0f, 1.0f);
+       RNA_def_property_subtype(prop, PROP_COLOR_GAMMA);
+       RNA_def_property_float_array_default(prop, default_color);
+       RNA_def_boolean(ot->srna, "alpha", 1, "Alpha", "Create an image with an alpha channel");
+       RNA_def_enum(ot->srna, "generated_type", image_generated_type_items, IMA_GENTYPE_BLANK,
+                    "Generated Type", "Fill the image with a grid for UV map testing");
+       RNA_def_boolean(ot->srna, "float", 0, "32 bit Float", "Create image with 32 bit floating point bit depth");
 }
index f49699faad72bb62bee77f0c3321c2cf45fb737f..921992ed2f933897961f97db8194e297bfc15917 100644 (file)
@@ -169,7 +169,7 @@ void paint_proj_stroke(const struct bContext *C, void *ps, const float prevmval_
 void paint_proj_redraw(const struct bContext *C, void *pps, bool final);
 void paint_proj_stroke_done(void *ps);
 void paint_proj_mesh_data_ensure(bContext *C, struct Object *ob, struct wmOperator *op);
-bool proj_paint_add_slot(bContext *C, int type, struct Material *ma);
+bool proj_paint_add_slot(bContext *C, int type, struct Material *ma, struct wmOperator *op);
 
 void paint_brush_color_get(struct Scene *scene, struct Brush *br, bool color_correction, bool invert, float distance, float pressure, float color[3], struct ColorManagedDisplay *display);
 bool paint_use_opacity_masking(struct Brush *brush);
index 5e27fffcc97d1169b076cfc77c888a1a4b5ce3b8..d7bc8e56e3827854105c182f16e734b64b3bb8b2 100644 (file)
@@ -841,15 +841,10 @@ typedef struct ImagePaintSettings {
        short seam_bleed, normal_angle;
        short screen_grab_size[2]; /* capture size for re-projection */
 
-       /* new layer default resolution */
-       int slot_xresolution_default;
-       int slot_yresolution_default;
-
        int pad1;
 
        void *paintcursor;                      /* wm handle */
        struct Image *stencil;      /* workaround until we support true layer masks */
-       float slot_color_default[4];
        float stencil_col[3];
        float pad2;
 } ImagePaintSettings;
index f335ce04d96b6b67f099a242c70dfc1e52c84c24..af6cf493f1e00412aac3abb6f8c003652e6e4dac 100644 (file)
@@ -614,11 +614,6 @@ static void rna_def_image_paint(BlenderRNA *brna)
        RNA_def_property_float_sdna(prop, NULL, "stencil_col");
        RNA_def_property_ui_text(prop, "Stencil Color", "Stencil color in the viewport");
        RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, "rna_ImaPaint_stencil_update");
-
-       prop = RNA_def_property(srna, "slot_color_default", PROP_FLOAT, PROP_COLOR_GAMMA);
-       RNA_def_property_range(prop, 0.0, 1.0);
-       RNA_def_property_ui_text(prop, "New Layer Color", "Color/Alpha used for new");
-       RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL);
        
        prop = RNA_def_property(srna, "use_clone_layer", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "flag", IMAGEPAINT_PROJECT_LAYER_CLONE);
@@ -639,16 +634,6 @@ static void rna_def_image_paint(BlenderRNA *brna)
        prop = RNA_def_int_array(srna, "screen_grab_size", 2, NULL, 0, 0, "screen_grab_size",
                                 "Size to capture the image for re-projecting", 0, 0);
        RNA_def_property_range(prop, 512, 16384);
-
-       prop = RNA_def_property(srna, "slot_xresolution_default", PROP_INT, PROP_UNSIGNED);
-       RNA_def_property_range(prop, 1, SHRT_MAX);
-       RNA_def_property_ui_range(prop, 64, 4096, 0, -1);
-       RNA_def_property_ui_text(prop, "X resolution", "X Resolution of new image");
-
-       prop = RNA_def_property(srna, "slot_yresolution_default", PROP_INT, PROP_UNSIGNED);
-       RNA_def_property_range(prop, 1, SHRT_MAX);
-       RNA_def_property_ui_range(prop, 64, 4096, 0, -1);
-       RNA_def_property_ui_text(prop, "Y resolution", "Y Resolution of new image");
 }
 
 static void rna_def_particle_edit(BlenderRNA *brna)