/* border */
static int draw_borders;
+static int draw_graph_borders;
static int stippled_borders;
static int draw_shades, draw_outline;
OBJ_bmpx_uri,
OBJ_bmpx_bitrate,
#endif
+#ifdef INFOPIPE
+ OBJ_infopipe_protocol,
+ OBJ_infopipe_version,
+ OBJ_infopipe_status,
+ OBJ_infopipe_playlist_tunes,
+ OBJ_infopipe_playlist_currtune,
+ OBJ_infopipe_usec_position,
+ OBJ_infopipe_position,
+ OBJ_infopipe_usec_time,
+ OBJ_infopipe_time,
+ OBJ_infopipe_bitrate,
+ OBJ_infopipe_frequency,
+ OBJ_infopipe_channels,
+ OBJ_infopipe_title,
+ OBJ_infopipe_file,
+ OBJ_infopipe_bar,
+#endif
#ifdef TCP_PORT_MONITOR
OBJ_tcp_portmon,
#endif
OBJ(bmpx_bitrate, INFO_BMPX)
END
#endif
+#ifdef INFOPIPE
+ OBJ(infopipe_protocol, INFO_INFOPIPE) END
+ OBJ(infopipe_version, INFO_INFOPIPE) END
+ OBJ(infopipe_status, INFO_INFOPIPE) END
+ OBJ(infopipe_playlist_tunes, INFO_INFOPIPE) END
+ OBJ(infopipe_playlist_currtune, INFO_INFOPIPE) END
+ OBJ(infopipe_usec_position, INFO_INFOPIPE) END
+ OBJ(infopipe_position, INFO_INFOPIPE) END
+ OBJ(infopipe_usec_time, INFO_INFOPIPE) END
+ OBJ(infopipe_time, INFO_INFOPIPE) END
+ OBJ(infopipe_bitrate, INFO_INFOPIPE) END
+ OBJ(infopipe_frequency, INFO_INFOPIPE) END
+ OBJ(infopipe_channels, INFO_INFOPIPE) END
+ OBJ(infopipe_title, INFO_INFOPIPE) END
+ OBJ(infopipe_file, INFO_INFOPIPE) END
+ OBJ(infopipe_bar, INFO_INFOPIPE)
+ (void) scan_bar(arg, &obj->a, &obj->b);
+ END
+#endif
#ifdef TCP_PORT_MONITOR
OBJ(tcp_portmon, INFO_TCP_PORT_MONITOR)
int argc, port_begin, port_end, item, connection_index;
snprintf(p, p_max_size, "%i", cur->bmpx.bitrate);
}
#endif
+#ifdef INFOPIPE
+ OBJ(infopipe_protocol) {
+ snprintf(p, p_max_size, "%s", cur->infopipe.items[INFOPIPE_PROTOCOL]);
+ }
+ OBJ(infopipe_version) {
+ snprintf(p, p_max_size, "%s", cur->infopipe.items[INFOPIPE_VERSION]);
+ }
+ OBJ(infopipe_status) {
+ snprintf(p, p_max_size, "%s", cur->infopipe.items[INFOPIPE_STATUS]);
+ }
+ OBJ(infopipe_playlist_tunes) {
+ snprintf(p, p_max_size, "%s", cur->infopipe.items[INFOPIPE_PLAYLIST_TUNES]);
+ }
+ OBJ(infopipe_playlist_currtune) {
+ snprintf(p, p_max_size, "%s", cur->infopipe.items[INFOPIPE_PLAYLIST_CURRTUNE]);
+ }
+ OBJ(infopipe_usec_position) {
+ snprintf(p, p_max_size, "%s", cur->infopipe.items[INFOPIPE_USEC_POSITION]);
+ }
+ OBJ(infopipe_position) {
+ snprintf(p, p_max_size, "%s", cur->infopipe.items[INFOPIPE_POSITION]);
+ }
+ OBJ(infopipe_usec_time) {
+ snprintf(p, p_max_size, "%s", cur->infopipe.items[INFOPIPE_USEC_TIME]);
+ }
+ OBJ(infopipe_time) {
+ snprintf(p, p_max_size, "%s", cur->infopipe.items[INFOPIPE_TIME]);
+ }
+ OBJ(infopipe_bitrate) {
+ snprintf(p, p_max_size, "%s", cur->infopipe.items[INFOPIPE_BITRATE]);
+ }
+ OBJ(infopipe_frequency) {
+ snprintf(p, p_max_size, "%s", cur->infopipe.items[INFOPIPE_FREQUENCY]);
+ }
+ OBJ(infopipe_channels) {
+ snprintf(p, p_max_size, "%s", cur->infopipe.items[INFOPIPE_CHANNELS]);
+ }
+ OBJ(infopipe_title) {
+ snprintf(p, p_max_size, "%s", cur->infopipe.items[INFOPIPE_TITLE]);
+ }
+ OBJ(infopipe_file) {
+ snprintf(p, p_max_size, "%s", cur->infopipe.items[INFOPIPE_FILE]);
+ }
+ OBJ(infopipe_bar) {
+ double progress;
+ progress= atof(cur->infopipe.items[INFOPIPE_USEC_POSITION]) /
+ atof(cur->infopipe.items[INFOPIPE_USEC_TIME]);
+ new_bar(p,obj->a,obj->b,(int)(progress*255.0f));
+ }
+#endif
OBJ(top) {
if (obj->data.top.type == TOP_NAME
&& obj->data.top.num >= 0
w = text_start_x + text_width - cur_x - 1;
if (w < 0)
w = 0;
- XSetLineAttributes(display,
- window.gc, 1,
- LineSolid,
- CapButt,
- JoinMiter);
- XDrawRectangle(display,
- window.drawable,
- window.gc, cur_x,
- by, w, h);
+ if (draw_graph_borders) {
+ XSetLineAttributes(display, window.gc, 1, LineSolid, CapButt, JoinMiter);
+ XDrawRectangle(display,window.drawable, window.gc, cur_x, by, w, h);
+ }
XSetLineAttributes(display,
window.gc, 1,
LineSolid,
default_fg_color = WhitePixel(display, screen);
default_bg_color = BlackPixel(display, screen);
default_out_color = BlackPixel(display, screen);
- draw_borders = 0;
draw_shades = 1;
+ draw_borders = 0;
+ draw_graph_borders = 1;
draw_outline = 0;
set_first_font("6x10");
gap_x = 5;
CONF("draw_borders") {
draw_borders = string_to_bool(value);
}
+ CONF("draw_graph_borders") {
+ draw_graph_borders = string_to_bool(value);
+ }
CONF("draw_shades") {
draw_shades = string_to_bool(value);
}
ERR("error setting signal handler: %s", strerror(errno) );
}
+#ifdef INFOPIPE
+ /* joinable thread for infopipe activity */
+ pthread_attr_init(&info.infopipe.thread_attr);
+ pthread_attr_setdetachstate(&info.infopipe.thread_attr, PTHREAD_CREATE_JOINABLE);
+ /* init mutexex */
+ pthread_mutex_init(&info.infopipe.item_mutex, NULL);
+ pthread_mutex_init(&info.infopipe.runnable_mutex, NULL);
+ /* init runnable condition for worker thread */
+ pthread_mutex_lock(&info.infopipe.runnable_mutex);
+ info.infopipe.runnable=1;
+ pthread_mutex_unlock(&info.infopipe.runnable_mutex);
+ if (pthread_create(&info.infopipe.thread, &info.infopipe.thread_attr, infopipe_thread_func, NULL))
+ {
+ CRIT_ERR("unable to create infopipe thread!");
+ }
+#endif
+
main_loop();
+
+#ifdef INFOPIPE
+ /* signal infopipe worker thread to terminate */
+ pthread_mutex_lock(&info.infopipe.runnable_mutex);
+ info.infopipe.runnable=0;
+ pthread_mutex_unlock(&info.infopipe.runnable_mutex);
+ /* destroy thread attribute and wait for thread */
+ pthread_attr_destroy(&info.infopipe.thread_attr);
+ if (pthread_join(info.infopipe.thread, NULL))
+ {
+ ERR("error joining infopipe thread");
+ }
+ /* destroy mutexes */
+ pthread_mutex_destroy(&info.infopipe.item_mutex);
+ pthread_mutex_destroy(&info.infopipe.runnable_mutex);
+#endif
return 0;
}