#include <hildon/hildon-window.h>
#include <stdlib.h>
#include <gtk/gtk.h>
+#include <libosso.h>
#include "callbacks.h"
#include "appdata.h"
#include "ui.h"
#include "util.h"
-int main(int argc, char** argv) {
+#define PROGNAME "org.wellu.speedometer"
- AppData *appdata = g_new0(AppData, 1);
+static AppData *appdata;
- gtk_init(&argc, &argv);
+/* Requests delay from screen blanking
+ * Should be called at least once in every 60 seconds
+ * we're not bothered about errors here as dbus calls
+ * either succeed or not. Worst case would be dimmed
+ * screen anyway.
+ */
+static gboolean delay_display_blanking(gpointer data) {
+ g_print("Requesting not to blank the screen in the next 60 secs.\n");
+ osso_display_blanking_pause(data);
+ return TRUE;
+}
+void init_app() {
+ appdata = g_new0(AppData, 1);
appdata->program = HILDON_PROGRAM(hildon_program_get_instance());
appdata->window = HILDON_WINDOW(hildon_window_new());
hildon_program_add_window(appdata->program, appdata->window);
+ appdata->osso_ctx = osso_initialize(PROGNAME, "1.0", FALSE, NULL);
+
+ delay_display_blanking(appdata->osso_ctx);
+ g_timeout_add(55000, (GSourceFunc) delay_display_blanking, appdata->osso_ctx);
+}
+
+void deinit_app() {
+ osso_deinitialize(appdata->osso_ctx);
+ stop_gps(appdata);
+}
+
+int main(int argc, char** argv) {
+ gtk_init(&argc, &argv);
+
+ init_app();
+
// loads images from the disk to the image array
load_graphix(appdata);
// set display to 000
- load_initial_pixbufs(appdata);
+ set_digits_to_zero(appdata);
- // create ui structure
+ // inits the ui placement
create_ui(appdata);
- // set the window fullscreen
- gtk_window_fullscreen(GTK_WINDOW(appdata->window));
-
- gtk_widget_show_all(GTK_WIDGET(appdata->window));
-
g_thread_init(NULL);
show_cardware_dialog();
- //g_idle_add(randomize, appdata);
-
start_gps(appdata);
gtk_main();
+ // here we cleanup things
+ deinit_app();
+
return EXIT_SUCCESS;
}
#include "ui.h"
#include "callbacks.h"
+static GtkWidget* graphix[10]; // contains all the graphics
+static GtkWidget* big_digits[3]; // big digits that are shown as speed
+static GtkWidget* small_digits[2]; // small digits that are shown on the screen
+
#define IMAGE_PATH "/usr/share/speedometer/%d.png"
static void set_widget_bg_black(GtkWidget* widget) {
while(i < 10) {
char* path = g_malloc(30);
g_sprintf(path, IMAGE_PATH, i);
- appdata->graphix[i] = gtk_image_new_from_file(path);
+ graphix[i] = gtk_image_new_from_file(path);
g_print(path);
g_print("\n");
g_free(path);
}
}
-void load_initial_pixbufs(AppData* appdata) {
+void set_digits_to_zero(AppData* appdata) {
g_assert(appdata);
- GdkPixbuf* zero = gtk_image_get_pixbuf(GTK_IMAGE(appdata->graphix[0]));
+ GdkPixbuf* zero = gtk_image_get_pixbuf(GTK_IMAGE(graphix[0]));
- appdata->big_digits[0] = GTK_WIDGET(gtk_image_new_from_pixbuf(zero));
- appdata->big_digits[1] = GTK_WIDGET(gtk_image_new_from_pixbuf(zero));
- appdata->big_digits[2] = GTK_WIDGET(gtk_image_new_from_pixbuf(zero));
+ big_digits[0] = GTK_WIDGET(gtk_image_new_from_pixbuf(zero));
+ big_digits[1] = GTK_WIDGET(gtk_image_new_from_pixbuf(zero));
+ big_digits[2] = GTK_WIDGET(gtk_image_new_from_pixbuf(zero));
}
void set_nth_digit(AppData* appdata, guint n, guint value) {
- g_assert(appdata);
+
g_assert(value < 10);
g_assert(n < 3);
- GtkWidget* image = appdata->big_digits[n];
- GdkPixbuf* buf = gtk_image_get_pixbuf(GTK_IMAGE(appdata->graphix[value]));
+ GtkWidget* image = big_digits[n];
+ GdkPixbuf* buf = gtk_image_get_pixbuf(GTK_IMAGE(graphix[value]));
gtk_image_set_from_pixbuf(GTK_IMAGE(image), buf);
}
void repaint_all_digits(AppData* appdata) {
- g_assert(appdata);
- gtk_widget_queue_draw(GTK_WIDGET(appdata->big_digits[0]));
- gtk_widget_queue_draw(GTK_WIDGET(appdata->big_digits[1]));
- gtk_widget_queue_draw(GTK_WIDGET(appdata->big_digits[2]));
+
+ gtk_widget_queue_draw(GTK_WIDGET(big_digits[0]));
+ gtk_widget_queue_draw(GTK_WIDGET(big_digits[1]));
+ gtk_widget_queue_draw(GTK_WIDGET(big_digits[2]));
}
void create_ui(AppData* appdata) {
appdata->window);
// add three digits to the hbox
- gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(appdata->big_digits[0]), FALSE, FALSE, 0);
- gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(appdata->big_digits[1]), FALSE, FALSE, 0);
- gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(appdata->big_digits[2]), FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(big_digits[0]), FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(big_digits[1]), FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(big_digits[2]), FALSE, FALSE, 0);
gtk_box_pack_start_defaults(GTK_BOX(vbox), top_e); // add event box on top
gtk_box_pack_start_defaults(GTK_BOX(vbox), hbox); // numbers to the middle
set_widget_bg_black(bottom_e);
set_widget_bg_black(top_e);
+ gtk_window_fullscreen(GTK_WINDOW(appdata->window));
+ gtk_widget_show_all(GTK_WIDGET(appdata->window));
}