Skip to content

Commit

Permalink
Pushed to 1.5
Browse files Browse the repository at this point in the history
Added external Curve file chooser in Color manipulation (issue alessandrofrancesconi#46)
Preview GUI didn't display Resize, Crop and Watermark manipulation
results
Manipulation windows have now better size (should fix issue alessandrofrancesconi#24)
  • Loading branch information
alessandrofrancesconi authored and mevtho committed Oct 20, 2013
1 parent 41d2673 commit d58c5b9
Show file tree
Hide file tree
Showing 22 changed files with 278 additions and 48 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,11 @@ http://www.alessandrofrancesconi.it/projects/bimp

Changelog:

1.5:
- Added external Curve file chooser in Color manipulation (issue #46)
- Preview GUI didn't display Resize, Crop and Watermark manipulation results
- Manipulation windows have now better size (should fix issue #24)

1.4:
- Fixed a bug that displayed (none) in output folder button and caused BIMP to crash
- Fixed a compilation error under Unix
Expand Down
Binary file modified bin/win32/bimp.exe
Binary file not shown.
5 changes: 2 additions & 3 deletions src/bimp-gui.c
Original file line number Diff line number Diff line change
Expand Up @@ -455,6 +455,7 @@ static void show_preview (GtkTreeView *tree_view, gpointer data)
imageout_orig->image_id = gimp_file_load(GIMP_RUN_NONINTERACTIVE, (gchar*)selected_str, (gchar*)selected_str);
imageout_orig->drawable_id = gimp_image_merge_visible_layers(imageout_orig->image_id, GIMP_CLIP_TO_IMAGE);

bimp_init_batch();
bimp_apply_drawable_manipulations(imageout_final, (gchar*)selected_str, (gchar*)selected_str);

pixbuf_orig = gimp_drawable_get_thumbnail(imageout_orig->drawable_id, PREVIEW_IMG_W, PREVIEW_IMG_H, GIMP_PIXBUF_KEEP_ALPHA);
Expand All @@ -477,7 +478,7 @@ static void show_preview (GtkTreeView *tree_view, gpointer data)

hbox = gtk_hbox_new(FALSE, 10);
image_orig = gtk_image_new_from_pixbuf(pixbuf_orig);
image_forward = gtk_image_new_from_stock(GTK_STOCK_GO_FORWARD, 15);
image_forward = gtk_image_new_from_stock(GTK_STOCK_GO_FORWARD, GTK_ICON_SIZE_BUTTON);
image_final = gtk_image_new_from_pixbuf(pixbuf_final);

gtk_box_pack_start(GTK_BOX(hbox), image_orig, FALSE, FALSE, 0);
Expand Down Expand Up @@ -805,7 +806,6 @@ static void save_set(GtkMenuItem *menuitem, gpointer user_data)
if (g_slist_length(bimp_selected_manipulations) == 0) {
bimp_show_error_dialog(_("The manipulations set is empty!"), bimp_window_main);
} else {
FILE *fp;
gchar* output_file;
char* extension = ".bimp";

Expand Down Expand Up @@ -842,7 +842,6 @@ static void save_set(GtkMenuItem *menuitem, gpointer user_data)
}
}

/* TODO */
static void load_set(GtkMenuItem *menuitem, gpointer user_data)
{
gboolean can_continue = TRUE;
Expand Down
10 changes: 1 addition & 9 deletions src/bimp-manipulations-gui.c
Original file line number Diff line number Diff line change
Expand Up @@ -42,53 +42,45 @@ void bimp_open_editwindow(manipulation man, gboolean first_time)
gtk_container_set_border_width(GTK_CONTAINER(window), 10);

vbox = gtk_vbox_new(FALSE, 10);
gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
label_title = gtk_label_new(NULL);
gchar* titletext = g_strconcat("<big><b>", bimp_manip_get_string(man->type), "</b></big>", NULL); /* dialog title */
gtk_label_set_markup (GTK_LABEL (label_title), titletext);
gtk_box_pack_start(GTK_BOX(vbox), label_title, FALSE, FALSE, 0);

if (man->type == MANIP_RESIZE) {
gtk_widget_set_size_request (window, RESIZE_WINDOW_W, RESIZE_WINDOW_H);
gui = bimp_resize_gui_new((resize_settings)(man->settings));
save = &bimp_resize_save;
}
else if (man->type == MANIP_CROP) {
gtk_widget_set_size_request (window, CROP_WINDOW_W, CROP_WINDOW_H);
gui = bimp_crop_gui_new((crop_settings)(man->settings));
save = &bimp_crop_save;
}
else if (man->type == MANIP_FLIPROTATE) {
gtk_widget_set_size_request (window, FLIPROTATE_WINDOW_W, FLIPROTATE_WINDOW_H);
gui = bimp_fliprotate_gui_new((fliprotate_settings)(man->settings));
save = &bimp_fliprotate_save;
}
else if (man->type == MANIP_COLOR) {
gtk_widget_set_size_request (window, COLOR_WINDOW_W, COLOR_WINDOW_H);
gui = bimp_color_gui_new((color_settings)(man->settings));
save = &bimp_color_save;
}
else if (man->type == MANIP_SHARPBLUR) {
gtk_widget_set_size_request (window, SHARPBLUR_WINDOW_W, SHARPBLUR_WINDOW_H);
gui = bimp_sharpblur_gui_new((sharpblur_settings)(man->settings));
save = &bimp_sharpblur_save;
}
else if (man->type == MANIP_CHANGEFORMAT) {
gtk_widget_set_size_request (window, CHANGEFORMAT_WINDOW_W, CHANGEFORMAT_WINDOW_H);
gui = bimp_changeformat_gui_new((changeformat_settings)(man->settings), window);
save = &bimp_changeformat_save;
}
else if (man->type == MANIP_WATERMARK) {
gtk_widget_set_size_request (window, WATERMARK_WINDOW_W, WATERMARK_WINDOW_H);
gui = bimp_watermark_gui_new((watermark_settings)(man->settings));
save = &bimp_watermark_save;
}
else if (man->type == MANIP_RENAME) {
gtk_widget_set_size_request (window, RENAME_WINDOW_W, RENAME_WINDOW_H);
gui = bimp_rename_gui_new((rename_settings)(man->settings), window);
save = &bimp_rename_save;
}
else if (man->type == MANIP_USERDEF) {
gtk_widget_set_size_request (window, USERDEF_WINDOW_W, USERDEF_WINDOW_H);
gui = bimp_userdef_gui_new((userdef_settings)(man->settings), window);
save = &bimp_userdef_save;
}
Expand Down
1 change: 1 addition & 0 deletions src/bimp-manipulations.c
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,7 @@ manipulation manipulation_color_new()
((color_settings)color->settings)->contrast = 0;
((color_settings)color->settings)->grayscale = FALSE;
((color_settings)color->settings)->levels_auto = FALSE;
((color_settings)color->settings)->curve_file = NULL;

return color;
}
Expand Down
1 change: 1 addition & 0 deletions src/bimp-manipulations.h
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,7 @@ typedef struct manip_color_set {
gint contrast;
gboolean levels_auto;
gboolean grayscale;
char* curve_file;
} *color_settings;

typedef struct manip_sharpblur_set {
Expand Down
77 changes: 69 additions & 8 deletions src/bimp-operate.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
#include "bimp-manipulations.h"
#include "bimp-gui.h"
#include "bimp-utils.h"
#include "bimp-serialize.h"
#include "plugin-intl.h"

static gboolean process_image(gpointer);
Expand Down Expand Up @@ -52,9 +53,38 @@ gboolean list_contains_crop;
gboolean list_contains_watermark;
gboolean list_contains_savingplugin;

// set of variables to be used when doing Curve color correction
// they are global so the batch process will read the source curve file once
gboolean colorcurve_init;
int colorcurve_num_points_v;
guint8* colorcurve_ctr_points_v;
int colorcurve_num_points_r;
guint8* colorcurve_ctr_points_r;
int colorcurve_num_points_g;
guint8* colorcurve_ctr_points_g;
int colorcurve_num_points_b;
guint8* colorcurve_ctr_points_b;
int colorcurve_num_points_a;
guint8* colorcurve_ctr_points_a;


void bimp_init_batch()
{
list_contains_resize = bimp_list_contains_manip(MANIP_RESIZE);
list_contains_crop = bimp_list_contains_manip(MANIP_CROP);
list_contains_changeformat = bimp_list_contains_manip(MANIP_CHANGEFORMAT);
list_contains_rename = bimp_list_contains_manip(MANIP_RENAME);
list_contains_watermark = bimp_list_contains_manip(MANIP_WATERMARK);
list_contains_savingplugin = bimp_list_contains_savingplugin();

colorcurve_init = FALSE;
}

void bimp_start_batch(gpointer parent_dialog)
{
bimp_set_busy(TRUE);

bimp_init_batch();

g_print("\nBIMP - Batch Manipulation Plugin\nStart batch processing...\n");
processed_count = 0;
Expand Down Expand Up @@ -117,21 +147,13 @@ void bimp_start_batch(gpointer parent_dialog)

g_strfreev(common_folder);
}

list_contains_changeformat = bimp_list_contains_manip(MANIP_CHANGEFORMAT);
list_contains_rename = bimp_list_contains_manip(MANIP_RENAME);
list_contains_resize = bimp_list_contains_manip(MANIP_RESIZE);
list_contains_crop = bimp_list_contains_manip(MANIP_CROP);
list_contains_watermark = bimp_list_contains_manip(MANIP_WATERMARK);
list_contains_savingplugin = bimp_list_contains_savingplugin();

guint batch_idle_tag = g_idle_add((GSourceFunc)process_image, parent_dialog);
}

static gchar** array_path_folders (char *path)
{
GArray *array = NULL;
int i;
char * normalized_path = (char*)g_malloc(sizeof(path));

normalized_path = g_strdup(path);
Expand Down Expand Up @@ -555,6 +577,45 @@ static gboolean apply_color(color_settings settings, image_output out)
success = gimp_levels_stretch(out->drawable_id);
}

if (settings->curve_file != NULL && !gimp_drawable_is_indexed(out->drawable_id)) {
/* apply curve */

if (!colorcurve_init) { // read from the curve file only the first time
success = parse_curve_file(
settings->curve_file,
&colorcurve_num_points_v, &colorcurve_ctr_points_v,
&colorcurve_num_points_r, &colorcurve_ctr_points_r,
&colorcurve_num_points_g, &colorcurve_ctr_points_g,
&colorcurve_num_points_b, &colorcurve_ctr_points_b,
&colorcurve_num_points_a, &colorcurve_ctr_points_a
);
}
else success = TRUE;

if (success) {

if (colorcurve_num_points_v >= 4 && colorcurve_num_points_v <= 34) {
success = gimp_curves_spline(out->drawable_id, GIMP_HISTOGRAM_VALUE, colorcurve_num_points_v, colorcurve_ctr_points_v);
}

if (colorcurve_num_points_r >= 4 && colorcurve_num_points_r <= 34) {
success = gimp_curves_spline(out->drawable_id, GIMP_HISTOGRAM_RED, colorcurve_num_points_r, colorcurve_ctr_points_r);
}

if (colorcurve_num_points_g >= 4 && colorcurve_num_points_g <= 34) {
success = gimp_curves_spline(out->drawable_id, GIMP_HISTOGRAM_GREEN, colorcurve_num_points_g, colorcurve_ctr_points_g);
}

if (colorcurve_num_points_b >= 4 && colorcurve_num_points_b <= 34) {
success = gimp_curves_spline(out->drawable_id, GIMP_HISTOGRAM_BLUE, colorcurve_num_points_b, colorcurve_ctr_points_b);
}

if (colorcurve_num_points_a >= 4 && colorcurve_num_points_a <= 34) {
success = gimp_curves_spline(out->drawable_id, GIMP_HISTOGRAM_ALPHA, colorcurve_num_points_a, colorcurve_ctr_points_a);
}
}
}

return success;
}

Expand Down
1 change: 1 addition & 0 deletions src/bimp-operate.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ typedef struct imageout_str {
char* filename;
} *image_output;

void bimp_init_batch(void);
void bimp_start_batch(gpointer);
void bimp_stop_operations(void);
void bimp_apply_drawable_manipulations(image_output, gchar*, gchar*);
Expand Down
Loading

0 comments on commit d58c5b9

Please sign in to comment.