- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我开始使用 SDL 构建程序。我正在使用 SDL 在屏幕上实时渲染帧缓冲区,并且还在寻找来自键盘和鼠标的用户输入。
我一直在使用以下代码在屏幕上显示 5-6-5 RGB 帧缓冲区。
SDL_Surface* screen = SDL_SetVideoMode(width, height, bitsPerPixel, SDL_SWSURFACE);
SDL_Surface* surface = SDL_CreateRGBSurfaceFrom(frameBuffer, width, height, depth, lineWidth, Rmask, Gmask, Bmask, Amask);
SDL_BlitSurface(surface, NULL, screen, NULL);
SDL_Flip(screen);
请注意,Rmask、Gmask 和 Bmask 以及 Amask 均为 0。我使用的是 SDL 的默认掩码。
对于键盘和鼠标,我一直使用下面的代码:
while (run) {
SDL_WaitEvent(&event);
switch (event.type) {
// Key is pressed
case SDL_KEYDOWN:
map<int, int>::iterator it = SDLToAndroid.find(event.key.keysym.sym);
if (it != SDLToAndroid.end()) { /* ... */ }
break;
case SDL_MOUSEBUTTONDOWN:
// Left click
if (event.button.button == SDL_BUTTON_LEFT) { /* ... */ }
break;
我在映射中查找按键的位置以将它们转换为其他键。
效果很好,但我想使用 GTK 的功能(就 UI 而言)。我开始使用 putenv 环境 ( The SDL_WINDOWID hack ) 将 SDL 包含到我的 GTK+ 窗口中,但我有两个问题:
a) 此解决方案不接收 SDL 事件。b) 帧缓冲区显示总是放在窗口 (0,0) 的左上角,但实际上我希望这个显示显示在我窗口中间的某个地方,上面和下面有一些按钮。
我正在考虑摆脱 SDL 而只使用 GTK+ 本身。由于我对 GTK+ 还很陌生,所以有几件事想问您。
您能告诉我应该使用哪种 GtkWidget 来在窗口内显示我的帧缓冲区吗?有谁知道我可以在 GTK 中使用什么函数来执行与 SDL_CreateRGBSurfaceFrom() 相同的任务(如果可能的话)?最后,您能否给我提供一种方法来获取 GtkWidget 中被点击或移入的 x 和 y 坐标,而不是整个窗口的坐标以及键盘输入?
(我找到了鼠标和键盘的一些解决方案。我已经看到用于获取 x 和 y 值的“配置事件”,但我不确定此事件是否适用于任何 GtkWidget。也适用于键盘,我发现的是使用“激活”,但我想确认这是正确的方法。)
最佳答案
a) 此解决方案未接收 SDL 事件。
如页面所述,事件不是由 SDL 事件循环接收的,而是由 Gtk 事件循环接收的。所以你可以尝试通过 Gtk 事件循环捕获事件。
b) 帧缓冲区显示始终位于窗口 (0,0) 的左上角,但实际上我希望此显示显示在我窗口中间的某个位置,并带有一些上方和下方的按钮。
这个有可能。您正在使用的 hack,基本上利用了 SDL(如果不直接使用硬件)和 Gtk 依赖于 Windowing system
的事实。显示在窗口上,更准确地说是显示在 X11
上在大多数 Linux 桌面上。因此,窗口创建是由 X
完成的,它有一个 XID,SDL 从为 GtkWidget
创建的 XID 使用它。当前您正在使用 GtkWindow
对应的 X 窗口,如果您使用 GtkDrawingArea
的 X 窗口,您可以根据自己的意愿进行显示。现在获取事件,注册回调。我试图创建一个 mash up单击“开始 SDL 动画”时,SDL 动画开始并单击动画区域将触发 “button-release-event”
,它将相对 x 和 y 坐标打印到控制台输出上,但键没有收到事件。希望您可以以此为基础或将其用于将来的引用(以防万一)。
你能告诉我应该使用什么样的 GtkWidget 来在窗口内显示我的帧缓冲区吗?
你可以看看GtkDrawingArea
用于自定义 UI 界面或 GtkImage
与 GdkPixbuf
因为很少的选择。你可以看到gtk-demo
代码或者Cairo animation sample
查看如何满足您的要求。
还有谁知道我可以在 GTK 中使用什么函数来执行与 SDL_CreateRGBSurfaceFrom() 相同的任务(如果可能的话)?
为此,您可以查看 GdkPixbuf
.可以将原始数据设置为 GdkPixbuf
& pixbuf 可用于创建 GtkImage
等可用于显示的内容。
最后,请给我链接一个方法来获取 GtkWidget 中被点击或移入的 x 和 y 坐标,而不是整个窗口和键盘的坐标输入?
对于鼠标事件,您需要为 "button-press-event"
注册回调或 "button-release-event"
.信号回调有一个 GdkEvent
范围。在回调中将其类型转换为 GdkEventButton
并获取您需要的信息,例如相对 x 和 y 坐标等。
对于键盘事件,您需要为 "key-press-event"
注册回调或 "key-release-event"
.信号回调有一个 GdkEvent
范围。在回调中将其类型转换为 GdkEventKey
并获取您需要的信息。此外,对于键盘事件,小部件应该能够获取焦点,您可以通过调用 gtk_widget_set_can_focus
强制执行此操作。
希望这对您有所帮助!
关于sdl - 用 GTK+ 替换 SDL 用于鼠标和键盘并显示帧缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8185937/
我正在尝试使用 GTK 构建一个 hello world,其中包括以下行: #include 如你所料。 提供的 Makefile 包含以下行: GTK_INCLUDE = -I/usr/local
我对 GTK 术语感到困惑。根据Wikipedia ,似乎有与 GTK+ 的绑定(bind),称为 GTK (GtkAda) 和 GTK2 (gtk2hs、Gtk2-Perl)。 有人可以帮我解决这个
我在 Gtk.Fixed 中有一个 Gtk.TextView,我设置了它的宽度和高度以及换行模式。 我的问题是,当用户插入的文本多于设置大小时,我需要避免 TextView 扩展。在那种情况下,我只需
我考虑使用带有 Broadway 后端的 GTK+ 来开发设备控制应用程序。 设备的功能类似于宽带调制解调器/路由器(我特意选择了所有人都熟悉的示例 :-))。 设备应通过网络浏览器远程控制。 我担心
我想更改 Windows 的默认 GTK 主题。我知道该怎么做:通过修改 settings.ini 文件,或者像这样: settings = gtk_settings_get_default(); g
在 GTK+ 3 中将多个键盘快捷键绑定(bind)到一个操作的最佳方法是什么? 这几天我一直在寻找这个问题的答案,但一无所获。函数 gtk_accelerator_parse 不支持逗号分隔的快捷方
虽然 Gtk.table 已被弃用,但我用它获得了更好的结果,而不是推荐的 Gtk.Grid。 这可能是我的错误,但我找不到问题。 我的目标是创建一个 Gtk 窗口,顶部有一个笔记本,下面有两个按钮。
虽然 Gtk.table 已被弃用,但我用它获得了更好的结果,而不是推荐的 Gtk.Grid。 这可能是我的错误,但我找不到问题。 我的目标是创建一个 Gtk 窗口,顶部有一个笔记本,下面有两个按钮。
是否可以在辅助线程而不是主线程中运行 GTK 的主循环? 最佳答案 是的,您可以在任何线程中使用主循环,但您只能从创建它的线程访问它。 但是,这不是一件常见的事情,并且可能有更好的方法来做您想做的任何
我从一个空表开始(只有一列的列表存储) 我希望用户能够导入 CSV 文件并显示内容。导入文件有效,确实显示了 CSV 数据,但保留了原始列(标题为“无数据”)。我该如何摆脱它? 我已经尝试删除 Tre
我正在尝试找出是否可以使用适用于 Windows 的 Python 3.2.2 或更高版本编写基于 Python 的 Windows 桌面小部件。上述项目完全令人困惑。他们中的任何一个支持我正在寻找的
我正在构建一个使用 kivy 的 cefpython 小部件的 Kivy 应用程序。 在执行我的程序时,每当我将文本输入小部件添加到 View 中时,我的应用程序都会崩溃并出现以下错误: Gtk-ER
Vala 中的源代码: using GLib; using Gtk; class MainWindow : Window { public static int main (string[] a
为什么 set_size_request(800,600) 在 DrawingArea 小部件上调用(也用 Gtk.Button 测试)导致大小为 958 x 791 px 的窗口,而在 Window
当我手动构建项目时,它会正确构建: gcc main.c -o midget `pkg-config --cflags --libs gtk+-3.0` 当我尝试使用 Makefile 时,它失败
如果有人对 the following function 有任何经验,我很感兴趣gtk.Window/gtk.Widget 的 shape_combine_mask(shape_mask, offs
如果我正在编写一个想要通过使用颜色来传达一些信息的应用程序,我该如何更改给定小部件的背景色和前景色?如果可能的话,我想知道如何在空地中做到这一点,以及以编程方式(计算颜色)。 我也想知道如何对复杂的小
假设有问题的小部件是一个包含一个标签和两个按钮的 VBox。 此外,假设所需的旋转角度为 90°。 如何旋转它?我认为默认情况下这是不可能的,但我认为这是可能的。 但是,我不知道如何开始。我要编写自定
我想知道当 Gtk.Window 完全显示时发出哪个信号,完全显示是指显示窗口本身及其小部件。 我尝试了几个信号: 展示 意识到 可见性通知事件 设置焦点 但它们都无法正常工作。 我在网上找到的唯一有
GTK+ Button 小部件具有控制焦点获取的 focus_on_click 属性。但是我使用的 MenuToolButton 没有这样的属性。我不想关注点击。 如何摆脱它?谢谢! 最佳答案 如果您
我是一名优秀的程序员,十分优秀!