Merge pull request #4659 from bartvde/drawimage-safari-fix
Make sure icons show up in Safari
This commit is contained in:
@@ -349,8 +349,11 @@ ol.render.canvas.Replay.prototype.replay_ = function(
|
|||||||
context.globalAlpha = alpha * opacity;
|
context.globalAlpha = alpha * opacity;
|
||||||
}
|
}
|
||||||
|
|
||||||
context.drawImage(image, originX, originY, width, height,
|
var w = (width + originX > image.width) ? image.width - originX : width;
|
||||||
x, y, width * pixelRatio, height * pixelRatio);
|
var h = (height + originY > image.height) ? image.height - originY : height;
|
||||||
|
|
||||||
|
context.drawImage(image, originX, originY, w, h,
|
||||||
|
x, y, w * pixelRatio, h * pixelRatio);
|
||||||
|
|
||||||
if (opacity != 1) {
|
if (opacity != 1) {
|
||||||
context.globalAlpha = alpha;
|
context.globalAlpha = alpha;
|
||||||
|
|||||||
58
test_rendering/spec/ol/data/me0.svg
Normal file
58
test_rendering/spec/ol/data/me0.svg
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
version="1.1"
|
||||||
|
id="Layer_1"
|
||||||
|
x="0px"
|
||||||
|
y="0px"
|
||||||
|
width="512px"
|
||||||
|
height="512px"
|
||||||
|
viewBox="0 0 512 512"
|
||||||
|
enable-background="new 0 0 512 512"
|
||||||
|
xml:space="preserve"
|
||||||
|
inkscape:version="0.48.4 r9939"
|
||||||
|
sodipodi:docname="me0.svg"><metadata
|
||||||
|
id="metadata3776"><rdf:RDF><cc:Work
|
||||||
|
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
|
||||||
|
id="defs3774" /><sodipodi:namedview
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1"
|
||||||
|
objecttolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
guidetolerance="10"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:window-width="1024"
|
||||||
|
inkscape:window-height="1258"
|
||||||
|
id="namedview3772"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="0.4609375"
|
||||||
|
inkscape:cx="309.13338"
|
||||||
|
inkscape:cy="256"
|
||||||
|
inkscape:window-x="1016"
|
||||||
|
inkscape:window-y="-8"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="Layer_1" />
|
||||||
|
|
||||||
|
<g
|
||||||
|
id="g3754"
|
||||||
|
style="fill:#085095;fill-opacity:1;stroke:#ffffff;stroke-opacity:1;stroke-width:25;stroke-miterlimit:4;stroke-dasharray:none;stroke-linejoin:round;stroke-linecap:round"><path
|
||||||
|
style="stroke:#ffffff;stroke-width:25;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;fill:#085095;fill-opacity:1;stroke-linejoin:round;stroke-linecap:round"
|
||||||
|
id="path3770"
|
||||||
|
d="m 256,25.6 c -95.4279,0 -172.8,77.3721 -172.8,172.8 0,95.4279 144,288 172.8,288 28.8,0 172.8,-192.5721 172.8,-288 C 428.8,102.9721 351.4279,25.6 256,25.6 z m 0,288 c -63.5346,0 -115.2,-51.6942 -115.2,-115.2 0,-63.5058 51.6654,-115.2 115.2,-115.2 63.5346,0 115.2,51.6942 115.2,115.2 0,63.5058 -51.6654,115.2 -115.2,115.2 z"
|
||||||
|
inkscape:connector-curvature="0" /><polygon
|
||||||
|
style="fill:#085095;stroke:#ffffff;stroke-width:69.44444444;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;fill-opacity:1"
|
||||||
|
transform="matrix(0.36,0,0,0.36,160.72934,103.79972)"
|
||||||
|
id="polygon3"
|
||||||
|
points="374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 259.216,29.942 330.27,173.919 489.16,197.007 "
|
||||||
|
stroke-miterlimit="10" /></g></svg>
|
||||||
|
After Width: | Height: | Size: 2.7 KiB |
BIN
test_rendering/spec/ol/style/expected/icon-canvas-svg-offset.png
Normal file
BIN
test_rendering/spec/ol/style/expected/icon-canvas-svg-offset.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 7.5 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 5.2 KiB |
BIN
test_rendering/spec/ol/style/expected/icon-canvas-svg-scale.png
Normal file
BIN
test_rendering/spec/ol/style/expected/icon-canvas-svg-scale.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 10 KiB |
@@ -4,8 +4,17 @@ describe('ol.rendering.style.Icon', function() {
|
|||||||
|
|
||||||
var target, map, vectorSource;
|
var target, map, vectorSource;
|
||||||
|
|
||||||
function createMap(renderer) {
|
var imgInfo = {
|
||||||
target = createMapDiv(50, 50);
|
anchor: [0.5, 46],
|
||||||
|
anchorXUnits: 'fraction',
|
||||||
|
anchorYUnits: 'pixels',
|
||||||
|
opacity: 0.75,
|
||||||
|
scale: 0.5,
|
||||||
|
imgSize: [32, 48]
|
||||||
|
};
|
||||||
|
|
||||||
|
function createMap(renderer, width, height) {
|
||||||
|
target = createMapDiv(width ? width : 50, height ? height : 50);
|
||||||
|
|
||||||
vectorSource = new ol.source.Vector();
|
vectorSource = new ol.source.Vector();
|
||||||
var vectorLayer = new ol.layer.Vector({
|
var vectorLayer = new ol.layer.Vector({
|
||||||
@@ -30,7 +39,7 @@ describe('ol.rendering.style.Icon', function() {
|
|||||||
disposeMap(map);
|
disposeMap(map);
|
||||||
});
|
});
|
||||||
|
|
||||||
function createFeatures(callback) {
|
function createFeatures(src, imgInfo, callback) {
|
||||||
var feature;
|
var feature;
|
||||||
feature = new ol.Feature({
|
feature = new ol.Feature({
|
||||||
geometry: new ol.geom.Point([0, 0])
|
geometry: new ol.geom.Point([0, 0])
|
||||||
@@ -38,35 +47,63 @@ describe('ol.rendering.style.Icon', function() {
|
|||||||
|
|
||||||
var img = new Image();
|
var img = new Image();
|
||||||
img.onload = function() {
|
img.onload = function() {
|
||||||
|
imgInfo.img = img;
|
||||||
feature.setStyle(new ol.style.Style({
|
feature.setStyle(new ol.style.Style({
|
||||||
image: new ol.style.Icon(/** @type {olx.style.IconOptions} */ ({
|
image: new ol.style.Icon(/** @type {olx.style.IconOptions} */ (imgInfo))
|
||||||
anchor: [0.5, 46],
|
|
||||||
anchorXUnits: 'fraction',
|
|
||||||
anchorYUnits: 'pixels',
|
|
||||||
opacity: 0.75,
|
|
||||||
scale: 0.5,
|
|
||||||
img: img,
|
|
||||||
imgSize: [32, 48]
|
|
||||||
}))
|
|
||||||
}));
|
}));
|
||||||
vectorSource.addFeature(feature);
|
vectorSource.addFeature(feature);
|
||||||
callback();
|
callback();
|
||||||
};
|
};
|
||||||
img.src = 'spec/ol/data/icon.png';
|
img.src = src;
|
||||||
}
|
}
|
||||||
|
|
||||||
it('tests the canvas renderer', function(done) {
|
it('tests the canvas renderer', function(done) {
|
||||||
map = createMap('canvas');
|
map = createMap('canvas');
|
||||||
createFeatures(function() {
|
createFeatures('spec/ol/data/icon.png', imgInfo, function() {
|
||||||
expectResemble(map, 'spec/ol/style/expected/icon-canvas.png',
|
expectResemble(map, 'spec/ol/style/expected/icon-canvas.png',
|
||||||
IMAGE_TOLERANCE, done);
|
IMAGE_TOLERANCE, done);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('scales svg correctly in the canvas renderer', function(done) {
|
||||||
|
map = createMap('canvas', 512, 512);
|
||||||
|
createFeatures('spec/ol/data/me0.svg', {
|
||||||
|
scale: 96 / 512,
|
||||||
|
imgSize: [512, 512]
|
||||||
|
}, function() {
|
||||||
|
expectResemble(map, 'spec/ol/style/expected/icon-canvas-svg-scale.png',
|
||||||
|
IMAGE_TOLERANCE, done);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('uses offset correctly in the canvas renderer', function(done) {
|
||||||
|
map = createMap('canvas', 256, 512);
|
||||||
|
createFeatures('spec/ol/data/me0.svg', {
|
||||||
|
offset: [0, 256],
|
||||||
|
size: [256, 256],
|
||||||
|
imgSize: [512, 512]
|
||||||
|
}, function() {
|
||||||
|
expectResemble(map, 'spec/ol/style/expected/icon-canvas-svg-offset.png',
|
||||||
|
IMAGE_TOLERANCE, done);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('uses offset correctly if it is larger than size in the canvas renderer', function(done) {
|
||||||
|
map = createMap('canvas', 256, 512);
|
||||||
|
createFeatures('spec/ol/data/me0.svg', {
|
||||||
|
offset: [0, 374],
|
||||||
|
size: [256, 256],
|
||||||
|
imgSize: [512, 512]
|
||||||
|
}, function() {
|
||||||
|
expectResemble(map, 'spec/ol/style/expected/icon-canvas-svg-offset2.png',
|
||||||
|
IMAGE_TOLERANCE, done);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
it('tests the WebGL renderer', function(done) {
|
it('tests the WebGL renderer', function(done) {
|
||||||
assertWebGL();
|
assertWebGL();
|
||||||
map = createMap('webgl');
|
map = createMap('webgl');
|
||||||
createFeatures(function() {
|
createFeatures('spec/ol/data/icon.png', imgInfo, function() {
|
||||||
expectResemble(map, 'spec/ol/style/expected/icon-webgl.png',
|
expectResemble(map, 'spec/ol/style/expected/icon-webgl.png',
|
||||||
2.0, done);
|
2.0, done);
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user