summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorGravatar Martin Szulecki2010-12-19 20:58:06 +0100
committerGravatar Martin Szulecki2010-12-19 21:23:46 +0100
commita11e202426f2567f24242ee01b97d03739aa2701 (patch)
tree96c31817925f849bee12b175af4937c81607c6b0 /src
parentbe7d919f541b4c2a0ab1f6aae6b3e4733f7b4fde (diff)
downloadsbmanager-a11e202426f2567f24242ee01b97d03739aa2701.tar.gz
sbmanager-a11e202426f2567f24242ee01b97d03739aa2701.tar.bz2
Update the screen layout after updating device information
After reading the device specific settings like number of columns and rows of icons, we need to adjust the screen layout aswell.
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 */