当前位置: 首页 > news >正文

江门城乡建设局官方网站重庆建设厅的网站

江门城乡建设局官方网站,重庆建设厅的网站,做个网站要钱吗,少女前线9a高性能芯片Ubuntu 上实现 AWTK-WIDGET-WEB-VIEW 开始以为很简单,后来发现是最麻烦的。因为 Ubuntu 上的 webview 库是 基于 GTK 的,而 AWTK 是基于 X11 的,两者的窗口系统不同,所以期间踩了几个大坑。 1. 编译 AWTK 在使用 Linux 的输入法时…

Ubuntu 上实现 AWTK-WIDGET-WEB-VIEW 开始以为很简单,后来发现是最麻烦的。因为 Ubuntu 上的 webview 库是 基于 GTK 的,而 AWTK 是基于 X11 的,两者的窗口系统不同,所以期间踩了几个大坑。

在这里插入图片描述

1. 编译

AWTK 在使用 Linux 的输入法时,链接了 GTK3,所以编译 webview 时也要链接 GTK3, 需要指定参数 WEBVIEW_WEBKITGTK_API=“4.0”。

3rd/build_linux.sh

cmake -S webview -B build -DWEBVIEW_WEBKITGTK_API="4.0" -DCMAKE_BUILD_TYPE=Debug
mkdir -p build/core/amalgamationcmake --build  buildmkdir ../bin
cp -avf ./build/core/libwebview*.so* ../bin

2. 运行

GTK 在 Ubuntu 上默认使用 Wayland,但是 AWTK 使用的是 X11,所以在运行时,需要设置 GDK_BACKEND 为 x11,保证两者使用的是同一个窗口系统。

export GDK_BACKEND=x11

3. 创建窗口

在 Ubuntu 上,创建一个 GTK 窗口,然后将 webview 嵌入到这个窗口中。

不使用 webview 的主循环,在 AWTK 定时器中去处理 GTK 的事件,发现 webview 可以处理窗口事件,但窗口上没有显示内容,后来发现需要调用 gdk_window_process_all_updates()。

static int s_webview_count = 0;
static uint32_t s_timer_id = 0;static ret_t web_view_on_timer(const timer_info_t* timer) {g_main_context_iteration(NULL, FALSE);gdk_window_process_all_updates();return RET_REPEAT;
}static ret_t sdl_window_set_child(SDL_Window* parent, webview_os_window_t os_window, int x, int y,int w, int h) {SDL_SysWMinfo wmInfo;SDL_VERSION(&wmInfo.version);SDL_GetWindowWMInfo(parent, &wmInfo);Window parent_win = wmInfo.info.x11.window;Display* display = wmInfo.info.x11.display;GtkWindow* gtk_window = GTK_WINDOW(os_window);GdkWindow* gdk_window = gtk_widget_get_window(GTK_WIDGET(gtk_window));Window win = gdk_x11_window_get_xid(gdk_window);XReparentWindow(display, win, parent_win, x, y);gtk_window_move(GTK_WINDOW(gtk_window), x, y);gtk_window_resize(GTK_WINDOW(gtk_window), w, h);return RET_OK;
}webview_os_window_t webview_os_window_create(SDL_Window* parent, int x, int y, int w, int h) {GtkWidget* gtk_window = gtk_window_new(GTK_WINDOW_POPUP);gtk_window_set_decorated(GTK_WINDOW(gtk_window), FALSE);gtk_window_move(GTK_WINDOW(gtk_window), x, y);gtk_window_resize(GTK_WINDOW(gtk_window), w, h);gtk_widget_show_all(gtk_window);if (s_webview_count == 0) {s_timer_id = timer_add(web_view_on_timer, NULL, 30);s_webview_count++;}sdl_window_set_child(parent, gtk_window, x, y, w, h);return (webview_os_window_t)gtk_window;
}

4. 调整窗口大小

调整窗口大小时,需要调整 GTK 窗口的大小。

遗憾的是窗口大小调整了,但是 webview 的内容并没有跟着调整,还需要进一步研究。

void webview_os_window_move_resize(SDL_Window* parent, webview_os_window_t subwindow, int x, int y,int w, int h) {GtkWidget* gtk_window = GTK_WIDGET(subwindow);gtk_window_move(GTK_WINDOW(gtk_window), x, y);gtk_window_resize(GTK_WINDOW(gtk_window), w, h);GList* children = gtk_container_get_children(GTK_CONTAINER(gtk_window));if (children != NULL) {GtkWidget* widget = GTK_WIDGET(children->data);gtk_widget_set_size_request(widget, w, h);}
}

5. 销毁窗口

销毁窗口时,需要销毁 GTK 窗口。在销毁最后一个窗口时,停止定时器。

void webview_os_window_destroy(webview_os_window_t subwindow) {GtkWidget* gtk_window = GTK_WIDGET(subwindow);gtk_widget_destroy(gtk_window);s_webview_count--;if (s_webview_count == 0) {timer_remove(s_timer_id);s_timer_id = 0;}gdk_window_process_all_updates();
}
http://www.yayakq.cn/news/397838/

相关文章:

  • 企业网站内容策划网站脚本错误
  • 盐城网站建设网站制作推广品牌网站建设多少钱
  • 山东省南水北调建设管理局网站全球代理
  • 电子商务网站建设步骤山东东成建设咨询有限公司网站
  • 做网站月收入计算机应用技术网站开发方向
  • 设计师网站图片wordpress需要 伪静态
  • 在阿里云服务器做淘客网站服务器上面建设网站
  • 做网站平台公司哪家好建门户网站需要多少钱
  • 本地网站搭建如何访问网页中国企业500强利润排行
  • 实用网站模板wordpress建站教程
  • 怎样建立一个营销网站做国外网站做外贸
  • 网站游戏入口产品推广的渠道有哪些
  • 网站开发用什么架构抖音关键词排名
  • 阿里云建设网站教程布吉网站建设哪家便宜
  • 潍坊建立企业网站公司wordpress 代码解析
  • 做免费看电影的网站不违法吗做网站用什么cms
  • 电子设计大赛网站开发企业网站建设招标书
  • 重庆做手机网站建设如何注册一家公司
  • 搜启网站建设哈尔滨自助建站
  • 手机网站设计图标商务网站的推广方法有哪些
  • 上海卖房网站红色风格网站
  • 做网站应该考虑哪些问题网站建设 东方网景
  • 网站设计哪个好网络广告词
  • 做婚庆网站的想法永州市住房和城乡建设局网站
  • 办公用品企业网站建设方案盐城网站建设价位
  • 高端建设响应式网站Hugo wordpress
  • app排版网站国家信息企业信用信息公示系统
  • 网站建设销售话术文本格式网站建设是管理费用的哪项费用
  • 做网站做什么赚钱网店模板图片
  • 北京网站建设交易wordpress设置摘要还是显示全文