maplibre-gl 2.0.5 → 2.1.3
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/build/{banner.js → banner.ts} +1 -1
- package/build/generate-query-test-fixtures.ts +123 -0
- package/build/generate-shaders.ts +35 -0
- package/build/generate-struct-arrays.ts +7 -7
- package/build/generate-style-code.ts +8 -8
- package/build/generate-style-spec.ts +5 -4
- package/build/generate-typings.ts +16 -0
- package/build/readme.md +8 -18
- package/build/release-notes.js +9 -13
- package/build/{rollup_plugin_minify_style_spec.js → rollup_plugin_minify_style_spec.ts} +4 -3
- package/build/{rollup_plugins.js → rollup_plugins.ts} +12 -26
- package/dist/maplibre-gl-dev.js +54885 -0
- package/dist/maplibre-gl.css +1 -1
- package/dist/maplibre-gl.d.ts +1574 -1022
- package/dist/maplibre-gl.js +3 -3
- package/dist/maplibre-gl.js.map +1 -1
- package/package.json +94 -131
- package/src/css/maplibre-gl.css +49 -49
- package/src/data/{array_types.ts → array_types.g.ts} +0 -0
- package/src/data/bucket/circle_bucket.ts +1 -1
- package/src/data/bucket/fill_bucket.test.ts +1 -1
- package/src/data/bucket/fill_bucket.ts +4 -4
- package/src/data/bucket/fill_extrusion_bucket.ts +1 -1
- package/src/data/bucket/line_bucket.test.ts +1 -1
- package/src/data/bucket/line_bucket.ts +6 -6
- package/src/data/bucket/symbol_bucket.test.ts +16 -16
- package/src/data/bucket/symbol_bucket.ts +56 -56
- package/src/data/bucket.ts +43 -43
- package/src/data/dem_data.ts +12 -12
- package/src/data/evaluation_feature.ts +10 -10
- package/src/data/feature_index.ts +37 -37
- package/src/data/feature_position_map.ts +5 -5
- package/src/data/index_array_type.ts +1 -1
- package/src/data/load_geometry.test.ts +1 -1
- package/src/data/program_configuration.ts +47 -47
- package/src/data/segment.ts +14 -14
- package/src/geo/edge_insets.ts +2 -2
- package/src/geo/lng_lat.ts +4 -4
- package/src/geo/lng_lat_bounds.ts +35 -35
- package/src/geo/mercator_coordinate.ts +5 -5
- package/src/geo/transform.test.ts +1 -1
- package/src/geo/transform.ts +14 -14
- package/src/gl/context.ts +3 -3
- package/src/gl/types.ts +19 -19
- package/src/gl/value.ts +6 -6
- package/src/gl/vertex_buffer.test.ts +1 -1
- package/src/index.ts +24 -9
- package/src/render/draw_circle.ts +8 -8
- package/src/render/draw_collision_debug.ts +5 -5
- package/src/render/draw_debug.ts +1 -1
- package/src/render/draw_line.ts +4 -4
- package/src/render/draw_symbol.ts +21 -21
- package/src/render/glyph_atlas.ts +12 -12
- package/src/render/glyph_manager.test.ts +10 -21
- package/src/render/glyph_manager.ts +34 -33
- package/src/render/image_manager.ts +4 -4
- package/src/render/painter.ts +16 -14
- package/src/render/program/background_program.ts +29 -29
- package/src/render/program/circle_program.ts +11 -11
- package/src/render/program/clipping_mask_program.ts +1 -1
- package/src/render/program/collision_program.ts +9 -9
- package/src/render/program/debug_program.ts +4 -4
- package/src/render/program/fill_extrusion_program.ts +31 -31
- package/src/render/program/fill_program.ts +29 -29
- package/src/render/program/heatmap_program.ts +12 -12
- package/src/render/program/hillshade_program.ts +12 -12
- package/src/render/program/line_program.ts +41 -41
- package/src/render/program/pattern.ts +28 -28
- package/src/render/program/raster_program.ts +21 -21
- package/src/render/program/symbol_program.ts +97 -97
- package/src/render/program.ts +25 -25
- package/src/render/texture.ts +9 -9
- package/src/render/uniform_binding.ts +1 -1
- package/src/render/vertex_array_object.ts +13 -13
- package/src/shaders/_prelude.fragment.glsl.g.ts +2 -0
- package/src/shaders/_prelude.vertex.glsl.g.ts +2 -0
- package/src/shaders/background.fragment.glsl.g.ts +2 -0
- package/src/shaders/background.vertex.glsl.g.ts +2 -0
- package/src/shaders/background_pattern.fragment.glsl.g.ts +2 -0
- package/src/shaders/background_pattern.vertex.glsl.g.ts +2 -0
- package/src/shaders/circle.fragment.glsl.g.ts +2 -0
- package/src/shaders/circle.vertex.glsl.g.ts +2 -0
- package/src/shaders/clipping_mask.fragment.glsl.g.ts +2 -0
- package/src/shaders/clipping_mask.vertex.glsl.g.ts +2 -0
- package/src/shaders/collision_box.fragment.glsl.g.ts +2 -0
- package/src/shaders/collision_box.vertex.glsl.g.ts +2 -0
- package/src/shaders/collision_circle.fragment.glsl.g.ts +2 -0
- package/src/shaders/collision_circle.vertex.glsl.g.ts +2 -0
- package/src/shaders/debug.fragment.glsl.g.ts +2 -0
- package/src/shaders/debug.vertex.glsl.g.ts +2 -0
- package/src/shaders/fill.fragment.glsl.g.ts +2 -0
- package/src/shaders/fill.vertex.glsl.g.ts +2 -0
- package/src/shaders/fill_extrusion.fragment.glsl.g.ts +2 -0
- package/src/shaders/fill_extrusion.vertex.glsl.g.ts +2 -0
- package/src/shaders/fill_extrusion_pattern.fragment.glsl.g.ts +2 -0
- package/src/shaders/fill_extrusion_pattern.vertex.glsl.g.ts +2 -0
- package/src/shaders/fill_outline.fragment.glsl.g.ts +2 -0
- package/src/shaders/fill_outline.vertex.glsl.g.ts +2 -0
- package/src/shaders/fill_outline_pattern.fragment.glsl.g.ts +2 -0
- package/src/shaders/fill_outline_pattern.vertex.glsl.g.ts +2 -0
- package/src/shaders/fill_pattern.fragment.glsl.g.ts +2 -0
- package/src/shaders/fill_pattern.vertex.glsl.g.ts +2 -0
- package/src/shaders/heatmap.fragment.glsl.g.ts +2 -0
- package/src/shaders/heatmap.vertex.glsl.g.ts +2 -0
- package/src/shaders/heatmap_texture.fragment.glsl.g.ts +2 -0
- package/src/shaders/heatmap_texture.vertex.glsl.g.ts +2 -0
- package/src/shaders/hillshade.fragment.glsl.g.ts +2 -0
- package/src/shaders/hillshade.vertex.glsl.g.ts +2 -0
- package/src/shaders/hillshade_prepare.fragment.glsl.g.ts +2 -0
- package/src/shaders/hillshade_prepare.vertex.glsl.g.ts +2 -0
- package/src/shaders/line.fragment.glsl.g.ts +2 -0
- package/src/shaders/line.vertex.glsl.g.ts +2 -0
- package/src/shaders/line_gradient.fragment.glsl.g.ts +2 -0
- package/src/shaders/line_gradient.vertex.glsl.g.ts +2 -0
- package/src/shaders/line_pattern.fragment.glsl.g.ts +2 -0
- package/src/shaders/line_pattern.vertex.glsl.g.ts +2 -0
- package/src/shaders/line_sdf.fragment.glsl.g.ts +2 -0
- package/src/shaders/line_sdf.vertex.glsl.g.ts +2 -0
- package/src/shaders/raster.fragment.glsl.g.ts +2 -0
- package/src/shaders/raster.vertex.glsl.g.ts +2 -0
- package/src/shaders/shaders.ts +52 -55
- package/src/shaders/symbol_icon.fragment.glsl.g.ts +2 -0
- package/src/shaders/symbol_icon.vertex.glsl.g.ts +2 -0
- package/src/shaders/symbol_sdf.fragment.glsl.g.ts +2 -0
- package/src/shaders/symbol_sdf.vertex.glsl.g.ts +2 -0
- package/src/shaders/symbol_text_and_icon.fragment.glsl.g.ts +2 -0
- package/src/shaders/symbol_text_and_icon.vertex.glsl.g.ts +2 -0
- package/src/source/canvas_source.test.ts +11 -12
- package/src/source/canvas_source.ts +4 -4
- package/src/source/geojson_source.test.ts +2 -1
- package/src/source/geojson_source.ts +1 -1
- package/src/source/geojson_worker_source.ts +23 -23
- package/src/source/geojson_wrapper.ts +8 -8
- package/src/source/image_source.test.ts +2 -2
- package/src/source/image_source.ts +6 -6
- package/src/source/pixels_to_tile_units.ts +6 -6
- package/src/source/query_features.ts +20 -20
- package/src/source/raster_dem_tile_source.test.ts +4 -3
- package/src/source/raster_dem_tile_source.ts +1 -1
- package/src/source/raster_tile_source.test.ts +4 -3
- package/src/source/raster_tile_source.ts +1 -1
- package/src/source/rtl_text_plugin.ts +10 -10
- package/src/source/source.ts +29 -29
- package/src/source/source_cache.test.ts +33 -1
- package/src/source/source_cache.ts +7 -5
- package/src/source/source_state.ts +1 -1
- package/src/source/tile.test.ts +3 -3
- package/src/source/tile.ts +15 -15
- package/src/source/tile_cache.test.ts +6 -4
- package/src/source/tile_cache.ts +6 -6
- package/src/source/tile_id.test.ts +10 -13
- package/src/source/tile_id.ts +2 -2
- package/src/source/vector_tile_source.test.ts +17 -5
- package/src/source/vector_tile_source.ts +4 -5
- package/src/source/vector_tile_worker_source.test.ts +4 -4
- package/src/source/vector_tile_worker_source.ts +5 -5
- package/src/source/worker.test.ts +1 -1
- package/src/source/worker.ts +22 -22
- package/src/source/worker_source.ts +56 -56
- package/src/source/worker_tile.ts +4 -4
- package/src/style/evaluation_parameters.ts +3 -3
- package/src/style/format_section_override.test.ts +1 -1
- package/src/style/light.ts +10 -10
- package/src/style/load_glyph_range.test.ts +3 -5
- package/src/style/load_glyph_range.ts +6 -6
- package/src/style/load_sprite.ts +5 -4
- package/src/style/pauseable_placement.ts +1 -1
- package/src/style/properties.ts +70 -70
- package/src/style/query_utils.ts +7 -7
- package/src/style/style.test.ts +26 -15
- package/src/style/style.ts +30 -30
- package/src/style/style_glyph.ts +8 -8
- package/src/style/style_image.ts +58 -58
- package/src/style/style_layer/background_style_layer.ts +2 -2
- package/src/style/style_layer/{background_style_layer_properties.ts → background_style_layer_properties.g.ts} +0 -0
- package/src/style/style_layer/circle_style_layer.ts +10 -10
- package/src/style/style_layer/{circle_style_layer_properties.ts → circle_style_layer_properties.g.ts} +0 -0
- package/src/style/style_layer/custom_style_layer.ts +19 -19
- package/src/style/style_layer/fill_extrusion_style_layer.ts +11 -11
- package/src/style/style_layer/{fill_extrusion_style_layer_properties.ts → fill_extrusion_style_layer_properties.g.ts} +0 -0
- package/src/style/style_layer/fill_style_layer.ts +9 -9
- package/src/style/style_layer/{fill_style_layer_properties.ts → fill_style_layer_properties.g.ts} +0 -0
- package/src/style/style_layer/heatmap_style_layer.ts +2 -2
- package/src/style/style_layer/{heatmap_style_layer_properties.ts → heatmap_style_layer_properties.g.ts} +0 -0
- package/src/style/style_layer/hillshade_style_layer.ts +2 -2
- package/src/style/style_layer/{hillshade_style_layer_properties.ts → hillshade_style_layer_properties.g.ts} +0 -0
- package/src/style/style_layer/line_style_layer.ts +9 -9
- package/src/style/style_layer/{line_style_layer_properties.ts → line_style_layer_properties.g.ts} +0 -0
- package/src/style/style_layer/raster_style_layer.ts +2 -2
- package/src/style/style_layer/{raster_style_layer_properties.ts → raster_style_layer_properties.g.ts} +0 -0
- package/src/style/style_layer/symbol_style_layer.ts +26 -7
- package/src/style/style_layer/{symbol_style_layer_properties.ts → symbol_style_layer_properties.g.ts} +6 -0
- package/src/style/style_layer.ts +10 -10
- package/src/style/style_layer_index.ts +3 -3
- package/src/style/validate_style.ts +15 -15
- package/src/style-spec/CHANGELOG.md +6 -0
- package/src/style-spec/error/validation_error.ts +1 -1
- package/src/style-spec/expression/compound_expression.ts +3 -3
- package/src/style-spec/expression/definitions/format.ts +11 -11
- package/src/style-spec/expression/definitions/interpolate.ts +5 -5
- package/src/style-spec/expression/definitions/match.ts +2 -2
- package/src/style-spec/expression/definitions/number_format.ts +11 -11
- package/src/style-spec/expression/expression.ts +8 -8
- package/src/style-spec/expression/index.ts +97 -97
- package/src/style-spec/expression/parsing_context.ts +11 -11
- package/src/style-spec/expression/types/collator.ts +9 -9
- package/src/style-spec/expression/types/resolved_image.ts +2 -2
- package/src/style-spec/expression/types.ts +14 -14
- package/src/style-spec/expression/values.ts +1 -1
- package/src/style-spec/feature_filter/index.ts +66 -66
- package/src/style-spec/function/convert.ts +3 -3
- package/src/style-spec/package.json +1 -1
- package/src/style-spec/reference/v8.json +68 -2
- package/src/style-spec/style-spec.ts +44 -44
- package/src/style-spec/types.ts +2 -0
- package/src/style-spec/util/color_spaces.ts +8 -8
- package/src/style-spec/util/result.ts +4 -4
- package/src/style-spec/validate/validate_filter.ts +58 -58
- package/src/style-spec/validate/validate_source.ts +63 -63
- package/src/style-spec/visit.ts +11 -11
- package/src/symbol/collision_feature.test.ts +1 -1
- package/src/symbol/collision_feature.ts +10 -10
- package/src/symbol/collision_index.ts +43 -43
- package/src/symbol/cross_tile_symbol_index.ts +17 -17
- package/src/symbol/get_anchors.ts +16 -16
- package/src/symbol/grid_index.test.ts +42 -19
- package/src/symbol/grid_index.ts +69 -40
- package/src/symbol/placement.ts +124 -95
- package/src/symbol/projection.ts +30 -30
- package/src/symbol/quads.ts +30 -30
- package/src/symbol/shaping.ts +160 -160
- package/src/symbol/symbol_layout.ts +119 -119
- package/src/symbol/symbol_size.ts +29 -29
- package/src/symbol/symbol_style_layer.test.ts +49 -2
- package/src/types/cancelable.ts +1 -1
- package/src/types/tilejson.ts +13 -13
- package/src/ui/anchor.ts +1 -1
- package/src/ui/camera.test.ts +9 -9
- package/src/ui/camera.ts +18 -18
- package/src/ui/control/attribution_control.test.ts +51 -16
- package/src/ui/control/attribution_control.ts +35 -16
- package/src/ui/control/control.ts +40 -40
- package/src/ui/control/fullscreen_control.ts +1 -1
- package/src/ui/control/geolocate_control.test.ts +1 -1
- package/src/ui/control/geolocate_control.ts +102 -102
- package/src/ui/control/logo_control.test.ts +5 -4
- package/src/ui/control/navigation_control.ts +3 -3
- package/src/ui/control/scale_control.test.ts +2 -2
- package/src/ui/control/scale_control.ts +5 -5
- package/src/ui/events.ts +289 -200
- package/src/ui/handler/box_zoom.test.ts +1 -1
- package/src/ui/handler/box_zoom.ts +1 -1
- package/src/ui/handler/dblclick_zoom.test.ts +1 -1
- package/src/ui/handler/drag_pan.test.ts +1 -1
- package/src/ui/handler/drag_rotate.test.ts +1 -1
- package/src/ui/handler/keyboard.test.ts +1 -1
- package/src/ui/handler/keyboard.ts +51 -51
- package/src/ui/handler/map_event.test.ts +1 -1
- package/src/ui/handler/map_event.ts +1 -1
- package/src/ui/handler/mouse.ts +1 -1
- package/src/ui/handler/mouse_rotate.test.ts +1 -1
- package/src/ui/handler/scroll_zoom.test.ts +3 -2
- package/src/ui/handler/scroll_zoom.ts +9 -9
- package/src/ui/handler/shim/drag_pan.ts +4 -4
- package/src/ui/handler/shim/drag_rotate.ts +1 -1
- package/src/ui/handler/shim/touch_zoom_rotate.ts +1 -1
- package/src/ui/handler/tap_recognizer.ts +4 -4
- package/src/ui/handler/touch_pan.ts +2 -2
- package/src/ui/handler/touch_zoom_rotate.test.ts +1 -1
- package/src/ui/handler/touch_zoom_rotate.ts +1 -1
- package/src/ui/handler_inertia.ts +6 -6
- package/src/ui/handler_manager.ts +44 -44
- package/src/ui/map/isMoving.test.ts +1 -1
- package/src/ui/map/isRotating.test.ts +1 -1
- package/src/ui/map/isZooming.test.ts +1 -1
- package/src/ui/map.test.ts +87 -14
- package/src/ui/map.ts +136 -106
- package/src/ui/map_events.test.ts +1 -1
- package/src/ui/marker.test.ts +12 -12
- package/src/ui/marker.ts +37 -37
- package/src/ui/popup.test.ts +7 -7
- package/src/ui/popup.ts +9 -9
- package/src/util/actor.test.ts +41 -10
- package/src/util/actor.ts +8 -8
- package/src/util/ajax.test.ts +29 -21
- package/src/util/ajax.ts +51 -30
- package/src/util/browser.ts +1 -1
- package/src/util/classify_rings.test.ts +1 -1
- package/src/util/color_ramp.ts +5 -5
- package/src/util/config.ts +2 -2
- package/src/util/dispatcher.ts +1 -1
- package/src/util/dom.ts +2 -2
- package/src/util/evented.ts +1 -1
- package/src/util/find_pole_of_inaccessibility.ts +3 -3
- package/src/util/image.ts +5 -5
- package/src/util/performance.ts +7 -7
- package/src/util/request_manager.ts +4 -4
- package/src/util/resolve_tokens.ts +4 -4
- package/src/util/struct_array.test.ts +1 -1
- package/src/util/struct_array.ts +15 -15
- package/src/util/task_queue.ts +3 -3
- package/src/util/tile_request_cache.ts +3 -3
- package/src/util/transferable_grid_index.ts +4 -4
- package/src/util/util.ts +8 -8
- package/src/util/web_worker.ts +4 -68
- package/src/util/web_worker_transfer.test.ts +3 -0
- package/src/util/web_worker_transfer.ts +21 -17
- package/src/util/worker_pool.ts +1 -1
- package/build/.eslintrc +0 -21
- package/build/glsl_to_js.js +0 -12
- package/build/post-ts-build.js +0 -43
- package/build/release-notes.md.ejs +0 -8
- package/build/test/build-tape.js +0 -17
- package/build/web_worker_replacement.js +0 -5
- package/dist/package.json +0 -1
- package/src/style-spec/validate_spec.test.ts +0 -29
- package/src/symbol/shaping.test.ts +0 -392
- package/src/types/glsl.d.ts +0 -4
package/src/symbol/projection.ts
CHANGED
|
@@ -11,7 +11,7 @@ import type {
|
|
|
11
11
|
GlyphOffsetArray,
|
|
12
12
|
SymbolLineVertexArray,
|
|
13
13
|
SymbolDynamicLayoutArray
|
|
14
|
-
} from '../data/array_types';
|
|
14
|
+
} from '../data/array_types.g';
|
|
15
15
|
import {WritingMode} from '../symbol/shaping';
|
|
16
16
|
|
|
17
17
|
export {updateLineLabels, hideGlyphs, getLabelPlaneMatrix, getGlCoordMatrix, project, getPerspectiveRatio, placeFirstAndLastGlyph, placeGlyphAlongLine, xyTransformMat4};
|
|
@@ -65,10 +65,10 @@ export {updateLineLabels, hideGlyphs, getLabelPlaneMatrix, getGlCoordMatrix, pro
|
|
|
65
65
|
* Returns a matrix for converting from tile units to the correct label coordinate space.
|
|
66
66
|
*/
|
|
67
67
|
function getLabelPlaneMatrix(posMatrix: mat4,
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
68
|
+
pitchWithMap: boolean,
|
|
69
|
+
rotateWithMap: boolean,
|
|
70
|
+
transform: Transform,
|
|
71
|
+
pixelsToTileUnits: number) {
|
|
72
72
|
const m = mat4.create();
|
|
73
73
|
if (pitchWithMap) {
|
|
74
74
|
mat4.scale(m, m, [1 / pixelsToTileUnits, 1 / pixelsToTileUnits, 1]);
|
|
@@ -85,10 +85,10 @@ function getLabelPlaneMatrix(posMatrix: mat4,
|
|
|
85
85
|
* Returns a matrix for converting from the correct label coordinate space to gl coords.
|
|
86
86
|
*/
|
|
87
87
|
function getGlCoordMatrix(posMatrix: mat4,
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
88
|
+
pitchWithMap: boolean,
|
|
89
|
+
rotateWithMap: boolean,
|
|
90
|
+
transform: Transform,
|
|
91
|
+
pixelsToTileUnits: number) {
|
|
92
92
|
if (pitchWithMap) {
|
|
93
93
|
const m = mat4.clone(posMatrix);
|
|
94
94
|
mat4.scale(m, m, [pixelsToTileUnits, pixelsToTileUnits, 1]);
|
|
@@ -116,7 +116,7 @@ function getPerspectiveRatio(cameraToCenterDistance: number, signedDistanceFromC
|
|
|
116
116
|
}
|
|
117
117
|
|
|
118
118
|
function isVisible(anchorPos: vec4,
|
|
119
|
-
|
|
119
|
+
clippingBuffer: [number, number]) {
|
|
120
120
|
const x = anchorPos[0] / anchorPos[3];
|
|
121
121
|
const y = anchorPos[1] / anchorPos[3];
|
|
122
122
|
const inPaddedViewport = (
|
|
@@ -132,13 +132,13 @@ function isVisible(anchorPos: vec4,
|
|
|
132
132
|
* This is only run on labels that are aligned with lines. Horizontal labels are handled entirely in the shader.
|
|
133
133
|
*/
|
|
134
134
|
function updateLineLabels(bucket: SymbolBucket,
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
135
|
+
posMatrix: mat4,
|
|
136
|
+
painter: Painter,
|
|
137
|
+
isText: boolean,
|
|
138
|
+
labelPlaneMatrix: mat4,
|
|
139
|
+
glCoordMatrix: mat4,
|
|
140
|
+
pitchWithMap: boolean,
|
|
141
|
+
keepUpright: boolean) {
|
|
142
142
|
|
|
143
143
|
const sizeData = isText ? bucket.textSizeData : bucket.iconSizeData;
|
|
144
144
|
const partiallyEvaluatedSize = symbolSize.evaluateSizeForZoom(sizeData, painter.transform.zoom);
|
|
@@ -334,19 +334,19 @@ function projectTruncatedLineSegment(previousTilePoint: Point, currentTilePoint:
|
|
|
334
334
|
}
|
|
335
335
|
|
|
336
336
|
function placeGlyphAlongLine(offsetX: number,
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
337
|
+
lineOffsetX: number,
|
|
338
|
+
lineOffsetY: number,
|
|
339
|
+
flip: boolean,
|
|
340
|
+
anchorPoint: Point,
|
|
341
|
+
tileAnchorPoint: Point,
|
|
342
|
+
anchorSegment: number,
|
|
343
|
+
lineStartIndex: number,
|
|
344
|
+
lineEndIndex: number,
|
|
345
|
+
lineVertexArray: SymbolLineVertexArray,
|
|
346
|
+
labelPlaneMatrix: mat4,
|
|
347
|
+
projectionCache: {
|
|
348
|
+
[_: number]: Point;
|
|
349
|
+
}) {
|
|
350
350
|
|
|
351
351
|
const combinedOffsetX = flip ?
|
|
352
352
|
offsetX - lineOffsetX :
|
package/src/symbol/quads.ts
CHANGED
|
@@ -26,24 +26,24 @@ import {Rect} from '../render/glyph_atlas';
|
|
|
26
26
|
* @private
|
|
27
27
|
*/
|
|
28
28
|
export type SymbolQuad = {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
29
|
+
tl: Point;
|
|
30
|
+
tr: Point;
|
|
31
|
+
bl: Point;
|
|
32
|
+
br: Point;
|
|
33
|
+
tex: {
|
|
34
|
+
x: number;
|
|
35
|
+
y: number;
|
|
36
|
+
w: number;
|
|
37
|
+
h: number;
|
|
38
|
+
};
|
|
39
|
+
pixelOffsetTL: Point;
|
|
40
|
+
pixelOffsetBR: Point;
|
|
41
|
+
writingMode: any | void;
|
|
42
|
+
glyphOffset: [number, number];
|
|
43
|
+
sectionIndex: number;
|
|
44
|
+
isSDF: boolean;
|
|
45
|
+
minFontScaleX: number;
|
|
46
|
+
minFontScaleY: number;
|
|
47
47
|
};
|
|
48
48
|
|
|
49
49
|
// If you have a 10px icon that isn't perfectly aligned to the pixel grid it will cover 11 actual
|
|
@@ -56,10 +56,10 @@ const border = IMAGE_PADDING;
|
|
|
56
56
|
* @private
|
|
57
57
|
*/
|
|
58
58
|
export function getIconQuads(
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
59
|
+
shapedIcon: PositionedIcon,
|
|
60
|
+
iconRotate: number,
|
|
61
|
+
isSDFIcon: boolean,
|
|
62
|
+
hasIconTextFit: boolean
|
|
63
63
|
): Array<SymbolQuad> {
|
|
64
64
|
const quads = [];
|
|
65
65
|
|
|
@@ -220,14 +220,14 @@ function getPxOffset(fixedOffset, fixedSize, stretchOffset, stretchSize) {
|
|
|
220
220
|
* @private
|
|
221
221
|
*/
|
|
222
222
|
export function getGlyphQuads(
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
223
|
+
anchor: Anchor,
|
|
224
|
+
shaping: Shaping,
|
|
225
|
+
textOffset: [number, number],
|
|
226
|
+
layer: SymbolStyleLayer,
|
|
227
|
+
alongLine: boolean,
|
|
228
|
+
feature: Feature,
|
|
229
|
+
imageMap: {[_: string]: StyleImage},
|
|
230
|
+
allowVerticalPlacement: boolean
|
|
231
231
|
): Array<SymbolQuad> {
|
|
232
232
|
|
|
233
233
|
const textRotate = layer.layout.get('text-rotate').evaluate(feature, {}) * Math.PI / 180;
|
package/src/symbol/shaping.ts
CHANGED
|
@@ -28,34 +28,34 @@ export {shapeText, shapeIcon, fitIconToText, getAnchorAlignment, WritingMode, SH
|
|
|
28
28
|
|
|
29
29
|
// The position of a glyph relative to the text's anchor point.
|
|
30
30
|
export type PositionedGlyph = {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
31
|
+
glyph: number;
|
|
32
|
+
imageName: string | null;
|
|
33
|
+
x: number;
|
|
34
|
+
y: number;
|
|
35
|
+
vertical: boolean;
|
|
36
|
+
scale: number;
|
|
37
|
+
fontStack: string;
|
|
38
|
+
sectionIndex: number;
|
|
39
|
+
metrics: GlyphMetrics;
|
|
40
|
+
rect: Rect | null;
|
|
41
41
|
};
|
|
42
42
|
|
|
43
43
|
export type PositionedLine = {
|
|
44
|
-
|
|
45
|
-
|
|
44
|
+
positionedGlyphs: Array<PositionedGlyph>;
|
|
45
|
+
lineOffset: number;
|
|
46
46
|
};
|
|
47
47
|
|
|
48
48
|
// A collection of positioned glyphs and some metadata
|
|
49
49
|
export type Shaping = {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
50
|
+
positionedLines: Array<PositionedLine>;
|
|
51
|
+
top: number;
|
|
52
|
+
bottom: number;
|
|
53
|
+
left: number;
|
|
54
|
+
right: number;
|
|
55
|
+
writingMode: WritingMode.horizontal | WritingMode.vertical;
|
|
56
|
+
text: string;
|
|
57
|
+
iconsInText: boolean;
|
|
58
|
+
verticalizable: boolean;
|
|
59
59
|
};
|
|
60
60
|
|
|
61
61
|
function isEmpty(positionedLines: Array<PositionedLine>) {
|
|
@@ -236,30 +236,30 @@ function breakLines(input: TaggedString, lineBreakPoints: Array<number>): Array<
|
|
|
236
236
|
}
|
|
237
237
|
|
|
238
238
|
function shapeText(
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
239
|
+
text: Formatted,
|
|
240
|
+
glyphMap: {
|
|
241
|
+
[_: string]: {
|
|
242
|
+
[_: number]: StyleGlyph;
|
|
243
|
+
};
|
|
244
|
+
},
|
|
245
|
+
glyphPositions: {
|
|
246
|
+
[_: string]: {
|
|
247
|
+
[_: number]: GlyphPosition;
|
|
248
|
+
};
|
|
249
|
+
},
|
|
250
|
+
imagePositions: {[_: string]: ImagePosition},
|
|
251
|
+
defaultFontStack: string,
|
|
252
|
+
maxWidth: number,
|
|
253
|
+
lineHeight: number,
|
|
254
|
+
textAnchor: SymbolAnchor,
|
|
255
|
+
textJustify: TextJustify,
|
|
256
|
+
spacing: number,
|
|
257
|
+
translate: [number, number],
|
|
258
|
+
writingMode: WritingMode.horizontal | WritingMode.vertical,
|
|
259
|
+
allowVerticalPlacement: boolean,
|
|
260
|
+
symbolPlacement: string,
|
|
261
|
+
layoutTextSize: number,
|
|
262
|
+
layoutTextSizeThisZoom: number
|
|
263
263
|
): Shaping | false {
|
|
264
264
|
const logicalInput = TaggedString.fromFeature(text, defaultFontStack);
|
|
265
265
|
|
|
@@ -275,7 +275,7 @@ function shapeText(
|
|
|
275
275
|
lines = [];
|
|
276
276
|
const untaggedLines =
|
|
277
277
|
processBidirectionalText(logicalInput.toString(),
|
|
278
|
-
|
|
278
|
+
determineLineBreaks(logicalInput, spacing, maxWidth, glyphMap, imagePositions, symbolPlacement, layoutTextSize));
|
|
279
279
|
for (const line of untaggedLines) {
|
|
280
280
|
const taggedLine = new TaggedString();
|
|
281
281
|
taggedLine.text = line;
|
|
@@ -291,8 +291,8 @@ function shapeText(
|
|
|
291
291
|
lines = [];
|
|
292
292
|
const processedLines =
|
|
293
293
|
processStyledBidirectionalText(logicalInput.text,
|
|
294
|
-
|
|
295
|
-
|
|
294
|
+
logicalInput.sectionIndex,
|
|
295
|
+
determineLineBreaks(logicalInput, spacing, maxWidth, glyphMap, imagePositions, symbolPlacement, layoutTextSize));
|
|
296
296
|
for (const line of processedLines) {
|
|
297
297
|
const taggedLine = new TaggedString();
|
|
298
298
|
taggedLine.text = line[0];
|
|
@@ -327,7 +327,7 @@ function shapeText(
|
|
|
327
327
|
/* eslint no-useless-computed-key: 0 */
|
|
328
328
|
|
|
329
329
|
const whitespace: {
|
|
330
|
-
|
|
330
|
+
[_: number]: boolean;
|
|
331
331
|
} = {
|
|
332
332
|
[0x09]: true, // tab
|
|
333
333
|
[0x0a]: true, // newline
|
|
@@ -338,7 +338,7 @@ const whitespace: {
|
|
|
338
338
|
};
|
|
339
339
|
|
|
340
340
|
const breakable: {
|
|
341
|
-
|
|
341
|
+
[_: number]: boolean;
|
|
342
342
|
} = {
|
|
343
343
|
[0x0a]: true, // newline
|
|
344
344
|
[0x20]: true, // space
|
|
@@ -360,16 +360,16 @@ const breakable: {
|
|
|
360
360
|
};
|
|
361
361
|
|
|
362
362
|
function getGlyphAdvance(
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
363
|
+
codePoint: number,
|
|
364
|
+
section: SectionOptions,
|
|
365
|
+
glyphMap: {
|
|
366
|
+
[_: string]: {
|
|
367
|
+
[_: number]: StyleGlyph;
|
|
368
|
+
};
|
|
369
|
+
},
|
|
370
|
+
imagePositions: {[_: string]: ImagePosition},
|
|
371
|
+
spacing: number,
|
|
372
|
+
layoutTextSize: number
|
|
373
373
|
): number {
|
|
374
374
|
if (!section.imageName) {
|
|
375
375
|
const positions = glyphMap[section.fontStack];
|
|
@@ -384,15 +384,15 @@ function getGlyphAdvance(
|
|
|
384
384
|
}
|
|
385
385
|
|
|
386
386
|
function determineAverageLineWidth(logicalInput: TaggedString,
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
387
|
+
spacing: number,
|
|
388
|
+
maxWidth: number,
|
|
389
|
+
glyphMap: {
|
|
390
|
+
[_: string]: {
|
|
391
|
+
[_: number]: StyleGlyph;
|
|
392
|
+
};
|
|
393
|
+
},
|
|
394
|
+
imagePositions: {[_: string]: ImagePosition},
|
|
395
|
+
layoutTextSize: number) {
|
|
396
396
|
let totalWidth = 0;
|
|
397
397
|
|
|
398
398
|
for (let index = 0; index < logicalInput.length(); index++) {
|
|
@@ -405,9 +405,9 @@ function determineAverageLineWidth(logicalInput: TaggedString,
|
|
|
405
405
|
}
|
|
406
406
|
|
|
407
407
|
function calculateBadness(lineWidth: number,
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
408
|
+
targetWidth: number,
|
|
409
|
+
penalty: number,
|
|
410
|
+
isLastBreak: boolean) {
|
|
411
411
|
const raggedness = Math.pow(lineWidth - targetWidth, 2);
|
|
412
412
|
if (isLastBreak) {
|
|
413
413
|
// Favor finals lines shorter than average over longer than average
|
|
@@ -446,19 +446,19 @@ function calculatePenalty(codePoint: number, nextCodePoint: number, penalizableI
|
|
|
446
446
|
}
|
|
447
447
|
|
|
448
448
|
type Break = {
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
449
|
+
index: number;
|
|
450
|
+
x: number;
|
|
451
|
+
priorBreak: Break;
|
|
452
|
+
badness: number;
|
|
453
453
|
};
|
|
454
454
|
|
|
455
455
|
function evaluateBreak(
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
456
|
+
breakIndex: number,
|
|
457
|
+
breakX: number,
|
|
458
|
+
targetWidth: number,
|
|
459
|
+
potentialBreaks: Array<Break>,
|
|
460
|
+
penalty: number,
|
|
461
|
+
isLastBreak: boolean
|
|
462
462
|
): Break {
|
|
463
463
|
// We could skip evaluating breaks where the line length (breakX - priorBreak.x) > maxWidth
|
|
464
464
|
// ...but in fact we allow lines longer than maxWidth (if there's no break points)
|
|
@@ -494,17 +494,17 @@ function leastBadBreaks(lastLineBreak?: Break | null): Array<number> {
|
|
|
494
494
|
}
|
|
495
495
|
|
|
496
496
|
function determineLineBreaks(
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
497
|
+
logicalInput: TaggedString,
|
|
498
|
+
spacing: number,
|
|
499
|
+
maxWidth: number,
|
|
500
|
+
glyphMap: {
|
|
501
|
+
[_: string]: {
|
|
502
|
+
[_: number]: StyleGlyph;
|
|
503
|
+
};
|
|
504
|
+
},
|
|
505
|
+
imagePositions: {[_: string]: ImagePosition},
|
|
506
|
+
symbolPlacement: string,
|
|
507
|
+
layoutTextSize: number
|
|
508
508
|
): Array<number> {
|
|
509
509
|
if (symbolPlacement !== 'point')
|
|
510
510
|
return [];
|
|
@@ -556,54 +556,54 @@ function getAnchorAlignment(anchor: SymbolAnchor) {
|
|
|
556
556
|
let horizontalAlign = 0.5, verticalAlign = 0.5;
|
|
557
557
|
|
|
558
558
|
switch (anchor) {
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
559
|
+
case 'right':
|
|
560
|
+
case 'top-right':
|
|
561
|
+
case 'bottom-right':
|
|
562
|
+
horizontalAlign = 1;
|
|
563
|
+
break;
|
|
564
|
+
case 'left':
|
|
565
|
+
case 'top-left':
|
|
566
|
+
case 'bottom-left':
|
|
567
|
+
horizontalAlign = 0;
|
|
568
|
+
break;
|
|
569
569
|
}
|
|
570
570
|
|
|
571
571
|
switch (anchor) {
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
572
|
+
case 'bottom':
|
|
573
|
+
case 'bottom-right':
|
|
574
|
+
case 'bottom-left':
|
|
575
|
+
verticalAlign = 1;
|
|
576
|
+
break;
|
|
577
|
+
case 'top':
|
|
578
|
+
case 'top-right':
|
|
579
|
+
case 'top-left':
|
|
580
|
+
verticalAlign = 0;
|
|
581
|
+
break;
|
|
582
582
|
}
|
|
583
583
|
|
|
584
584
|
return {horizontalAlign, verticalAlign};
|
|
585
585
|
}
|
|
586
586
|
|
|
587
587
|
function shapeLines(shaping: Shaping,
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
588
|
+
glyphMap: {
|
|
589
|
+
[_: string]: {
|
|
590
|
+
[_: number]: StyleGlyph;
|
|
591
|
+
};
|
|
592
|
+
},
|
|
593
|
+
glyphPositions: {
|
|
594
|
+
[_: string]: {
|
|
595
|
+
[_: number]: GlyphPosition;
|
|
596
|
+
};
|
|
597
|
+
},
|
|
598
|
+
imagePositions: {[_: string]: ImagePosition},
|
|
599
|
+
lines: Array<TaggedString>,
|
|
600
|
+
lineHeight: number,
|
|
601
|
+
textAnchor: SymbolAnchor,
|
|
602
|
+
textJustify: TextJustify,
|
|
603
|
+
writingMode: WritingMode.horizontal | WritingMode.vertical,
|
|
604
|
+
spacing: number,
|
|
605
|
+
allowVerticalPlacement: boolean,
|
|
606
|
+
layoutTextSizeThisZoom: number) {
|
|
607
607
|
|
|
608
608
|
let x = 0;
|
|
609
609
|
let y = SHAPING_DEFAULT_OFFSET;
|
|
@@ -613,7 +613,7 @@ function shapeLines(shaping: Shaping,
|
|
|
613
613
|
|
|
614
614
|
const justify =
|
|
615
615
|
textJustify === 'right' ? 1 :
|
|
616
|
-
|
|
616
|
+
textJustify === 'left' ? 0 : 0.5;
|
|
617
617
|
|
|
618
618
|
let lineIndex = 0;
|
|
619
619
|
for (const line of lines) {
|
|
@@ -736,10 +736,10 @@ function shapeLines(shaping: Shaping,
|
|
|
736
736
|
|
|
737
737
|
// justify right = 1, left = 0, center = 0.5
|
|
738
738
|
function justifyLine(positionedGlyphs: Array<PositionedGlyph>,
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
739
|
+
start: number,
|
|
740
|
+
end: number,
|
|
741
|
+
justify: 1 | 0 | 0.5,
|
|
742
|
+
lineOffset: number) {
|
|
743
743
|
if (!justify && !lineOffset)
|
|
744
744
|
return;
|
|
745
745
|
|
|
@@ -754,14 +754,14 @@ function justifyLine(positionedGlyphs: Array<PositionedGlyph>,
|
|
|
754
754
|
}
|
|
755
755
|
|
|
756
756
|
function align(positionedLines: Array<PositionedLine>,
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
757
|
+
justify: number,
|
|
758
|
+
horizontalAlign: number,
|
|
759
|
+
verticalAlign: number,
|
|
760
|
+
maxLineLength: number,
|
|
761
|
+
maxLineHeight: number,
|
|
762
|
+
lineHeight: number,
|
|
763
|
+
blockHeight: number,
|
|
764
|
+
lineCount: number) {
|
|
765
765
|
const shiftX = (justify - horizontalAlign) * maxLineLength;
|
|
766
766
|
let shiftY = 0;
|
|
767
767
|
|
|
@@ -780,18 +780,18 @@ function align(positionedLines: Array<PositionedLine>,
|
|
|
780
780
|
}
|
|
781
781
|
|
|
782
782
|
export type PositionedIcon = {
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
783
|
+
image: ImagePosition;
|
|
784
|
+
top: number;
|
|
785
|
+
bottom: number;
|
|
786
|
+
left: number;
|
|
787
|
+
right: number;
|
|
788
|
+
collisionPadding?: [number, number, number, number];
|
|
789
789
|
};
|
|
790
790
|
|
|
791
791
|
function shapeIcon(
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
792
|
+
image: ImagePosition,
|
|
793
|
+
iconOffset: [number, number],
|
|
794
|
+
iconAnchor: SymbolAnchor
|
|
795
795
|
): PositionedIcon {
|
|
796
796
|
const {horizontalAlign, verticalAlign} = getAnchorAlignment(iconAnchor);
|
|
797
797
|
const dx = iconOffset[0];
|
|
@@ -804,12 +804,12 @@ function shapeIcon(
|
|
|
804
804
|
}
|
|
805
805
|
|
|
806
806
|
function fitIconToText(
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
807
|
+
shapedIcon: PositionedIcon,
|
|
808
|
+
shapedText: Shaping,
|
|
809
|
+
textFit: string,
|
|
810
|
+
padding: [number, number, number, number],
|
|
811
|
+
iconOffset: [number, number],
|
|
812
|
+
fontScale: number
|
|
813
813
|
): PositionedIcon {
|
|
814
814
|
assert(textFit !== 'none');
|
|
815
815
|
assert(Array.isArray(padding) && padding.length === 4);
|