Skip to content

[pull] main from openlayers:main #302

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 15 commits into from
Apr 16, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
248 changes: 124 additions & 124 deletions package-lock.json

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@
"karma-source-map-support": "^1.4.0",
"karma-webpack": "^5.0.0",
"loglevelnext": "^6.0.0",
"marked": "15.0.7",
"marked": "15.0.8",
"metalsmith": "^2.5.0",
"mocha": "11.1.0",
"monotone-chain-convex-hull": "^1.1.0",
Expand All @@ -130,7 +130,7 @@
"pmtiles": "^4.0.1",
"pngjs": "^7.0.0",
"proj4": "2.15.0",
"puppeteer": "24.6.0",
"puppeteer": "24.6.1",
"rollup": "^4.1.4",
"rollup-plugin-external-globals": "^0.13.0",
"semver": "^7.3.7",
Expand Down
14 changes: 5 additions & 9 deletions src/ol/events/condition.js
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ export const click = function (mapBrowserEvent) {
export const mouseActionButton = function (mapBrowserEvent) {
const originalEvent = mapBrowserEvent.originalEvent;
return (
originalEvent instanceof PointerEvent &&
'pointerId' in originalEvent &&
originalEvent.button == 0 &&
!(WEBKIT && MAC && originalEvent.ctrlKey)
);
Expand Down Expand Up @@ -283,9 +283,7 @@ export const targetNotEditable = function (mapBrowserEvent) {
export const mouseOnly = function (mapBrowserEvent) {
const pointerEvent = mapBrowserEvent.originalEvent;
// see https://www.w3.org/TR/pointerevents/#widl-PointerEvent-pointerType
return (
pointerEvent instanceof PointerEvent && pointerEvent.pointerType == 'mouse'
);
return 'pointerId' in pointerEvent && pointerEvent.pointerType == 'mouse';
};

/**
Expand All @@ -298,9 +296,7 @@ export const mouseOnly = function (mapBrowserEvent) {
export const touchOnly = function (mapBrowserEvent) {
const pointerEvt = mapBrowserEvent.originalEvent;
// see https://www.w3.org/TR/pointerevents/#widl-PointerEvent-pointerType
return (
pointerEvt instanceof PointerEvent && pointerEvt.pointerType === 'touch'
);
return 'pointerId' in pointerEvt && pointerEvt.pointerType === 'touch';
};

/**
Expand All @@ -313,7 +309,7 @@ export const touchOnly = function (mapBrowserEvent) {
export const penOnly = function (mapBrowserEvent) {
const pointerEvt = mapBrowserEvent.originalEvent;
// see https://www.w3.org/TR/pointerevents/#widl-PointerEvent-pointerType
return pointerEvt instanceof PointerEvent && pointerEvt.pointerType === 'pen';
return 'pointerId' in pointerEvt && pointerEvt.pointerType === 'pen';
};

/**
Expand All @@ -328,7 +324,7 @@ export const penOnly = function (mapBrowserEvent) {
export const primaryAction = function (mapBrowserEvent) {
const pointerEvent = mapBrowserEvent.originalEvent;
return (
pointerEvent instanceof PointerEvent &&
'pointerId' in pointerEvent &&
pointerEvent.isPrimary &&
pointerEvent.button === 0
);
Expand Down
1 change: 0 additions & 1 deletion src/ol/layer/Layer.js
Original file line number Diff line number Diff line change
Expand Up @@ -261,7 +261,6 @@ class Layer extends BaseLayer {
this.dispatchEvent('sourceready');
}, 0);
}
this.clearRenderer();
}
this.changed();
}
Expand Down
15 changes: 9 additions & 6 deletions src/ol/render/webgl/ShaderBuilder.js
Original file line number Diff line number Diff line change
Expand Up @@ -505,8 +505,7 @@ void main(void) {
} else {
offsetPx += halfSizePx * vec2(-1., 1.);
}
float angle = ${this.symbolRotationExpression_};
${this.symbolRotateWithView_ ? 'angle += u_rotation;' : ''}
float angle = ${this.symbolRotationExpression_}${this.symbolRotateWithView_ ? ' + u_rotation' : ''};
float c = cos(-angle);
float s = sin(-angle);
offsetPx = vec2(c * offsetPx.x - s * offsetPx.y, s * offsetPx.x + c * offsetPx.y);
Expand All @@ -520,7 +519,7 @@ void main(void) {
v_angle = angle;
c = cos(-v_angle);
s = sin(-v_angle);
centerOffsetPx = vec2(c * centerOffsetPx.x - s * centerOffsetPx.y, s * centerOffsetPx.x + c * centerOffsetPx.y);
centerOffsetPx = vec2(c * centerOffsetPx.x - s * centerOffsetPx.y, s * centerOffsetPx.x + c * centerOffsetPx.y);
v_centerPx = screenToPx(center.xy) + centerOffsetPx;
${this.attributes_
.map(
Expand Down Expand Up @@ -662,7 +661,7 @@ void main(void) {
vec2 normalPx = vec2(-tangentPx.y, tangentPx.x);
segmentStartPx = getOffsetPoint(segmentStartPx, normalPx, v_angleStart, lineOffsetPx),
segmentEndPx = getOffsetPoint(segmentEndPx, normalPx, v_angleEnd, lineOffsetPx);

// compute current vertex position
float normalDir = vertexNumber < 0.5 || (vertexNumber > 1.5 && vertexNumber < 2.5) ? 1.0 : -1.0;
float tangentDir = vertexNumber < 1.5 ? 1.0 : -1.0;
Expand Down Expand Up @@ -820,7 +819,7 @@ ${this.attributes_
` ${attribute.varyingType} ${attribute.name} = ${attribute.varyingName}; // assign to original attribute name`,
)
.join('\n')}

vec2 currentPoint = gl_FragCoord.xy / u_pixelRatio;
#ifdef GL_FRAGMENT_PRECISION_HIGH
vec2 worldPos = pxToWorld(currentPoint);
Expand All @@ -844,7 +843,11 @@ ${this.attributes_
float currentLengthPx = lengthToPoint + v_distanceOffsetPx;
float currentRadiusPx = distanceFromSegment(currentPoint, v_segmentStart, v_segmentEnd);
float currentRadiusRatio = dot(segmentNormal, startToPoint) * 2. / v_width;
currentLineMetric = mix(v_measureStart, v_measureEnd, lengthToPoint / segmentLength);
currentLineMetric = mix(
v_measureStart,
v_measureEnd,
lengthToPoint / max(segmentLength, 1.17549429e-38)
);

if (${this.discardExpression_}) { discard; }

Expand Down
31 changes: 16 additions & 15 deletions src/ol/renderer/canvas/TileLayer.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,14 +28,15 @@ import {getUid} from '../../util.js';
import CanvasLayerRenderer from './Layer.js';

/**
* @param {import("../../source/Tile.js").default} source The tile source.
* @param {string} sourceKey The source key.
* @param {number} z The tile z level.
* @param {number} x The tile x level.
* @param {number} y The tile y level.
* @return {string} The cache key.
*/
function getCacheKey(sourceKey, z, x, y) {
return `${sourceKey},${getKeyZXY(z, x, y)}`;
function getCacheKey(source, sourceKey, z, x, y) {
return `${getUid(source)},${sourceKey},${getKeyZXY(z, x, y)}`;
}

/**
Expand Down Expand Up @@ -156,12 +157,6 @@ class CanvasTileLayerRenderer extends CanvasLayerRenderer {
*/
this.renderedProjection = null;

/**
* @private
* @type {number}
*/
this.renderedRevision_;

/**
* @protected
* @type {!Array<import("../../Tile.js").default>}
Expand Down Expand Up @@ -230,7 +225,7 @@ class CanvasTileLayerRenderer extends CanvasLayerRenderer {
const tileCache = this.tileCache_;
const tileLayer = this.getLayer();
const tileSource = tileLayer.getSource();
const cacheKey = getCacheKey(tileSource.getKey(), z, x, y);
const cacheKey = getCacheKey(tileSource, tileSource.getKey(), z, x, y);

/** @type {import("../../Tile.js").default} */
let tile;
Expand Down Expand Up @@ -369,10 +364,10 @@ class CanvasTileLayerRenderer extends CanvasLayerRenderer {
return false;
}
const sourceRevision = source.getRevision();
if (!this.renderedRevision_) {
this.renderedRevision_ = sourceRevision;
} else if (this.renderedRevision_ !== sourceRevision) {
this.renderedRevision_ = sourceRevision;
if (!this.renderedSourceRevision_) {
this.renderedSourceRevision_ = sourceRevision;
} else if (this.renderedSourceRevision_ !== sourceRevision) {
this.renderedSourceRevision_ = sourceRevision;
if (this.renderedSourceKey_ === source.getKey()) {
this.tileCache_.clear();
}
Expand Down Expand Up @@ -485,7 +480,13 @@ class CanvasTileLayerRenderer extends CanvasLayerRenderer {
const y = tileCoord[2];
const staleKeys = this.getStaleKeys();
for (let i = 0; i < staleKeys.length; ++i) {
const cacheKey = getCacheKey(staleKeys[i], z, x, y);
const cacheKey = getCacheKey(
this.getLayer().getSource(),
staleKeys[i],
z,
x,
y,
);
if (tileCache.containsKey(cacheKey)) {
const tile = tileCache.peek(cacheKey);
if (tile.getState() === TileState.LOADED) {
Expand Down Expand Up @@ -525,7 +526,7 @@ class CanvasTileLayerRenderer extends CanvasLayerRenderer {
const sourceKey = source.getKey();
for (let x = tileRange.minX; x <= tileRange.maxX; ++x) {
for (let y = tileRange.minY; y <= tileRange.maxY; ++y) {
const cacheKey = getCacheKey(sourceKey, altZ, x, y);
const cacheKey = getCacheKey(source, sourceKey, altZ, x, y);
let loaded = false;
if (tileCache.containsKey(cacheKey)) {
const tile = tileCache.peek(cacheKey);
Expand Down
2 changes: 1 addition & 1 deletion src/ol/renderer/webgl/TileLayerBase.js
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ function getRenderExtent(frameState, extent) {
* @return {string} The cache key.
*/
export function getCacheKey(source, tileCoord) {
return `${source.getKey()},${source.getRevision()},${getTileCoordKey(tileCoord)}`;
return `${getUid(source)},${source.getKey()},${source.getRevision()},${getTileCoordKey(tileCoord)}`;
}

/**
Expand Down
32 changes: 32 additions & 0 deletions test/browser/spec/ol/Map.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -1736,5 +1736,37 @@ describe('ol/Map', function () {
spy.restore();
selectStub.restore();
});

describe('external map', () => {
let iframe, spy;

beforeEach(() => {
iframe = document.createElement('iframe');
iframe.width = '100';
iframe.height = '100';
iframe.src = 'spec/ol/data/external-map.html';
document.body.appendChild(iframe);
spy = sinonSpy(dragpan, 'handleDownEvent');
});
afterEach(() => {
map.setTarget(null);
document.body.removeChild(iframe);
spy.restore();
});
it('handles events from a map in a separate window', (done) => {
document.body.removeChild(map.getTargetElement());
map.setTarget(null);
const win = iframe.contentWindow;
win.addEventListener('DOMContentLoaded', () => {
map.setTarget(iframe.contentDocument.getElementById('map'));
win.postMessage('test');
setTimeout(() => {
expect(spy.callCount).to.be(1);
expect(spy.firstCall.returnValue).to.be(true);
done();
}, 100);
});
});
});
});
});
33 changes: 33 additions & 0 deletions test/browser/spec/ol/data/external-map.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>OpenLayers External Map Test</title>
<style>
html, body, #map {
height: 100%;
margin: 0;
padding: 0;
}
</style>
</head>
<body>
<div id="map"></div>
<script>
function makePrimary(event) {
Object.defineProperty(event, 'isPrimary', {
writable: false,
value: true,
});
return event;
}
window.addEventListener('message', (e) => {
const viewport = document.querySelector('div.ol-viewport');
viewport.dispatchEvent(makePrimary(new PointerEvent('pointerdown', {
clientX: 10,
clientY: 10,
})));
});
</script>
</body>
</html>
8 changes: 6 additions & 2 deletions test/browser/spec/ol/layer/vectortile.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -160,11 +160,15 @@ describe('ol.layer.VectorTile', function () {
.then(function (result) {
const tile = layer
.getRenderer()
.tileCache_.get(objectURL + ',0/0/0');
.tileCache_.get(
`${getUid(layer.getSource())},${objectURL},0/0/0`,
);
expect(Object.keys(tile.hitDetectionImageData).length).to.be(1);
const tile2 = layer2
.getRenderer()
.tileCache_.get(objectURL + ',0/0/0');
.tileCache_.get(
`${getUid(layer.getSource())},${objectURL},0/0/0`,
);
expect(Object.keys(tile2.hitDetectionImageData).length).to.be(1);
done();
})
Expand Down
Loading
Loading