| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- MODULE drawing ;
- (*
- m2-GTK4 example - drawing with GtkDrawingArea, Cairo and Pango.
- Draws a filled circle, a line and a Pango text layout.
- Build: make examples
- Run: ./build/examples/drawing
- *)
- FROM Gio IMPORT g_application_run;
- FROM GtkApplication IMPORT gtk_application_new;
- FROM GtkWindow IMPORT gtk_application_window_new, gtk_window_set_title,
- gtk_window_set_default_size, gtk_window_set_child, gtk_window_present;
- FROM GtkDrawingArea IMPORT gtk_drawing_area_new,
- gtk_drawing_area_set_content_width,
- gtk_drawing_area_set_content_height, gtk_drawing_area_set_draw_func;
- FROM Cairo IMPORT cairo_set_source_rgb, cairo_rectangle, cairo_fill,
- cairo_arc, cairo_set_line_width, cairo_stroke, cairo_move_to, cairo_line_to;
- FROM Pango IMPORT pango_font_description_from_string,
- pango_font_description_free, pango_layout_set_text,
- pango_layout_set_font_description;
- FROM PangoCairo IMPORT pango_cairo_create_layout, pango_cairo_show_layout;
- FROM GObject IMPORT g_object_unref;
- FROM GtkClosures IMPORT Connect2;
- FROM SYSTEM IMPORT ADDRESS, ADR;
- FROM libc IMPORT printf;
- CONST
- AppId = "org.example.m2gtk4.Drawing";
- PROCEDURE Draw (area: ADDRESS; cr: ADDRESS; width, height: INTEGER;
- data: ADDRESS);
- VAR
- layout, desc: ADDRESS;
- BEGIN
- cairo_set_source_rgb(cr, 0.95, 0.95, 0.97);
- cairo_rectangle(cr, 0.0, 0.0, VAL(REAL, width), VAL(REAL, height));
- cairo_fill(cr);
- cairo_set_source_rgb(cr, 0.20, 0.50, 0.90);
- cairo_arc(cr, 80.0, 80.0, 50.0, 0.0, 6.2831853);
- cairo_fill(cr);
- cairo_set_source_rgb(cr, 0.90, 0.20, 0.20);
- cairo_set_line_width(cr, 6.0);
- cairo_move_to(cr, 150.0, 40.0);
- cairo_line_to(cr, 330.0, 140.0);
- cairo_stroke(cr);
- layout := pango_cairo_create_layout(cr);
- desc := pango_font_description_from_string("Sans Bold 18");
- pango_layout_set_font_description(layout, desc);
- pango_font_description_free(desc);
- pango_layout_set_text(layout, "Cairo + Pango from Modula-2", -1);
- cairo_set_source_rgb(cr, 0.10, 0.10, 0.10);
- cairo_move_to(cr, 20.0, 160.0);
- pango_cairo_show_layout(cr, layout);
- g_object_unref(layout)
- END Draw;
- PROCEDURE OnActivate (application: ADDRESS; data: ADDRESS);
- VAR
- window, area: ADDRESS;
- BEGIN
- area := gtk_drawing_area_new();
- gtk_drawing_area_set_content_width(area, 360);
- gtk_drawing_area_set_content_height(area, 200);
- gtk_drawing_area_set_draw_func(area, ADR(Draw), NIL, NIL);
- window := gtk_application_window_new(application);
- gtk_window_set_title(window, "m2-GTK4 Drawing");
- gtk_window_set_default_size(window, 400, 240);
- gtk_window_set_child(window, area);
- gtk_window_present(window)
- END OnActivate;
- VAR
- app: ADDRESS;
- BEGIN
- app := gtk_application_new(AppId, 0);
- IF app = NIL THEN
- printf("gtk_application_new failed\n");
- HALT(1)
- END;
- Connect2(app, "activate", OnActivate, NIL);
- g_application_run(app, 0, NIL)
- END drawing.
|