| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All r
ights reserved. | 2 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All r
ights reserved. |
| 3 * Copyright (C) 2010 Google Inc. All rights reserved. | 3 * Copyright (C) 2010 Google Inc. All rights reserved. |
| 4 * Copyright (C) 2012 Samsung Electronics. All rights reserved. | 4 * Copyright (C) 2012 Samsung Electronics. All rights reserved. |
| 5 * | 5 * |
| 6 * This library is free software; you can redistribute it and/or | 6 * This library is free software; you can redistribute it and/or |
| 7 * modify it under the terms of the GNU Library General Public | 7 * modify it under the terms of the GNU Library General Public |
| 8 * License as published by the Free Software Foundation; either | 8 * License as published by the Free Software Foundation; either |
| 9 * version 2 of the License, or (at your option) any later version. | 9 * version 2 of the License, or (at your option) any later version. |
| 10 * | 10 * |
| (...skipping 21 matching lines...) Expand all Loading... |
| 32 #include "core/html/HTMLInputElement.h" | 32 #include "core/html/HTMLInputElement.h" |
| 33 #include "core/html/forms/InputTypeNames.h" | 33 #include "core/html/forms/InputTypeNames.h" |
| 34 #include "core/html/parser/HTMLParserIdioms.h" | 34 #include "core/html/parser/HTMLParserIdioms.h" |
| 35 #include "core/rendering/RenderImage.h" | 35 #include "core/rendering/RenderImage.h" |
| 36 #include "wtf/PassOwnPtr.h" | 36 #include "wtf/PassOwnPtr.h" |
| 37 | 37 |
| 38 namespace WebCore { | 38 namespace WebCore { |
| 39 | 39 |
| 40 using namespace HTMLNames; | 40 using namespace HTMLNames; |
| 41 | 41 |
| 42 inline ImageInputType::ImageInputType(HTMLInputElement* element) | 42 inline ImageInputType::ImageInputType(HTMLInputElement& element) |
| 43 : BaseButtonInputType(element) | 43 : BaseButtonInputType(element) |
| 44 { | 44 { |
| 45 } | 45 } |
| 46 | 46 |
| 47 PassRefPtr<InputType> ImageInputType::create(HTMLInputElement* element) | 47 PassRefPtr<InputType> ImageInputType::create(HTMLInputElement& element) |
| 48 { | 48 { |
| 49 return adoptRef(new ImageInputType(element)); | 49 return adoptRef(new ImageInputType(element)); |
| 50 } | 50 } |
| 51 | 51 |
| 52 const AtomicString& ImageInputType::formControlType() const | 52 const AtomicString& ImageInputType::formControlType() const |
| 53 { | 53 { |
| 54 return InputTypeNames::image(); | 54 return InputTypeNames::image(); |
| 55 } | 55 } |
| 56 | 56 |
| 57 bool ImageInputType::isFormDataAppendable() const | 57 bool ImageInputType::isFormDataAppendable() const |
| 58 { | 58 { |
| 59 return true; | 59 return true; |
| 60 } | 60 } |
| 61 | 61 |
| 62 bool ImageInputType::appendFormData(FormDataList& encoding, bool) const | 62 bool ImageInputType::appendFormData(FormDataList& encoding, bool) const |
| 63 { | 63 { |
| 64 if (!element()->isActivatedSubmit()) | 64 if (!element().isActivatedSubmit()) |
| 65 return false; | 65 return false; |
| 66 const AtomicString& name = element()->name(); | 66 const AtomicString& name = element().name(); |
| 67 if (name.isEmpty()) { | 67 if (name.isEmpty()) { |
| 68 encoding.appendData("x", m_clickLocation.x()); | 68 encoding.appendData("x", m_clickLocation.x()); |
| 69 encoding.appendData("y", m_clickLocation.y()); | 69 encoding.appendData("y", m_clickLocation.y()); |
| 70 return true; | 70 return true; |
| 71 } | 71 } |
| 72 | 72 |
| 73 DEFINE_STATIC_LOCAL(String, dotXString, (".x")); | 73 DEFINE_STATIC_LOCAL(String, dotXString, (".x")); |
| 74 DEFINE_STATIC_LOCAL(String, dotYString, (".y")); | 74 DEFINE_STATIC_LOCAL(String, dotYString, (".y")); |
| 75 encoding.appendData(name + dotXString, m_clickLocation.x()); | 75 encoding.appendData(name + dotXString, m_clickLocation.x()); |
| 76 encoding.appendData(name + dotYString, m_clickLocation.y()); | 76 encoding.appendData(name + dotYString, m_clickLocation.y()); |
| 77 | 77 |
| 78 if (!element()->value().isEmpty()) | 78 if (!element().value().isEmpty()) |
| 79 encoding.appendData(name, element()->value()); | 79 encoding.appendData(name, element().value()); |
| 80 return true; | 80 return true; |
| 81 } | 81 } |
| 82 | 82 |
| 83 bool ImageInputType::supportsValidation() const | 83 bool ImageInputType::supportsValidation() const |
| 84 { | 84 { |
| 85 return false; | 85 return false; |
| 86 } | 86 } |
| 87 | 87 |
| 88 static IntPoint extractClickLocation(Event* event) | 88 static IntPoint extractClickLocation(Event* event) |
| 89 { | 89 { |
| 90 if (!event->underlyingEvent() || !event->underlyingEvent()->isMouseEvent()) | 90 if (!event->underlyingEvent() || !event->underlyingEvent()->isMouseEvent()) |
| 91 return IntPoint(); | 91 return IntPoint(); |
| 92 MouseEvent* mouseEvent = toMouseEvent(event->underlyingEvent()); | 92 MouseEvent* mouseEvent = toMouseEvent(event->underlyingEvent()); |
| 93 if (mouseEvent->isSimulated()) | 93 if (mouseEvent->isSimulated()) |
| 94 return IntPoint(); | 94 return IntPoint(); |
| 95 return IntPoint(mouseEvent->offsetX(), mouseEvent->offsetY()); | 95 return IntPoint(mouseEvent->offsetX(), mouseEvent->offsetY()); |
| 96 } | 96 } |
| 97 | 97 |
| 98 void ImageInputType::handleDOMActivateEvent(Event* event) | 98 void ImageInputType::handleDOMActivateEvent(Event* event) |
| 99 { | 99 { |
| 100 RefPtr<HTMLInputElement> element = this->element(); | 100 RefPtr<HTMLInputElement> element(this->element()); |
| 101 if (element->isDisabledFormControl() || !element->form()) | 101 if (element->isDisabledFormControl() || !element->form()) |
| 102 return; | 102 return; |
| 103 element->setActivatedSubmit(true); | 103 element->setActivatedSubmit(true); |
| 104 m_clickLocation = extractClickLocation(event); | 104 m_clickLocation = extractClickLocation(event); |
| 105 element->form()->prepareForSubmission(event); // Event handlers can run. | 105 element->form()->prepareForSubmission(event); // Event handlers can run. |
| 106 element->setActivatedSubmit(false); | 106 element->setActivatedSubmit(false); |
| 107 event->setDefaultHandled(); | 107 event->setDefaultHandled(); |
| 108 } | 108 } |
| 109 | 109 |
| 110 RenderObject* ImageInputType::createRenderer(RenderStyle*) const | 110 RenderObject* ImageInputType::createRenderer(RenderStyle*) const |
| 111 { | 111 { |
| 112 RenderImage* image = new RenderImage(element()); | 112 RenderImage* image = new RenderImage(&element()); |
| 113 image->setImageResource(RenderImageResource::create()); | 113 image->setImageResource(RenderImageResource::create()); |
| 114 return image; | 114 return image; |
| 115 } | 115 } |
| 116 | 116 |
| 117 void ImageInputType::altAttributeChanged() | 117 void ImageInputType::altAttributeChanged() |
| 118 { | 118 { |
| 119 RenderImage* image = toRenderImage(element()->renderer()); | 119 RenderImage* image = toRenderImage(element().renderer()); |
| 120 if (!image) | 120 if (!image) |
| 121 return; | 121 return; |
| 122 image->updateAltText(); | 122 image->updateAltText(); |
| 123 } | 123 } |
| 124 | 124 |
| 125 void ImageInputType::srcAttributeChanged() | 125 void ImageInputType::srcAttributeChanged() |
| 126 { | 126 { |
| 127 if (!element()->renderer()) | 127 if (!element().renderer()) |
| 128 return; | 128 return; |
| 129 element()->imageLoader()->updateFromElementIgnoringPreviousError(); | 129 element().imageLoader()->updateFromElementIgnoringPreviousError(); |
| 130 } | 130 } |
| 131 | 131 |
| 132 void ImageInputType::attach() | 132 void ImageInputType::attach() |
| 133 { | 133 { |
| 134 BaseButtonInputType::attach(); | 134 BaseButtonInputType::attach(); |
| 135 | 135 |
| 136 HTMLImageLoader* imageLoader = element()->imageLoader(); | 136 HTMLImageLoader* imageLoader = element().imageLoader(); |
| 137 imageLoader->updateFromElement(); | 137 imageLoader->updateFromElement(); |
| 138 | 138 |
| 139 RenderImage* renderer = toRenderImage(element()->renderer()); | 139 RenderImage* renderer = toRenderImage(element().renderer()); |
| 140 if (!renderer) | 140 if (!renderer) |
| 141 return; | 141 return; |
| 142 | 142 |
| 143 if (imageLoader->hasPendingBeforeLoadEvent()) | 143 if (imageLoader->hasPendingBeforeLoadEvent()) |
| 144 return; | 144 return; |
| 145 | 145 |
| 146 RenderImageResource* imageResource = renderer->imageResource(); | 146 RenderImageResource* imageResource = renderer->imageResource(); |
| 147 imageResource->setImageResource(imageLoader->image()); | 147 imageResource->setImageResource(imageLoader->image()); |
| 148 | 148 |
| 149 // If we have no image at all because we have no src attribute, set | 149 // If we have no image at all because we have no src attribute, set |
| (...skipping 22 matching lines...) Expand all Loading... |
| 172 return false; | 172 return false; |
| 173 } | 173 } |
| 174 | 174 |
| 175 bool ImageInputType::shouldRespectHeightAndWidthAttributes() | 175 bool ImageInputType::shouldRespectHeightAndWidthAttributes() |
| 176 { | 176 { |
| 177 return true; | 177 return true; |
| 178 } | 178 } |
| 179 | 179 |
| 180 unsigned ImageInputType::height() const | 180 unsigned ImageInputType::height() const |
| 181 { | 181 { |
| 182 RefPtr<HTMLInputElement> element = this->element(); | 182 RefPtr<HTMLInputElement> element(this->element()); |
| 183 | 183 |
| 184 if (!element->renderer()) { | 184 if (!element->renderer()) { |
| 185 // Check the attribute first for an explicit pixel value. | 185 // Check the attribute first for an explicit pixel value. |
| 186 unsigned height; | 186 unsigned height; |
| 187 if (parseHTMLNonNegativeInteger(element->fastGetAttribute(heightAttr), h
eight)) | 187 if (parseHTMLNonNegativeInteger(element->fastGetAttribute(heightAttr), h
eight)) |
| 188 return height; | 188 return height; |
| 189 | 189 |
| 190 // If the image is available, use its height. | 190 // If the image is available, use its height. |
| 191 if (element->hasImageLoader()) { | 191 if (element->hasImageLoader()) { |
| 192 HTMLImageLoader* imageLoader = element->imageLoader(); | 192 HTMLImageLoader* imageLoader = element->imageLoader(); |
| 193 if (imageLoader->image()) | 193 if (imageLoader->image()) |
| 194 return imageLoader->image()->imageSizeForRenderer(element->rende
rer(), 1).height(); | 194 return imageLoader->image()->imageSizeForRenderer(element->rende
rer(), 1).height(); |
| 195 } | 195 } |
| 196 } | 196 } |
| 197 | 197 |
| 198 element->document().updateLayout(); | 198 element->document().updateLayout(); |
| 199 | 199 |
| 200 RenderBox* box = element->renderBox(); | 200 RenderBox* box = element->renderBox(); |
| 201 return box ? adjustForAbsoluteZoom(box->contentHeight(), box) : 0; | 201 return box ? adjustForAbsoluteZoom(box->contentHeight(), box) : 0; |
| 202 } | 202 } |
| 203 | 203 |
| 204 unsigned ImageInputType::width() const | 204 unsigned ImageInputType::width() const |
| 205 { | 205 { |
| 206 RefPtr<HTMLInputElement> element = this->element(); | 206 RefPtr<HTMLInputElement> element(this->element()); |
| 207 | 207 |
| 208 if (!element->renderer()) { | 208 if (!element->renderer()) { |
| 209 // Check the attribute first for an explicit pixel value. | 209 // Check the attribute first for an explicit pixel value. |
| 210 unsigned width; | 210 unsigned width; |
| 211 if (parseHTMLNonNegativeInteger(element->fastGetAttribute(widthAttr), wi
dth)) | 211 if (parseHTMLNonNegativeInteger(element->fastGetAttribute(widthAttr), wi
dth)) |
| 212 return width; | 212 return width; |
| 213 | 213 |
| 214 // If the image is available, use its width. | 214 // If the image is available, use its width. |
| 215 if (element->hasImageLoader()) { | 215 if (element->hasImageLoader()) { |
| 216 HTMLImageLoader* imageLoader = element->imageLoader(); | 216 HTMLImageLoader* imageLoader = element->imageLoader(); |
| 217 if (imageLoader->image()) | 217 if (imageLoader->image()) |
| 218 return imageLoader->image()->imageSizeForRenderer(element->rende
rer(), 1).width(); | 218 return imageLoader->image()->imageSizeForRenderer(element->rende
rer(), 1).width(); |
| 219 } | 219 } |
| 220 } | 220 } |
| 221 | 221 |
| 222 element->document().updateLayout(); | 222 element->document().updateLayout(); |
| 223 | 223 |
| 224 RenderBox* box = element->renderBox(); | 224 RenderBox* box = element->renderBox(); |
| 225 return box ? adjustForAbsoluteZoom(box->contentWidth(), box) : 0; | 225 return box ? adjustForAbsoluteZoom(box->contentWidth(), box) : 0; |
| 226 } | 226 } |
| 227 | 227 |
| 228 } // namespace WebCore | 228 } // namespace WebCore |
| OLD | NEW |