49 lines
1.6 KiB
JavaScript
49 lines
1.6 KiB
JavaScript
|
// vim: et:ts=4:sw=4:sts=4:ft=js
|
||
|
|
||
|
Ox.MapMarkerImage = (function() {
|
||
|
|
||
|
var cache = {};
|
||
|
|
||
|
return function(options) {
|
||
|
|
||
|
options = Ox.extend({
|
||
|
color: [255, 0, 0],
|
||
|
mode: 'normal', // normal, selected, editing
|
||
|
size: 16,
|
||
|
type: 'place', // place, result, rectangle
|
||
|
}, options);
|
||
|
|
||
|
var index = [
|
||
|
options.type, options.mode, options.size, options.color.join(',')
|
||
|
].join(';');
|
||
|
|
||
|
if (!cache[index]) {
|
||
|
var color = options.type == 'place' ?
|
||
|
Ox.merge(Ox.clone(options.color), [0.5]) : [0, 0, 0, 0],
|
||
|
border = options.mode == 'normal' ? [0, 0, 0] :
|
||
|
options.mode == 'selected' ? [255, 255, 255] : [128, 128, 255],
|
||
|
c = Ox.canvas(options.size, options.size),
|
||
|
image,
|
||
|
r = options.size / 2;
|
||
|
c.context.fillStyle = 'rgba(' + color.join(', ') + ')';
|
||
|
c.context.arc(r, r, r - 2, 0, 360);
|
||
|
c.context.fill();
|
||
|
c.context.beginPath();
|
||
|
c.context.lineWidth = 2;
|
||
|
c.context.strokeStyle = 'rgb(' + border.join(', ') + ')';
|
||
|
c.context.arc(r, r, r - 1, 0, 360);
|
||
|
c.context.stroke();
|
||
|
cache[index] = new google.maps.MarkerImage(
|
||
|
c.canvas.toDataURL(),
|
||
|
new google.maps.Size(options.size, options.size),
|
||
|
new google.maps.Point(0, 0),
|
||
|
new google.maps.Point(r, r)
|
||
|
);
|
||
|
//Ox.print(options, 'index', index)
|
||
|
}
|
||
|
|
||
|
return cache[index];
|
||
|
|
||
|
}
|
||
|
|
||
|
}());
|