Inkscape
Vector Graphics Editor
alignment-selector.cpp
Go to the documentation of this file.
1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * anchor-selector.cpp
4 *
5 * Released under GNU GPL v2+, read the file 'COPYING' for more information.
6 */
7
9
10#include <utility>
11#include <gtkmm/image.h>
12#include <sigc++/adaptors/bind.h>
13#include <sigc++/functors/mem_fun.h>
14
15#include "ui/icon-loader.h"
16#include "ui/icon-names.h"
17
18namespace Inkscape::UI::Widget {
19
20void AlignmentSelector::setupButton(const Glib::ustring& icon, Gtk::Button& button) {
21 auto const buttonIcon = Gtk::manage(sp_get_icon_image(icon, Gtk::IconSize::NORMAL));
22 button.set_has_frame(false);
23 button.set_child(*buttonIcon);
24 button.set_focusable(false);
25}
26
28{
29 set_halign(Gtk::Align::CENTER);
30 // clang-format off
31 setupButton(INKSCAPE_ICON("boundingbox_top_left"), _buttons[0]);
32 setupButton(INKSCAPE_ICON("boundingbox_top"), _buttons[1]);
33 setupButton(INKSCAPE_ICON("boundingbox_top_right"), _buttons[2]);
34 setupButton(INKSCAPE_ICON("boundingbox_left"), _buttons[3]);
35 setupButton(INKSCAPE_ICON("boundingbox_center"), _buttons[4]);
36 setupButton(INKSCAPE_ICON("boundingbox_right"), _buttons[5]);
37 setupButton(INKSCAPE_ICON("boundingbox_bottom_left"), _buttons[6]);
38 setupButton(INKSCAPE_ICON("boundingbox_bottom"), _buttons[7]);
39 setupButton(INKSCAPE_ICON("boundingbox_bottom_right"), _buttons[8]);
40 // clang-format on
41
42 _container.set_row_homogeneous();
43 _container.set_column_homogeneous(true);
44
45 for (std::size_t i = 0; i < _buttons.size(); ++i) {
46 _buttons[i].signal_clicked().connect(
47 sigc::bind(sigc::mem_fun(*this, &AlignmentSelector::btn_activated), i));
48
49 _container.attach(_buttons[i], i % 3, i / 3, 1, 1);
50 }
51
53}
54
55sigc::connection AlignmentSelector::connectAlignmentClicked(sigc::slot<void (int)> slot)
56{
57 return _alignmentClicked.connect(std::move(slot));
58}
59
61{
62 _alignmentClicked.emit(index);
63}
64
65} // namespace Inkscape::UI::Widget
66
67/*
68 Local Variables:
69 mode:c++
70 c-file-style:"stroustrup"
71 c-file-offsets:((innamespace . 0)(inline-open . 0))
72 indent-tabs-mode:nil
73 fill-column:99
74 End:
75*/
76// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :
sigc::signal< void(int)> _alignmentClicked
std::array< Gtk::Button, 9 > _buttons
sigc::connection connectAlignmentClicked(sigc::slot< void(int)>)
void setupButton(const Glib::ustring &icon, Gtk::Button &button)
Gtk::Image * sp_get_icon_image(Glib::ustring const &icon_name, int size)
Definition: icon-loader.cpp:27
Icon Loader.
Macro for icon names used in Inkscape.
Button
helper to stop accidents on int vs gtkmm3's weak=typed enums, & looks nicer!
Definition: controller.h:70
Custom widgets.
Definition: desktop.h:127
static void append(std::vector< T > &target, std::vector< T > &&source)
Definition: shortcuts.cpp:515