TCanvasGPU用于FireMonkey上的移动平台。不幸的是,正如有人发现:FMX on iOS: how to perform partial invalidation?,此画布不支持cliprects,而Canvas.InvalidateRect(TRectF)总是使整个画布无效。
除非在OnPaint事件之前总是擦除画布背景,否则这不会太糟糕。这意味着任何只更新OnPaint矩形的尝试都将注定失败,因为整个区域首先被清除。因此,即使是最小的更新也需要绘制整个画布。
是否有人知道是否可以停止在FireMonkey中删除控件(特别是TPaintBox)背景?以前可以通过设置ControlStyle:= ControlStyle + [csOpaque]在VCL中实现。
我在FMX.Forms中找到了TCustomForm.PaintBackground,制作了一个本地副本并在TCustomForm.PaintRects中注释掉了对此的调用,认为它会阻止控件被删除,但TPaintBox画布仍然以某种方式被清除。
答案 0 :(得分:0)
回答我自己的问题......
默认情况下,TForm被设计为包含一个TRectangle作为第一个组件,并且在任何绘制事件中都用浅灰色填充。
在注释掉FMX.Objects.TRectangle.Paint中的这个填充时,在Windows上,TPaintBox Canvas会在任何Invalidate上保留其图像。
不幸的是,在Android上,屏幕现在只清除黑色而不是浅灰色。因此,似乎TCanvasGPU图像不会在移动设备上的绘制事件之间维护,这可能是不支持剪贴画的原因。