remove debianization from main repo
[jackpanel.git] / jackpanel / MiniDisplay.vala
blobe13ebc1155655cec3e87e2ed5fb641ecb281c5ff
1 /*
2 Copyright 2009 by Hans Baier
3 License: GPLv2+
4 */
6 using Gtk;
7 using Gdk;
8 using Prolooks;
10 namespace Jackpanel {
12 public class MiniDisplay : PanelDisplayBase {
13 private Jack.Client? make_vala_include_jack_h_workaround;
15 private DisplayState display_state = DisplayState.TIME;
17 private bool _off;
18 public bool off {
19 get {
20 return _off;
22 set {
23 if (value != _off) {
24 _off = value;
25 queue_draw ();
30 public enum DisplayState {
31 TIME = 0,
32 TIME_ALT,
33 ENUM_END
36 protected override void redraw_time () {
37 if (display_state == DisplayState.TIME) queue_draw ();
40 protected override void redraw_time_alt () {
41 if (display_state == DisplayState.TIME_ALT) queue_draw ();
44 construct {
45 _width = 128;
46 _height = 25;
47 time = "00:00:00";
48 set_size_request (width, height);
49 off = true;
52 protected override bool draw_contents (Cairo.Context cr, Gdk.EventExpose event) {
53 double padding = 3;
54 double font_size = 12;
55 double x = 0;
56 double y = font_size - padding + 1.0;
57 Cairo.TextExtents ext = Cairo.TextExtents();
59 // Realtime
60 set_font (cr, font_size);
62 if (off) {
63 return true;
66 if (xruns > 0) {
67 string xruns_str = "X-Runs: %u".printf (xruns);
68 text (cr, xruns_str, padding + x, y, font_size, "#ff0000");
69 } else {
70 string rt = "RT";
71 cr.text_extents (rt, out ext);
72 if (realtime) {
73 text (cr, rt, padding, y, font_size);
76 realtime_x = 0.0;
77 realtime_y = y - ext.height;
78 realtime_w = ext.x_advance + ext.x_bearing;
79 realtime_h = ext.height;
81 // buffer size
82 string buffer_size_str = "%2.1fms".printf (buffer_size * 1000.0 / (double)sample_rate);
84 cr.text_extents (buffer_size_str, out ext);
85 var y_popup_triangle = y - ext.height + 2.0;
87 buffer_size_x = realtime_x + realtime_w + 2 * padding;
88 buffer_size_y = y_popup_triangle;
89 buffer_size_w = ext.x_advance + ext.x_bearing + popup_triangle_width ();
90 buffer_size_h = ext.height;
91 text (cr, buffer_size_str, buffer_size_x, y, font_size);
92 draw_popup_triangle (cr, buffer_size_x + ext.x_advance + ext.x_bearing + 1.0, y_popup_triangle);
94 // sample_rate
95 cr.text_extents (sample_rate_abbrev, out ext);
97 sample_rate_x = buffer_size_x + buffer_size_w + padding + padding;
98 sample_rate_y = y_popup_triangle;
99 sample_rate_w = ext.x_advance + ext.x_bearing + popup_triangle_width ();
100 sample_rate_h = ext.height;
101 text (cr, sample_rate_abbrev, sample_rate_x, y, font_size);
102 draw_popup_triangle (cr, sample_rate_x + ext.x_advance + ext.x_bearing + 1.0, y_popup_triangle);
106 switch (display_state) {
107 case DisplayState.TIME:
108 // show time text
109 text (cr, time, padding + x, y, font_size);
110 break;
111 case DisplayState.TIME_ALT: {
112 var adjusted_x = (time_alt.contains ("|")) ? x - 3.0 : x;
113 text (cr, time_alt, adjusted_x, y, font_size);
115 break;
116 default:
117 assert_not_reached ();
118 break;
122 return true;
125 public signal void double_click ();
127 public override bool button_press_event (Gdk.EventButton event) {
128 if (event.type == EventType.2BUTTON_PRESS && event.button == 1) {
129 double_click ();
130 return true;
133 if (event.type == EventType.BUTTON_PRESS && event.button == 1) {
134 short disp_state = (short)display_state;
135 if (off) return false;
136 if (xruns > 0) {
137 reset_xruns_requested ();
138 xruns = 0;
139 } else {
140 return handle_events_for_active_items (event);
143 return true;
146 return false;
151 } //namespace Jackpanel