[Commits] r2397 - in core/trunk/geoext: lib/GeoExt/widgets tests/lib/GeoExt/widgets
commits at geoext.org
commits at geoext.org
Thu Sep 23 00:09:59 CEST 2010
Author: ahocevar
Date: 2010-09-23 00:09:59 +0200 (Thu, 23 Sep 2010)
New Revision: 2397
Modified:
core/trunk/geoext/lib/GeoExt/widgets/FeatureRenderer.js
core/trunk/geoext/tests/lib/GeoExt/widgets/FeatureRenderer.html
Log:
If OpenLayers.Symbolizer instances are used, use an according symbol rather than the configured symbolType. r=tschaub (closes #349)
Modified: core/trunk/geoext/lib/GeoExt/widgets/FeatureRenderer.js
===================================================================
--- core/trunk/geoext/lib/GeoExt/widgets/FeatureRenderer.js 2010-09-22 13:10:26 UTC (rev 2396)
+++ core/trunk/geoext/lib/GeoExt/widgets/FeatureRenderer.js 2010-09-22 22:09:59 UTC (rev 2397)
@@ -22,26 +22,30 @@
/** api: config[feature]
* ``OpenLayers.Feature.Vector``
- * Optional vector to be drawn. If a feature is not provided,
- * ``symbolType`` should be specified.
+ * Optional vector to be drawn. If not provided, and if ``symbolizers``
+ * is configured with an array of plain symbolizer objects, ``symbolType``
+ * should be configured.
*/
feature: undefined,
/** api: config[symbolizers]
* ``Array(Object)``
- * An array of symbolizer objects (in painters order) for rendering a
- * feature. If no symbolizers are provided, the OpenLayers default will be
- * used.
+ * An array of ``OpenLayers.Symbolizer`` instances or plain symbolizer
+ * objects (in painters order) for rendering a feature. If no
+ * symbolizers are provided, the OpenLayers default will be used. If a
+ * symbolizer is an instance of ``OpenLayers.Symbolizer``, its type will
+ * override the symbolType for rendering.
*/
symbolizers: [OpenLayers.Feature.Vector.style["default"]],
/** api: config[symbolType]
* ``String``
- * One of ``"Point"``, ``"Line"``, or ``"Polygon"``. If ``feature``
- * is provided, it will be preferred. Default is ``"Point"``.
+ * One of ``"Point"``, ``"Line"``, or ``"Polygon"``. Only pertinent if
+ * OpenLayers.Symbolizer objects are not used. If ``feature``
+ * is provided, it will be preferred. The default is "Polygon".
*/
- symbolType: "Point",
-
+ symbolType: "Polygon",
+
/** private: property[resolution]
* ``Number``
* The resolution for the renderer.
@@ -307,19 +311,24 @@
// TODO: remove this when OpenLayers.Symbolizer is required
var Symbolizer = OpenLayers.Symbolizer;
var Text = Symbolizer && Symbolizer.Text;
- var symbolizer;
+ var symbolizer, feature, geomType;
for (var i=0, len=this.symbolizers.length; i<len; ++i) {
symbolizer = this.symbolizers[i];
+ feature = this.feature;
// don't render text symbolizers
if (!Text || !(symbolizer instanceof Text)) {
if (Symbolizer && (symbolizer instanceof Symbolizer)) {
symbolizer = symbolizer.clone();
+ if (!this.initialConfig.feature) {
+ geomType = symbolizer.CLASS_NAME.split(".").pop().toLowerCase();
+ feature = this[geomType + "Feature"];
+ }
} else {
// TODO: remove this when OpenLayers.Symbolizer is used everywhere
symbolizer = Ext.apply({}, symbolizer);
}
this.renderer.drawFeature(
- this.feature.clone(),
+ feature.clone(),
symbolizer
);
}
Modified: core/trunk/geoext/tests/lib/GeoExt/widgets/FeatureRenderer.html
===================================================================
--- core/trunk/geoext/tests/lib/GeoExt/widgets/FeatureRenderer.html 2010-09-22 13:10:26 UTC (rev 2396)
+++ core/trunk/geoext/tests/lib/GeoExt/widgets/FeatureRenderer.html 2010-09-22 22:09:59 UTC (rev 2397)
@@ -15,14 +15,14 @@
var feature = renderer.feature;
t.ok(feature, "renderer feature set by default");
- t.ok(feature.geometry instanceof OpenLayers.Geometry.Point, "point feature by default");
+ t.ok(feature.geometry instanceof OpenLayers.Geometry.Polygon, "polygon feature by default");
renderer.destroy();
}
function test_drawFeature(t) {
- t.plan(7);
+ t.plan(10);
var renderer = new GeoExt.FeatureRenderer({
@@ -49,18 +49,26 @@
var poly = new OpenLayers.Symbolizer.Polygon({
fillColor: "red"
});
+ var line = new OpenLayers.Symbolizer.Line({
+ strokeColor: "red"
+ });
renderer.update({
symbolizers: [
new OpenLayers.Symbolizer.Text({
fontFamily: "Times"
}),
- poly
+ poly, line, {fillColor: "red"}
]
});
- t.eq(log.length, 1, "drawFeature called once given text and polygon symbolizers");
+ t.eq(log.length, 3, "drawFeature called three times given text, polygon, line and object symbolizers");
t.ok(log[0][1] instanceof OpenLayers.Symbolizer.Polygon, "drawFeature called with polygon symbolizer only");
t.ok(log[0][1] !== poly, "drawFeature called with clone of original symbolizer");
+ // confirm that we use the correct features for rendering
+ t.ok(log[0][0].geometry instanceof OpenLayers.Geometry.Polygon, "polygon symbolizer applied to a polygon feature");
+ t.ok(log[1][0].geometry instanceof OpenLayers.Geometry.LineString, "line symbolizer applied to a line feature");
+ t.ok(log[2][0].geometry instanceof OpenLayers.Geometry.Polygon, "symbolizer object applied to a symbolType feature");
+
renderer.destroy();
}
More information about the Commits
mailing list