View Single Post
Old 05-18-2014, 08:30 PM   #20
bulsa
Enthusiast
bulsa began at the beginning.
 
Posts: 28
Karma: 13
Join Date: Apr 2014
Device: Kindle PW
Since you insist on code, here is a trivial example that over time produces quite a nice pattern (imho ):
Code:
#include <stdlib.h>
#include <glib.h>
#include <cairo.h>
#include <gtk/gtk.h>

static gboolean on_draw_event(GtkWidget *widget, GdkEvent *gdk,
                              gpointer user_data)
{
    GtkAllocation allocation;
    gtk_widget_get_allocation(widget, &allocation);
    int size = rand()%100+10;
    int width = allocation.width, height = allocation.height;
    int x = rand()%(width-size), y = rand()%(height-size);
    double color = rand()/(double)RAND_MAX;
    
    cairo_t *cr = gdk_cairo_create(widget->window);
    
    cairo_rectangle(cr, 0, 0, width, height);
    cairo_set_source_rgb(cr, .5, .5, .5);
    cairo_fill(cr);

    cairo_rectangle(cr, x, y, size, size);
    cairo_set_source_rgb(cr, color, color, color);
    cairo_fill(cr);
    
    cairo_destroy(cr);
    return FALSE;
}

static gboolean update(gpointer widget) {
    GtkWidget *darea = widget;
    GtkAllocation allocation;
    gtk_widget_get_allocation(widget, &allocation);
    gdk_window_invalidate_rect(gtk_widget_get_window(darea), &allocation, FALSE);
    return G_SOURCE_CONTINUE;
}

int main(int argc, char *argv[])
{
    GtkWidget *window;
    GtkWidget *darea;

    gtk_init(&argc, &argv);

    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

    darea = gtk_drawing_area_new();
    gtk_container_add(GTK_CONTAINER(window), darea);

    g_signal_connect(G_OBJECT(darea), "expose_event",
                     G_CALLBACK(on_draw_event), NULL);
    g_signal_connect(window, "destroy",
                     G_CALLBACK(gtk_main_quit), NULL);

    gtk_window_set_default_size(GTK_WINDOW(window), 400, 90);
    gtk_window_set_title(GTK_WINDOW(window), "L:A_N:application_ID:net.bulsa.example_PC:N_O:U");

    gtk_widget_show_all(window);

    g_timeout_add(300, update, darea);

    gtk_main();

    return 0;
}
bulsa is offline   Reply With Quote