zoukankan      html  css  js  c++  java
  • GTK+基本图元的绘制

    // main.c
    
    #include <gtk/gtk.h>
    
    static void
    draw_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 gboolean
    draw (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;
    }
    
    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 (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;
    }
    
  • 相关阅读:
    js常用函数(不断添加中。。。)
    【转】linux常用命令全集
    【转】VC++消息钩子编程
    beyond compare ftp 文件夹同步
    【转】notepad++ 应用学习 -- 列模式,十六进制模式
    网页嵌入视频播放器
    java中 正则表达式的使用
    【转】正则表达式30分钟入门教程
    【转】深入研究java.lang.Runtime类
    js 中map的几种实现方式
  • 原文地址:https://www.cnblogs.com/the-capricornus/p/3851920.html
Copyright © 2011-2022 走看看