zoukankan      html  css  js  c++  java
  • FireMonkey 源码学习(3)

    五、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)上。

  • 相关阅读:
    WebServce之Map类型传输
    WebService之跨域
    WebServce之拦截器
    Webservice之发布
    JAVA之ElasticSearch
    MonogoDb学习笔记
    DotNetCore自带Ioc使用程序集名称注入
    生产者与消费者
    哈希算法-Time33
    线程安全的集合操作类
  • 原文地址:https://www.cnblogs.com/ChinaEHR/p/3793499.html
Copyright © 2011-2022 走看看