| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2006, 2007, 2012 Apple Inc. All rights reserved. | 2 * Copyright (C) 2006, 2007, 2012 Apple Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * This library is free software; you can redistribute it and/or | 4 * This library is free software; you can redistribute it and/or |
| 5 * modify it under the terms of the GNU Library General Public | 5 * modify it under the terms of the GNU Library General Public |
| 6 * License as published by the Free Software Foundation; either | 6 * License as published by the Free Software Foundation; either |
| 7 * version 2 of the License, or (at your option) any later version. | 7 * version 2 of the License, or (at your option) any later version. |
| 8 * | 8 * |
| 9 * This library is distributed in the hope that it will be useful, | 9 * This library is distributed in the hope that it will be useful, |
| 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| (...skipping 17 matching lines...) Expand all Loading... |
| 28 #include "core/html/HTMLInputElement.h" | 28 #include "core/html/HTMLInputElement.h" |
| 29 #include "core/rendering/PaintInfo.h" | 29 #include "core/rendering/PaintInfo.h" |
| 30 #include "core/rendering/RenderButton.h" | 30 #include "core/rendering/RenderButton.h" |
| 31 #include "core/rendering/RenderTheme.h" | 31 #include "core/rendering/RenderTheme.h" |
| 32 #include "platform/fonts/Font.h" | 32 #include "platform/fonts/Font.h" |
| 33 #include "platform/graphics/GraphicsContextStateSaver.h" | 33 #include "platform/graphics/GraphicsContextStateSaver.h" |
| 34 #include "platform/text/PlatformLocale.h" | 34 #include "platform/text/PlatformLocale.h" |
| 35 #include "platform/text/TextRun.h" | 35 #include "platform/text/TextRun.h" |
| 36 #include <math.h> | 36 #include <math.h> |
| 37 | 37 |
| 38 using namespace std; | |
| 39 | |
| 40 namespace WebCore { | 38 namespace WebCore { |
| 41 | 39 |
| 42 using namespace HTMLNames; | 40 using namespace HTMLNames; |
| 43 | 41 |
| 44 const int afterButtonSpacing = 4; | 42 const int afterButtonSpacing = 4; |
| 45 const int defaultWidthNumChars = 34; | 43 const int defaultWidthNumChars = 34; |
| 46 const int buttonShadowHeight = 2; | 44 const int buttonShadowHeight = 2; |
| 47 | 45 |
| 48 RenderFileUploadControl::RenderFileUploadControl(HTMLInputElement* input) | 46 RenderFileUploadControl::RenderFileUploadControl(HTMLInputElement* input) |
| 49 : RenderBlockFlow(input) | 47 : RenderBlockFlow(input) |
| (...skipping 26 matching lines...) Expand all Loading... |
| 76 paintInvalidationForWholeRenderer(); | 74 paintInvalidationForWholeRenderer(); |
| 77 } | 75 } |
| 78 | 76 |
| 79 static int nodeWidth(Node* node) | 77 static int nodeWidth(Node* node) |
| 80 { | 78 { |
| 81 return (node && node->renderBox()) ? node->renderBox()->pixelSnappedWidth()
: 0; | 79 return (node && node->renderBox()) ? node->renderBox()->pixelSnappedWidth()
: 0; |
| 82 } | 80 } |
| 83 | 81 |
| 84 int RenderFileUploadControl::maxFilenameWidth() const | 82 int RenderFileUploadControl::maxFilenameWidth() const |
| 85 { | 83 { |
| 86 return max(0, contentBoxRect().pixelSnappedWidth() - nodeWidth(uploadButton(
)) - afterButtonSpacing); | 84 return std::max(0, contentBoxRect().pixelSnappedWidth() - nodeWidth(uploadBu
tton()) - afterButtonSpacing); |
| 87 } | 85 } |
| 88 | 86 |
| 89 void RenderFileUploadControl::paintObject(PaintInfo& paintInfo, const LayoutPoin
t& paintOffset) | 87 void RenderFileUploadControl::paintObject(PaintInfo& paintInfo, const LayoutPoin
t& paintOffset) |
| 90 { | 88 { |
| 91 if (style()->visibility() != VISIBLE) | 89 if (style()->visibility() != VISIBLE) |
| 92 return; | 90 return; |
| 93 | 91 |
| 94 // Push a clip. | 92 // Push a clip. |
| 95 GraphicsContextStateSaver stateSaver(*paintInfo.context, false); | 93 GraphicsContextStateSaver stateSaver(*paintInfo.context, false); |
| 96 if (paintInfo.phase == PaintPhaseForeground || paintInfo.phase == PaintPhase
ChildBlockBackgrounds) { | 94 if (paintInfo.phase == PaintPhaseForeground || paintInfo.phase == PaintPhase
ChildBlockBackgrounds) { |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 154 const Font& font = style()->font(); | 152 const Font& font = style()->font(); |
| 155 // FIXME: Remove the need for this const_cast by making constructTextRun tak
e a const RenderObject*. | 153 // FIXME: Remove the need for this const_cast by making constructTextRun tak
e a const RenderObject*. |
| 156 RenderFileUploadControl* renderer = const_cast<RenderFileUploadControl*>(thi
s); | 154 RenderFileUploadControl* renderer = const_cast<RenderFileUploadControl*>(thi
s); |
| 157 float minDefaultLabelWidth = defaultWidthNumChars * font.width(constructText
Run(renderer, font, characterAsString, style(), TextRun::AllowTrailingExpansion)
); | 155 float minDefaultLabelWidth = defaultWidthNumChars * font.width(constructText
Run(renderer, font, characterAsString, style(), TextRun::AllowTrailingExpansion)
); |
| 158 | 156 |
| 159 const String label = toHTMLInputElement(node())->locale().queryString(blink:
:WebLocalizedString::FileButtonNoFileSelectedLabel); | 157 const String label = toHTMLInputElement(node())->locale().queryString(blink:
:WebLocalizedString::FileButtonNoFileSelectedLabel); |
| 160 float defaultLabelWidth = font.width(constructTextRun(renderer, font, label,
style(), TextRun::AllowTrailingExpansion)); | 158 float defaultLabelWidth = font.width(constructTextRun(renderer, font, label,
style(), TextRun::AllowTrailingExpansion)); |
| 161 if (HTMLInputElement* button = uploadButton()) | 159 if (HTMLInputElement* button = uploadButton()) |
| 162 if (RenderObject* buttonRenderer = button->renderer()) | 160 if (RenderObject* buttonRenderer = button->renderer()) |
| 163 defaultLabelWidth += buttonRenderer->maxPreferredLogicalWidth() + af
terButtonSpacing; | 161 defaultLabelWidth += buttonRenderer->maxPreferredLogicalWidth() + af
terButtonSpacing; |
| 164 maxLogicalWidth = static_cast<int>(ceilf(max(minDefaultLabelWidth, defaultLa
belWidth))); | 162 maxLogicalWidth = static_cast<int>(ceilf(std::max(minDefaultLabelWidth, defa
ultLabelWidth))); |
| 165 | 163 |
| 166 if (!style()->width().isPercent()) | 164 if (!style()->width().isPercent()) |
| 167 minLogicalWidth = maxLogicalWidth; | 165 minLogicalWidth = maxLogicalWidth; |
| 168 } | 166 } |
| 169 | 167 |
| 170 void RenderFileUploadControl::computePreferredLogicalWidths() | 168 void RenderFileUploadControl::computePreferredLogicalWidths() |
| 171 { | 169 { |
| 172 ASSERT(preferredLogicalWidthsDirty()); | 170 ASSERT(preferredLogicalWidthsDirty()); |
| 173 | 171 |
| 174 m_minPreferredLogicalWidth = 0; | 172 m_minPreferredLogicalWidth = 0; |
| 175 m_maxPreferredLogicalWidth = 0; | 173 m_maxPreferredLogicalWidth = 0; |
| 176 RenderStyle* styleToUse = style(); | 174 RenderStyle* styleToUse = style(); |
| 177 | 175 |
| 178 if (styleToUse->width().isFixed() && styleToUse->width().value() > 0) | 176 if (styleToUse->width().isFixed() && styleToUse->width().value() > 0) |
| 179 m_minPreferredLogicalWidth = m_maxPreferredLogicalWidth = adjustContentB
oxLogicalWidthForBoxSizing(styleToUse->width().value()); | 177 m_minPreferredLogicalWidth = m_maxPreferredLogicalWidth = adjustContentB
oxLogicalWidthForBoxSizing(styleToUse->width().value()); |
| 180 else | 178 else |
| 181 computeIntrinsicLogicalWidths(m_minPreferredLogicalWidth, m_maxPreferred
LogicalWidth); | 179 computeIntrinsicLogicalWidths(m_minPreferredLogicalWidth, m_maxPreferred
LogicalWidth); |
| 182 | 180 |
| 183 if (styleToUse->minWidth().isFixed() && styleToUse->minWidth().value() > 0)
{ | 181 if (styleToUse->minWidth().isFixed() && styleToUse->minWidth().value() > 0)
{ |
| 184 m_maxPreferredLogicalWidth = max(m_maxPreferredLogicalWidth, adjustConte
ntBoxLogicalWidthForBoxSizing(styleToUse->minWidth().value())); | 182 m_maxPreferredLogicalWidth = std::max(m_maxPreferredLogicalWidth, adjust
ContentBoxLogicalWidthForBoxSizing(styleToUse->minWidth().value())); |
| 185 m_minPreferredLogicalWidth = max(m_minPreferredLogicalWidth, adjustConte
ntBoxLogicalWidthForBoxSizing(styleToUse->minWidth().value())); | 183 m_minPreferredLogicalWidth = std::max(m_minPreferredLogicalWidth, adjust
ContentBoxLogicalWidthForBoxSizing(styleToUse->minWidth().value())); |
| 186 } | 184 } |
| 187 | 185 |
| 188 if (styleToUse->maxWidth().isFixed()) { | 186 if (styleToUse->maxWidth().isFixed()) { |
| 189 m_maxPreferredLogicalWidth = min(m_maxPreferredLogicalWidth, adjustConte
ntBoxLogicalWidthForBoxSizing(styleToUse->maxWidth().value())); | 187 m_maxPreferredLogicalWidth = std::min(m_maxPreferredLogicalWidth, adjust
ContentBoxLogicalWidthForBoxSizing(styleToUse->maxWidth().value())); |
| 190 m_minPreferredLogicalWidth = min(m_minPreferredLogicalWidth, adjustConte
ntBoxLogicalWidthForBoxSizing(styleToUse->maxWidth().value())); | 188 m_minPreferredLogicalWidth = std::min(m_minPreferredLogicalWidth, adjust
ContentBoxLogicalWidthForBoxSizing(styleToUse->maxWidth().value())); |
| 191 } | 189 } |
| 192 | 190 |
| 193 int toAdd = borderAndPaddingWidth(); | 191 int toAdd = borderAndPaddingWidth(); |
| 194 m_minPreferredLogicalWidth += toAdd; | 192 m_minPreferredLogicalWidth += toAdd; |
| 195 m_maxPreferredLogicalWidth += toAdd; | 193 m_maxPreferredLogicalWidth += toAdd; |
| 196 | 194 |
| 197 clearPreferredLogicalWidthsDirty(); | 195 clearPreferredLogicalWidthsDirty(); |
| 198 } | 196 } |
| 199 | 197 |
| 200 PositionWithAffinity RenderFileUploadControl::positionForPoint(const LayoutPoint
&) | 198 PositionWithAffinity RenderFileUploadControl::positionForPoint(const LayoutPoint
&) |
| (...skipping 18 matching lines...) Expand all Loading... |
| 219 } | 217 } |
| 220 | 218 |
| 221 String RenderFileUploadControl::fileTextValue() const | 219 String RenderFileUploadControl::fileTextValue() const |
| 222 { | 220 { |
| 223 HTMLInputElement* input = toHTMLInputElement(node()); | 221 HTMLInputElement* input = toHTMLInputElement(node()); |
| 224 ASSERT(input->files()); | 222 ASSERT(input->files()); |
| 225 return RenderTheme::theme().fileListNameForWidth(input->locale(), input->fil
es(), style()->font(), maxFilenameWidth()); | 223 return RenderTheme::theme().fileListNameForWidth(input->locale(), input->fil
es(), style()->font(), maxFilenameWidth()); |
| 226 } | 224 } |
| 227 | 225 |
| 228 } // namespace WebCore | 226 } // namespace WebCore |
| OLD | NEW |