45 DOMElement _DOMImageElement;
53 CPImageAlignment _imageAlignment;
66 + (Class)_binderClassForBinding:(
CPString)theBinding
71 return [
super _binderClassForBinding:theBinding];
74 - (id)initWithFrame:(CGRect)aFrame
81 _DOMImageElement = document.createElement(
"img");
82 _DOMImageElement.style.position =
"absolute";
83 _DOMImageElement.style.left =
"0px";
84 _DOMImageElement.style.top =
"0px";
88 _DOMImageElement.setAttribute(
"draggable",
"true");
89 _DOMImageElement.style["-khtml-user-drag"] =
"element";
92 CPDOMDisplayServerAppendChild(_DOMElement, _DOMImageElement);
94 _DOMImageElement.style.visibility =
"hidden";
119 if (oldImage === anImage)
127 [defaultCenter removeObserver:self name:CPImageDidLoadNotification object:oldImage];
132 _DOMImageElement.src = newImage ? [newImage filename] : [CPImageViewEmptyPlaceholderImage filename];
135 var size = [newImage size];
137 if (size && size.width === -1 && size.height === -1)
139 [defaultCenter addObserver:self selector:@selector(imageDidLoad:) name:CPImageDidLoadNotification object:newImage];
142 _DOMImageElement.width = 0;
143 _DOMImageElement.height = 0;
146 [_shadowView setHidden:YES];
177 - (void)setHasShadow:(BOOL)shouldHaveShadow
179 if (_hasShadow == shouldHaveShadow)
182 _hasShadow = shouldHaveShadow;
195 [_shadowView removeFromSuperview];
208 - (void)setImageAlignment:(CPImageAlignment)anImageAlignment
210 if (_imageAlignment == anImageAlignment)
213 _imageAlignment = anImageAlignment;
222 - (unsigned)imageAlignment
224 return _imageAlignment;
232 - (void)setImageScaling:(CPImageScaling)anImageScaling
239 CPDOMDisplayServerSetStyleLeftTop(_DOMImageElement, NULL, 0.0, 0.0);
247 - (unsigned)imageScaling
255 - (void)hideOrDisplayContents
260 _DOMImageElement.style.visibility =
"hidden";
262 [_shadowView setHidden:YES];
267 _DOMImageElement.style.visibility =
"visible";
269 [_shadowView setHidden:NO];
284 - (void)layoutSubviews
289 var bounds = [
self bounds],
290 image = [
self image],
294 insetWidth = (_hasShadow ? [_shadowView horizontalInset] : 0.0),
295 insetHeight = (_hasShadow ? [_shadowView verticalInset] : 0.0),
296 boundsWidth = _CGRectGetWidth(bounds),
297 boundsHeight = _CGRectGetHeight(bounds),
298 width = boundsWidth - insetWidth,
299 height = boundsHeight - insetHeight;
304 _DOMImageElement.width = ROUND(
width);
305 _DOMImageElement.height = ROUND(height);
312 if (size.width == -1 && size.height == -1)
315 switch (imageScaling)
318 if (
width >= size.width && height >= size.height)
321 height = size.height;
328 var imageRatio = size.width / size.height,
329 viewRatio =
width / height;
331 if (viewRatio > imageRatio)
332 width = height * imageRatio;
334 height =
width / imageRatio;
340 height = size.height;
345 _DOMImageElement.width = ROUND(
width);
346 _DOMImageElement.height = ROUND(height);
352 switch (_imageAlignment)
363 x = boundsWidth -
width;
367 x = (boundsWidth -
width) / 2.0;
371 switch (_imageAlignment)
382 y = boundsHeight - height;
386 y = (boundsHeight - height) / 2.0;
391 CPDOMDisplayServerSetStyleLeftTop(_DOMImageElement, NULL, x, y);
395 _imageRect = _CGRectMake(x, y,
width, height);
398 [_shadowView setFrame:_CGRectMake(x - [_shadowView leftInset], y - [_shadowView topInset], width + insetWidth, height + insetHeight)];
407 - (void)setEditable:(BOOL)shouldBeEditable
409 if (_isEditable === shouldBeEditable)
412 _isEditable = shouldBeEditable;
423 [draggedTypes removeObjectIdenticalTo:CPImagesPboardType];
453 - (void)_updatePlaceholdersWithOptions:(
CPDictionary)options
455 [
self _setPlaceholder:nil forMarker:CPMultipleValuesMarker isDefault:YES];
456 [
self _setPlaceholder:nil forMarker:CPNoSelectionMarker isDefault:YES];
457 [
self _setPlaceholder:nil forMarker:CPNotApplicableMarker isDefault:YES];
458 [
self _setPlaceholder:nil forMarker:CPNullMarker isDefault:YES];
461 - (void)setPlaceholderValue:(
id)aValue withMarker:(
CPString)aMarker forBinding:(
CPString)aBinding
463 [_source setImage:nil];
466 - (void)setValue:(
id)aValue forBinding:(
CPString)aBinding
477 [_source setImage:image];
498 _DOMImageElement = document.createElement(
"img");
499 _DOMImageElement.style.position =
"absolute";
500 _DOMImageElement.style.left =
"0px";
501 _DOMImageElement.style.top =
"0px";
502 _DOMImageElement.style.visibility =
"hidden";
505 _DOMImageElement.setAttribute(
"draggable",
"true");
506 _DOMImageElement.style["-khtml-user-drag"] =
"element";
509 if (typeof(appkit_tag_dom_elements) !==
"undefined" && !!appkit_tag_dom_elements)
510 _DOMImageElement.setAttribute(
"data-cappuccino-view", [
self className]);
518 _DOMElement.appendChild(_DOMImageElement);
521 [
self setHasShadow:[aCoder decodeBoolForKey:CPImageViewHasShadowKey]];
545 var actualSubviews = _subviews;
547 _subviews = [_subviews copy];
548 [_subviews removeObjectIdenticalTo:_shadowView];
554 _subviews = actualSubviews;
556 [aCoder encodeBool:_hasShadow forKey:CPImageViewHasShadowKey];
557 [aCoder encodeInt:_imageAlignment forKey:CPImageViewImageAlignmentKey];
560 [aCoder encodeBool:_isEditable forKey:CPImageViewIsEditableKey];