[DTK] 软件开发,关于字体的设置和DTK的字体服务
Tofloor
poster avatar
deepin
2023-05-17 05:15
Author

image.png

关于字体这块,现在论坛出现比较多的问题就是:WPS的文档界面排版出现错乱或重叠。然后,官方是推荐重新安装win字体,不过对于普通用户来讲这种处理方式确实有点拖沓,同时这也提示着deepin/UOS的软件开发者们在开发软件的过程中需要注重一些细节。

对于桌面系统的用户来讲,他们更希望查看软件界面的字体时,是美观稳定的,无需再重新安装字体相关的软件或deb包,也就是在软件界面本身中进行字体设置选择

那么,用户在软件中直接设置字体,软件开发者肯定要把一些稳定的字体一起绑定到软件程序中。这些字体的程序和文件,绑定到软件程序中,实际也是在要求deepin/UOS 操作系统的DTK能够提供一种软件字体开发服务,需要在DTK开发文档中提供实现字体程序API的调用方法和开发流程,让软件开发者能够一定程度上减少代码量和测试次数。
image.png
软件中的字体通过DTK的字体服务(font kit)绑定,有以下几个好处:

1.规范桌面系统用户的操作行为,让用户能减少安装程序包的次数,增加软件使用的频率,让系统也能更加稳定、安全;

2.开发者无需再到Linux生态中花更多时间找相关字体,直接调用DTK的字体服务(font kit),字体的大小、颜色等设置可以统一由deepin系统的设置(或控制中心)来统一调度。就如,用户在系统的控制中心中设置字体的大小为“”,那么系统中安装的一些软件中的字体大小也会变为“”,还有初始化的还原操作。

3.不稳定的字体,不仅会导致软件界面出现排版错乱,还有可能出现“乱码”、“无法打印”等问题,而DTK提供字体服务(font kit)则是把这些问题统一起来处理,减少软件应用层开发者的工作量,深层次也保证了系统的可靠性。

......

最后,我希望deepin用户在使用一些软件出现的问题,能够转变为deepin软件开发平台DTK提供的后台服务能力,让软件开发者和用户都能轻易上手。

Reply Favorite View the author
All Replies
阿尼樱奈奈
deepin
2023-05-17 05:20
#1

意思是各个软件用各自的字体,并且有相关调整设置?

Reply View the author
deepin
2023-05-17 05:26
#2
阿尼樱奈奈

意思是各个软件用各自的字体,并且有相关调整设置?

不是,用DTK提供的字体,软件能够随系统共同响应。

比如,你在deepin系统的“控制中心”中设置字体为中文,字体大小为中型,然后软件本身也能会共同响应,软件界面中的字体内容也是中文、字体大小也为中型。

当然,如果你也可以再次到软件中重新设定字体的国家语言类型和大小。

Reply View the author
fuuko
deepin
2023-05-17 06:24
#3

但不得不说那个API真的又臭又长,根本记不住

c++
 m_TrashDescritionLab = new DLabel();
    DFontSizeManager::instance()->bind(m_TrashDescritionLab, DFontSizeManager::T6, QFont::Medium);
    QPalette pal = DApplicationHelper::instance()->palette(m_TrashDescritionLab);
    QColor color_BT = pal.color(DPalette::BrightText);
    DGuiApplicationHelper::ColorType themeType = DGuiApplicationHelper::instance()->themeType();
    if (themeType == DGuiApplicationHelper::LightType) {
        color_BT.setAlphaF(0.5);
        pal.setBrush(DPalette::Text, color_BT);
    } else if (themeType == DGuiApplicationHelper::DarkType) {
        color_BT.setAlphaF(0.75);
        pal.setBrush(DPalette::Text, color_BT);
    }
    m_TrashDescritionLab->setForegroundRole(DPalette::Text);
    m_TrashDescritionLab->setPalette(pal);
Reply View the author
忘记、过去
deepin
2023-05-17 06:43
#4
fuuko

但不得不说那个API真的又臭又长,根本记不住

c++
 m_TrashDescritionLab = new DLabel();
    DFontSizeManager::instance()->bind(m_TrashDescritionLab, DFontSizeManager::T6, QFont::Medium);
    QPalette pal = DApplicationHelper::instance()->palette(m_TrashDescritionLab);
    QColor color_BT = pal.color(DPalette::BrightText);
    DGuiApplicationHelper::ColorType themeType = DGuiApplicationHelper::instance()->themeType();
    if (themeType == DGuiApplicationHelper::LightType) {
        color_BT.setAlphaF(0.5);
        pal.setBrush(DPalette::Text, color_BT);
    } else if (themeType == DGuiApplicationHelper::DarkType) {
        color_BT.setAlphaF(0.75);
        pal.setBrush(DPalette::Text, color_BT);
    }
    m_TrashDescritionLab->setForegroundRole(DPalette::Text);
    m_TrashDescritionLab->setPalette(pal);

最后一步不推荐直接设置 QPalette,我记得会有警告

Dtk 里面一般要求用 DApplicationHelper::instance()->setPalette(m_TrashDescritionLab, pal); 设置调色板

Reply View the author
deepin
2023-05-17 07:20
#5
fuuko

但不得不说那个API真的又臭又长,根本记不住

c++
 m_TrashDescritionLab = new DLabel();
    DFontSizeManager::instance()->bind(m_TrashDescritionLab, DFontSizeManager::T6, QFont::Medium);
    QPalette pal = DApplicationHelper::instance()->palette(m_TrashDescritionLab);
    QColor color_BT = pal.color(DPalette::BrightText);
    DGuiApplicationHelper::ColorType themeType = DGuiApplicationHelper::instance()->themeType();
    if (themeType == DGuiApplicationHelper::LightType) {
        color_BT.setAlphaF(0.5);
        pal.setBrush(DPalette::Text, color_BT);
    } else if (themeType == DGuiApplicationHelper::DarkType) {
        color_BT.setAlphaF(0.75);
        pal.setBrush(DPalette::Text, color_BT);
    }
    m_TrashDescritionLab->setForegroundRole(DPalette::Text);
    m_TrashDescritionLab->setPalette(pal);

所以,后续要进行适度优化,方便软件开发者。

Reply View the author
fuuko
deepin
2023-05-17 14:55
#6
忘记、过去

最后一步不推荐直接设置 QPalette,我记得会有警告

Dtk 里面一般要求用 DApplicationHelper::instance()->setPalette(m_TrashDescritionLab, pal); 设置调色板

还行吧,这段是从官方的代码仓库里截取出来的doubt

Reply View the author