]> git.cworth.org Git - akamaru/commitdiff
Improve initial icon placement.
authorKristian Høgsberg <krh@redhat.com>
Sun, 11 Jun 2006 22:38:02 +0000 (18:38 -0400)
committerKristian Høgsberg <krh@redhat.com>
Sun, 11 Jun 2006 22:38:02 +0000 (18:38 -0400)
dock.c

diff --git a/dock.c b/dock.c
index 37707a98fcb243eb81014b40af25ab76ff4622a6..782d5d2b9b43cd8aa0c887c9d8854225ca5b0ad5 100644 (file)
--- a/dock.c
+++ b/dock.c
@@ -32,8 +32,8 @@ timeout_callback (gpointer data)
 
   for (i = 0; i < closure->num_icons; i++) {
     gdk_window_move (closure->windows[i],
 
   for (i = 0; i < closure->num_icons; i++) {
     gdk_window_move (closure->windows[i],
-                    closure->model.objects[i + 1].position.x,
-                    closure->model.objects[i + 1].position.y);
+                    closure->model.objects[i + 1].position.x + 0.5,
+                    closure->model.objects[i + 1].position.y + 0.5);
   }
 
   model_step (&closure->model, 0.1);
   }
 
   model_step (&closure->model, 0.1);
@@ -77,7 +77,8 @@ model_init_dock (Model *model, int num_items, int x, int y, int spacing)
   const int num_objects = num_items + 1;
   const int num_spacers = (num_objects - 1) * (num_objects - 2) / 2;
   const int num_springs = num_objects - 1;
   const int num_objects = num_items + 1;
   const int num_spacers = (num_objects - 1) * (num_objects - 2) / 2;
   const int num_springs = num_objects - 1;
-  int i, j;
+  const int spread = spacing + 20;
+  int i, j, left_edge;
   Object *object;
   Spring *spring;
   Spacer *spacer;
   Object *object;
   Spring *spring;
   Spacer *spacer;
@@ -101,14 +102,15 @@ model_init_dock (Model *model, int num_items, int x, int y, int spacing)
   model->anchors[0].y = y;
   model->anchors[0].object = &model->objects[0];
 
   model->anchors[0].y = y;
   model->anchors[0].object = &model->objects[0];
 
-  object_init (&model->objects[0], x, y, 20);
+  object_init (&model->objects[0], x, y, 0);
 
   object = &model->objects[1];
   spring = model->springs;
   spacer = model->spacers;
 
   object = &model->objects[1];
   spring = model->springs;
   spacer = model->spacers;
+  left_edge = (1024 - (num_items - 1) * spread) / 2;
 
   for (i = 1; i < num_objects; i++, object++) {
 
   for (i = 1; i < num_objects; i++, object++) {
-    object_init (&model->objects[i], 200 + i * spacing / 2, 300, 3);
+    object_init (&model->objects[i], left_edge + (i - 1) * spread, y - 100, 1);
     spring_init (spring++, &model->objects[0], object, spacing);
     for (j = 1; j < num_objects - i; j++) {
       spacer_init (spacer++, object, object + j, spacing);
     spring_init (spring++, &model->objects[0], object, spacing);
     for (j = 1; j < num_objects - i; j++) {
       spacer_init (spacer++, object, object + j, spacing);
@@ -145,8 +147,8 @@ window_event (GdkXEvent *xevent, GdkEvent *event, gpointer data)
 
   case MotionNotify:
     gdk_window_get_pointer (gdk_get_default_root_window(), &x, &y, &state);
 
   case MotionNotify:
     gdk_window_get_pointer (gdk_get_default_root_window(), &x, &y, &state);
-    closure->model.mouse_anchor.x = x + 0.5 - closure->drag_offset_x;
-    closure->model.mouse_anchor.y = y + 0.5 - closure->drag_offset_y;
+    closure->model.mouse_anchor.x = x - closure->drag_offset_x;
+    closure->model.mouse_anchor.y = y - closure->drag_offset_y;
     if (closure->model.mouse_anchor.y > closure->anchor_y)
       closure->model.mouse_anchor.y = closure->anchor_y;
     break;
     if (closure->model.mouse_anchor.y > closure->anchor_y)
       closure->model.mouse_anchor.y = closure->anchor_y;
     break;
@@ -191,13 +193,17 @@ int main (int argc, char *argv[])
     closure.spacing = spacing;
     closure.num_icons = num_icons;
     closure.windows = g_new (GdkWindow *, num_icons);
     closure.spacing = spacing;
     closure.num_icons = num_icons;
     closure.windows = g_new (GdkWindow *, num_icons);
+
+    model_init_dock (&closure.model, num_icons,
+                    closure.anchor_x, closure.anchor_y, spacing);
+
     for (i = 0; i < num_icons; i++) {
 
       handle = rsvg_handle_new_from_file (icons[i], NULL);
       rsvg_handle_get_dimensions (handle, &dimension);
 
     for (i = 0; i < num_icons; i++) {
 
       handle = rsvg_handle_new_from_file (icons[i], NULL);
       rsvg_handle_get_dimensions (handle, &dimension);
 
-      x = (screen_width - spacing * num_icons) / 2 + i * spacing;
-      y = closure.anchor_y;
+      x = closure.model.objects[i + 1].position.x;
+      y = closure.model.objects[i + 1].position.y;
       width = dimension.width;
       height = dimension.height;
       closure.windows[i] = create_window (screen, x, y, width, height);
       width = dimension.width;
       height = dimension.height;
       closure.windows[i] = create_window (screen, x, y, width, height);
@@ -215,8 +221,6 @@ int main (int argc, char *argv[])
       gdk_window_add_filter (closure.windows[i], window_event, &closure);
     }
 
       gdk_window_add_filter (closure.windows[i], window_event, &closure);
     }
 
-    model_init_dock (&closure.model, num_icons,
-                    closure.anchor_x, closure.anchor_y, spacing);
     g_timeout_add (20, timeout_callback, &closure);
 
     gtk_main ();
     g_timeout_add (20, timeout_callback, &closure);
 
     gtk_main ();