summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKristian Høgsberg <krh@redhat.com>2007-09-26 18:46:55 -0400
committerKristian Høgsberg <krh@redhat.com>2007-09-26 18:46:55 -0400
commitd6711cb7718bb79ba81ce617386d1c2fb4049fdb (patch)
tree4d65df421e125d7923ec6f4d9305e46871a078f6
parentf7170206654348e7b1f6dfd7588d7de4ef4d5c91 (diff)
Add a "big board" model and tweak the constants a bit.
-rw-r--r--main.c54
1 files changed, 49 insertions, 5 deletions
diff --git a/main.c b/main.c
index 8d41fdb..eb02bb4 100644
--- a/main.c
+++ b/main.c
@@ -261,6 +261,37 @@ model_init_dock (Model *model)
}
static void
+model_init_big_board (Model *model)
+{
+ const int num_objects = 8;
+ const int distance = 30;
+ DockInitClosure closure;
+ int i;
+
+ model_init (model);
+ model_init_constants (model);
+
+ model->elasticity = 0.4;
+ model->friction = 30;
+ model->gravity.x = 0;
+ model->gravity.y = 40;
+ model->k = 2;
+ model->constrain_iterations = 10;
+
+ model_add_enclosing_rectangle (model, 10, 10, 700, 500);
+
+ closure.anchor = NULL;
+
+ closure.model = model;
+ closure.distance = distance;
+ for (i = 0; i < num_objects; i++) {
+ closure.current =
+ model_add_object (model, 200, 40 + i * 4 * distance / 3, 2, NULL);
+ model_for_each_object (model, dock_add_spacer, &closure);
+ }
+}
+
+static void
draw_stick (Stick *stick, void *data)
{
cairo_t *cr = data;
@@ -332,9 +363,19 @@ draw_object (Object *object, void *data)
{
cairo_t *cr = data;
+#if 0
cairo_arc (cr, object->position.x, object->position.y,
3, 0, 2 * M_PI);
cairo_fill (cr);
+#else
+ int margin = 10;
+
+ cairo_move_to(cr, object->position.x - margin, object->position.y - margin);
+ cairo_line_to(cr, object->position.x + margin, object->position.y - margin);
+ cairo_line_to(cr, object->position.x + margin, object->position.y + margin);
+ cairo_line_to(cr, object->position.x - margin, object->position.y + margin);
+ cairo_fill (cr);
+#endif
}
typedef struct _Closure Closure;
@@ -493,7 +534,8 @@ create_model_store (void)
{ "Grid", model_init_grid },
{ "Molecule", model_init_molecule },
{ "Wobbly", model_init_wobbly },
- { "Dock", model_init_dock }
+ { "Dock", model_init_dock },
+ { "Big Board", model_init_big_board }
};
GtkTreeIter iter;
@@ -618,11 +660,13 @@ static gint
timeout_callback (gpointer data)
{
Closure *closure = data;
-
- model_step (closure->model, 0.2);
+ int i;
+
+ for (i = 0; i < 10; i++)
+ model_step (closure->model, 0.005);
closure->i++;
- if (closure->i == 1) {
+ if (closure->i == 3) {
gtk_widget_queue_draw (closure->drawing_area);
closure->i = 0;
closure->frame_count++;
@@ -669,7 +713,7 @@ main (int argc, char *argv[])
closure.mouse_anchor = NULL;
closure.frame_count = 0;
gettimeofday (&closure.start, NULL);
- g_timeout_add (40, timeout_callback, &closure);
+ g_timeout_add (20, timeout_callback, &closure);
gtk_widget_show_all (gtk_widget_get_toplevel (closure.drawing_area));
gtk_main ();