Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //gcc example.c -o example `pkg-config --cflags --libs gtk+-3.0`
- //export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig"
- #include <cairo.h>
- #include <gtk/gtk.h>
- #include <time.h>
- const int MAX_WIDTH = 512;
- const int MAX_HEIGHT = 512;
- const int MAX_SIZE = 512;
- const int GRID = 16;
- const double ADJ_COEF = MAX_SIZE/GRID;
- struct vl_pixel{
- int hor;
- int ver;
- int r;
- int g;
- int b;
- };
- static void do_drawing(cairo_t *);
- static gboolean on_draw_event(GtkWidget *widget, cairo_t *cr,
- gpointer user_data)
- {
- do_drawing(cr);
- return FALSE;
- }
- void vl_pixel(cairo_t *cr,struct vl_pixel pixel){
- cairo_set_source_rgb(cr,pixel.r/255.0,pixel.g/255.0,pixel.b/255.0);
- cairo_rectangle(cr,ADJ_COEF*pixel.hor,ADJ_COEF*pixel.ver,ADJ_COEF,ADJ_COEF);
- cairo_fill(cr);
- }
- // struct vl_pixel *vl_pixel_read(FILE *file){
- // char ch = getchar(FILE);
- // while(ch != EOF){
- // }
- // }
- void vl_pixel_save(FILE *file, struct vl_pixel pixel){
- fprintf(file, "%d %d %d %d %d\n", pixel.ver,pixel.hor,pixel.r,pixel.g,pixel.b);
- }
- static void do_drawing(cairo_t *cr)
- {
- cairo_set_line_width (cr, 0.1);
- cairo_set_source_rgb (cr, 1, 0 , 0);
- int hor=0,ver=0;
- FILE *file;
- file = fopen("pattern1.txt","w+");
- for (hor=0;hor*ADJ_COEF<MAX_SIZE;hor++){
- for (ver=0;ver*ADJ_COEF<MAX_SIZE;ver++){
- struct vl_pixel pixel = {0};
- pixel.hor=hor;
- pixel.ver = ver;
- pixel.r = rand()%255;
- pixel.g = 0;
- pixel.b = 0;
- vl_pixel_save(file,pixel);
- vl_pixel(cr,pixel);
- // vl_pixel(cr,hor,ver,r,g,b);
- }
- }
- }
- int main(int argc, char *argv[])
- {
- GtkWidget *window;
- GtkWidget *darea;
- srand(time(NULL));
- 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), "draw",
- G_CALLBACK(on_draw_event), NULL);
- g_signal_connect(window, "destroy",
- G_CALLBACK(gtk_main_quit), NULL);
- gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
- gtk_window_set_default_size(GTK_WINDOW(window), MAX_SIZE, MAX_SIZE);
- gtk_window_set_title(GTK_WINDOW(window), "GTK window");
- gtk_widget_show_all(window);
- gtk_main();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement