首页 > 其他分享 >UNO.Skia.Gtk 设置窗口尺寸变化方法

UNO.Skia.Gtk 设置窗口尺寸变化方法

时间:2024-09-12 20:04:38浏览次数:1  
标签:origin git 代码 Gtk Skia GtkHost UNO public size

本文记录一个简单的在 UNO.Skia.Gtk 应用里面,配置 GTK 平台修改窗口尺寸的方法

为了全平台通用性,推荐是走定义接口加平台注入的方式。定义的接口如下

public interface IWindowActivator
{
    void ResizeMainWindow(Size size);
}

这里为了方便起见,直接使用静态属性注入方法,如以下定义

public static class WindowHelper
{
    public static IWindowActivator WindowActivator { get; set; } = null!;
}

在 GTK 平台上定义具体的修改窗口大小的实现

    class WindowActivator : IWindowActivator
    {
        public GtkHost GtkHost { get; set; } = null!;

        public void ResizeMainWindow(Size size)
        {
            var nativeWindow = GtkHost.Window;

            nativeWindow.Resize((int) size.Width, (int) size.Height);
        }
    }

完成定义之后,在 GTK 应用初始化进行注入属性,如下面代码

 public static void Main(string[] args)
 {
     ExceptionManager.UnhandledException += delegate (UnhandledExceptionArgs expArgs)
     {
         Console.WriteLine("GLIB UNHANDLED EXCEPTION" + expArgs.ExceptionObject.ToString());
         expArgs.ExitApplication = true;
     };

     var windowActivator = new WindowActivator();
     WindowHelper.WindowActivator = windowActivator;

     var host = new GtkHost(() =>
     {
         var app = new AppHead();
         return app;
     });
     windowActivator.GtkHost = host;
     host.Run();
 }

接下来即可在通用的全平台代码里面利用 WindowHelper 辅助修改 GTK 的窗口

    private void Button_OnClick(object sender, RoutedEventArgs e)
    {
        var size = new Size(Random.Shared.Next(200, 1000), Random.Shared.Next(200, 1000));
        WindowHelper.WindowActivator.ResizeMainWindow(size);
    }

更进一步的优化是在各个平台里面都实现修改窗口尺寸的具体实现,如此即可让全平台部分的代码可以实现使用相同的代码,用接口加多态实现完成对各个平台的设置窗口

本文以上代码放在githubgitee 欢迎访问

可以通过如下方式获取本文的源代码,先创建一个空文件夹,接着使用命令行 cd 命令进入此空文件夹,在命令行里面输入以下代码,即可获取到本文的代码

git init
git remote add origin https://gitee.com/lindexi/lindexi_gd.git
git pull origin f91082b406f3ac1e1a89c536263fd62c7d99be47

以上使用的是 gitee 的源,如果 gitee 不能访问,请替换为 github 的源。请在命令行继续输入以下代码

git remote remove origin
git remote add origin https://github.com/lindexi/lindexi_gd.git
git pull origin f91082b406f3ac1e1a89c536263fd62c7d99be47

获取代码之后,进入 LacebayjeejiBehebilawla 文件夹

如需设置进入全屏,请参阅 UNO 设置平台进入全屏窗口模式的方法

标签:origin,git,代码,Gtk,Skia,GtkHost,UNO,public,size
From: https://www.cnblogs.com/lindexi/p/17970812

相关文章

  • UNO 已知问题 在后台线程触发 SKXamlCanvas 的 Invalidate 且在 PaintSurface 事件抛
    本文记录一个UNO已知问题,在UNO里面可以利用SKXamlCanvas对接Skia绘制到应用里面。如果此时在后台线程里面调用SKXamlCanvas的Invalidate触发界面的重新刷新,但在具体的执行绘制PaintSurface事件里面对外抛出异常,将会导致应用炸掉背景:我准备在UNO里面将Microsoft......
  • 使用Arduino Uno作为烧录器为Atmega328PB芯片直接烧录程序
    目录摘要烧录方式操作过程准备工作将Arduinouno设置为烧录器烧录器和目标板电路连接添加第三方库设置参数程序烧写使用ArduinoIDE进行烧写使用Ardudess进行烧写成果展示摘要通过将一块ArduinoUno设置成ISP模式作为烧录器,从而实现为ArduinoProMini空白的ATMega328PB芯片直接......
  • UNO WinUI 已知问题 在 XAML 条件构建里将 win 平台加入 Ignorable 将构建失败
    如果在UNO项目里面,为了进行XAML条件构建,将win平台加入到mc:Ignorable里面,将会在构建时提示XamlInternalErrorerrorWMC9999:Unexpected'NONE'inparserule'Element::=.EmptyElement(StartElementElementBody).'.错误如以下的代码,将会在构建时失败,提示X......
  • GtkSharp 获取触摸宽度高度面积尺寸信息
    本文将告诉大家如何在C#dotnet里面,从GTK里面获取到触摸的宽度高度信息,即触摸面积或触摸尺寸信息准确来说本文的方法是我在lsj的帮助下试出来的,我没有找到正式的文档对此有描述。本文测试的机器是在UOS系统搭配兆芯的CPU的机器上,这台机器采用的是希沃的某款触摸框的设......
  • UNO 设置平台进入全屏窗口模式的方法
    本文记录在UNOPlatform的桌面窗口项目里,进入和退出全屏窗口的方法,此方法包括UNO的WPF和GTK和WinUI版本的实现在2024.06的5.2.139的UNO版本里面,可通过如下简单方法进入全屏Microsoft.UI.Xaml.Windowwindow=...window.AppWindow.SetPresenter(AppWindowPrese......
  • Pipelines.Sockets.Unofficial 一个纯托管实现对接 System.IO.Pipelines 的 Sockets
    本文将和大家介绍Pipelines.Sockets.Unofficial这个由纯托管代码实现的,对接了System.IO.Pipelines的Sockets库。这个库不仅代码性能高,且上层调用的API足够简洁本文介绍的Pipelines.Sockets.Unofficial库是在GitHub上使用最友好的MIT协议开源的项目,详细请参阅https......
  • WPF UNO 测试固定尺寸且水平和垂直对齐设置 Stretch 的元素在容器内的布局行为
    本文将告诉大家我对WPF的自定义布局容器和自定义控件进行的布局行为测试中的一个小点,即测试固定元素的尺寸的情况下或元素尺寸为有限尺寸的情况下,同步设置元素的水平和垂直对齐为Stretch来测试元素在容器内的布局行为,元素分别在容器给元素的布局尺寸大于元素的尺寸和小于元素......
  • 【Ynoi 2019 模拟赛】Yuno loves sqrt technology III
    LuoguP5048YunolovessqrttechnologyIII题意给定一个长度为\(n\)的序列\(a\)。有\(m\)次询问:查询区间\([l,r]\)中众数的出现次数。强制在线。数据范围与约定\(1\len,m,a_i\le5*10^5\)。题解十年前《蒲公英》的做法,这道题只能拿\(80\)分,因为这道题卡了空......
  • iverilog+gtkwave搭建轻量级verilog仿真环境
    前言在之前用到的仿真工具只有vivado与modelsim,vivado的笨重不用多说,可能你搭建一个工程的时间比你看波形的时间还要长,modelsim倒是稍微轻一些,但步骤也较为繁琐,虽然我在之前也意外收获了modelsim的仿真脚本模板且屡试不爽,但还是觉得稍微有些麻烦,正好之前在学习tinyrv时安装了iver......
  • 8月最新版ChatGPT商业运营网站程序源码,支持Midjourney绘画Dalle3绘画,多种语音对话+sun
    8月最新版ChatGPT商业运营网站程序源码,支持Midjourney绘画Dalle3绘画,多种语音对话+suno-ai音乐生成+TTS语音对话+支持GPTs文章目录8月最新版ChatGPT商业运营网站程序源码,支持Midjourney绘画Dalle3绘画,多种语音对话+suno-ai音乐生成+TTS语音对话+支持GPTs前言一、文档总......