首页 > 系统相关 >Ubuntu上运行Avalonia应用

Ubuntu上运行Avalonia应用

时间:2023-04-04 14:02:33浏览次数:32  
标签:Typeface Name typeface FontFamily 应用 Ubuntu using Avalonia

CustomFontManagerImpl代码:

using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using Avalonia.Media;
using Avalonia.Media.Fonts;
using Avalonia.Platform;
using Avalonia.Skia;
using SkiaSharp;

namespace TodoList
{
    public class CustomFontManagerImpl : IFontManagerImpl
    {
        private readonly Typeface[] _customTypefaces;
        private readonly string _defaultFamilyName;

        //Load font resources in the project, you can load multiple font resources
        private readonly Typeface _defaultTypeface =
            new Typeface("resm:TodoList.Assets.Fonts.msyh#微软雅黑");

        public CustomFontManagerImpl()
        {
            _customTypefaces = new[] { _defaultTypeface };
            _defaultFamilyName = _defaultTypeface.FontFamily.FamilyNames.PrimaryFamilyName;
        }

        public string GetDefaultFontFamilyName()
        {
            return _defaultFamilyName;
        }

        public IEnumerable<string> GetInstalledFontFamilyNames(bool checkForUpdates = false)
        {
            return _customTypefaces.Select(x => x.FontFamily.Name);
        }

        private readonly string[] _bcp47 =
        {
            CultureInfo.CurrentCulture.ThreeLetterISOLanguageName, CultureInfo.CurrentCulture.TwoLetterISOLanguageName
        };

        public bool TryMatchCharacter(int codepoint, FontStyle fontStyle, FontWeight fontWeight, FontFamily fontFamily,
            CultureInfo culture, out Typeface typeface)
        {
            foreach (var customTypeface in _customTypefaces)
            {
                if (customTypeface.GlyphTypeface.GetGlyph((uint)codepoint) == 0)
                {
                    continue;
                }

                typeface = new Typeface(customTypeface.FontFamily.Name, fontStyle, fontWeight);

                return true;
            }

            var fallback = SKFontManager.Default.MatchCharacter(fontFamily?.Name, (SKFontStyleWeight)fontWeight,
                SKFontStyleWidth.Normal, (SKFontStyleSlant)fontStyle, _bcp47, codepoint);

            typeface = new Typeface(fallback?.FamilyName ?? _defaultFamilyName, fontStyle, fontWeight);

            return true;
        }

        public IGlyphTypefaceImpl CreateGlyphTypeface(Typeface typeface)
        {
            SKTypeface skTypeface;

            if (typeface == null || typeface.FontFamily == null)
            {
                skTypeface = SKTypeface.FromFamilyName(_defaultTypeface.FontFamily.Name);
            }
            else
            {
                switch (typeface.FontFamily.Name)
                {
                    case FontFamily.DefaultFontFamilyName:
                    case "微软雅黑": //font family name
                        skTypeface = SKTypeface.FromFamilyName(_defaultTypeface.FontFamily.Name);
                        break;
                    default:
                        skTypeface = SKTypeface.FromFamilyName(typeface.FontFamily.Name,
                            (SKFontStyleWeight)typeface.Weight, SKFontStyleWidth.Normal,
                            (SKFontStyleSlant)typeface.Style);
                        break;
                }
            }

            return new GlyphTypefaceImpl(skTypeface);
        }
    }
}

 

标签:Typeface,Name,typeface,FontFamily,应用,Ubuntu,using,Avalonia
From: https://www.cnblogs.com/wzwyc/p/17286160.html

相关文章

  • Ubuntu 修改root密码(初始密码)
    转发自文章:Ubuntu设置修改root密码(初始密码)ubuntu默认的root用户是没有固定密码的,它的密码是随机产生并且动态改变的,即每次开机都有一个新的root密码,如果想查看root密码,那么直接设置的root密码即可。使用安装时候的用户登录进入终端在终端输入命令sudopasswdroot#回车会显......
  • 计讯物联智慧灯杆系统应用场景大全
    在数字时代之下,新一代信息技术赋能传统行业转型升级是大势所趋。智慧灯杆充分发挥自身多设备多业务承载的优势,集合多功能于一身,是5G落地应用的有力载体,更是千行百业智慧化发展的最佳神器。  计讯物联以国家政策导向与行业发展痛点为出发点,以提升差异化竞争力为核心,聚焦各大......
  • Tomcat 应用中并行流带来的类加载问题
    vivo互联网技术微信公众号 作者:肖铭轩、王道环随着Java8的不断流行,越来越多的开发人员使用并行流(parallel)这一特性提升代码执行效率。但是,作者发现在Tomcat容器中使用并行流会出现动态加载类失败的情况,通过对比Tomcat多个版本的源码,结合并行流和JVM类加载机制的原理,成......
  • ubuntu22.04 部署 Auditd
    安装Auditd#apt-yinstallauditdauditd.conf##Thisfilecontrolstheconfigurationoftheauditdaemon#local_events=yeswrite_logs=yeslog_file=/var/log/audit/audit.log#指定日志文件log_group=admlog_format=ENRICHEDflush=INCREMENTA......
  • 详细介绍Glib 主事件循环轻度分析与编程应用
    glib是一个跨平台、用C语言编写的若干底层库的集合。编写案例最好能够结合glib源码,方便随时查看相关函数定义。glib实现了完整的事件循环分发机制。有一个主循环负责处理各种事件。事件通过事件源描述,常见的事件源文件描述符(文件、管道和socket)超时idle事件当然,也可以自......
  • 2-SpringBoot开发单体应用
    SpringBoot开发单体应用1.SpringBootWeb开发使用SpringBoot的步骤:创建一个SpringBoot应用,选择我们需要的模块,SpringBoot就会默认将我们的需要的模块自动配置好;手动在配置文件中配置部分配置项目就可以运行起来了。专注编写业务代码,不需要考虑以前那样一大堆的配置......
  • frp内网穿透环境搭建--服务端ubuntu 客户端win10
    前提条件:1个公网ip服务器,例如我的是腾讯云服务器ubuntu20下载frp软件,下的是0.33.0版本,该版本直接把软件封装成服务,能用ubuntu直接定义开机自启等github:https://github.com/fatedier/frp.git注意查看ubuntu系统的架构是arm还是amd,下载对应版本,否则安装了也用不了解压文件,编辑......
  • vue第三课:简单点击器应用
    简单需求:1,最小为0,小于0则不能再点击减少,并显示提示2,最大值为10,小于10则可以点击增加,超过10则不能再点击,并显示提示<!DOCTYPEhtml><html><head><metacharset="UTF-8"><title>v-html测试</title><scriptsrc="vue.js"></script>......
  • BFGS算法中的SWM公式应用
    BFGS算法矩阵$B_k$的迭代公式为:$$B_{k+1}=B_k+\frac{y_ky_k^T}{y_k^T\delta_k}-\frac{B_k\delta_k\delta_k^TB_k}{\delta_k^TB_k\delta_k}$$Sherman-Morrison公式为:假设A是n阶可逆矩阵,t为常量,u,v是n维向量,且$A+uv^T$也是可逆矩阵,则$$(A+\frac{uv^T}{t})^{-1}=A^{......
  • 应用层协议,传输层协议和端口的对应关系
    应用层协议 传输层协议 端口号1.HTTP TCP 80超文本传输协议2.FTP TCP 21和20文件传输协议3.TELNET TCP 23远程登录管理4.SMTP TCP 25简单邮件传输协议5.POP3 TCP 110邮局协议(第三个版本)6.TFTP UDP 69简单文件传输协议7.RPC UDP 111远程......