SOUI, UI, just so so!

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 650|回复: 0

关于使用Skia渲染时不能显示韩文等特殊文字

[复制链接]

11

主题

29

帖子

423

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
423
发表于 2018-6-25 14:20:02 | 显示全部楼层 |阅读模式
不少网友发现使用GDI渲染模块的时候可以显示韩文,但是换成skia渲染就不行了,不知道是什么原因。其实原因很简单,因为skia和gdi的字体渲染是不一样的。
在GDI里,使用一个字体,如果一些字符在字体里没有,GDI会自动加载一个包含这些字符的字体,并使用这个字体来渲染。
但是Skia里没有这种机制,结果就是渲染不出这些文字。
出现这种情况一般是因为支持多语言的需要,使用GDI虽然显示出来了,实际上可能并不是用户期望的字体。
要解决这个问题,实际上还是需要根据选择的语言来切换字体。这就需要在切换语言的时候能够重建SOUI中使用的字体库。
git的master分支已经实现了在切换多语言时自动更新字体,实现方式参考demos/multilang这个demo
注意下面的代码:
  1. void CMainDlg::OnLanguage(int nID)
  2. {
  3.         ITranslatorMgr *pTransMgr =  SApplication::getSingletonPtr()->GetTranslator();
  4.         m_LangID = nID;
  5.         bool bCnLang = nID == R.id.lang_cn;

  6.         pugi::xml_document xmlLang;
  7.         if (SApplication::getSingletonPtr()->LoadXmlDocment(xmlLang, bCnLang?_T("cn"):_T("en"), _T("lang")))
  8.         {
  9.                 CAutoRefPtr<ITranslator> lang;
  10.                 pTransMgr->CreateTranslator(&lang);
  11.                 lang->Load(&xmlLang.child(L"language"), 1);//1=LD_XML
  12.                 pTransMgr->SetLanguage(lang->name());
  13.                 pTransMgr->InstallTranslator(lang);

  14.                 SFontPool::getSingletonPtr()->UpdateFonts();//update fonts that defined by translator
  15.                 SDispatchMessage(UM_SETLANGUAGE,0,0);
  16.         }

  17. }
复制代码

SFontPool::getSingletonPtr()->UpdateFonts()会自动从当前语言包中指定的字体信息进行必要的替换。
在语言翻译的XML中,新版本增加了一个fonts节点如下:
  1. <fonts>
  2.     <!--定义字体更新策略, name是在布局中定义的字体的name属性,这里可以修改字体的字符集及字体名-->
  3.     <font name="default" charset="GBK" face="微软雅黑"/>
  4.     <font name="test" charset="GBK" face="华文彩云"/>
  5.   </fonts>
复制代码
这fonts中,每一个font定义一种根据name属性进度字体替换的规则,在布局文件中可以指定一个字体的name属性如下:
  1. <text size="-1,-1" extend_left="5" font="name:test,bold:1">@string/title</text>
复制代码
注意font="name:test,bold:1"这个属性中的name:test,这一行命名这个使用的字体的名字为test, 在updateFonts的时候,会自动将这里的test这个font的face修改成"华文彩云"。
当然如果不是其它语言可能还要修改charset这个属性才会正常显示。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|Setoutsoft Inc. ( 粤ICP备18051196-1 )

GMT+8, 2018-11-17 22:48 , Processed in 0.051347 second(s), 5 queries , File On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表