1. // main.c
  2.  
  3. #include <gtk/gtk.h>
  4.  
  5. static void
  6. draw_round_rectangle (cairo_t * cr,
  7. double x, double y,
  8. double width, double height, double r)
  9. {
  10. cairo_move_to (cr, x + r, y);
  11. cairo_line_to (cr, x + width - r, y);
  12.  
  13. cairo_move_to (cr, x + width, y + r);
  14. cairo_line_to (cr, x + width, y + height - r);
  15.  
  16. cairo_move_to (cr, x + width - r, y + height);
  17. cairo_line_to (cr, x + r, y + height);
  18.  
  19. cairo_move_to (cr, x, y + height - r);
  20. cairo_line_to (cr, x, y + r);
  21.  
  22. cairo_arc (cr, x + r, y + r, r, 3.14, 3 * 3.14 / 2.0);
  23. cairo_arc (cr, x + width - r, y + r, r, 3 * 3.14 / 2, 2 * 3.14);
  24. cairo_arc (cr, x + width - r, y + height - r, r, 0, 3.14 / 2);
  25. cairo_arc (cr, x + r, y + height - r, r, 3.14 / 2, 3.14);
  26. }
  27.  
  28. static gboolean
  29. draw (GtkWidget *widget, cairo_t *cr, gpointer user_data)
  30. {
  31. cr = gdk_cairo_create (gtk_widget_get_window (widget));
  32.  
  33. cairo_set_source_rgb (cr, 0, 0, 0);
  34. cairo_set_line_width (cr, 1);
  35. cairo_rectangle (cr, 20, 20, 120, 80);
  36. cairo_rectangle (cr, 180, 20, 80, 80);
  37. cairo_stroke_preserve (cr);
  38. cairo_set_source_rgb (cr, 1, 1, 1);
  39. cairo_fill (cr);
  40.  
  41. cairo_set_source_rgb (cr, 0, 0, 0);
  42. cairo_arc (cr, 330, 60, 40, 0, 2 * 3.14);
  43. cairo_stroke_preserve (cr);
  44. cairo_set_source_rgb (cr, 1, 1, 1);
  45. cairo_fill (cr);
  46.  
  47. cairo_set_source_rgb (cr, 0, 0, 0);
  48. cairo_arc (cr, 90, 160, 40, 3.14 / 4, 3.14);
  49. cairo_close_path (cr);
  50. cairo_stroke_preserve(cr);
  51. cairo_set_source_rgb (cr, 1, 1, 1);
  52. cairo_fill (cr);
  53.  
  54. cairo_set_source_rgb (cr, 0, 0, 0);
  55. cairo_translate (cr, 220, 180);
  56. cairo_scale (cr, 1, 0.7);
  57. cairo_arc (cr, 0, 0, 50, 0, 2 * 3.14);
  58. cairo_stroke_preserve (cr);
  59. cairo_set_source_rgb (cr, 1, 1, 1);
  60. cairo_fill (cr);
  61.  
  62. cairo_set_source_rgb (cr, 0.8, 0.4, 0);
  63. cairo_translate (cr, 80, -30);
  64. cairo_set_line_width (cr, 6);
  65. draw_round_rectangle (cr, 5, 5, 60, 60, 8);
  66. cairo_stroke_preserve (cr);
  67. cairo_set_source_rgb (cr, 0.8, 0.8, 0.2);
  68. cairo_fill (cr);
  69.  
  70. cairo_destroy (cr);
  71.  
  72. return FALSE;
  73. }
  74.  
  75. int
  76. main (int argc, char **argv)
  77. {
  78. GtkWidget *window;
  79. GtkWidget *darea;
  80.  
  81. gtk_init (&argc, &argv);
  82.  
  83. window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  84.  
  85. darea = gtk_drawing_area_new ();
  86. gtk_container_add (GTK_CONTAINER (window), darea);
  87.  
  88. g_signal_connect (darea, "draw",
  89. G_CALLBACK (draw), NULL);
  90. g_signal_connect (window, "destroy",
  91. G_CALLBACK (gtk_main_quit), NULL);
  92.  
  93. gtk_window_set_position (GTK_WINDOW (window),
  94. GTK_WIN_POS_CENTER);
  95. gtk_window_set_default_size (GTK_WINDOW (window), 390, 240);
  96.  
  97. gtk_widget_show_all (window);
  98.  
  99. gtk_main ();
  100.  
  101. return 0;
  102. }

GTK+基本图元的绘制的更多相关文章

  1. OpenGL: 环境配置和图元的绘制

    前言 距离上一篇博客已经过去一个半月了,这段时间过得确实充实,虽然一大段时间泡在图书馆复习,但至少也能学到点东西.跨年晚和元旦一整天,全身心投入图形学小课设的编程,终于实现了老师要求的所有功能,回想起 ...

  2. OpenGL ES 3.0 图元装配

    1. 前言 之前已经把纹理的渲染给弄出来了,但是又遇到一个新的问题,那就是图元装配,比如说我已经把图片给显示出来了,但是呢,并没有做到让它显示到具体的位置,而跟这个位置相关的则需要靠图元装配. 图元装 ...

  3. 【C++ OpenGL ES 2.0编程笔记】8: 使用VBO和IBO绘制立方体 【转】

    http://blog.csdn.net/kesalin/article/details/8351935 前言 本文介绍了OpenGL ES 2.0 中的顶点缓冲对象(VBO: Vertex Buff ...

  4. OpenGL学习进程(10)第七课:四边形绘制与动画基础

        本节是OpenGL学习的第七个课时,下面以四边形为例介绍绘制OpenGL动画的相关知识:     (1)绘制几种不同的四边形: 1)四边形(GL_QUADS) OpenGL的GL_QUADS图 ...

  5. 基于面绘制的MC算法以及基于体绘制的 Ray-casting 实现Dicom图像的三维重建(python实现)

    加入实验室后,经过张老师的介绍,有幸与某公司合共共同完成某个项目,在此项目中我主要负责的是三维 pdf 报告生成.Dicom图像上亮度.对比度调整以及 Dicom图像三维重建.今天主要介绍一下完成Di ...

  6. 初级入门 --- web GL绘制点

    " 万丈高楼平地起." 01基础知识 一.相关术语 图元 :WebGL 能够绘制的基本图形元素,包含三种:点.线段.三角形. 片元:可以理解为像素,像素着色阶段是在片元着色器中. ...

  7. HTML5版的String Avoider小游戏

    HTML5版的String Avoider小游戏 http://www.newgrounds.com/portal/view/300760 蛮简单也蛮考验耐心,从游戏起始点移动鼠标到终点位置,鼠标移动 ...

  8. Atitit.计算机图形图像图片处理原理与概论attilax总结

    Atitit.计算机图形图像图片处理原理与概论attilax总结 计算机图形1 图像处理.分析与机器视觉(第3版)1 数字图像处理(第六版)2 图像处理基础(第2版)2 发展沿革 1963年,伊凡·苏 ...

  9. GLSL语言变量

    转自:http://www.th7.cn/Program/cp/201208/87679.shtml   GLSL语言内置的变量,包括内置的顶点属性(attribute).一致变量(uniform). ...

随机推荐

  1. 程序ajax请求公共组件app-jquery-http.js中url参数部分的项目应用

    结合微信登录以及微信支付的案例:= =||| (案例比较奇葩复杂) 简述项目流程: 1.获取用于公众号支付的openid(公众平台):在微信内置浏览器中打开网页链接,刚进入页面就通过微信公众平台获取该 ...

  2. Django 缓存系统

    Django 是动态网站,一般来说需要实时地生成访问的网页,展示给访问者,这样,内容可以随时变化,但是从数据库读多次把所需要的数据取出来,要比从内存或者硬盘等一次读出来 付出的成本大很多. 缓存系统工 ...

  3. JVM线程安全

    一.线程的调度方式 线程调度分为两种方式: 协同式调度和抢占式调度.协同式调度:线程的执行时间由线程本身控制,线程将工作执行完之后,通知操作系统切换到其他线程上.缺点:时间不可控,就算出问题,也不会通 ...

  4. mongodb学习(五) 查询

    1. 按条件查询: db.users.find({"name":"MM1"}) 2.find的第二个参数可以指定要返回的字段:这里1 表示要显示的字段,0 表示 ...

  5. python2与python3编码问题

    python2: UnicodeDecodeError: 'ascii' codec can't decode byte 0xc4 in position 33: 解决办法: 在报错的页面添加代码:  ...

  6. java和Ajax

    原博(实在太啰嗦了):https://netbeans.org/kb/docs/web/ajax-quickstart_zh_CN.html 1.Ajax的基本原理 Ajax 代表异步 JavaScr ...

  7. bzoj3289

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3289 题目大意:Mato同学从各路神犇以各种方式(你们懂的)收集了许多资料,这些资料一共有n ...

  8. vimplugin破解

    必较常用的vi插件有:viplugin.Vrapper.eclim Vrapper没有用过,eclim在公司电脑上装,总是不能正常的连接gvim,所以也没有用 Viplugin,常用功能基本都有... ...

  9. JS的组成部分、引入页面的方法以及命名规范

    JS的组成部分.引入页面的方法以及命名规范   一.页面是由三部分组成 1)html标签(超文本标记语言) 2)css样式(层叠样式表) 3)javascript脚本编程语言(动态脚本语言) 二.将c ...

  10. Angular - - $compile编译服务与指令

    $compile 这是个编译服务.编译一段HTML字符串或者DOM的模板, 产生一个将scope和模板连接到一起的函数. 编译服务主要是为指令编译DOM元素,下面的一大段也是主要介绍指令的. 下面是一 ...