diff --git a/share/icons/hicolor/symbolic/actions/matrix-2d-symbolic.svg b/share/icons/hicolor/symbolic/actions/matrix-2d-symbolic.svg new file mode 100644 index 0000000000000000000000000000000000000000..ef1ad2ecd0b6b98dbda0ebae464b1ad89f87b50a --- /dev/null +++ b/share/icons/hicolor/symbolic/actions/matrix-2d-symbolic.svg @@ -0,0 +1,113 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/src/ui/dialog/transformation.cpp b/src/ui/dialog/transformation.cpp index f9adb3532a38b0eb95e65a82eb2ed856ddbb58bb..65b17f9b745ef31219c193ad9a77d216bb1f9608 100644 --- a/src/ui/dialog/transformation.cpp +++ b/src/ui/dialog/transformation.cpp @@ -76,12 +76,12 @@ Transformation::Transformation() _scalar_skew_vertical (_("_Vertical:"), _("Vertical skew angle (positive = clockwise), or absolute displacement, or percentage displacement"), UNIT_TYPE_LINEAR, "", "transform-skew-vertical", &_units_skew), - _scalar_transform_a ("_A:", _("Transformation matrix element A")), - _scalar_transform_b ("_B:", _("Transformation matrix element B")), - _scalar_transform_c ("_C:", _("Transformation matrix element C")), - _scalar_transform_d ("_D:", _("Transformation matrix element D")), - _scalar_transform_e ("_E:", _("Transformation matrix element E"), UNIT_TYPE_LINEAR, "", "", &_units_transform), - _scalar_transform_f ("_F:", _("Transformation matrix element F"), UNIT_TYPE_LINEAR, "", "", &_units_transform), + _scalar_transform_a ("", _("Transformation matrix element A")), + _scalar_transform_b ("", _("Transformation matrix element B")), + _scalar_transform_c ("", _("Transformation matrix element C")), + _scalar_transform_d ("", _("Transformation matrix element D")), + _scalar_transform_e ("", _("Transformation matrix element E"), UNIT_TYPE_LINEAR, "", "", &_units_transform), + _scalar_transform_f ("", _("Transformation matrix element F"), UNIT_TYPE_LINEAR, "", "", &_units_transform), _counterclockwise_rotate (), _clockwise_rotate (), @@ -208,11 +208,13 @@ void Transformation::layoutPageMove() _scalar_move_horizontal.setDigits(3); _scalar_move_horizontal.setIncrements(0.1, 1.0); _scalar_move_horizontal.set_hexpand(); + _scalar_move_horizontal.setWidthChars(7); _scalar_move_vertical.initScalar(-1e6, 1e6); _scalar_move_vertical.setDigits(3); _scalar_move_vertical.setIncrements(0.1, 1.0); _scalar_move_vertical.set_hexpand(); + _scalar_move_vertical.setWidthChars(7); //_scalar_move_vertical.set_label_image( INKSCAPE_STOCK_ARROWS_HOR ); @@ -248,6 +250,7 @@ void Transformation::layoutPageScale() _scalar_scale_horizontal.setAbsoluteIsIncrement(true); _scalar_scale_horizontal.setPercentageIsIncrement(true); _scalar_scale_horizontal.set_hexpand(); + _scalar_scale_horizontal.setWidthChars(7); _scalar_scale_vertical.initScalar(-1e6, 1e6); _scalar_scale_vertical.setValue(100.0, "%"); @@ -256,6 +259,7 @@ void Transformation::layoutPageScale() _scalar_scale_vertical.setAbsoluteIsIncrement(true); _scalar_scale_vertical.setPercentageIsIncrement(true); _scalar_scale_vertical.set_hexpand(); + _scalar_scale_vertical.setWidthChars(7); _page_scale.table().attach(_scalar_scale_horizontal, 0, 0, 2, 1); @@ -303,10 +307,15 @@ void Transformation::layoutPageRotate() Gtk::RadioButton::Group group = _counterclockwise_rotate.get_group(); _clockwise_rotate.set_group(group); - _page_rotate.table().attach(_scalar_rotate, 0, 0, 2, 1); - _page_rotate.table().attach(_units_rotate, 2, 0, 1, 1); - _page_rotate.table().attach(_counterclockwise_rotate, 3, 0, 1, 1); - _page_rotate.table().attach(_clockwise_rotate, 4, 0, 1, 1); + auto box = Gtk::make_managed(); + _counterclockwise_rotate.set_halign(Gtk::ALIGN_START); + _clockwise_rotate.set_halign(Gtk::ALIGN_START); + box->pack_start(_counterclockwise_rotate); + box->pack_start(_clockwise_rotate); + + _page_rotate.table().attach(_scalar_rotate, 0, 0, 1, 1); + _page_rotate.table().attach(_units_rotate, 1, 0, 1, 1); + _page_rotate.table().attach(*box, 1, 1, 1, 1); _scalar_rotate.signal_value_changed() .connect(sigc::mem_fun(*this, &Transformation::onRotateValueChanged)); @@ -327,11 +336,13 @@ void Transformation::layoutPageSkew() _scalar_skew_horizontal.setDigits(3); _scalar_skew_horizontal.setIncrements(0.1, 1.0); _scalar_skew_horizontal.set_hexpand(); + _scalar_skew_horizontal.setWidthChars(7); _scalar_skew_vertical.initScalar(-1e6, 1e6); _scalar_skew_vertical.setDigits(3); _scalar_skew_vertical.setIncrements(0.1, 1.0); _scalar_skew_vertical.set_hexpand(); + _scalar_skew_vertical.setWidthChars(7); _page_skew.table().attach(_scalar_skew_horizontal, 0, 0, 2, 1); _page_skew.table().attach(_units_skew, 2, 0, 1, 1); @@ -346,11 +357,23 @@ void Transformation::layoutPageSkew() } - void Transformation::layoutPageTransform() { _units_transform.setUnitType(UNIT_TYPE_LINEAR); _units_transform.set_tooltip_text(_("E and F units")); + _units_transform.set_halign(Gtk::ALIGN_END); + _units_transform.set_margin_top(3); + _units_transform.set_margin_bottom(3); + + UI::Widget::Scalar* labels[] = {&_scalar_transform_a, &_scalar_transform_b, &_scalar_transform_c, &_scalar_transform_d, &_scalar_transform_e, &_scalar_transform_f}; + for (auto label : labels) { + label->hide_label(); + label->set_margin_start(2); + label->set_margin_end(2); + } + _page_transform.table().set_column_spacing(0); + _page_transform.table().set_row_spacing(1); + _page_transform.table().set_column_homogeneous(true); _scalar_transform_a.setWidgetSizeRequest(65, -1); _scalar_transform_a.setRange(-1e10, 1e10); @@ -360,7 +383,8 @@ void Transformation::layoutPageTransform() _scalar_transform_a.setWidthChars(6); _scalar_transform_a.set_hexpand(); - _page_transform.table().attach(_scalar_transform_a, 0, 0, 1, 1); + _page_transform.table().attach(*Gtk::make_managed("A:"), 0, 0, 1, 1); + _page_transform.table().attach(_scalar_transform_a, 0, 1, 1, 1); _scalar_transform_a.signal_value_changed() .connect(sigc::mem_fun(*this, &Transformation::onTransformValueChanged)); @@ -373,7 +397,8 @@ void Transformation::layoutPageTransform() _scalar_transform_b.setWidthChars(6); _scalar_transform_b.set_hexpand(); - _page_transform.table().attach(_scalar_transform_b, 0, 1, 1, 1); + _page_transform.table().attach(*Gtk::make_managed("B:"), 0, 2, 1, 1); + _page_transform.table().attach(_scalar_transform_b, 0, 3, 1, 1); _scalar_transform_b.signal_value_changed() .connect(sigc::mem_fun(*this, &Transformation::onTransformValueChanged)); @@ -386,7 +411,8 @@ void Transformation::layoutPageTransform() _scalar_transform_c.setWidthChars(6); _scalar_transform_c.set_hexpand(); - _page_transform.table().attach(_scalar_transform_c, 1, 0, 1, 1); + _page_transform.table().attach(*Gtk::make_managed("C:"), 1, 0, 1, 1); + _page_transform.table().attach(_scalar_transform_c, 1, 1, 1, 1); _scalar_transform_c.signal_value_changed() .connect(sigc::mem_fun(*this, &Transformation::onTransformValueChanged)); @@ -400,7 +426,8 @@ void Transformation::layoutPageTransform() _scalar_transform_d.setWidthChars(6); _scalar_transform_d.set_hexpand(); - _page_transform.table().attach(_scalar_transform_d, 1, 1, 1, 1); + _page_transform.table().attach(*Gtk::make_managed("D:"), 1, 2, 1, 1); + _page_transform.table().attach(_scalar_transform_d, 1, 3, 1, 1); _scalar_transform_d.signal_value_changed() .connect(sigc::mem_fun(*this, &Transformation::onTransformValueChanged)); @@ -414,7 +441,8 @@ void Transformation::layoutPageTransform() _scalar_transform_e.setWidthChars(6); _scalar_transform_e.set_hexpand(); - _page_transform.table().attach(_scalar_transform_e, 2, 0, 1, 1); + _page_transform.table().attach(*Gtk::make_managed("E:"), 2, 0, 1, 1); + _page_transform.table().attach(_scalar_transform_e, 2, 1, 1, 1); _scalar_transform_e.signal_value_changed() .connect(sigc::mem_fun(*this, &Transformation::onTransformValueChanged)); @@ -428,14 +456,34 @@ void Transformation::layoutPageTransform() _scalar_transform_f.setWidthChars(6); _scalar_transform_f.set_hexpand(); - _page_transform.table().attach(_scalar_transform_f, 2, 1, 1, 1); - _page_transform.table().attach(_units_transform, 2, 2, 1, 1); + _page_transform.table().attach(*Gtk::make_managed("F:"), 2, 2, 1, 1); + _page_transform.table().attach(_scalar_transform_f, 2, 3, 1, 1); + + auto img = Gtk::make_managed(); + img->set_from_icon_name("matrix-2d", Gtk::ICON_SIZE_BUTTON); + img->set_pixel_size(52); + _page_transform.table().attach(*img, 0, 5, 1, 1); + + auto descr = Gtk::make_managed(); + descr->set_line_wrap(); + descr->set_line_wrap_mode(Pango::WRAP_WORD); + descr->set_text( + "" + "" + "2D transformation matrix that combines translation (E,F), scaling (A,D)," + " rotation (A-D) and shearing (B,C)." + "" + ); + descr->set_use_markup(); + _page_transform.table().attach(*descr, 1, 5, 2, 1); + + _page_transform.table().attach(_units_transform, 2, 4, 1, 1); _scalar_transform_f.signal_value_changed() .connect(sigc::mem_fun(*this, &Transformation::onTransformValueChanged)); // Edit existing matrix - _page_transform.table().attach(_check_replace_matrix, 0, 3, 2, 1); + _page_transform.table().attach(_check_replace_matrix, 0, 4, 2, 1); _check_replace_matrix.set_active(false); _check_replace_matrix.signal_toggled() diff --git a/src/ui/widget/scalar.cpp b/src/ui/widget/scalar.cpp index f4f9d3a6f6e43418671d1d9862fc2c45ff46c90f..d6766fe87dd428160784974b0d0a985a2042938b 100644 --- a/src/ui/widget/scalar.cpp +++ b/src/ui/widget/scalar.cpp @@ -156,6 +156,19 @@ Glib::SignalProxy1 Scalar::signal_button_release_event() return static_cast(_widget)->signal_button_release_event(); } +void Scalar::hide_label() { + if (auto label = const_cast(getLabel())) { + label->hide(); + label->set_no_show_all(); + label->set_hexpand(true); + } + if (_widget) { + remove(*_widget); + _widget->set_hexpand(); + this->pack_end(*_widget); + } +} + } // namespace Widget } // namespace UI diff --git a/src/ui/widget/scalar.h b/src/ui/widget/scalar.h index 29a14d15ab9a3caa913dea9103d0aefbd524457c..0ef8d35c2bf52eb1a487b38f14d61aebac32de37 100644 --- a/src/ui/widget/scalar.h +++ b/src/ui/widget/scalar.h @@ -168,6 +168,9 @@ public: * if a callback checks it, it must reset it back to false. */ bool setProgrammatically; + + // permanently hide label part + void hide_label(); }; } // namespace Widget