1

在 Windows 中,我可以随时将位图传送到 GetDC 拾取的 DC,而无需调用 InvalidateRect 发出 WM_PAINT 消息。如何将此行为移植到 GTK/cairo?

在后台线程中,我想

  1. 在窗口内缩放给定位图以“最适合”(需要知道像素的宽度和高度)
  2. 将缩放的图像blit到屏幕上

它不应该通过暴露事件来完成(渲染循环很快,所以无论如何都会及时绘制窗口)。完整的逻辑是

  1. 创建一个窗口
  2. 获取窗口的上下文
  3. 开始消息循环
  4. 用户按下“开始”按钮
  5. 启动一个新的程序线程来检查停止标志。如果它是假的,它会发出定期更新窗口内容的命令,而无需用户交互。同时,消息循环检查用户输入。
  6. 当用户按下“停止”按钮时,停止标志会引发,导致渲染线程退出

当渲染线程没有运行时,暴露事件应该调用与渲染线程相同的代码。

在创建 GtkDrawingArea 之后,我试图捕捉 cairo_t* cairo_obj(我得到了一个)

动画线程然后调用图像绘制重复发出

cairo_set_source_rgb(cairo_obj, 1, 0, 0);
cairo_select_font_face(cairo_obj, "Sans", CAIRO_FONT_SLANT_NORMAL,
    CAIRO_FONT_WEIGHT_NORMAL);
cairo_set_font_size(cairo_obj, 40.0);

cairo_move_to(cairo_obj, 10.0, 50.0);
cairo_show_text(cairo_obj, "Disziplin ist Macht."); 

这在进行事件传递时有效,但在其他情况下无效。在绘图代码交换缓冲区结束时是否需要进行其他调用?

如果这不能用 GTK/cairo 完成,是否有任何其他工具包可以让我这样做?在X下有可能吗?

4

0 回答 0