您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
86 行
2.8 KiB
86 行
2.8 KiB
using System;
|
|
using UIWidgets.scheduler;
|
|
using UIWidgets.ui;
|
|
|
|
namespace UIWidgets.rendering {
|
|
public class RendererBinding {
|
|
public RendererBinding(Window window, SchedulerBinding schedulerBinding) {
|
|
this._window = window;
|
|
|
|
this._schedulerBinding = schedulerBinding;
|
|
|
|
this._pipelineOwner = new PipelineOwner(
|
|
binding: this,
|
|
onNeedVisualUpdate: this._schedulerBinding.ensureVisualUpdate
|
|
);
|
|
|
|
window._onMetricsChanged = this.handleMetricsChanged;
|
|
this.initRenderView();
|
|
this._schedulerBinding.addPersistentFrameCallback(this._handlePersistentFrameCallback);
|
|
}
|
|
|
|
public readonly Window _window;
|
|
|
|
public readonly SchedulerBinding _schedulerBinding;
|
|
|
|
public void initRenderView() {
|
|
this.renderView = new RenderView(configuration: this.createViewConfiguration());
|
|
this.renderView.scheduleInitialFrame();
|
|
}
|
|
|
|
public PipelineOwner pipelineOwner {
|
|
get { return this._pipelineOwner; }
|
|
}
|
|
|
|
public PipelineOwner _pipelineOwner;
|
|
|
|
public RenderView renderView {
|
|
get { return (RenderView) this._pipelineOwner.rootNode; }
|
|
set { this._pipelineOwner.rootNode = value; }
|
|
}
|
|
|
|
public void handleMetricsChanged() {
|
|
this.renderView.configuration = this.createViewConfiguration();
|
|
this._schedulerBinding.scheduleForcedFrame();
|
|
}
|
|
|
|
public ViewConfiguration createViewConfiguration() {
|
|
var devicePixelRatio = this._window.devicePixelRatio;
|
|
return new ViewConfiguration(
|
|
size: this._window.physicalSize / devicePixelRatio,
|
|
devicePixelRatio: devicePixelRatio
|
|
);
|
|
}
|
|
|
|
public void _handlePersistentFrameCallback(TimeSpan timeStamp) {
|
|
this.drawFrame();
|
|
}
|
|
|
|
public void drawFrame() {
|
|
this.pipelineOwner.flushLayout();
|
|
this.pipelineOwner.flushCompositingBits();
|
|
this.pipelineOwner.flushPaint();
|
|
this.renderView.compositeFrame();
|
|
}
|
|
|
|
public void render(Scene scene) {
|
|
this._window.render(scene);
|
|
}
|
|
}
|
|
|
|
public class RendererBindings {
|
|
public RendererBindings(Window window) {
|
|
this._window = window;
|
|
this._schedulerBinding = new SchedulerBinding(window);
|
|
this._rendererBinding = new RendererBinding(window, this._schedulerBinding);
|
|
}
|
|
|
|
public readonly Window _window;
|
|
public readonly RendererBinding _rendererBinding;
|
|
public readonly SchedulerBinding _schedulerBinding;
|
|
|
|
public void setRoot(RenderBox root) {
|
|
this._rendererBinding.renderView.child = root;
|
|
}
|
|
}
|
|
}
|