diff --git a/rendering/cases/linestring-style-opacity/expected.png b/rendering/cases/linestring-style-opacity/expected.png new file mode 100644 index 0000000000..18af8ebc78 Binary files /dev/null and b/rendering/cases/linestring-style-opacity/expected.png differ diff --git a/rendering/cases/linestring-style-opacity/main.js b/rendering/cases/linestring-style-opacity/main.js new file mode 100644 index 0000000000..e663640825 --- /dev/null +++ b/rendering/cases/linestring-style-opacity/main.js @@ -0,0 +1,70 @@ +import Map from '../../../src/ol/CompositeMap.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 vectorSource = new VectorSource(); +let feature; + +feature = new Feature({ + geometry: new LineString([[-60, 60], [45, 60]]) +}); +vectorSource.addFeature(feature); + +feature = new Feature({ + geometry: new LineString([[-60, -50], [30, 10]]) +}); +feature.setStyle(new Style({ + stroke: new Stroke({color: '#f00', width: 3}) +})); +vectorSource.addFeature(feature); + +feature = new Feature({ + geometry: new LineString([[-110, -100], [0, 100], [100, -90]]) +}); +feature.setStyle(new Style({ + stroke: new Stroke({ + color: 'rgba(55, 55, 55, 0.75)', + width: 5, + lineCap: 'square', + lineDash: [4, 8], + lineJoin: 'round' + }) +})); +vectorSource.addFeature(feature); + +feature = new Feature({ + geometry: new LineString([[-80, 80], [80, 80], [-40, -90]]) +}); +feature.setStyle([ + new Style({ + stroke: new Stroke({color: '#F2F211', width: 5}) + }), + new Style({ + stroke: new Stroke({color: '#292921', width: 1}) + }) +]); +vectorSource.addFeature(feature); + + +new Map({ + pixelRatio: 1, + layers: [ + new VectorLayer({ + opacity: 0.5, + source: vectorSource + }) + ], + 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 6cbe9c586a..f1a6686131 100644 --- a/src/ol/renderer/Composite.js +++ b/src/ol/renderer/Composite.js @@ -99,7 +99,10 @@ class CompositeMapRenderer extends MapRenderer { const layerRenderer = this.getLayerRenderer(layer); if (layerRenderer.prepareFrame(frameState, layerState)) { const element = layerRenderer.renderFrame(frameState, layerState); - // TODO: deal with opacity + const opacity = layerState.opacity; + if (opacity !== element.style.opacity) { + element.style.opacity = opacity; + } this.children_.push(element); } }