From a64ca2b4bf3c173e54d9adb5cf8e045750596a82 Mon Sep 17 00:00:00 2001 From: Frederic Junod Date: Mon, 12 Nov 2018 21:23:46 +0100 Subject: [PATCH] Use CSS z-index to order layers --- rendering/cases/vector-zindex/expected.png | Bin 0 -> 1461 bytes rendering/cases/vector-zindex/main.js | 50 +++++++++++++++++++++ src/ol/renderer/Composite.js | 14 +++--- 3 files changed, 59 insertions(+), 5 deletions(-) create mode 100644 rendering/cases/vector-zindex/expected.png create mode 100644 rendering/cases/vector-zindex/main.js diff --git a/rendering/cases/vector-zindex/expected.png b/rendering/cases/vector-zindex/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..4dad10a9583b04df4529b119f6576dd3e3ce235f GIT binary patch literal 1461 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|GzJFN8c!F;kcv5PZ`iK)$(A|x zusThCZd2B45tD5#a|1L)TFx(cChTz}TB#{R#cAc&pdVa9fh#U_Oixn2_(G#pY2$Ux zGQa0@ntM~9?OT^(I{B;0|1(jq&Cky|X~5&$;B|Q;JHs($h5#Ri1v3~N3>h1em>7<- zFm!P;hzK)is10I?8}Z5f2i|{u;#u@L?bEB!O`A4-yLsu-t->!EoAU4P`24Zjw=GfP zm|Ro*`^(Fp9BO@XYwMHK)7Q`6ykWu|o0&2D=H%S?Q2jhvhAH5|)6-8*Onh>7cD{A} z_jgau%}u$!F5X)F@n?C5#@*%n|337eB(8t$n!*1!4A1U7K7R7w-;=LieP27*fCGFd00bXaE1>*7foK_gMZgu4J82JljlF-u~Z> zTSt#R`TKjmHGjPrtUw4(~zp+k#1_`(%llXlq&(EueuTwc1fB4KSpGn2fCv}TYZf)JTe5U7J#)=;X zmK6nWG$Z<7n(VB%w=BtceCED%aPm^UJBczt?Na`#=5lwI?4QJ~`5vl9~A?Gi?^b znVlz7YG2=#{k-n>x1T&W_vG{Q_qXRgKKA72=ak#q;*G`Y*{mBZx7St|y}a~&{qCBZhwmTYTX5i2 z)~53OPj7B+pSyq09Glu%K7Vb_*iPSZpk$U!)s#7wlXZ0d{I2BYKKb(U$;Zd#{)v?_ zq|USP%)9Fq7Iv*qB{IsZ?2SjCtoOIK(&ct_`oJ>7tZE1rAVdWFKQ^{CM+MG#J+ literal 0 HcmV?d00001 diff --git a/rendering/cases/vector-zindex/main.js b/rendering/cases/vector-zindex/main.js new file mode 100644 index 0000000000..937284279c --- /dev/null +++ b/rendering/cases/vector-zindex/main.js @@ -0,0 +1,50 @@ +import Map from '../../../src/ol/Map.js'; +import View from '../../../src/ol/View.js'; +import Feature from '../../../src/ol/Feature.js'; +import LineString from '../../../src/ol/geom/LineString.js'; +import VectorLayer from '../../../src/ol/layer/Vector.js'; +import VectorSource from '../../../src/ol/source/Vector.js'; +import Style from '../../../src/ol/style/Style.js'; +import Stroke from '../../../src/ol/style/Stroke.js'; + + +const vectorSourceRed = new VectorSource(); +const vectorSourceBlue = new VectorSource(); +let feature; + +feature = new Feature({ + geometry: new LineString([[-60, 20], [45, 20]]) +}); +feature.setStyle(new Style({ + stroke: new Stroke({color: '#f00', width: 10}) +})); +vectorSourceRed.addFeature(feature); + + +feature = new Feature({ + geometry: new LineString([[0, -50], [0, 60]]) +}); +feature.setStyle(new Style({ + stroke: new Stroke({color: '#00f', width: 16}) +})); +vectorSourceBlue.addFeature(feature); + +new Map({ + pixelRatio: 1, + layers: [ + new VectorLayer({ + zIndex: 1, + source: vectorSourceRed + }), + new VectorLayer({ + source: vectorSourceBlue + }) + ], + target: 'map', + view: new View({ + center: [0, 0], + resolution: 1 + }) +}); + +render(); diff --git a/src/ol/renderer/Composite.js b/src/ol/renderer/Composite.js index 8e6f00c2da..01312e7a40 100644 --- a/src/ol/renderer/Composite.js +++ b/src/ol/renderer/Composite.js @@ -1,12 +1,11 @@ /** * @module ol/renderer/canvas/Map */ -import {stableSort} from '../array.js'; import {CLASS_UNSELECTABLE} from '../css.js'; import {visibleAtResolution} from '../layer/Layer.js'; import RenderEvent from '../render/Event.js'; import RenderEventType from '../render/EventType.js'; -import MapRenderer, {sortByZIndex} from './Map.js'; +import MapRenderer from './Map.js'; import SourceState from '../source/State.js'; import {replaceChildren} from '../dom.js'; @@ -79,8 +78,6 @@ class CompositeMapRenderer extends MapRenderer { this.dispatchRenderEvent(RenderEventType.PRECOMPOSE, frameState); const layerStatesArray = frameState.layerStatesArray; - stableSort(layerStatesArray, sortByZIndex); - const viewResolution = frameState.viewState.resolution; this.children_.length = 0; @@ -91,7 +88,14 @@ class CompositeMapRenderer extends MapRenderer { } const layer = layerState.layer; - this.children_.push(layer.render(frameState)); + const element = layer.render(frameState); + if (element) { + const zIndex = layerState.zIndex; + if (zIndex !== element.style.zIndex) { + element.style.zIndex = zIndex; + } + this.children_.push(element); + } } replaceChildren(this.element_, this.children_);