GTK+基本圖元的繪製

來源:互聯網
上載者:User

標籤:des   os   width   io   re   c   

// main.c#include <gtk/gtk.h>static voiddraw_round_rectangle (cairo_t * cr,                      double x, double y,                      double width, double height, double r){    cairo_move_to (cr, x + r, y);    cairo_line_to (cr, x + width - r, y);    cairo_move_to (cr, x + width, y + r);    cairo_line_to (cr, x + width, y + height - r);    cairo_move_to (cr, x + width - r, y + height);    cairo_line_to (cr, x + r, y + height);    cairo_move_to (cr, x, y + height - r);    cairo_line_to (cr, x, y + r);    cairo_arc (cr, x + r, y + r, r, 3.14, 3 * 3.14 / 2.0);    cairo_arc (cr, x + width - r, y + r, r, 3 * 3.14 / 2, 2 * 3.14);    cairo_arc (cr, x + width - r, y + height - r, r, 0, 3.14 / 2);    cairo_arc (cr, x + r, y + height - r, r, 3.14 / 2, 3.14);}static gbooleandraw (GtkWidget *widget, cairo_t *cr, gpointer user_data){    cr = gdk_cairo_create (gtk_widget_get_window (widget));    cairo_set_source_rgb (cr, 0, 0, 0);    cairo_set_line_width (cr, 1);    cairo_rectangle (cr, 20, 20, 120, 80);    cairo_rectangle (cr, 180, 20, 80, 80);    cairo_stroke_preserve (cr);    cairo_set_source_rgb (cr, 1, 1, 1);    cairo_fill (cr);    cairo_set_source_rgb (cr, 0, 0, 0);    cairo_arc (cr, 330, 60, 40, 0, 2 * 3.14);    cairo_stroke_preserve (cr);    cairo_set_source_rgb (cr, 1, 1, 1);    cairo_fill (cr);    cairo_set_source_rgb (cr, 0, 0, 0);    cairo_arc (cr, 90, 160, 40, 3.14 / 4, 3.14);    cairo_close_path (cr);    cairo_stroke_preserve(cr);    cairo_set_source_rgb (cr, 1, 1, 1);    cairo_fill (cr);    cairo_set_source_rgb (cr, 0, 0, 0);    cairo_translate (cr, 220, 180);    cairo_scale (cr, 1, 0.7);    cairo_arc (cr, 0, 0, 50, 0, 2 * 3.14);    cairo_stroke_preserve (cr);    cairo_set_source_rgb (cr, 1, 1, 1);    cairo_fill (cr);    cairo_set_source_rgb (cr, 0.8, 0.4, 0);    cairo_translate (cr, 80, -30);    cairo_set_line_width (cr, 6);    draw_round_rectangle (cr, 5, 5, 60, 60, 8);    cairo_stroke_preserve (cr);    cairo_set_source_rgb (cr, 0.8, 0.8, 0.2);    cairo_fill (cr);    cairo_destroy (cr);    return FALSE;}intmain (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 (darea, "draw",                      G_CALLBACK (draw), 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), 390, 240);    gtk_widget_show_all (window);    gtk_main ();    return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.