1 // SPDX-License-Identifier: GPL-2.0-or-later
2 #ifndef SEEN_TEXT_TOOLBAR_H
3 #define SEEN_TEXT_TOOLBAR_H
4 
5 /**
6  * @file
7  * Text aux toolbar
8  */
9 /* Authors:
10  *   MenTaLguY <mental@rydia.net>
11  *   Lauris Kaplinski <lauris@kaplinski.com>
12  *   bulia byak <buliabyak@users.sf.net>
13  *   Frank Felfe <innerspace@iname.com>
14  *   John Cliff <simarilius@yahoo.com>
15  *   David Turner <novalis@gnu.org>
16  *   Josh Andler <scislac@scislac.com>
17  *   Jon A. Cruz <jon@joncruz.org>
18  *   Maximilian Albert <maximilian.albert@gmail.com>
19  *   Tavmjong Bah <tavmjong@free.fr>
20  *   Abhishek Sharma
21  *   Kris De Gussem <Kris.DeGussem@gmail.com>
22  *
23  * Copyright (C) 2004 David Turner
24  * Copyright (C) 2003 MenTaLguY
25  * Copyright (C) 1999-2011 authors
26  * Copyright (C) 2001-2002 Ximian, Inc.
27  *
28  * Released under GNU GPL v2+, read the file 'COPYING' for more information.
29  */
30 
31 #include "object/sp-item.h"
32 #include "object/sp-object.h"
33 #include "toolbar.h"
34 #include "text-editing.h"
35 #include "style.h"
36 #include <gtkmm/adjustment.h>
37 #include <gtkmm/box.h>
38 #include <gtkmm/popover.h>
39 #include <gtkmm/separatortoolitem.h>
40 #include <sigc++/connection.h>
41 
42 class SPDesktop;
43 
44 namespace Gtk {
45 class ComboBoxText;
46 class ToggleToolButton;
47 }
48 
49 namespace Inkscape {
50 class Selection;
51 
52 namespace UI {
53 namespace Tools {
54 class ToolBase;
55 }
56 
57 namespace Widget {
58 class ComboBoxEntryToolItem;
59 class ComboToolItem;
60 class SpinButtonToolItem;
61 class UnitTracker;
62 }
63 
64 namespace Toolbar {
65 class TextToolbar : public Toolbar {
66 private:
67     bool _freeze;
68     bool _text_style_from_prefs;
69     UI::Widget::UnitTracker *_tracker;
70     UI::Widget::UnitTracker *_tracker_fs;
71 
72     UI::Widget::ComboBoxEntryToolItem *_font_family_item;
73     UI::Widget::ComboBoxEntryToolItem *_font_size_item;
74     UI::Widget::ComboToolItem *_font_size_units_item;
75     UI::Widget::ComboBoxEntryToolItem *_font_style_item;
76     UI::Widget::ComboToolItem *_line_height_units_item;
77     UI::Widget::SpinButtonToolItem *_line_height_item;
78     Gtk::ToggleToolButton *_superscript_item;
79     Gtk::ToggleToolButton *_subscript_item;
80 
81     UI::Widget::ComboToolItem *_align_item;
82     UI::Widget::ComboToolItem *_writing_mode_item;
83     UI::Widget::ComboToolItem *_orientation_item;
84     UI::Widget::ComboToolItem *_direction_item;
85 
86     UI::Widget::SpinButtonToolItem *_word_spacing_item;
87     UI::Widget::SpinButtonToolItem *_letter_spacing_item;
88     UI::Widget::SpinButtonToolItem *_dx_item;
89     UI::Widget::SpinButtonToolItem *_dy_item;
90     UI::Widget::SpinButtonToolItem *_rotation_item;
91 
92     Glib::RefPtr<Gtk::Adjustment> _line_height_adj;
93     Glib::RefPtr<Gtk::Adjustment> _word_spacing_adj;
94     Glib::RefPtr<Gtk::Adjustment> _letter_spacing_adj;
95     Glib::RefPtr<Gtk::Adjustment> _dx_adj;
96     Glib::RefPtr<Gtk::Adjustment> _dy_adj;
97     Glib::RefPtr<Gtk::Adjustment> _rotation_adj;
98     bool _outer;
99     SPItem *_sub_active_item;
100     int _lineheight_unit;
101     Inkscape::Text::Layout::iterator wrap_start;
102     Inkscape::Text::Layout::iterator wrap_end;
103     bool _updating;
104     int _cusor_numbers;
105     SPStyle _query_cursor;
106     double selection_fontsize;
107     sigc::connection c_selection_changed;
108     sigc::connection c_selection_modified;
109     sigc::connection c_selection_modified_select_tool;
110     sigc::connection c_subselection_changed;
111     void text_outer_set_style(SPCSSAttr *css);
112     void fontfamily_value_changed();
113     void fontsize_value_changed();
114     void subselection_wrap_toggle(bool start);
115     void fontstyle_value_changed();
116     void script_changed(Gtk::ToggleToolButton *btn);
117     void align_mode_changed(int mode);
118     void writing_mode_changed(int mode);
119     void orientation_changed(int mode);
120     void direction_changed(int mode);
121     void lineheight_value_changed();
122     void lineheight_unit_changed(int not_used);
123     void wordspacing_value_changed();
124     void letterspacing_value_changed();
125     void dx_value_changed();
126     void dy_value_changed();
127     void prepare_inner();
128     void focus_text();
129     void rotation_value_changed();
130     void fontsize_unit_changed(int not_used);
131     void selection_changed(Inkscape::Selection *selection);
132     void selection_modified(Inkscape::Selection *selection, guint flags);
133     void selection_modified_select_tool(Inkscape::Selection *selection, guint flags);
134     void subselection_changed(gpointer texttool);
135     void watch_ec(SPDesktop* desktop, Inkscape::UI::Tools::ToolBase* ec);
136     void set_sizes(int unit);
137     Inkscape::XML::Node *unindent_node(Inkscape::XML::Node *repr, Inkscape::XML::Node *before);
138 
139   protected:
140     TextToolbar(SPDesktop *desktop);
141 
142 public:
143     static GtkWidget * create(SPDesktop *desktop);
144 };
145 }
146 }
147 }
148 
149 #endif /* !SEEN_TEXT_TOOLBAR_H */
150