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;
244 return _imageAlignment;
252 - (void)setImageScaling:(CPImageScaling)anImageScaling
259 CPDOMDisplayServerSetStyleLeftTop(_DOMImageElement, NULL, 0.0, 0.0);
269 return [
self currentValueForThemeAttribute:@"image-scaling"];
280 _DOMImageElement.style.visibility =
"hidden";
282 [_shadowView setHidden:YES];
287 _DOMImageElement.style.visibility =
"visible";
289 [_shadowView setHidden:NO];
311 imageScaling = [
self currentValueForThemeAttribute:@"image-scaling"],
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)
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)];
424 [[
self nextResponder] mouseDown:anEvent];
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];
var CPImageViewImageAlignmentKey
CPPasteboard draggingPasteboard()
void addSubview:(CPView aSubview)
var CPImageViewIsEditableKey
id initWithFrame:(CGRect aFrame)
void setHasShadow:(BOOL shouldHaveShadow)
CPArray registeredDraggedTypes()
Unarchives objects created using CPKeyedArchiver.
CPImageScaleProportionallyDown
void setImageScaling:(CPImageScaling scaling)
var CPImageViewEmptyPlaceholderImage
CPNotificationCenter defaultCenter()
A mutable key-value pair collection.
var CPImageViewHasShadowKey
CPImageScaleAxesIndependently
id imageNamed:(CPString aName)
CPImage cachedImageWithContentsOfFile:(CPString aFile)
void setImage:(CPImage anImage)
An immutable string (collection of characters).
BOOL sendAction:to:(SEL anAction, [to] id anObject)
id initWithCoder:(CPCoder aCoder)
void setNeedsDisplay:(BOOL aFlag)
void setObjectValue:(id anObject)
id initWithContentsOfFile:(CPString aFilename)
void setEditable:(BOOL shouldBeEditable)
A notification that can be posted to a CPNotificationCenter.
CPUInteger imageScaling()
void hideOrDisplayContents()
unsigned imageAlignment()
Defines methods for use when archiving & restoring (enc/decoding).
id unarchiveObjectWithData:(CPData aData)
void setObjectValue:(CPImage anImage)
Sends messages (CPNotification) between objects.
var CPImageViewImageScalingKey
CPBundle bundleForClass:(Class aClass)
void removeObserver:name:object:(id anObserver, [name] CPString aNotificationName, [object] id anObject)
CPData dataForType:(CPString aType)
CPImageScaleProportionallyUpOrDown
void encodeWithCoder:(CPCoder aCoder)
void unregisterDraggedTypes()
void setImageAlignment:(CPImageAlignment anImageAlignment)
void registerForDraggedTypes:(CPArray pasteboardTypes)
global CPImagesPboardType global appkit_tag_dom_elements typedef CPImageAlignment CPImageAlignCenter
id stringWithFormat:(CPString format, [,] ...)