SDL_Surface到GTK窗口

时间:2017-11-30 18:10:00

标签: c image-processing gtk sdl

我目前正在我的IT学校开展一个项目,我正在使用SDL(该项目是图像处理和类似的东西),目前我只是用SDL显示图像而没有界面(按钮等...)。我对GTK有点了解所以我想知道我是否可以在GTK窗口中显示图像(这里是SDL_Surface) 我做了一些研究,但没有什么是非常明确的...... 谢谢!

1 个答案:

答案 0 :(得分:1)

使用SDL绘制小部件

使用SDL绘图功能绘制小部件(菜单,按钮等),并通过在事件发生期间跟踪光标位置来处理动作(在执行事件时光标所在的项目)。 这变得非常复杂,并且使用具有一些简单黑客的现有GUI库会更好。您可以找到用于绘制按钮here的代码示例。

将SDL表面复制到目标GUI小部件

这涉及逐个像素地复制(预定义函数可用于执行相同的操作,如果是gtk,则可以使用 gdk_draw_rgb_image )将sdl曲面复制到目标gui小部件中(在GTK的情况下可以是drawingArea) )。

将SDL窗口合并到GUI小部件

在X11和win32系统中,每个窗口都有一个窗口ID,默认情况下,sdl和gtk会有单独的窗口ID,从而得到两个不同的窗口,我们可以利用 SDL_CreateWindowFrom 函数为sdl使用单个窗口和gtk,我们将强制两个库使用单个窗口ID。 您可以找到类似的问题here

GTK插头和插座

Plug and Socket允许将小部件从一个进程嵌入到另一个进程。 GTK将创建一个套接字并将套接字ID传递给SDL,SDL将从该套接字ID创建窗口。

事件循环处理: 将SDL与GTK合并后,您可能会发现gtk和sdl有自己的事件循环,因此处理事件可能与预期不符。要解决这个问题,你可以处理 GTK中的事件,并使用 SDL_PushEvent 函数将事件传播到SDL,反之亦然,以防您使用用户定义的事件。

.
.
static SDL_Event SDLevent;
switch(event->keyval)
{
    case GDK_KEY_m:
       SDLevent.type = SDL_KEYUP;
       SDLevent.key.keysym.sym = SDLK_m;
       SDL_PushEvent(&SDLevent);
       break;
       .
       .
       .

这个link对上述方法有很好的解释。

相关问题