繁体   English   中英

使用 Cairo 实时绘制线条

[英]Drawing lines using Cairo in real time

zetcode “线条”代码中,我试图在单击鼠标按钮时实时显示线条。 然后我将点击的功能更改为

static gboolean clicked(GtkWidget *widget, GdkEventButton *event,
    gpointer user_data)
{
    if (event->button == 1) {
        glob.coordx[glob.count] = event->x;
        glob.coordy[glob.count++] = event->y;
        gtk_widget_queue_draw(widget);
    }

    return TRUE;
}

我以为每次单击按钮 1 时它都会显示线条,但它们根本没有绘制在窗口上。 我在这里错过了什么?

在 draw 上运行的函数do_drawing()在其末尾包含这一行:

glob.count = 0;

所以它会在绘制完所有数组后清除数组,因此很难像您尝试的那样积累大量的线条。

如果您遵循 Zetcode 示例,则需要更改 do_drawing 方法。 这是通过每次单击实时绘制一个点来实现的。

static void do_drawing(cairo_t *cr)
{
  cairo_set_source_rgb(cr, 0, 0, 0);//Line colour
  cairo_set_line_width(cr, 0.5);//Line width
  cairo_translate(cr, -170, -170);//Shift where line 

  //i is starting point, i+1 is next mouse coordinate 
  int i;
  for (i = 0; i < glob.count - 1; i++ ) {
    cairo_move_to(cr, glob.coordx[i], glob.coordy[i]);
    cairo_line_to(cr, glob.coordx[i+1], glob.coordy[i+1]);
    printf("from x:%f, y:%f\t to: x:%f, y:%f\n",glob.coordx[i],glob.coordy[i], glob.coordx[i+1], glob.coordy[i+1]);
    cairo_stroke(cr);    
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM