diff options
| author | Patrick Storz <eduard.braun2@gmx.de> | 2019-08-10 19:25:41 +0000 |
|---|---|---|
| committer | Patrick Storz <eduard.braun2@gmx.de> | 2019-08-31 14:50:39 +0000 |
| commit | a4eea75612acbbfd6b8aed6b48090ca2c76ee657 (patch) | |
| tree | e53efaa60e611bc73c20b628c1c6e725c6f89f75 /src/extension/prefdialog/widget-spacer.cpp | |
| parent | Add new widget "separator" which draws a line between widgets (diff) | |
| download | inkscape-a4eea75612acbbfd6b8aed6b48090ca2c76ee657.tar.gz inkscape-a4eea75612acbbfd6b8aed6b48090ca2c76ee657.zip | |
Add new widget "spacer" which adds an empty space between widgets
The attribute "size" allows to define the spacing in px.
The special value "expand" can be used to make the spacer consume
all available space in the parent.
Diffstat (limited to 'src/extension/prefdialog/widget-spacer.cpp')
| -rw-r--r-- | src/extension/prefdialog/widget-spacer.cpp | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/src/extension/prefdialog/widget-spacer.cpp b/src/extension/prefdialog/widget-spacer.cpp new file mode 100644 index 000000000..350aeb4f2 --- /dev/null +++ b/src/extension/prefdialog/widget-spacer.cpp @@ -0,0 +1,65 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/** @file + * Spacer widget for extensions + *//* + * Authors: + * Patrick Storz <eduard.braun2@gmx.de> + * + * Copyright (C) 2019 Authors + * + * Released under GNU GPL v2+, read the file 'COPYING' for more information. + */ + +#include "widget-spacer.h" + +#include <gtkmm/box.h> + +#include "xml/node.h" +#include "extension/extension.h" + +namespace Inkscape { +namespace Extension { + + +WidgetSpacer::WidgetSpacer(Inkscape::XML::Node *xml, Inkscape::Extension::Extension *ext) + : InxWidget(xml, ext) +{ + // get size + const char *size = xml->attribute("size"); + if (size) { + _size = strtol(size, nullptr, 0); + if (_size == 0) { + if (!strcmp(size, "expand")) { + _expand = true; + } else { + g_warning("Invalid value ('%s') for size spacer in extension '%s'", size, _extension->get_id()); + } + } + } +} + +/** \brief Create a label for the description */ +Gtk::Widget *WidgetSpacer::get_widget(sigc::signal<void> *changeSignal) +{ + if (_hidden) { + return nullptr; + } + + Gtk::Box *spacer = Gtk::manage(new Gtk::Box()); + spacer->set_border_width(_size/2); + + if (_expand) { + spacer->set_hexpand(); + spacer->set_vexpand(); + } else { + spacer->set_margin_start(_size); + spacer->set_margin_top(_size); + } + + spacer->show(); + + return dynamic_cast<Gtk::Widget *>(spacer); +} + +} /* namespace Extension */ +} /* namespace Inkscape */ |
