/[svn]/gigedit/trunk/src/gigedit/wrapLabel.cc
ViewVC logotype

Contents of /gigedit/trunk/src/gigedit/wrapLabel.cc

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3184 - (show annotations) (download)
Wed May 17 12:28:39 2017 UTC (6 years, 11 months ago) by schoenebeck
File size: 5046 byte(s)
* Added bunch of help text and tooltips for the new
  "Macro Setup" and "Macro Editor" windows.
* wrapLabel: Fixed wrong dimensions when using
  padding.
* Bumped version (1.0.0.svn46).

1 /* *************************************************************************
2 * Copyright (c) 2005 VMware, Inc.
3 * Copyright (c) 2011 - 2017 Andreas Persson
4 *
5 * Permission is hereby granted, free of charge, to any person obtaining
6 * a copy of this software and associated documentation files (the
7 * "Software"), to deal in the Software without restriction, including
8 * without limitation the rights to use, copy, modify, merge, publish,
9 * distribute, sublicense, and/or sell copies of the Software, and to
10 * permit persons to whom the Software is furnished to do so, subject to
11 * the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be
14 * included in all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
20 * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23 * *************************************************************************/
24
25 #include <wrapLabel.hh>
26
27
28 /*
29 * wrapLabel.cc --
30 *
31 * A wrappable label widget.
32 */
33
34
35 namespace view {
36
37
38 /*
39 *-----------------------------------------------------------------------------
40 *
41 * view::WrapLabel::WrapLabel --
42 *
43 * Constructor.
44 *
45 * Results:
46 * None.
47 *
48 * Side effects:
49 * None.
50 *
51 *-----------------------------------------------------------------------------
52 */
53
54 WrapLabel::WrapLabel(const Glib::ustring &text) // IN: The label text
55 : mWrapWidth(0),
56 mWrapHeight(0)
57 {
58 get_layout()->set_wrap(Pango::WRAP_WORD_CHAR);
59 set_alignment(0.0, 0.0);
60 set_text(text);
61 }
62
63
64 /*
65 *-----------------------------------------------------------------------------
66 *
67 * view::WrapLabel::set_text --
68 *
69 * Override function for Label::set_text() that re-sets the wrapping
70 * width after the text is set.
71 *
72 * Results:
73 * None.
74 *
75 * Side effects:
76 * None.
77 *
78 *-----------------------------------------------------------------------------
79 */
80
81 void
82 WrapLabel::set_text(const Glib::ustring &str) // IN: The text to set
83 {
84 Label::set_text(str);
85
86 SetWrapWidth(mWrapWidth);
87 }
88
89
90 /*
91 *-----------------------------------------------------------------------------
92 *
93 * view::WrapLabel::set_markup --
94 *
95 * Override function for Label::set_markup() that re-sets the wrapping
96 * width after the text is set.
97 *
98 * Results:
99 * None.
100 *
101 * Side effects:
102 * None.
103 *
104 *-----------------------------------------------------------------------------
105 */
106
107 void
108 WrapLabel::set_markup(const Glib::ustring &str) // IN: The text to set
109 {
110 Label::set_markup(str);
111
112 SetWrapWidth(mWrapWidth);
113 }
114
115
116 /*
117 *-----------------------------------------------------------------------------
118 *
119 * view::WrapLabel::on_size_request --
120 *
121 * Override handler for the "size_request" signal. Forces the height
122 * to be the size necessary for the Pango layout, while allowing the
123 * width to be flexible.
124 *
125 * Results:
126 * None.
127 *
128 * Side effects:
129 * None.
130 *
131 *-----------------------------------------------------------------------------
132 */
133
134 void
135 WrapLabel::on_size_request(Gtk::Requisition *req) // OUT: Our requested size
136 {
137 req->width = 0;
138 req->height = mWrapHeight;
139 }
140
141
142 /*
143 *-----------------------------------------------------------------------------
144 *
145 * view::WrapLabel::on_size_allocate --
146 *
147 * Override handler for the "size_allocate" signal. Sets the wrap width
148 * to the be width allocated to us.
149 *
150 * Results:
151 * None.
152 *
153 * Side effects:
154 * None.
155 *
156 *-----------------------------------------------------------------------------
157 */
158
159 void
160 WrapLabel::on_size_allocate(Gtk::Allocation &alloc) // IN: Our allocation
161 {
162 Gtk::Label::on_size_allocate(alloc);
163
164 SetWrapWidth(alloc.get_width());
165 }
166
167
168 /*
169 *-----------------------------------------------------------------------------
170 *
171 * view::WrapLabel::SetWrapWidth --
172 *
173 * Sets the point at which the text should wrap.
174 *
175 * Results:
176 * None.
177 *
178 * Side effects:
179 * None.
180 *
181 *-----------------------------------------------------------------------------
182 */
183
184 void
185 WrapLabel::SetWrapWidth(int width) // IN: The wrap width
186 {
187 if (width == 0) {
188 return;
189 }
190
191 int xPadding, yPadding;
192 get_padding(xPadding, yPadding);
193
194 width -= 2 * xPadding;
195
196 /*
197 * We may need to reset the wrap width, so do this regardless of whether
198 * or not we've changed the width.
199 */
200 get_layout()->set_width(width * Pango::SCALE);
201
202 int unused;
203 get_layout()->get_pixel_size(unused, mWrapHeight);
204 mWrapHeight += 2 * yPadding;
205
206 if (mWrapWidth != width) {
207 mWrapWidth = width;
208 queue_resize();
209 }
210 }
211
212
213 }; /* namespace view */

  ViewVC Help
Powered by ViewVC