diff options
author | Kristian Høgsberg <krh@redhat.com> | 2007-09-26 18:46:55 -0400 |
---|---|---|
committer | Kristian Høgsberg <krh@redhat.com> | 2007-09-26 18:46:55 -0400 |
commit | d6711cb7718bb79ba81ce617386d1c2fb4049fdb (patch) | |
tree | 4d65df421e125d7923ec6f4d9305e46871a078f6 | |
parent | f7170206654348e7b1f6dfd7588d7de4ef4d5c91 (diff) |
Add a "big board" model and tweak the constants a bit.
-rw-r--r-- | main.c | 54 |
1 files changed, 49 insertions, 5 deletions
@@ -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 (); |