@@ -7,9 +7,11 @@ License: https://raw.githubusercontent.com/openlayers/ol-mapbox-style/master/LIC
77import  { derefLayers }  from  '@maplibre/maplibre-gl-style-spec' ; 
88import  Map  from  'ol/Map.js' ; 
99import  View  from  'ol/View.js' ; 
10+ import  { createMockDiv }  from  'ol/dom.js' ; 
1011import  { getCenter ,  getTopLeft }  from  'ol/extent.js' ; 
1112import  GeoJSON  from  'ol/format/GeoJSON.js' ; 
1213import  MVT  from  'ol/format/MVT.js' ; 
14+ import  { WORKER_OFFSCREEN_CANVAS }  from  'ol/has.js' ; 
1315import  LayerGroup  from  'ol/layer/Group.js' ; 
1416import  ImageLayer  from  'ol/layer/Image.js' ; 
1517import  Layer  from  'ol/layer/Layer.js' ; 
@@ -409,7 +411,11 @@ export function applyStyle(
409411            options . accessToken , 
410412            styleUrl  ||  location . href , 
411413          ) ; 
412-           spriteScale  =  window . devicePixelRatio  >=  1.5  ? 0.5  : 1 ; 
414+           spriteScale  =  WORKER_OFFSCREEN_CANVAS 
415+             ? 1 
416+             : window . devicePixelRatio  >=  1.5 
417+               ? 0.5 
418+               : 1 ; 
413419          const  sizeFactor  =  spriteScale  ==  0.5  ? '@2x'  : '' ; 
414420
415421          Promise . all ( 
@@ -632,7 +638,9 @@ function getBackgroundColor(glLayer, resolution, options, functionCache) {
632638 * @return  {Layer } OpenLayers layer. 
633639 */ 
634640function  setupBackgroundLayer ( glLayer ,  options ,  functionCache )  { 
635-   const  div  =  document . createElement ( 'div' ) ; 
641+   const  div  =  WORKER_OFFSCREEN_CANVAS 
642+     ? createMockDiv ( ) 
643+     : document . createElement ( 'div' ) ; 
636644  div . className  =  'ol-mapbox-style-background' ; 
637645  div . style . position  =  'absolute' ; 
638646  div . style . width  =  '100%' ; 
@@ -1165,15 +1173,28 @@ export function apply(mapOrGroupOrElement, style, options = {}) {
11651173  let  promise ; 
11661174  /** @type  {Map|LayerGroup } */ 
11671175  let  mapOrGroup ; 
1168-   if  ( 
1169-     typeof  mapOrGroupOrElement  ===  'string'  || 
1170-     mapOrGroupOrElement  instanceof  HTMLElement 
1171-   )  { 
1172-     mapOrGroup  =  new  Map ( { 
1173-       target : mapOrGroupOrElement , 
1174-     } ) ; 
1175-   }  else  { 
1176+ 
1177+   if  ( WORKER_OFFSCREEN_CANVAS )  { 
1178+     if  ( 
1179+       ! ( mapOrGroupOrElement  instanceof  Map )  && 
1180+       ! ( mapOrGroupOrElement  instanceof  LayerGroup ) 
1181+     )  { 
1182+       throw  new  Error ( 
1183+         'ol-mapbox-style in a web worker requires a Map or a LayerGroup as first argument' , 
1184+       ) ; 
1185+     } 
11761186    mapOrGroup  =  mapOrGroupOrElement ; 
1187+   }  else  { 
1188+     if  ( 
1189+       typeof  mapOrGroupOrElement  ===  'string'  || 
1190+       mapOrGroupOrElement  instanceof  HTMLElement 
1191+     )  { 
1192+       mapOrGroup  =  new  Map ( { 
1193+         target : mapOrGroupOrElement , 
1194+       } ) ; 
1195+     }  else  { 
1196+       mapOrGroup  =  mapOrGroupOrElement ; 
1197+     } 
11771198  } 
11781199
11791200  if  ( typeof  style  ===  'string' )  { 
0 commit comments