26 @global appkit_tag_dom_elements
28 @
typedef CPImageAlignment
48 DOMElement _DOMImageElement;
56 CPImageAlignment _imageAlignment;
69 + (Class)_binderClassForBinding:(
CPString)aBinding
76 return [
super _binderClassForBinding:aBinding];
79 - (id)initWithFrame:(CGRect)aFrame
86 [
self _createDOMImageElement];
93 - (void)_createDOMImageElement
99 _DOMImageElement = document.createElement(
"img");
100 _DOMImageElement.style.position =
"absolute";
101 _DOMImageElement.style.left =
"0px";
102 _DOMImageElement.style.top =
"0px";
106 _DOMImageElement.setAttribute(
"draggable",
"true");
107 _DOMImageElement.style["-khtml-user-drag"] =
"element";
110 _DOMImageElement.style.visibility =
"hidden";
111 AppKitTagDOMElement(
self, _DOMImageElement);
113 CPDOMDisplayServerAppendChild(_DOMElement, _DOMImageElement);
135 if (oldImage === anImage)
143 [defaultCenter removeObserver:self name:CPImageDidLoadNotification object:oldImage];
148 if (!_DOMImageElement)
149 [
self _createDOMImageElement];
151 _DOMImageElement.src = newImage ? [newImage filename] : [CPImageViewEmptyPlaceholderImage filename];
154 var size = [newImage size];
156 if (size && size.width === -1 && size.height === -1)
158 [defaultCenter addObserver:self selector:@selector(imageDidLoad:) name:CPImageDidLoadNotification object:newImage];
161 _DOMImageElement.width = 0;
162 _DOMImageElement.height = 0;
165 [_shadowView setHidden:YES];
197 - (void)setHasShadow:(BOOL)shouldHaveShadow
199 if (_hasShadow == shouldHaveShadow)
202 _hasShadow = shouldHaveShadow;
215 [_shadowView removeFromSuperview];
228 - (void)setImageAlignment:(CPImageAlignment)anImageAlignment
230 if (_imageAlignment == anImageAlignment)
233 _imageAlignment = anImageAlignment;
242 - (unsigned)imageAlignment
244 return _imageAlignment;
252 - (void)setImageScaling:(CPImageScaling)anImageScaling
259 CPDOMDisplayServerSetStyleLeftTop(_DOMImageElement, NULL, 0.0, 0.0);
267 - (CPUInteger)imageScaling
275 - (void)hideOrDisplayContents
280 _DOMImageElement.style.visibility =
"hidden";
282 [_shadowView setHidden:YES];
287 _DOMImageElement.style.visibility =
"visible";
289 [_shadowView setHidden:NO];
304 - (void)layoutSubviews
310 image = [
self image],
314 insetWidth = (_hasShadow ? [_shadowView horizontalInset] : 0.0),
315 insetHeight = (_hasShadow ? [_shadowView verticalInset] : 0.0),
316 boundsWidth = CGRectGetWidth(
bounds),
317 boundsHeight = CGRectGetHeight(
bounds),
318 width = boundsWidth - insetWidth,
319 height = boundsHeight - insetHeight;
324 _DOMImageElement.width = ROUND(
width);
325 _DOMImageElement.height = ROUND(height);
332 if (size.width == -1 && size.height == -1)
335 switch (imageScaling)
338 if (
width >= size.width && height >= size.height)
341 height = size.height;
348 var imageRatio = size.width / size.height,
349 viewRatio =
width / height;
351 if (viewRatio > imageRatio)
352 width = height * imageRatio;
354 height =
width / imageRatio;
360 height = size.height;
365 _DOMImageElement.width = ROUND(
width);
366 _DOMImageElement.height = ROUND(height);
372 switch (_imageAlignment)
383 x = boundsWidth -
width;
387 x = (boundsWidth -
width) / 2.0;
391 switch (_imageAlignment)
402 y = boundsHeight - height;
406 y = (boundsHeight - height) / 2.0;
411 CPDOMDisplayServerSetStyleLeftTop(_DOMImageElement, NULL, x, y);
415 _imageRect = CGRectMake(x, y,
width, height);
418 [_shadowView setFrame:CGRectMake(x - [_shadowView leftInset], y - [_shadowView topInset], width + insetWidth, height + insetHeight)];
427 - (void)setEditable:(BOOL)shouldBeEditable
429 if (_isEditable === shouldBeEditable)
432 _isEditable = shouldBeEditable;
443 [draggedTypes removeObjectIdenticalTo:CPImagesPboardType];
473 - (void)_updatePlaceholdersWithOptions:(
CPDictionary)options
475 [
self _setPlaceholder:nil forMarker:CPMultipleValuesMarker isDefault:YES];
476 [
self _setPlaceholder:nil forMarker:CPNoSelectionMarker isDefault:YES];
477 [
self _setPlaceholder:nil forMarker:CPNotApplicableMarker isDefault:YES];
478 [
self _setPlaceholder:nil forMarker:CPNullMarker isDefault:YES];
481 - (void)setPlaceholderValue:(
id)aValue withMarker:(
CPString)aMarker forBinding:(
CPString)aBinding
483 [_source setImage:nil];
486 - (void)setValue:(
id)aValue forBinding:(
CPString)aBinding
499 [_source setImage:image];
504 var image = [_source image];
509 return [image filename];
536 [
self _createDOMImageElement];
539 [
self setHasShadow:[aCoder decodeBoolForKey:CPImageViewHasShadowKey]];
562 [_shadowView removeFromSuperview];
569 [aCoder encodeBool:_hasShadow forKey:CPImageViewHasShadowKey];
570 [aCoder encodeInt:_imageAlignment forKey:CPImageViewImageAlignmentKey];
573 [aCoder encodeBool:_isEditable forKey:CPImageViewIsEditableKey];
588 [
image setName:cached_name];