60 var filename = arguments[0],
64 if (typeof(arguments[1]) ===
"number")
66 if (arguments[1] !== nil && arguments[1] !== undefined)
67 size = CGSizeMake(arguments[1], arguments[2]);
69 bundle = arguments[3];
71 else if (typeof(arguments[1]) ===
"object")
74 bundle = arguments[2];
81 return [[
CPImage alloc] initWithContentsOfFile:[bundle pathForResource:filename] size:size];
83 return [[
CPImage alloc] initWithContentsOfFile:[bundle pathForResource:filename]];
119 unsigned _loadStatus;
138 - (id)initByReferencingFile:(
CPString)aFilename size:(CGSize)aSize
141 if (aFilename === undefined || aFilename === nil)
148 _size = CGSizeMakeCopy(aSize);
149 _filename = aFilename;
162 - (id)initWithContentsOfFile:(
CPString)aFilename size:(CGSize)aSize
195 var base64 = [someData
base64],
196 type = [base64 hasPrefix:@"/9j/4AAQSkZJRgABAQEASABIAAD/"] ?
@"jpg" :
@"png",
197 dataURL =
"data:image/" + type +
";base64," + base64;
219 if ([_filename hasPrefix:
@"data:image"])
223 var canvas = document.createElement(
"canvas"),
224 ctx = canvas.getContext(
"2d");
226 canvas.width = _image.width,
227 canvas.height = _image.height;
229 ctx.drawImage(_image, 0, 0);
231 dataURL = canvas.toDataURL(
"image/png");
236 var base64 = dataURL.replace(/^data:image\/png;base64,/,
"");
245 - (void)setSize:(CGSize)aSize
247 _size = CGSizeMakeCopy(aSize);
270 if (!imageOrSize.isa)
272 imageOrSize =
CPAppKitImage(
"CPImage/" + aName +
".png", imageOrSize);
274 [imageOrSize setName:aName];
314 - (void)setDelegate:(
id)aDelegate
316 _delegate = aDelegate;
330 - (unsigned)loadStatus
349 _image =
new Image();
351 var isSynchronous = YES;
354 _image.onload =
function ()
357 window.setTimeout(
function() { [
self _imageDidLoad]; }, 0);
360 [
self _imageDidLoad];
363 [
self _derefFromImage];
366 _image.onerror =
function ()
369 window.setTimeout(
function() { [
self _imageDidError]; }, 0);
372 [
self _imageDidError];
375 [
self _derefFromImage];
378 _image.onabort =
function ()
381 window.setTimeout(
function() { [
self _imageDidAbort]; }, 0);
384 [
self _imageDidAbort];
387 [
self _derefFromImage];
390 _image.src = _filename;
394 window.setTimeout(
function() { isSynchronous = NO; }, 0);
398 - (BOOL)isSingleImage
403 - (BOOL)isThreePartImage
408 - (BOOL)isNinePartImage
418 if (filename.indexOf(
"data:") === 0)
420 var index = filename.indexOf(
",");
423 filename = [
CPString stringWithFormat:@"%s,%s...%s", filename.substr(0, index), filename.substr(index + 1, 10), filename.substr(filename.length - 10)];
425 filename =
"data:<unknown type>";
428 return [
CPString stringWithFormat:ImageDescriptionFormat, [
super description], filename, size.width, size.height];
432 - (void)_derefFromImage
434 _image.onload = null;
435 _image.onerror = null;
436 _image.onabort = null;
440 - (void)_imageDidLoad
445 if (!_size || (_size.width == -1 && _size.height == -1))
446 _size = CGSizeMake(_image.width, _image.height);
452 if ([_delegate respondsToSelector:
@selector(imageDidLoad:)])
453 [_delegate imageDidLoad:self];
457 - (void)_imageDidError
461 if ([_delegate respondsToSelector:
@selector(imageDidError:)])
462 [_delegate imageDidError:self];
466 - (void)_imageDidAbort
470 if ([_delegate respondsToSelector:
@selector(imageDidAbort:)])
471 [_delegate imageDidAbort:self];
494 [aCoder encodeObject:_filename forKey:@"CPFilename"];
495 [aCoder encodeSize:_size forKey:@"CPSize"];
502 CPArray _imageSlices;
506 - (id)initWithImageSlices:(CPArray)imageSlices isVertical:(BOOL)isVertical
512 _imageSlices = imageSlices;
513 _isVertical = isVertical;
524 - (CPArray)imageSlices
534 - (BOOL)isSingleImage
539 - (BOOL)isThreePartImage
544 - (BOOL)isNinePartImage
562 _imageSlices = [aCoder decodeObjectForKey:CPThreePartImageImageSlicesKey];
563 _isVertical = [aCoder decodeBoolForKey:CPThreePartImageIsVerticalKey];
571 [aCoder encodeObject:_imageSlices forKey:CPThreePartImageImageSlicesKey];
572 [aCoder encodeBool:_isVertical forKey:CPThreePartImageIsVerticalKey];
580 CPArray _imageSlices;
583 - (id)initWithImageSlices:(CPArray)imageSlices
588 _imageSlices = imageSlices;
598 - (CPArray)imageSlices
603 - (BOOL)isSingleImage
608 - (BOOL)isThreePartImage
613 - (BOOL)isNinePartImage
629 _imageSlices = [aCoder decodeObjectForKey:CPNinePartImageImageSlicesKey];
636 [aCoder encodeObject:_imageSlices forKey:CPNinePartImageImageSlicesKey];