2 Copyright 2009 by Hans Baier
12 public class MiniDisplay
: PanelDisplayBase
{
13 private Jack
.Client? make_vala_include_jack_h_workaround
;
15 private DisplayState display_state
= DisplayState
.TIME
;
30 public enum DisplayState
{
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 ();
48 set_size_request (width
, height
);
52 protected override bool draw_contents (Cairo
.Context cr
, Gdk
.EventExpose event
) {
54 double font_size
= 12;
56 double y
= font_size
- padding
+ 1.0;
57 Cairo
.TextExtents ext
= Cairo
.TextExtents();
60 set_font (cr
, font_size
);
67 string xruns_str
= "X-Runs: %u".printf (xruns
);
68 text (cr
, xruns_str
, padding
+ x
, y
, font_size
, "#ff0000");
71 cr
.text_extents (rt
, out ext
);
73 text (cr
, rt
, padding
, y
, font_size
);
77 realtime_y
= y
- ext
.height
;
78 realtime_w
= ext
.x_advance
+ ext
.x_bearing
;
79 realtime_h
= ext
.height
;
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
);
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:
109 text (cr, time, padding + x, y, font_size);
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);
117 assert_not_reached ();
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) {
133 if (event
.type
== EventType
.BUTTON_PRESS
&& event
.button
== 1) {
134 short disp_state
= (short)display_state
;
135 if (off
) return false;
137 reset_xruns_requested ();
140 return handle_events_for_active_items (event
);
151 } //namespace Jackpanel