summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/gui.c68
1 files changed, 68 insertions, 0 deletions
diff --git a/src/gui.c b/src/gui.c
index 6b444a1..cad2884 100644
--- a/src/gui.c
+++ b/src/gui.c
@@ -46,11 +46,15 @@
#include "sbitem.h"
#include "gui.h"
+#define MIN(a, b) (((a) < (b)) ? (a) : (b))
+#define MAX(a, b) (((a) > (b)) ? (a) : (b))
+
#define STAGE_WIDTH 320
#define STAGE_HEIGHT 480
#define DOCK_HEIGHT 90
#define MAX_PAGE_ITEMS 16
#define PAGE_X_OFFSET(i) ((gfloat)(i)*(gfloat)(STAGE_WIDTH))
+#define ICON_SPACING 18
#define ICON_MOVEMENT_DURATION 250
#define FOLDER_ANIM_DURATION 500
@@ -69,6 +73,7 @@ const char FOLDER_LARGE_FONT[] = "FreeSans Bold 18px";
GtkWidget *clutter_gtk_widget;
+ClutterActorBox stage_area = { 0.0, 0.0, STAGE_WIDTH, STAGE_HEIGHT };
const ClutterActorBox dock_area = { 0.0, STAGE_HEIGHT - DOCK_HEIGHT, STAGE_WIDTH, STAGE_HEIGHT };
const ClutterActorBox sb_area = { 0.0, 16.0, STAGE_WIDTH, STAGE_HEIGHT - DOCK_HEIGHT - 16.0 };
@@ -1915,11 +1920,74 @@ void gui_pages_free()
}
}
+static void gui_update_layout(device_info_t info) {
+ if (!info)
+ return;
+
+ /* calculate stage boundry */
+ stage_area.x1 = 0.0;
+ stage_area.y1 = 0.0;
+ stage_area.x2 = (info->home_screen_icon_width * MAX(info->home_screen_icon_columns, info->home_screen_icon_dock_max_count));
+ stage_area.x2 += (ICON_SPACING * MAX(info->home_screen_icon_columns, info->home_screen_icon_dock_max_count));
+ stage_area.x2 += ICON_SPACING + 2;
+
+ stage_area.y2 = (info->home_screen_icon_height * info->home_screen_icon_rows);
+ stage_area.y2 += ((ICON_SPACING*2) * info->home_screen_icon_rows);
+ stage_area.y2 += DOCK_HEIGHT;
+
+ printf("%s: stage_area x: %f, y: %f, width: %f, height: %f\n", __func__, stage_area.x1, stage_area.y1, stage_area.x2, stage_area.y2);
+
+ /* update areas */
+ dock_area.x1 = 0.0;
+ dock_area.y1 = stage_area.y2 - DOCK_HEIGHT - (ICON_SPACING / 2);
+ dock_area.x2 = stage_area.x2;
+ dock_area.y2 = stage_area.y2;
+
+ printf("%s: dock_area x: %f, y: %f, width: %f, height: %f\n", __func__, dock_area.x1, dock_area.y1, dock_area.x2, dock_area.y2);
+
+ sb_area.x1 = 0.0;
+ sb_area.y1 = ICON_SPACING;
+ sb_area.x2 = stage_area.x2;
+ sb_area.y2 = dock_area.y1;
+
+ printf("%s: sb_area x: %f, y: %f, width: %f, height: %f\n", __func__, sb_area.x1, sb_area.y1, sb_area.x2, sb_area.y2);
+
+ /* update triggers */
+ left_trigger.x1 = -ICON_SPACING - 2;
+ left_trigger.y1 = ICON_SPACING;
+ left_trigger.x2 = -(ICON_SPACING / 2);
+ left_trigger.y2 = stage_area.y2 - DOCK_HEIGHT - ICON_SPACING;
+
+ printf("%s: left_trigger x: %f, y: %f, width: %f, height: %f\n", __func__, left_trigger.x1, left_trigger.y1, left_trigger.x2, left_trigger.y2);
+
+ right_trigger.x1 = stage_area.x2 + (ICON_SPACING / 2);
+ right_trigger.y1 = ICON_SPACING;
+ right_trigger.x2 = stage_area.x2 + (ICON_SPACING*2);
+ right_trigger.y2 = stage_area.y2 - DOCK_HEIGHT - ICON_SPACING;
+
+ printf("%s: right_trigger x: %f, y: %f, width: %f, height: %f\n", __func__, right_trigger.x1, right_trigger.y1, right_trigger.x2, right_trigger.y2);
+
+ /* update widget to new layout */
+ gtk_widget_set_size_request(clutter_gtk_widget, stage_area.x2, stage_area.y2);
+ clutter_actor_set_position(the_dock, dock_area.x1, dock_area.y1);
+ clutter_actor_set_position(page_indicator_group, 0, stage_area.y2 - DOCK_HEIGHT - ICON_SPACING);
+ clutter_actor_set_position(the_sb, sb_area.x1, sb_area.y1);
+ clutter_actor_set_position(battery_level, stage_area.x2 - 22, 6);
+ clutter_actor_set_position(spinner, (stage_area.x2 - 32.0) / 2, (stage_area.y2 - 64.0) / 2);
+ clutter_actor_set_size(fade_rectangle, stage_area.x2, stage_area.y2);
+
+#ifdef HAVE_LIBIMOBILEDEVICE_1_1
+ clutter_actor_set_size(wallpaper, stage_area.x2, stage_area.y2);
+#endif
+}
+
static gboolean device_info_cb(gpointer user_data)
{
GError *error = NULL;
const char *uuid = (const char*)user_data;
if (device_get_info(uuid, &device_info, &error)) {
+ /* Update layout */
+ gui_update_layout(device_info);
/* Update device info */
clutter_threads_add_idle((GSourceFunc)update_device_info_cb, device_info);
/* Update battery information */