static void gtk_gps_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
static void gtk_gps_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
static void gtk_gps_paint_by_mode(GtkGps *gps);
+static gboolean gtk_gps_refresh_cb(GtkWidget *widget);
G_DEFINE_TYPE(GtkGps, gtk_gps, GTK_TYPE_WIDGET);
gps->width=300;
gps->height=300;
gps->size=300;
+gps->esid=0;
}
static gboolean
break;
}
}
-gtk_gps_paint_by_mode(gps);
+gtk_widget_queue_draw_area(widget, 0, 0, gps->width, gps->height);
return FALSE;
}
gps->display_mode=display_mode;
gps->data=data;
widget=GTK_WIDGET(gps);
-g_signal_connect(G_OBJECT(widget), "button_press_event", G_CALLBACK(gtk_gps_cb_button_press), NULL);
+
+/* Allow switching if mode is combined */
+if (display_mode==GTK_GPS_MODE_COMBINED) {
+ g_signal_connect(G_OBJECT(widget), "button_press_event", G_CALLBACK(gtk_gps_cb_button_press), NULL);
+ display_mode=GTK_GPS_MODE_SKY;
+}
gps->context=gtk_widget_get_pango_context(widget);
gps->layout=pango_layout_new(gps->context);
pango_layout_set_font_description(gps->layout, gps->fontdesc);
pango_layout_set_alignment(gps->layout, PANGO_ALIGN_CENTER);
+gps->esid=g_timeout_add(1000,(GSourceFunc)gtk_gps_refresh_cb, gps);
+
return GTK_WIDGET(gps);
}
g_return_if_fail(GTK_IS_GPS(object));
gps=GTK_GPS(object);
+g_source_remove(gps->esid);
if (GTK_WIDGET(object)->parent && GTK_WIDGET_MAPPED(object)) {
gtk_widget_unmap(GTK_WIDGET(object));
}
gps = GTK_GPS (widget);
requisition->width=300;
-requisition->height=300;
gps->width=300;
-gps->height=300;
+
+if (gps->display_mode==GTK_GPS_MODE_SKY) {
+ requisition->height=400;
+ gps->height=400;
+} else {
+ requisition->height=200;
+ gps->height=200;
+}
gps->size=300;
}
gdk_window_set_user_data(widget->window, widget);
gtk_style_set_background(widget->style, widget->window, GTK_STATE_ACTIVE);
+/* No fix */
if (!gps->gc_s) {
color.red=0;
color.green=0;
- color.blue=0;
+ color.blue=0x1000;
gps->gc_s=gdk_gc_new(widget->window);
gdk_gc_set_rgb_fg_color(gps->gc_s, &color);
}
+/* Fix color */
if (!gps->gc_sf) {
color.red=0;
- color.green=0xffff;
+ color.green=0xdfff;
color.blue=0;
gps->gc_sf=gdk_gc_new(widget->window);
gdk_gc_set_rgb_fg_color(gps->gc_sf, &color);
/* Bootom margin - 12% */
bymargin = gps->height * 0.88f;
-gtk_paint_flat_box (widget->style,
- widget->window,
- GTK_STATE_NORMAL, GTK_SHADOW_NONE,
- NULL, widget, "trough", 0, 0,
- gps->width, gps->height);
-
/* Bottom line */
gdk_draw_line(widget->window,
widget->style->fg_gc[GTK_WIDGET_STATE(widget)],
xoffset + 5, yoffset + bymargin - 1,
xoffset + gps->width - 10 - 2, yoffset + bymargin - 1);
-if (gps->data->satinview > 0) {
- /* Left margin - 5pix, Right margin - 5pix */
- step = (gps->width - 10) / gps->data->satinview;
-
- for (i = 0; i < gps->data->satinview; i++) {
- /* Sat used or not */
- gc=(gps->data->sat[i].fix) ? gps->gc_sf : gps->gc_s;
-
- x = 5 + i * step;
- snr_height = gps->data->sat[i].snr * gps->height * 0.78f / 100;
- y = gps->height * 0.1f + (gps->height * 0.78f - snr_height);
-
- /* draw sat rectangle... */
- gdk_draw_rectangle(widget->window,
- gc, TRUE,
- xoffset + x,
- yoffset + y, step - 2, snr_height);
-
- if (gps->data->sat[i].snr > 0) {
- /* ...snr.. */
- g_snprintf(tmp, 32, "%02d", gps->data->sat[i].snr);
- pango_layout_set_text(gps->layout, tmp, 2);
- pango_layout_get_pixel_size(gps->layout, &x1, &y1);
- gdk_draw_layout(widget->window,
- widget->style->fg_gc[GTK_STATE_NORMAL],
- xoffset + x + ((step - 2) - x1) / 2,
- yoffset + y - 15,
- gps->layout);
- }
-
- /* ...and sat number */
- g_snprintf(tmp, 32, "%02d", gps->data->sat[i].prn);
+if (gps->data->satinview==0)
+ return;
+
+/* Left margin - 5pix, Right margin - 5pix */
+step = (gps->width - 10) / gps->data->satinview;
+
+for (i=0;i<gps->data->satinview;i++) {
+ /* Sat used or not */
+ gc=(gps->data->sat[i].fix) ? gps->gc_sf : gps->gc_s;
+
+ x = 5 + i * step;
+ snr_height = gps->data->sat[i].snr * gps->height * 0.78f / 100;
+ y = gps->height * 0.1f + (gps->height * 0.78f - snr_height);
+
+ /* draw sat rectangle... */
+ gdk_draw_rectangle(widget->window,
+ gc, TRUE,
+ xoffset + x,
+ yoffset + y, step - 2, snr_height);
+
+ if (gps->data->sat[i].snr>0) {
+ /* ...snr.. */
+ g_snprintf(tmp, 32, "%02d", gps->data->sat[i].snr);
pango_layout_set_text(gps->layout, tmp, 2);
pango_layout_get_pixel_size(gps->layout, &x1, &y1);
gdk_draw_layout(widget->window,
widget->style->fg_gc[GTK_STATE_NORMAL],
xoffset + x + ((step - 2) - x1) / 2,
- yoffset + bymargin + 1,
+ yoffset + y - 15,
gps->layout);
}
+
+ /* ...and sat number */
+ g_snprintf(tmp, 32, "%02d", gps->data->sat[i].prn);
+ pango_layout_set_text(gps->layout, tmp, 2);
+ pango_layout_get_pixel_size(gps->layout, &x1, &y1);
+ gdk_draw_layout(widget->window,
+ widget->style->fg_gc[GTK_STATE_NORMAL],
+ xoffset + x + ((step - 2) - x1) / 2,
+ yoffset + bymargin + 1,
+ gps->layout);
}
-return;
}
static void
}
}
+static gboolean
+gtk_gps_refresh_cb(GtkWidget *widget)
+{
+GtkGps *gps;
+
+g_return_val_if_fail(GTK_IS_GPS(widget), FALSE);
+
+if ((GTK_WIDGET_MAPPED(widget)==FALSE) || (GTK_WIDGET_VISIBLE(widget)==FALSE))
+ return TRUE;
+
+gps=GTK_GPS(widget);
+gtk_widget_queue_draw_area(widget, 0, 0, gps->width, gps->height);
+return TRUE;
+}
+
static gboolean
gtk_gps_expose(GtkWidget *widget, GdkEventExpose *event)
{