diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 18:24:48 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 18:24:48 +0000 |
commit | cca66b9ec4e494c1d919bff0f71a820d8afab1fa (patch) | |
tree | 146f39ded1c938019e1ed42d30923c2ac9e86789 /src/ui/util.cpp | |
parent | Initial commit. (diff) | |
download | inkscape-upstream.tar.xz inkscape-upstream.zip |
Adding upstream version 1.2.2.upstream/1.2.2upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/ui/util.cpp')
-rw-r--r-- | src/ui/util.cpp | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/src/ui/util.cpp b/src/ui/util.cpp new file mode 100644 index 0000000..7ce5e32 --- /dev/null +++ b/src/ui/util.cpp @@ -0,0 +1,93 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Utility functions for UI + * + * Authors: + * Tavmjong Bah + * John Smith + * + * Copyright (C) 2004, 2013, 2018 Authors + * Released under GNU GPL v2+, read the file 'COPYING' for more information. + */ + +#include "util.h" + +#include <gtkmm.h> + +/* + * Ellipse text if longer than maxlen, "50% start text + ... + ~50% end text" + * Text should be > length 8 or just return the original text + */ +Glib::ustring ink_ellipsize_text(Glib::ustring const &src, size_t maxlen) +{ + if (src.length() > maxlen && maxlen > 8) { + size_t p1 = (size_t) maxlen / 2; + size_t p2 = (size_t) src.length() - (maxlen - p1 - 1); + return src.substr(0, p1) + "…" + src.substr(p2); + } + return src; +} + +/** + * Show widget, if the widget has a Gtk::Reveal parent, reveal instead. + * + * @param widget - The child widget to show. + */ +void reveal_widget(Gtk::Widget *widget, bool show) +{ + auto revealer = dynamic_cast<Gtk::Revealer *>(widget->get_parent()); + if (revealer) { + revealer->set_reveal_child(show); + } + if (show) { + widget->show(); + } else if (!revealer) { + widget->hide(); + } +} + + +bool is_widget_effectively_visible(Gtk::Widget* widget) { + if (!widget) return false; + + // TODO: what's the right way to determine if widget is visible on the screen? + return widget->get_child_visible(); +} + +namespace Inkscape { +namespace UI { +void resize_widget_children(Gtk::Widget *widget) { + if(widget) { + Gtk::Allocation allocation; + int baseline; + widget->get_allocated_size(allocation, baseline); + widget->size_allocate(allocation, baseline); + } +} +} +} + + +Gdk::RGBA get_background_color(const Glib::RefPtr<Gtk::StyleContext> &context, + Gtk::StateFlags state) { + GdkRGBA *c; + + gtk_style_context_get(context->gobj(), + static_cast<GtkStateFlags>(state), + GTK_STYLE_PROPERTY_BACKGROUND_COLOR, &c, + nullptr); + auto bg_color = Glib::wrap(c); + + return bg_color; +} + +/* + Local Variables: + mode:c++ + c-file-style:"stroustrup" + c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +)) + indent-tabs-mode:nil + fill-column:99 + End: +*/ +// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 : |