From cca66b9ec4e494c1d919bff0f71a820d8afab1fa Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 20:24:48 +0200 Subject: Adding upstream version 1.2.2. Signed-off-by: Daniel Baumann --- src/ui/widget/color-palette.h | 111 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 src/ui/widget/color-palette.h (limited to 'src/ui/widget/color-palette.h') diff --git a/src/ui/widget/color-palette.h b/src/ui/widget/color-palette.h new file mode 100644 index 0000000..bc4c47f --- /dev/null +++ b/src/ui/widget/color-palette.h @@ -0,0 +1,111 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/** @file + * @brief Color palette widget + */ +/* Authors: + * Michael Kowalski + * + * Copyright (C) 2021 Michael Kowalski + * Released under GNU GPL v2+, read the file 'COPYING' for more information. + */ + +#ifndef SEEN_COLOR_PALETTE_H +#define SEEN_COLOR_PALETTE_H + +#include +#include +#include +#include +#include +#include +#include + +namespace Inkscape { +namespace UI { +namespace Widget { + +class ColorPalette : public Gtk::Bin { +public: + ColorPalette(); + ~ColorPalette() override; + + struct rgb_t { double r; double g; double b; }; + struct palette_t { Glib::ustring name; std::vector colors; }; + + // set colors presented in a palette + void set_colors(const std::vector& swatches); + // list of palettes to present in the menu + void set_palettes(const std::vector& palettes); + // enable compact mode (true) with mini-scroll buttons, or normal mode (false) with regular scrollbars + void set_compact(bool compact); + + void set_tile_size(int size_px); + void set_tile_border(int border_px); + void set_rows(int rows); + void set_aspect(double aspect); + // show horizontal scrollbar when only 1 row is set + void enable_scrollbar(bool show); + // allow tile stretching (horizontally) + void enable_stretch(bool enable); + + int get_tile_size() const; + int get_tile_border() const; + int get_rows() const; + double get_aspect() const; + bool is_scrollbar_enabled() const; + bool is_stretch_enabled() const; + + void set_selected(const Glib::ustring& name); + + sigc::signal& get_palette_selected_signal(); + sigc::signal& get_settings_changed_signal(); + +private: + void resize(); + void set_up_scrolling(); + void free(); + void scroll(int dx, int dy, double snap, bool smooth); + void do_scroll(int dx, int dy); + static gboolean scroll_cb(gpointer self); + void _set_tile_size(int size_px); + void _set_tile_border(int border_px); + void _set_rows(int rows); + void _set_aspect(double aspect); + void _enable_scrollbar(bool show); + void _enable_stretch(bool enable); + static gboolean check_scrollbar(gpointer self); + void update_checkbox(); + void update_stretch(); + int get_tile_size(bool horz) const; + int get_tile_width() const; + int get_tile_height() const; + int get_palette_height() const; + + Glib::RefPtr _builder; + Gtk::FlowBox& _flowbox; + Gtk::ScrolledWindow& _scroll; + Gtk::FlowBox& _scroll_btn; + Gtk::Button& _scroll_up; + Gtk::Button& _scroll_down; + Gtk::Button& _scroll_left; + Gtk::Button& _scroll_right; + Gtk::Menu& _menu; + int _size = 10; + int _border = 0; + int _rows = 1; + double _aspect = 0.0; + int _count = 1; + bool _compact = true; + sigc::signal _signal_palette_selected; + sigc::signal _signal_settings_changed; + bool _in_update = false; + guint _active_timeout = 0; + bool _force_scrollbar = false; + bool _stretch_tiles = false; + double _scroll_step = 0.0; // smooth scrolling step + double _scroll_final = 0.0; // smooth scroll final value +}; + +}}} // namespace + +#endif // SEEN_COLOR_PALETTE_H -- cgit v1.2.3