FireMonkey 源码学习(3)

本文详细介绍了TTextLayoutNG中的渲染单元TGPURun及其组织结构,包括行(TGPULine)和帧(Frame)的概念。探讨了TCharDic和TFamilyDic在字体+颜色区分下的角色,以及字符渲染处理对象(TCharRec)如何提高渲染效率。最后,解释了DoRenderLayout和DoDrawLayout函数的作用。

五、TTextLayoutNG

在FMX.TextLayout.GPU.pas文件中,实现了几个基础功能,其中:

(1)渲染单元

在TextLayout中,每一批同字体和颜色的1~n个字符,组成一个最基本的渲染单元TGPURun,1~n个渲染单元构成一行(TGPULine),1~n行构成一帧(Frame)。如下图:

image

行和帧只是一个组织方式,其中没有太多的内容。主要的实现还是在渲染单元(TGPURun)中。

(2)TCharDic和TFamilyDic

TextLayout的实现思路是:

每个渲染单元按照 字体 + 颜色 进行区分的,即若干相同字体和颜色的字符,保存在同一个渲染单元中进行处理。对每个渲染单元,按照其对应的字体获取每个相同字符渲染处理对象(TCharDic):

PCharRec = ^TCharRec;
TCharRec = record
          Glyph: TFontGlyph;
          SrcRect: TRectF;
          Bitmap: TBitmap;
end;


TCharDic = class(TDictionary<UCS4Char, PCharRec>);

TFamilyDic = class(TDictionary<Int64, TCharDic>);

每个字符渲染处理对象保存了在当前字体下,对应的字符在画布上的字形、大小,并预先绘制好相应的图片,当需要绘制时,将这些图片直接绘制到画布上,以加快速度。FireMonkey还使用了另外一种做法,就是将绘制过程放入TPathData中存储,在绘制时直接调用Path进行快速绘制。

(3)RenderLayout

在TTextLayout中使用RenderLayout输出结果,以TEdit为例 ,如下:

image

 

DoRenderLayout函数进行内部渲染,DoDrawLayout将内部渲染结果绘制到画布(Canvas)上。

转载于:https://www.cnblogs.com/ChinaEHR/p/3793499.html

以下转载自官方软件介绍 通过OrangeUI,您可以快速及稳定的实现如下功能,并且全部免费: 1.APP主页九宫格菜单,在主流APP中经常能够见到,OrangeUI只需要一个控件,而不是Image和Label堆出来实现。 2.广告图片轮播功能,并且是可以跟随手指滑动切换,这是目前别的控件还做不到的。 3.列表ListView支持直接设置图片的URL,通过底层的多线程下载功能,可以轻松实现异步加载图片,并且不会感觉到卡顿。 4.列表框ListView自带下拉刷新、下拉加载的功能,在手机上加载2w条数据只需2秒。 5.APP上数据呈现以ListView为主,列表框ListView支持的设计面板模式,可以在设计面板上添加任意数目的控件,排列好布局,各种样式轻松搞定。 6.实现稳定的页面切换效果,让您的APP如原生般的用户体验(APP最注重的就是用户体验)。 7.各种通用的界面,如等待框,对话框,菜单框,拍照菜单框,选择框等。 8.可以快速生成IOS和Android平台下所用到的各种尺寸的程序图标和启动界面图片。 9.网上商城、好友聊天、新闻浏览、外贸验货、平板点单等示例,包含全部源码的。 10.可以手势切换的分页控件,加入到您的APP中可以极大的方便用户进行操作。 11.稳定灵活的Frame开发方案(发布会李维老师推荐),可以很好的将复杂的主窗体分解成四、五个小页面,加快页面的截入速度,减少内存占用,并且按返回键自动返回上一页的处理,让你打造出高效的APP。 12.开源的微信接口、微博接口、阿里接口、支付宝支付、微信支付、推送功能源码,让你的APP更强大。 13.简单实用的图片HTTP上传下载客户端和服务端(IndyHttpServer)的示例源码。 14.发朋友圈、查看朋友圈的客户端和后台服务端(DataSnap)的示例源码。 15.按钮在ScrollBox上用手指滑动不会触发点击事件。 16.编辑框在ScrollBox上用手指滑动时不会触发输入事件,并已自动处理虚拟键盘显示/隐藏事件,不会挡住编辑框。 17.列表ListView支持在设计时添加Item并能即时预览到效果,目前自带和别的控件都做不到的。 18.OrangeUI的用户目前已经超过200名,用户开发的APP也不下百个,不少都上架到AppStore,腾讯应用宝等市场。 19.每个控件配备专门的DEMO和文档教程,使用起来更轻松。 20.提供专门的OrangeUI技术支持QQ群(群号:10900297),也可以加我QQ452330643,提供专业的APP开发支持。 21.定期一至两个月更新一次,不断添加新的控件适应新的趋势,以及新的实用示例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值