Pass a replay group to ol.render.Event

This commit is contained in:
Éric Lemoine
2014-06-14 14:21:34 +02:00
parent a2a06c745a
commit 49a1215f75
5 changed files with 30 additions and 12 deletions

View File

@@ -35,13 +35,14 @@ ol.render.EventType = {
* @param {ol.render.EventType} type Type.
* @param {Object=} opt_target Target.
* @param {ol.render.IVectorContext=} opt_vectorContext Vector context.
* @param {ol.render.IReplayGroup=} opt_replayGroup Replay group.
* @param {olx.FrameState=} opt_frameState Frame state.
* @param {?CanvasRenderingContext2D=} opt_context Context.
* @param {?ol.webgl.Context=} opt_glContext WebGL Context.
*/
ol.render.Event = function(
type, opt_target, opt_vectorContext, opt_frameState, opt_context,
opt_glContext) {
type, opt_target, opt_vectorContext, opt_replayGroup, opt_frameState,
opt_context, opt_glContext) {
goog.base(this, type, opt_target);
@@ -52,6 +53,12 @@ ol.render.Event = function(
*/
this.vectorContext = opt_vectorContext;
/**
* @type {ol.render.IReplayGroup|undefined}
* @todo api
*/
this.replayGroup = opt_replayGroup;
/**
* @type {olx.FrameState|undefined}
* @todo api

View File

@@ -90,8 +90,8 @@ ol.renderer.canvas.Layer.prototype.dispatchComposeEvent_ =
var render = new ol.render.canvas.Immediate(
context, frameState.pixelRatio, frameState.extent, transform,
frameState.view2DState.rotation);
var composeEvent = new ol.render.Event(type, layer, render, frameState,
context, null);
var composeEvent = new ol.render.Event(type, layer, render, null,
frameState, context, null);
layer.dispatchEvent(composeEvent);
render.flush();
}

View File

@@ -17,6 +17,7 @@ goog.require('ol.layer.Vector');
goog.require('ol.render.Event');
goog.require('ol.render.EventType');
goog.require('ol.render.canvas.Immediate');
goog.require('ol.render.canvas.ReplayGroup');
goog.require('ol.renderer.Map');
goog.require('ol.renderer.canvas.ImageLayer');
goog.require('ol.renderer.canvas.Layer');
@@ -97,8 +98,11 @@ ol.renderer.canvas.Map.prototype.dispatchComposeEvent_ =
var map = this.getMap();
var context = this.context_;
if (map.hasListener(type)) {
var view2DState = frameState.view2DState;
var extent = frameState.extent;
var pixelRatio = frameState.pixelRatio;
var view2DState = frameState.view2DState;
var resolution = view2DState.resolution;
var rotation = view2DState.rotation;
ol.vec.Mat4.makeTransform2D(this.transform_,
this.canvas_.width / 2,
this.canvas_.height / 2,
@@ -106,12 +110,19 @@ ol.renderer.canvas.Map.prototype.dispatchComposeEvent_ =
-pixelRatio / view2DState.resolution,
-view2DState.rotation,
-view2DState.center[0], -view2DState.center[1]);
var render = new ol.render.canvas.Immediate(context, pixelRatio,
frameState.extent, this.transform_, view2DState.rotation);
var composeEvent = new ol.render.Event(type, map, render, frameState,
context, null);
var vectorContext = new ol.render.canvas.Immediate(context, pixelRatio,
extent, this.transform_, rotation);
var tolerance = resolution / (2 * pixelRatio);
var replayGroup = new ol.render.canvas.ReplayGroup(tolerance, extent,
resolution);
var composeEvent = new ol.render.Event(type, map, vectorContext,
replayGroup, frameState, context, null);
map.dispatchEvent(composeEvent);
render.flush();
vectorContext.flush();
if (!replayGroup.isEmpty()) {
replayGroup.replay(context, extent, pixelRatio, this.transform_,
rotation, {});
}
}
};

View File

@@ -239,7 +239,7 @@ ol.renderer.webgl.Layer.prototype.dispatchComposeEvent_ =
if (layer.hasListener(type)) {
var render = new ol.render.webgl.Immediate(context, frameState.pixelRatio);
var composeEvent = new ol.render.Event(
type, layer, render, frameState, null, context);
type, layer, render, null, frameState, null, context);
layer.dispatchEvent(composeEvent);
}
};

View File

@@ -269,7 +269,7 @@ ol.renderer.webgl.Map.prototype.dispatchComposeEvent_ =
var context = this.getContext();
var render = new ol.render.webgl.Immediate(context, frameState.pixelRatio);
var composeEvent = new ol.render.Event(
type, map, render, frameState, null, context);
type, map, render, null, frameState, null, context);
map.dispatchEvent(composeEvent);
}
};