亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? z186.html

?? gtk_text program sample&eg
?? HTML
?? 第 1 頁 / 共 3 頁
字號:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html>  <head>    <title>      Drawing Methods    </title>    <meta name="GENERATOR" content=    "Modular DocBook HTML Stylesheet Version 1.45">    <link rel="HOME" title="GTK+ / Gnome Application Development"    href="ggad.html">    <link rel="UP" title="Writing a GnomeCanvasItem" href=     "cha-canvasitem.html">    <link rel="PREVIOUS" title="Writing a GnomeCanvasItem" href=     "cha-canvasitem.html">    <link rel="NEXT" title="Other Methods" href="z192.html">  </head>  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink=   "#840084" alink="#0000FF">    <div class="NAVHEADER">      <table width="100%" border="0" bgcolor="#ffffff" cellpadding=       "1" cellspacing="0">        <tr>          <th colspan="4" align="center">            <font color="#000000" size="2">GTK+ / Gnome Application            Development</font>          </th>        </tr>        <tr>          <td width="25%" bgcolor="#ffffff" align="left">            <a href="cha-canvasitem.html"><font color="#0000ff"            size="2"><b>&lt;&lt;&lt; Previous</b></font></a>          </td>          <td width="25%" colspan="2" bgcolor="#ffffff" align=           "center">            <font color="#0000ff" size="2"><b><a href="ggad.html">            <font color="#0000ff" size="2"><b>            Home</b></font></a></b></font>          </td>          <td width="25%" bgcolor="#ffffff" align="right">            <a href="z192.html"><font color="#0000ff" size="2"><b>            Next &gt;&gt;&gt;</b></font></a>          </td>        </tr>      </table>    </div>    <div class="SECT1">      <h1 class="SECT1">        <a name="Z186">Drawing Methods</a>      </h1>      <p>        The most important task of any canvas item is rendering        itself onto the canvas. Rendering is a two-stage process        for efficiency reasons. The first stage, implemented in a        <span class="STRUCTNAME">GnomeCanvasItem</span>'s <span        class="STRUCTNAME">update</span> method, is guaranteed to        happen only once per item per rendering cycle; the idea is        to do any expensive affine transformations or other        calculations in the update method. In the second stage, the        canvas item renders itself to some region on the screen.        The <span class="STRUCTNAME">render</span> method        implements stage two for antialiased items, while the <span        class="STRUCTNAME">draw</span> method implements stage two        for GDK items. An item's render or draw method may be        invoked multiple times during a canvas repaint.      </p>      <p>        Rendering occurs in a one-shot idle function. That is,        whenever the canvas receives an expose event or otherwise        determines that a redraw is needed, it adds an idle        function which removes itself after a single invocation.        (An idle function runs when no GTK+ events are pending and        the flow of execution is in the GTK+ main loop---see <a        href="sec-mainloop.html">the section called <i>The Main        Loop</i> in the chapter called <i>GTK+ Basics</i></a> for        details.) The canvas maintains a list of redraw regions and        adds to it whenever a redraw request is received, so it        knows which areas to repaint when the idle handler is        finally invoked.      </p>      <p>        Canvas items carry a flag indicating whether they need to        be updated. Whenever a canvas item "changes" (for example,        if you set a new fill color for <span class="STRUCTNAME">        GnomeCanvasRect</span>), it will call <tt class="FUNCTION">        gnome_canvas_item_request_update()</tt> to set the "update        needed" flag for itself and the groups that contain it, up        to and including the root canvas group. (The <tt class=         "CLASSNAME">GnomeCanvas</tt> widget is only aware of a        single canvas item, the root group---all other items are        handled recursively when methods are invoked on the root        group.) In its one-shot idle function, the canvas invokes        the update method of the root canvas item if its update        flag is set, then clears the flag so the update method will        not be run next time. The <span class="STRUCTNAME">        GnomeCanvasGroup</span> update method does the same for        each child item.      </p>      <p>        Once all canvas items have been updated, the rendering        process begins. The canvas creates an RGB or <span class=         "STRUCTNAME">GdkPixmap</span> buffer, converts its list of        redraw regions into a list of buffer-sized rectangles, then        invokes the render or draw method of the root canvas group        once per rectangle. After each rectangle is rendered, the        buffer is copied to the screen.      </p>      <div class="SECT2">        <h2 class="SECT2">          <a name="Z187">The Update Method</a>        </h2>        <p>          The update method is primarily used by antialiased canvas          items. <tt class="APPLICATION">libart_lgpl</tt> can          prebuild a vector path to be rendered, performing          clipping and affine transformation in advance. The render          method stamps the pre-assembled path into the RGB buffer.        </p>        <p>          The update method is one of the two that <span class=           "STRUCTNAME">GnomeCanvasRect</span> and <span class=           "STRUCTNAME">GnomeCanvasEllipse</span> have to implement          differently. Here is the <span class="STRUCTNAME">          GnomeCanvasRect</span> implementation:        </p>        <table border="0" bgcolor="#E0E0E0" width="100%">          <tr>            <td><pre class="PROGRAMLISTING">&#13;static voidgnome_canvas_rect_update (GnomeCanvasItem *item, double affine[6],                           ArtSVP *clip_path, gint flags){  GnomeCanvasRE *re;  ArtVpath vpath[11];  ArtVpath *vpath2;  double x0, y0, x1, y1;  double dx, dy;  double halfwidth;  int i;  gnome_canvas_re_update_shared (item, affine, clip_path, flags);  re = GNOME_CANVAS_RE (item);  if (item-&gt;canvas-&gt;aa) {    x0 = re-&gt;x1;    y0 = re-&gt;y1;    x1 = re-&gt;x2;    y1 = re-&gt;y2;    gnome_canvas_item_reset_bounds (item);    if (re-&gt;fill_set) {      vpath[0].code = ART_MOVETO;      vpath[0].x = x0;      vpath[0].y = y0;      vpath[1].code = ART_LINETO;      vpath[1].x = x0;      vpath[1].y = y1;      vpath[2].code = ART_LINETO;      vpath[2].x = x1;      vpath[2].y = y1;      vpath[3].code = ART_LINETO;      vpath[3].x = x1;      vpath[3].y = y0;      vpath[4].code = ART_LINETO;      vpath[4].x = x0;      vpath[4].y = y0;      vpath[5].code = ART_END;      vpath[5].x = 0;      vpath[5].y = 0;      vpath2 = art_vpath_affine_transform (vpath, affine);      gnome_canvas_item_update_svp_clip (item, &amp;re-&gt;fill_svp, art_svp_from_vpath (vpath2), clip_path);      art_free (vpath2);    } else      gnome_canvas_item_update_svp (item, &amp;re-&gt;fill_svp, NULL);    if (re-&gt;outline_set) {      if (re-&gt;width_pixels)        halfwidth = re-&gt;width * 0.5;      else        halfwidth = re-&gt;width * item-&gt;canvas-&gt;pixels_per_unit * 0.5;      if (halfwidth &lt; 0.25)        halfwidth = 0.25;      i = 0;      vpath[i].code = ART_MOVETO;      vpath[i].x = x0 - halfwidth;      vpath[i].y = y0 - halfwidth;      i++;      vpath[i].code = ART_LINETO;      vpath[i].x = x0 - halfwidth;      vpath[i].y = y1 + halfwidth;      i++;      vpath[i].code = ART_LINETO;      vpath[i].x = x1 + halfwidth;      vpath[i].y = y1 + halfwidth;      i++;      vpath[i].code = ART_LINETO;      vpath[i].x = x1 + halfwidth;      vpath[i].y = y0 - halfwidth;      i++;      vpath[i].code = ART_LINETO;      vpath[i].x = x0 - halfwidth;      vpath[i].y = y0 - halfwidth;      i++;      if (x1 - halfwidth &gt; x0 + halfwidth &amp;&amp;          y1 - halfwidth &gt; y0 + halfwidth) {        vpath[i].code = ART_MOVETO;        vpath[i].x = x0 + halfwidth;        vpath[i].y = y0 + halfwidth;        i++;        vpath[i].code = ART_LINETO;        vpath[i].x = x1 - halfwidth;        vpath[i].y = y0 + halfwidth;        i++;        vpath[i].code = ART_LINETO;        vpath[i].x = x1 - halfwidth;        vpath[i].y = y1 - halfwidth;        i++;        vpath[i].code = ART_LINETO;        vpath[i].x = x0 + halfwidth;        vpath[i].y = y1 - halfwidth;        i++;        vpath[i].code = ART_LINETO;        vpath[i].x = x0 + halfwidth;        vpath[i].y = y0 + halfwidth;        i++;      }      vpath[i].code = ART_END;      vpath[i].x = 0;      vpath[i].y = 0;      vpath2 = art_vpath_affine_transform (vpath, affine);      gnome_canvas_item_update_svp_clip (item, &amp;re-&gt;outline_svp, art_svp_from_vpath (vpath2), clip_path);      art_free (vpath2);    } else      gnome_canvas_item_update_svp (item, &amp;re-&gt;outline_svp, NULL);  } else {    get_bounds (re, &amp;x0, &amp;y0, &amp;x1, &amp;y1);    gnome_canvas_update_bbox (item, x0, y0, x1, y1);  }}      </pre>            </td>          </tr>        </table>        <p>          As you can see, the first thing this function does is          invoke an update function shared by <span class=           "STRUCTNAME">GnomeCanvasRect</span> and <span class=           "STRUCTNAME">GnomeCanvasEllipse</span>; here is that          function:        </p>        <table border="0" bgcolor="#E0E0E0" width="100%">          <tr>            <td><pre class="PROGRAMLISTING">&#13;static voidgnome_canvas_re_update_shared (GnomeCanvasItem *item, double *affine,                                ArtSVP *clip_path, int flags){  GnomeCanvasRE *re;  re = GNOME_CANVAS_RE (item);  if (re_parent_class-&gt;update)    (* re_parent_class-&gt;update) (item, affine, clip_path, flags);  if (!item-&gt;canvas-&gt;aa) {    set_gc_foreground (re-&gt;fill_gc, re-&gt;fill_pixel);    set_gc_foreground (re-&gt;outline_gc, re-&gt;outline_pixel);    set_stipple (re-&gt;fill_gc, &amp;re-&gt;fill_stipple,                  re-&gt;fill_stipple, TRUE);    set_stipple (re-&gt;outline_gc, &amp;re-&gt;outline_stipple,                  re-&gt;outline_stipple, TRUE);    set_outline_gc_width (re);  } }      </pre>            </td>          </tr>        </table>        <p>          There is a lot of code involved here; the update method          is almost always the most complicated one, since it does          all the work of preparing to render a canvas item. Also,          the update method is different for GDK and antialiased          mode; notice the code which depends on the <span class=           "STRUCTNAME">item-&gt;canvas-&gt;aa</span> flag.        </p>        <p>          The first thing <span class="STRUCTNAME">          GnomeCanvasRE</span> does during an update is invoke the          update method of its parent class. The <span class=           "STRUCTNAME">GnomeCanvasItem</span> default update method          does nothing whatsoever in Gnome 1.0, but it is good          practice to chain up for future robustness. Then, <span          class="STRUCTNAME">GnomeCanvasRE</span> calls a series of          utility routines to fill in its graphics contexts with          their correct values. These are straightforward          functions, so their implementations are omitted here.        </p>        <p>          Next <tt class="FUNCTION">gnome_canvas_rect_update()</tt>          continues with <span class="STRUCTNAME">          GnomeCanvasRect</span>-specific details. Several tasks          are accomplished:        </p>        <ul>          <li>            <p>              The bounding box of the canvas item is updated. Every              canvas item has an associated bounding box; the <span              class="STRUCTNAME">GnomeCanvasGroup</span> draw and              render methods use this box to determine which items              are in the redraw region. The bounding box must be              updated in both GDK and antialiased mode.            </p>          </li>          <li>            <p>              In antialiased mode, a <i class="FIRSTTERM">sorted              vector path</i> is created. A sorted vector path is              simply a series of drawing instructions, similar to              primitive PostScript operations, that <tt class=               "APPLICATION">libart_lgpl</tt> can render to an RGB

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线观看日韩一区| 国内精品在线播放| youjizz久久| 欧美国产1区2区| 国产成人av在线影院| 欧美精品一区二区三| 国产精品18久久久| 欧美国产日韩a欧美在线观看| 成人国产精品免费观看视频| 国产午夜久久久久| 成人福利电影精品一区二区在线观看| 中文字幕在线不卡一区| av激情亚洲男人天堂| 精品精品国产高清a毛片牛牛| 国产福利一区二区三区| 久久久久九九视频| 日本精品一区二区三区高清| 亚洲伊人色欲综合网| 色播五月激情综合网| 免费一级片91| 欧美激情资源网| 欧美日韩五月天| 免费看欧美女人艹b| 这里是久久伊人| 成人美女视频在线观看| 亚洲视频图片小说| 日韩美女视频在线| 国产成人aaaa| 亚洲色图制服诱惑| 精品处破学生在线二十三| 国产福利一区二区三区视频在线| 一区二区三区日韩欧美精品| 欧美精品久久久久久久多人混战| 日本视频免费一区| 亚洲国产精品精华液ab| 日本道精品一区二区三区 | 美女视频黄免费的久久| 欧美美女喷水视频| 国产一区不卡视频| 久久精品视频免费观看| 色噜噜狠狠一区二区三区果冻| 秋霞电影网一区二区| 国产精品高潮久久久久无| 欧美三级视频在线| 97se狠狠狠综合亚洲狠狠| 日韩 欧美一区二区三区| 国产亚洲一区二区三区| 欧美一区二区美女| 99久久精品国产一区二区三区 | 亚洲色图清纯唯美| 在线观看91视频| 国产在线国偷精品产拍免费yy | 亚洲一区二区欧美激情| 精品嫩草影院久久| 91精品一区二区三区久久久久久 | 久久精品欧美一区二区三区不卡| 色婷婷av一区二区三区大白胸| 国产一区二区在线免费观看| 亚洲国产视频在线| 一区二区三区在线视频播放| 久久这里只有精品6| 91免费观看在线| www.久久久久久久久| 青青草成人在线观看| 日韩不卡一区二区| 亚洲欧美一区二区三区国产精品| 色婷婷精品大在线视频| 91色在线porny| 国产一区二区三区四区五区入口| 美女视频免费一区| 亚洲国产一区二区三区| 欧美午夜一区二区三区免费大片| 99热99精品| 国产高清精品在线| 成人黄色av电影| 国产一区二区三区久久悠悠色av| 亚洲午夜一区二区| 一区二区久久久久久| 日韩视频一区二区三区在线播放| 91在线视频18| 成人av网站免费| 91亚洲午夜精品久久久久久| 成人美女在线观看| 91啪九色porn原创视频在线观看| 国产激情视频一区二区三区欧美| 中文字幕+乱码+中文字幕一区| 国产精品三级电影| 久久亚洲综合色| 亚洲国产成人自拍| 国产欧美一区二区精品仙草咪| 国产色产综合产在线视频| 久久久精品中文字幕麻豆发布| 日韩女优视频免费观看| 久久免费电影网| 国产欧美一区二区三区网站 | 欧美国产日韩a欧美在线观看| 国产色婷婷亚洲99精品小说| 国产欧美日本一区视频| 国产欧美一区二区精品仙草咪| 国产精品美日韩| 国产精品第13页| 亚洲午夜电影在线| 日本不卡一区二区三区高清视频| 一区二区三区在线免费播放| 视频一区欧美日韩| 蜜臀精品久久久久久蜜臀| 麻豆视频观看网址久久| 国产呦萝稀缺另类资源| 成人免费高清视频| caoporn国产精品| 91福利国产精品| 欧美久久久久久蜜桃| 欧美电影精品一区二区| 国产亚洲成年网址在线观看| 国产精品女同互慰在线看| 亚洲精品乱码久久久久久久久 | 国产乱人伦偷精品视频免下载| 国产毛片精品一区| 色婷婷综合久色| 51精品视频一区二区三区| 91精品国产综合久久久久久| 国产欧美日产一区| 一个色在线综合| 丰满岳乱妇一区二区三区| 99精品热视频| 日韩三级伦理片妻子的秘密按摩| 国产色一区二区| 日韩中文字幕av电影| 国产成人aaa| 色天使色偷偷av一区二区| 精品奇米国产一区二区三区| 国产精品三级电影| 国内精品视频666| 色呦呦日韩精品| 精品国产一区二区亚洲人成毛片 | 成人黄色一级视频| 欧美男同性恋视频网站| 亚洲人快播电影网| 日韩福利视频导航| 色婷婷av一区二区三区之一色屋| 日韩精品一区二区三区三区免费 | 免费一级片91| 欧美羞羞免费网站| 色综合久久综合中文综合网| 精品福利在线导航| 亚洲一区二区3| 91在线视频播放| 久久综合久久99| 日本成人在线网站| 色久综合一二码| 中文字幕一区日韩精品欧美| 日本最新不卡在线| 99精品视频在线观看免费| 久久综合成人精品亚洲另类欧美 | 欧美一级高清片| 亚洲品质自拍视频网站| 国产成人精品一区二区三区四区| 在线区一区二视频| 国产欧美日韩不卡免费| 黄色资源网久久资源365| 欧美一级一区二区| 亚洲高清免费观看高清完整版在线观看| 不卡av在线免费观看| 精品国产精品一区二区夜夜嗨| 日韩**一区毛片| 欧美高清性hdvideosex| 国产欧美精品一区二区三区四区| 国产一区不卡在线| 日韩午夜精品电影| 精品亚洲成a人在线观看| 欧美日韩精品欧美日韩精品一综合| 亚洲高清一区二区三区| 欧美在线观看视频在线| 亚洲综合久久久久| 92精品国产成人观看免费| 亚洲天堂免费看| 91丝袜美腿高跟国产极品老师| 精品成人私密视频| 成人免费视频一区二区| 久久久久国产精品麻豆ai换脸 | 奇米影视一区二区三区小说| 日韩欧美亚洲一区二区| 视频一区二区国产| 日韩欧美在线影院| 久久99国产精品麻豆| 懂色av中文字幕一区二区三区| 国产精品久久综合| jizzjizzjizz欧美| 亚洲成av人影院在线观看网| 欧美日韩国产乱码电影| 精品一区二区三区在线观看国产 | 麻豆高清免费国产一区| 91麻豆精品久久久久蜜臀| 国模少妇一区二区三区| 久久婷婷色综合| av不卡免费在线观看| 亚洲精品成a人| 日韩精品一区二| 成人性色生活片免费看爆迷你毛片| 亚洲精品中文字幕乱码三区|