diff options
| author | Matthias Melcher <github@matthiasm.com> | 2023-12-14 23:37:05 +0100 |
|---|---|---|
| committer | Matthias Melcher <github@matthiasm.com> | 2023-12-14 23:37:10 +0100 |
| commit | 14f4dec0b98bb72d9b65edc09b922e752e9e2074 (patch) | |
| tree | a3704786075102d84618d733b2aa14722fde397c /fluid/Fl_Widget_Type.cxx | |
| parent | 33d071875623dc90e8da00d0491f97bc2558c861 (diff) | |
FLUID: Adds image scaling to widget dialog
Diffstat (limited to 'fluid/Fl_Widget_Type.cxx')
| -rw-r--r-- | fluid/Fl_Widget_Type.cxx | 82 |
1 files changed, 72 insertions, 10 deletions
diff --git a/fluid/Fl_Widget_Type.cxx b/fluid/Fl_Widget_Type.cxx index 9a5c3251a..f11c7f968 100644 --- a/fluid/Fl_Widget_Type.cxx +++ b/fluid/Fl_Widget_Type.cxx @@ -151,8 +151,17 @@ void Fl_Widget_Type::setimage(Fluid_Image *i) { if (image) image->decrement(); if (i) i->increment(); image = i; - if (i) i->image(o); - else o->image(0); + if (i) { + i->image(o); + if (o->image() && (scale_image_w_ || scale_image_h_)) { + int iw = scale_image_w_>0 ? scale_image_w_ : o->image()->data_w(); + int ih = scale_image_h_>0 ? scale_image_h_ : o->image()->data_h(); + o->image()->scale(iw, ih, 0, 1); + } + } else { + o->image(0); + //scale_image_w_ = scale_image_h_ = 0; + } redraw(); } @@ -161,8 +170,17 @@ void Fl_Widget_Type::setinactive(Fluid_Image *i) { if (inactive) inactive->decrement(); if (i) i->increment(); inactive = i; - if (i) i->deimage(o); - else o->deimage(0); + if (i) { + i->deimage(o); + if (o->deimage()) { + int iw = scale_deimage_w_>0 ? scale_deimage_w_ : o->deimage()->data_w(); + int ih = scale_deimage_h_>0 ? scale_deimage_h_ : o->deimage()->data_h(); + o->deimage()->scale(iw, ih, 0, 1); + } + } else { + o->deimage(0); + //scale_deimage_w_ = scale_deimage_h_ = 0; + } redraw(); } @@ -188,6 +206,10 @@ Fl_Widget_Type::Fl_Widget_Type() compress_image_ = 1; bind_deimage_ = 0; compress_deimage_ = 1; + scale_image_w_ = 0; + scale_image_h_ = 0; + scale_deimage_w_ = 0; + scale_deimage_h_ = 0; } Fl_Widget_Type::~Fl_Widget_Type() { @@ -457,7 +479,7 @@ void image_browse_cb(Fl_Button* b, void *v) { } } -void bind_image_cb(Fl_Button* b, void *v) { +void bind_image_cb(Fl_Check_Button* b, void *v) { if (v == LOAD) { if (current_widget->is_widget() && !current_widget->is_a(ID_Window)) { b->activate(); @@ -477,7 +499,7 @@ void bind_image_cb(Fl_Button* b, void *v) { } } -void compress_image_cb(Fl_Button* b, void *v) { +void compress_image_cb(Fl_Check_Button* b, void *v) { if (v == LOAD) { if (current_widget->is_widget() && !current_widget->is_a(ID_Window)) { b->activate(); @@ -539,7 +561,7 @@ void inactive_browse_cb(Fl_Button* b, void *v) { } } -void bind_deimage_cb(Fl_Button* b, void *v) { +void bind_deimage_cb(Fl_Check_Button* b, void *v) { if (v == LOAD) { if (current_widget->is_widget() && !current_widget->is_a(ID_Window)) { b->activate(); @@ -559,7 +581,7 @@ void bind_deimage_cb(Fl_Button* b, void *v) { } } -void compress_deimage_cb(Fl_Button* b, void *v) { +void compress_deimage_cb(Fl_Check_Button* b, void *v) { if (v == LOAD) { if (current_widget->is_widget() && !current_widget->is_a(ID_Window)) { b->activate(); @@ -3109,8 +3131,34 @@ void Fl_Widget_Type::write_widget_code(Fd_Code_Writer& f) { write_color(f, "color", o->color()); if (o->selection_color() != tplate->selection_color() || subclass()) write_color(f, "selection_color", o->selection_color()); - if (image) image->write_code(f, bind_image_, var); - if (inactive) inactive->write_code(f, bind_deimage_, var, 1); + if (image) { + image->write_code(f, bind_image_, var); + if (scale_image_w_ || scale_image_h_) { + f.write_c("%s%s->image()->scale(", f.indent(), var); + if (scale_image_w_>0) + f.write_c("%d, ", scale_image_w_); + else + f.write_c("%s->image()->data_w(), ", var); + if (scale_image_h_>0) + f.write_c("%d, 0, 1);\n", scale_image_h_); + else + f.write_c("%s->image()->data_h(), 0, 1);\n", var); + } + } + if (inactive) { + inactive->write_code(f, bind_deimage_, var, 1); + if (scale_deimage_w_ || scale_deimage_h_) { + f.write_c("%s%s->deimage()->scale(", f.indent(), var); + if (scale_deimage_w_>0) + f.write_c("%d, ", scale_deimage_w_); + else + f.write_c("%s->deimage()->data_w(), ", var); + if (scale_deimage_h_>0) + f.write_c("%d, 0, 1);\n", scale_deimage_h_); + else + f.write_c("%s->deimage()->data_h(), 0, 1);\n", var); + } + } if (o->labeltype() != tplate->labeltype() || subclass()) f.write_c("%s%s->labeltype(FL_%s);\n", f.indent(), var, item_name(labeltypemenu, o->labeltype())); @@ -3232,12 +3280,16 @@ void Fl_Widget_Type::write_properties(Fd_Project_Writer &f) { f.write_word(tooltip()); } if (image_name() && *image_name()) { + if (scale_image_w_ || scale_image_h_) + f.write_string("scale_image {%d %d}", scale_image_w_, scale_image_h_); f.write_string("image"); f.write_word(image_name()); f.write_string("compress_image %d", compress_image_); } if (bind_image_) f.write_string("bind_image 1"); if (inactive_name() && *inactive_name()) { + if (scale_deimage_w_ || scale_deimage_h_) + f.write_string("scale_deimage {%d %d}", scale_deimage_w_, scale_deimage_h_); f.write_string("deimage"); f.write_word(inactive_name()); f.write_string("compress_deimage %d", compress_deimage_); @@ -3361,6 +3413,11 @@ void Fl_Widget_Type::read_property(Fd_Project_Reader &f, const char *c) { } } else if (!strcmp(c,"tooltip")) { tooltip(f.read_word()); + } else if (!strcmp(c,"scale_image")) { + if (sscanf(f.read_word(),"%d %d",&w,&h) == 2) { + scale_image_w_ = w; + scale_image_h_ = h; + } } else if (!strcmp(c,"image")) { image_name(f.read_word()); // starting in 2023, `image` is always followed by `compress_image` @@ -3374,6 +3431,11 @@ void Fl_Widget_Type::read_property(Fd_Project_Reader &f, const char *c) { bind_image_ = (int)atol(f.read_word()); } else if (!strcmp(c,"compress_image")) { compress_image_ = (int)atol(f.read_word()); + } else if (!strcmp(c,"scale_deimage")) { + if (sscanf(f.read_word(),"%d %d",&w,&h) == 2) { + scale_deimage_w_ = w; + scale_deimage_h_ = h; + } } else if (!strcmp(c,"deimage")) { inactive_name(f.read_word()); // starting in 2023, `deimage` is always followed by `compress_deimage` |
