projects
/
ardour.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
show tempo information for MIDI files in preview pane; start to offer choice about...
[ardour.git]
/
gtk2_ardour
/
ardour_button.cc
diff --git
a/gtk2_ardour/ardour_button.cc
b/gtk2_ardour/ardour_button.cc
index 922ba84d2c08ae82739395e7af749440c9bcc899..5ebddc23cc292e3c252d3fa40daecad898a2cd87 100644
(file)
--- a/
gtk2_ardour/ardour_button.cc
+++ b/
gtk2_ardour/ardour_button.cc
@@
-59,6
+59,7
@@
ArdourButton::Element ArdourButton::just_led_default_elements = ArdourButton::El
ArdourButton::ArdourButton (Element e)
: _sizing_text("")
ArdourButton::ArdourButton (Element e)
: _sizing_text("")
+ , _markup (false)
, _elements (e)
, _icon (Gtkmm2ext::ArdourIcon::NoIcon)
, _tweaks (Tweaks (0))
, _elements (e)
, _icon (Gtkmm2ext::ArdourIcon::NoIcon)
, _tweaks (Tweaks (0))
@@
-68,7
+69,7
@@
ArdourButton::ArdourButton (Element e)
, _text_width (0)
, _text_height (0)
, _diameter (0)
, _text_width (0)
, _text_height (0)
, _diameter (0)
- , _corner_radius (
2
.5)
+ , _corner_radius (
3
.5)
, _corner_mask (0xf)
, _angle(0)
, _xalign(.5)
, _corner_mask (0xf)
, _angle(0)
, _xalign(.5)
@@
-104,7
+105,9
@@
ArdourButton::ArdourButton (Element e)
ArdourButton::ArdourButton (const std::string& str, Element e)
: _sizing_text("")
ArdourButton::ArdourButton (const std::string& str, Element e)
: _sizing_text("")
+ , _markup (false)
, _elements (e)
, _elements (e)
+ , _icon (Gtkmm2ext::ArdourIcon::NoIcon)
, _tweaks (Tweaks (0))
, _char_pixel_width (0)
, _char_pixel_height (0)
, _tweaks (Tweaks (0))
, _char_pixel_width (0)
, _char_pixel_height (0)
@@
-112,7
+115,7
@@
ArdourButton::ArdourButton (const std::string& str, Element e)
, _text_width (0)
, _text_height (0)
, _diameter (0)
, _text_width (0)
, _text_height (0)
, _diameter (0)
- , _corner_radius (
2
.5)
+ , _corner_radius (
3
.5)
, _corner_mask (0xf)
, _angle(0)
, _xalign(.5)
, _corner_mask (0xf)
, _angle(0)
, _xalign(.5)
@@
-172,22
+175,35
@@
ArdourButton::set_layout_font (const Pango::FontDescription& fd)
if (_layout) {
_layout->set_font_description (fd);
queue_resize ();
if (_layout) {
_layout->set_font_description (fd);
queue_resize ();
+ _char_pixel_width = 0;
+ _char_pixel_height = 0;
+ }
+}
+
+void
+ArdourButton::set_text_internal () {
+ assert (_layout);
+ if (_markup) {
+ _layout->set_markup (_text);
+ } else {
+ _layout->set_text (_text);
}
}
void
}
}
void
-ArdourButton::set_text (const std::string& str)
+ArdourButton::set_text (const std::string& str
, bool markup
)
{
{
- if (_text == str) {
+ if (_text == str
&& _markup == markup
) {
return;
}
_text = str;
return;
}
_text = str;
+ _markup = markup;
if (!is_realized()) {
return;
}
ensure_layout ();
if (_layout && _layout->get_text() != _text) {
if (!is_realized()) {
return;
}
ensure_layout ();
if (_layout && _layout->get_text() != _text) {
-
_layout->set_text (_text
);
+
set_text_internal (
);
/* on_size_request() will fill in _text_width/height
* so queue it even if _sizing_text != "" */
queue_resize ();
/* on_size_request() will fill in _text_width/height
* so queue it even if _sizing_text != "" */
queue_resize ();
@@
-406,7
+422,7
@@
ArdourButton::render (cairo_t* cr, cairo_rectangle_t *)
cairo_save (cr);
cairo_rotate(cr, _angle * M_PI / 180.0);
cairo_device_to_user(cr, &ww, &wh);
cairo_save (cr);
cairo_rotate(cr, _angle * M_PI / 180.0);
cairo_device_to_user(cr, &ww, &wh);
- xa =
(ww - _text_width
) * _xalign;
+ xa =
text_margin + (ww - _text_width - 2 * text_margin
) * _xalign;
ya = (wh - _text_height) * _yalign;
/* quick hack for left/bottom alignment at -90deg
ya = (wh - _text_height) * _yalign;
/* quick hack for left/bottom alignment at -90deg
@@
-547,9
+563,9
@@
ArdourButton::on_realize()
ensure_layout ();
if (_layout) {
if (_layout->get_text() != _text) {
ensure_layout ();
if (_layout) {
if (_layout->get_text() != _text) {
- _layout->set_text (_text);
+ set_text_internal ();
+ queue_resize ();
}
}
- queue_resize ();
}
}
}
}
@@
-570,7
+586,8
@@
ArdourButton::on_size_request (Gtk::Requisition* req)
if (_elements & Text) {
ensure_layout();
if (_elements & Text) {
ensure_layout();
- _layout->set_text (_text);
+ set_text_internal ();
+
/* render() needs the size of the displayed text */
_layout->get_pixel_size (_text_width, _text_height);
/* render() needs the size of the displayed text */
_layout->get_pixel_size (_text_width, _text_height);
@@
-595,7
+612,7
@@
ArdourButton::on_size_request (Gtk::Requisition* req)
req->width += sizing_text_width;
if (!_sizing_text.empty()) {
req->width += sizing_text_width;
if (!_sizing_text.empty()) {
-
_layout->set_text (_text
); /* restore display text */
+
set_text_internal (
); /* restore display text */
}
}
}
}
@@
-649,7
+666,7
@@
ArdourButton::on_size_request (Gtk::Requisition* req)
req->width = req->height;
if (req->height < req->width)
req->height = req->width;
req->width = req->height;
if (req->height < req->width)
req->height = req->width;
- } else if (_sizing_text.empty() && _text_width > 0 && !(_elements &
(Menu | Indicator)
)) {
+ } else if (_sizing_text.empty() && _text_width > 0 && !(_elements &
Menu
)) {
// properly centered text for those elements that are centered
// (no sub-pixel offset)
if ((req->width - _text_width) & 1) { ++req->width; }
// properly centered text for those elements that are centered
// (no sub-pixel offset)
if ((req->width - _text_width) & 1) { ++req->width; }
@@
-1189,7
+1206,7
@@
ArdourButton::recalc_char_pixel_geometry ()
// NB. this is not static, since the geometry is different
// depending on the font used.
int w, h;
// NB. this is not static, since the geometry is different
// depending on the font used.
int w, h;
- std::string x = _("ABCDEFGHIJLKMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789");
+ std::string x = _("
@
ABCDEFGHIJLKMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789");
_layout->set_text (x);
_layout->get_pixel_size (w, h);
_char_pixel_height = std::max(4, h);
_layout->set_text (x);
_layout->get_pixel_size (w, h);
_char_pixel_height = std::max(4, h);
@@
-1198,7
+1215,7
@@
ArdourButton::recalc_char_pixel_geometry ()
Glib::ustring gx(x);
_char_avg_pixel_width = w / (float)gx.size();
_char_pixel_width = std::max(4, (int) ceil (_char_avg_pixel_width));
Glib::ustring gx(x);
_char_avg_pixel_width = w / (float)gx.size();
_char_pixel_width = std::max(4, (int) ceil (_char_avg_pixel_width));
- _layout->set_text (_text);
+ set_text_internal (); /* restore display text */
}
void
}
void