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