ol 10.5.1-dev.1747647746066 → 10.5.1-dev.1747831869658
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Map.d.ts.map +1 -1
- package/Map.js +4 -1
- package/css.d.ts +2 -0
- package/css.d.ts.map +1 -1
- package/css.js +15 -3
- package/dist/ol.d.ts +2 -0
- package/dist/ol.d.ts.map +1 -1
- package/dist/ol.js +1 -1
- package/dist/ol.js.map +1 -1
- package/package.json +1 -1
- package/render/canvas.d.ts +1 -1
- package/render/canvas.d.ts.map +1 -1
- package/render/canvas.js +89 -64
- package/util.js +1 -1
package/package.json
CHANGED
package/render/canvas.d.ts
CHANGED
|
@@ -188,7 +188,7 @@ export const checkedFonts: BaseObject;
|
|
|
188
188
|
export const textHeights: {
|
|
189
189
|
[x: string]: number;
|
|
190
190
|
};
|
|
191
|
-
export function registerFont(fontSpec: any): void
|
|
191
|
+
export function registerFont(fontSpec: any): Promise<void>;
|
|
192
192
|
export function measureTextHeight(fontSpec: any): number;
|
|
193
193
|
export type BuilderType = "Circle" | "Image" | "LineString" | "Polygon" | "Text" | "Default";
|
|
194
194
|
export type FillState = {
|
package/render/canvas.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvas.d.ts","sourceRoot":"","sources":["canvas.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"canvas.d.ts","sourceRoot":"","sources":["canvas.js"],"names":[],"mappings":"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"}
|
package/render/canvas.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* @module ol/render/canvas
|
|
3
3
|
*/
|
|
4
4
|
import BaseObject from '../Object.js';
|
|
5
|
-
import {getFontParameters} from '../css.js';
|
|
5
|
+
import {fontWeights, getFontParameters} from '../css.js';
|
|
6
6
|
import {createCanvasContext2D} from '../dom.js';
|
|
7
7
|
import {WORKER_OFFSCREEN_CANVAS} from '../has.js';
|
|
8
8
|
import {clear} from '../obj.js';
|
|
@@ -178,98 +178,123 @@ let measureFont;
|
|
|
178
178
|
*/
|
|
179
179
|
export const textHeights = {};
|
|
180
180
|
|
|
181
|
+
const genericFontFamilies = new Set([
|
|
182
|
+
'serif',
|
|
183
|
+
'sans-serif',
|
|
184
|
+
'monospace',
|
|
185
|
+
'cursive',
|
|
186
|
+
'fantasy',
|
|
187
|
+
'system-ui',
|
|
188
|
+
'ui-serif',
|
|
189
|
+
'ui-sans-serif',
|
|
190
|
+
'ui-monospace',
|
|
191
|
+
'ui-rounded',
|
|
192
|
+
'emoji',
|
|
193
|
+
'math',
|
|
194
|
+
'fangsong',
|
|
195
|
+
]);
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* @param {string} style Css font-style
|
|
199
|
+
* @param {string} weight Css font-weight
|
|
200
|
+
* @param {string} family Css font-family
|
|
201
|
+
* @return {string} Font key.
|
|
202
|
+
*/
|
|
203
|
+
function getFontKey(style, weight, family) {
|
|
204
|
+
return `${style} ${weight} 16px "${family}"`;
|
|
205
|
+
}
|
|
206
|
+
|
|
181
207
|
/**
|
|
182
208
|
* Clears the label cache when a font becomes available.
|
|
183
209
|
* @param {string} fontSpec CSS font spec.
|
|
184
210
|
*/
|
|
185
211
|
export const registerFont = (function () {
|
|
186
212
|
const retries = 100;
|
|
187
|
-
|
|
188
|
-
const referenceFonts = ['monospace', 'serif'];
|
|
189
|
-
const len = referenceFonts.length;
|
|
190
|
-
const text = 'wmytzilWMYTZIL@#/&?$%10\uF013';
|
|
191
|
-
let interval, referenceWidth;
|
|
213
|
+
let timeout, fontFaceSet;
|
|
192
214
|
|
|
193
215
|
/**
|
|
194
|
-
* @param {string}
|
|
195
|
-
* @
|
|
196
|
-
* @param {*} fontFamily Css font-family
|
|
197
|
-
* @return {boolean} Font with style and weight is available
|
|
216
|
+
* @param {string} fontSpec Css font spec
|
|
217
|
+
* @return {Promise<boolean>} Font with style and weight is available
|
|
198
218
|
*/
|
|
199
|
-
function isAvailable(
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
fontStyle + ' ' + fontWeight + ' ' + size + referenceFont,
|
|
205
|
-
text,
|
|
206
|
-
);
|
|
207
|
-
if (fontFamily != referenceFont) {
|
|
208
|
-
const width = measureTextWidth(
|
|
209
|
-
fontStyle +
|
|
210
|
-
' ' +
|
|
211
|
-
fontWeight +
|
|
212
|
-
' ' +
|
|
213
|
-
size +
|
|
214
|
-
fontFamily +
|
|
215
|
-
',' +
|
|
216
|
-
referenceFont,
|
|
217
|
-
text,
|
|
218
|
-
);
|
|
219
|
-
// If width and referenceWidth are the same, then the fallback was used
|
|
220
|
-
// instead of the font we wanted, so the font is not available.
|
|
221
|
-
available = available && width != referenceWidth;
|
|
222
|
-
}
|
|
219
|
+
async function isAvailable(fontSpec) {
|
|
220
|
+
await fontFaceSet.ready;
|
|
221
|
+
const fontFaces = await fontFaceSet.load(fontSpec);
|
|
222
|
+
if (fontFaces.length === 0) {
|
|
223
|
+
return false;
|
|
223
224
|
}
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
return
|
|
225
|
+
const font = getFontParameters(fontSpec);
|
|
226
|
+
const checkFamily = font.families[0].toLowerCase();
|
|
227
|
+
const checkWeight = font.weight;
|
|
228
|
+
return fontFaces.some(
|
|
229
|
+
/**
|
|
230
|
+
* @param {import('../css.js').FontParameters} f Font.
|
|
231
|
+
* @return {boolean} Font matches.
|
|
232
|
+
*/
|
|
233
|
+
(f) => {
|
|
234
|
+
const family = f.family.replace(/^['"]|['"]$/g, '').toLowerCase();
|
|
235
|
+
const weight = fontWeights[f.weight] || f.weight;
|
|
236
|
+
return (
|
|
237
|
+
family === checkFamily &&
|
|
238
|
+
f.style === font.style &&
|
|
239
|
+
weight == checkWeight
|
|
240
|
+
);
|
|
241
|
+
},
|
|
242
|
+
);
|
|
228
243
|
}
|
|
229
244
|
|
|
230
|
-
function check() {
|
|
245
|
+
async function check() {
|
|
246
|
+
await fontFaceSet.ready;
|
|
231
247
|
let done = true;
|
|
232
|
-
const
|
|
233
|
-
|
|
248
|
+
const checkedFontsProperties = checkedFonts.getProperties();
|
|
249
|
+
const fonts = Object.keys(checkedFontsProperties).filter(
|
|
250
|
+
(key) => checkedFontsProperties[key] < retries,
|
|
251
|
+
);
|
|
252
|
+
for (let i = fonts.length - 1; i >= 0; --i) {
|
|
234
253
|
const font = fonts[i];
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
if (isAvailable(
|
|
254
|
+
let currentRetries = checkedFontsProperties[font];
|
|
255
|
+
if (currentRetries < retries) {
|
|
256
|
+
if (await isAvailable(font)) {
|
|
238
257
|
clear(textHeights);
|
|
239
|
-
// Make sure that loaded fonts are picked up by Safari
|
|
240
|
-
measureContext = null;
|
|
241
|
-
measureFont = undefined;
|
|
242
258
|
checkedFonts.set(font, retries);
|
|
243
259
|
} else {
|
|
244
|
-
|
|
245
|
-
|
|
260
|
+
currentRetries += 10;
|
|
261
|
+
checkedFonts.set(font, currentRetries, true);
|
|
262
|
+
if (currentRetries < retries) {
|
|
263
|
+
done = false;
|
|
264
|
+
}
|
|
246
265
|
}
|
|
247
266
|
}
|
|
248
267
|
}
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
268
|
+
timeout = undefined;
|
|
269
|
+
if (!done) {
|
|
270
|
+
timeout = setTimeout(check, 100);
|
|
252
271
|
}
|
|
253
272
|
}
|
|
254
273
|
|
|
255
|
-
return function (fontSpec) {
|
|
274
|
+
return async function (fontSpec) {
|
|
275
|
+
if (!fontFaceSet) {
|
|
276
|
+
fontFaceSet = WORKER_OFFSCREEN_CANVAS ? self.fonts : document.fonts;
|
|
277
|
+
}
|
|
256
278
|
const font = getFontParameters(fontSpec);
|
|
257
279
|
if (!font) {
|
|
258
280
|
return;
|
|
259
281
|
}
|
|
260
282
|
const families = font.families;
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
checkedFonts.set(key, retries, true);
|
|
266
|
-
if (!isAvailable(font.style, font.weight, family)) {
|
|
267
|
-
checkedFonts.set(key, 0, true);
|
|
268
|
-
if (interval === undefined) {
|
|
269
|
-
interval = setInterval(check, 32);
|
|
270
|
-
}
|
|
271
|
-
}
|
|
283
|
+
let needCheck = false;
|
|
284
|
+
for (const family of families) {
|
|
285
|
+
if (genericFontFamilies.has(family)) {
|
|
286
|
+
continue;
|
|
272
287
|
}
|
|
288
|
+
const key = getFontKey(font.style, font.weight, family);
|
|
289
|
+
if (checkedFonts.get(key) !== undefined) {
|
|
290
|
+
continue;
|
|
291
|
+
}
|
|
292
|
+
checkedFonts.set(key, 0, true);
|
|
293
|
+
needCheck = true;
|
|
294
|
+
}
|
|
295
|
+
if (needCheck) {
|
|
296
|
+
clearTimeout(timeout);
|
|
297
|
+
timeout = setTimeout(check, 100);
|
|
273
298
|
}
|
|
274
299
|
};
|
|
275
300
|
})();
|
package/util.js
CHANGED