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;
}

GTK+基本图元的绘制

时间: 2024-10-23 14:30:14

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

DirectX游戏编程学习(二)文本显示与基本图元绘制

一.文本显示 在游戏开发中,在游戏界面上现实一些文字信息是很常见的一件事,要学习DX游戏开发,显然了解DX文本如何显示是必不可少的.字符包含诸多的属性,比如颜色,大小,是否加粗,斜体,等等.我们通过DX提供的LPD3DFONT对象来指定这些字体属性,然后再进行渲染. 采用WIN32程序框架实现文本绘制的具体流程如下: 二.基本图元的绘制 无论再复杂的物体,它归根结底都是由基本图元构成的.在CG(Computer graphics)领域,人们普遍使用一组或者多组包围物体表面的多边形近似的表示真实的

Direct-X学习笔记--图元绘制

DX中有6种图元: 顶点集合,线段集合,线段条带,三角形集合,三角形条带,三角扇形. 在渲染时一般采用三角形来构成多边形,三角形三个顶点一定共面,共面的时候,渲染较快. (该图片来自百度) 我们在绘制的时候,使用该函数绘制图元,第一个参数为图元的类型,即上图中的几种类型: 点列集合    D3DPT_POINTLIST   一组点的集合 线列集合    D3DPT_LINELIST      一组线段的集合 线带集合    D3DPT_LINESTRIP    首尾相连的线段的集合 三角形列  

在3D空间中绘制四边形

在3D空间中绘制四边形 四边形 GL_QUADS OpenGL的GL_QUADS图元用于绘制四边形,它根据每四个顶点绘制一个四边形. 注意,在使用四边形时,必需记住一个重要规则:一个四边形的四个角必须位于同一个平面中(不存在弯曲的四边形).如图所示 四边形带 GL_QUAD_STRIP 该图元指定一个连接的四边形带.它们都保持相同方向的环绕.如图所示 通用多边形 GL_POLYGON 我们可以用它绘制任意数量的多边形.与四边形一样,多边形的所有顶点也必须位于同一平面中.如果想越过这个规则,可以采

坐标系与基本图元~转载天行健 君子当自强而不息

坐标系与基本图元 坐标系与基本图元(8)      摘要: 游戏程序通常都是运行在全屏幕模式下,进行全屏显示的关键是使用全屏显示的渲染设备.创建全屏显示模式渲染设备同窗口模式渲染设备基本相同,区别是将 d3dpp.Windowed设置为FALSE,告诉Direct3D系统,将要创建的是全屏模式渲染设备.此外,还需要明确指定后台缓冲区的大小和格式,这和创建窗口模式渲染设备是不相同的,在创建窗口模式渲染设备时可将后台缓冲区格式设置为D3DFMT_UNKNOWN,后台缓冲区大小也可取默认值,而在创建全

坐标系与基本图元(5)

坐标系与基本图元(5) 使用索引缓冲区绘制图形 当绘制一个比较复杂的图形时,需要使用许多相互邻接的三角形.如果为每个三角形准备三个顶点数据,显然有许多数据是重复的,这样会浪费大量的内存和系统带宽.为了解决这一问题,可以先创建一个顶点缓冲区,将不重复的顶点数据写入顶点缓冲区,然后创建一个顶点索引缓冲区(index buffer),存放各个三角形的顶点索引信息,最后通过顶点索引和顶点数据共同完成图形绘制. 在Direct3D中一个顶点的索引只需要用一个16位或32位的整数表示,因此当多边形的顶点有较

坐标系与基本图元(4)

坐标系与基本图元(4) 各种基本图元的绘制 上面使用顶点缓冲区绘制的是三角形列表图元,前面介绍过Direct3D支持点列表,线段列表.线段条带.三角形列表.三角形条带.三角扇形6种基本图元.下面通过示例程序BasicPrimitive演示各种基本图元的绘制.该示例程序使用同一个顶点缓冲区绘制不同类型的图元,程序中通过一个全局变量标识当前绘制的图元类型,通过单击键盘上的"1" ~ "6"数字键可以在各图元类型之间进行切换,单击空格键可以在线框模式和实体模式之间切换.

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

    本节是OpenGL学习的第七个课时,下面以四边形为例介绍绘制OpenGL动画的相关知识:     (1)绘制几种不同的四边形: 1)四边形(GL_QUADS) OpenGL的GL_QUADS图元用于绘制四边形,它根据每四个顶点绘制一个四边形. 注意:在使用四边形时必需记住四边形的四个角必须位于同一个平面中(不存在弯曲的四边形). 2)四边形带(GL_QUAD_STRIP) 该图元指定一个连接的四边形带.它们都保持相同方向的环绕. 3)通用多边形GL_POLYGON 我们可以用它绘制任意数

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

" 万丈高楼平地起." 01基础知识 一.相关术语 图元 :WebGL 能够绘制的基本图形元素,包含三种:点.线段.三角形. 片元:可以理解为像素,像素着色阶段是在片元着色器中. 裁剪坐标系:裁剪坐标系是顶点着色器中的 gl_Position 内置变量接收到的坐标所在的坐标系. 设备坐标系:又名 NDC 坐标系,是裁剪坐标系各个分量对 w 分量相除得到的坐标系,特点是 x.y.z 坐标分量的取值范围都在 [-1,1]之间,可以将它理解为边长为 2 的正方体,坐标系原点在正方体中心. 二

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

计算机图形1 图像处理.分析与机器视觉(第3版)1 数字图像处理(第六版)2 图像处理基础(第2版)2 发展沿革 1963年,伊凡·苏泽兰(Ivan Sutherland)在麻省理工学院发表了名为<画板>的博士论文, 它标志着计算机图形学的正式诞生.至今已有五十多年的历史.此前的计算机主要是符号处理系统,自从有了计算机图形学,计算机可以部分地表现人的右脑功能了,所以计算机图形学的建立具有重要的意义.计算机图形学在如下几方面有了长足的进展 第二章 颜色模型.图像基本知识.Phong光照模型 2.