欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > AWTK QNX 移植笔记

AWTK QNX 移植笔记

2025/4/19 13:46:57 来源:https://blog.csdn.net/absurd/article/details/145091298  浏览:    关键词:AWTK QNX 移植笔记

在这里插入图片描述

SDL 支持 QNX, AWTK 可以直接通过 SDL 支持 QNX,所以整个移植过程还是比较简单的。

1. Makefile

QNX 应用程序,默认使用 makefile 进行编译,所以 AWTK 使用 makefile 进行编译。我们把需要的参数放到 awtk_common.mk 中,然后在 makefile 中引入 awtk_common.mk 即可。

2. 获取屏幕大小

为了调用 gui_app_start,需要获取屏幕大小,这里使用 screen 库获取屏幕大小。

#include "tkc/types_def.h"
#include <screen/screen.h>bool_t qnx_get_screen_size(int* w, int* h) {screen_context_t screen_ctx;int ret = screen_create_context(&screen_ctx, SCREEN_APPLICATION_CONTEXT);return_value_if_fail(ret == 0, FALSE);int count = 0;screen_get_context_property_iv(screen_ctx, SCREEN_PROPERTY_DISPLAY_COUNT, &count);screen_display_t *screen_disps = calloc(count, sizeof(screen_display_t));screen_get_context_property_pv(screen_ctx, SCREEN_PROPERTY_DISPLAYS, (void **)screen_disps);screen_display_t screen_disp = screen_disps[0];free(screen_disps);int dims[2] = { 0, 0 };screen_get_display_property_iv(screen_disp, SCREEN_PROPERTY_SIZE, dims);*w = dims[0];*h = dims[1];screen_destroy_context(screen_ctx);return TRUE;
}

3. 支持鼠标

SDL 虽热支持键盘,但是不支持鼠标,所以需要自己实现鼠标支持。我们需要在 awtk/3rd/SDL/src/video/qnx/video.c 的 pumpEvents 函数中添加鼠标事件处理。

        case SCREEN_EVENT_POINTER: {int x = 0;int y = 0;int pressed = 0;SDL_Mouse *mouse = SDL_GetMouse();screen_get_event_property_iv(screen_ev, SCREEN_PROPERTY_DEVICE, &val);screen_get_event_property_iv(screen_ev, SCREEN_PROPERTY_POSITION, pair);x = pair[0];y = pair[1];screen_get_event_property_iv(screen_ev, SCREEN_PROPERTY_DISPLACEMENT, pair);pressed =  val;screen_get_event_property_iv(screen_ev, SCREEN_PROPERTY_MOUSE_HORIZONTAL_WHEEL, &val);screen_get_event_property_iv(screen_ev, SCREEN_PROPERTY_MOUSE_WHEEL, &val);if (prev_pressed == pressed) {SDL_SendMouseMotion(mouse->focus, mouse->mouseID, 0, x, y); } else {prev_pressed = pressed;SDL_SendMouseButton(mouse->focus, mouse->mouseID, pressed ? SDL_PRESSED : SDL_RELEASED, 1); }   }  

没有在多点触控设备上测试,所以没有支持多点触控事件,如果需要支持多点触控事件,需要在 pumpEvents 函数中添加 SCREEN_EVENT_TOUCH 事件处理。具体实现方法可以参考 qnx800/source/src/apps/screen/tutorials/events/events.c。

4. 程序入口

QNX 应用程序的入口函数是 main,在 main 函数中调用 gui_app_start 即可。

#include "awtk.h"extern int gui_app_start(int lcd_w, int lcd_h);
extern bool_t qnx_get_screen_size(int* w, int* h);int main(int argc, char* argv[]) {int lcd_w = 0;int lcd_h = 0;qnx_get_screen_size(&lcd_w, &lcd_h);assert(lcd_w > 0 && lcd_h > 0);gui_app_start(lcd_w, lcd_h);return 0;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词