diff options
Diffstat (limited to 'Source/WebCore/rendering/RenderFileUploadControl.cpp')
-rw-r--r-- | Source/WebCore/rendering/RenderFileUploadControl.cpp | 59 |
1 files changed, 26 insertions, 33 deletions
diff --git a/Source/WebCore/rendering/RenderFileUploadControl.cpp b/Source/WebCore/rendering/RenderFileUploadControl.cpp index 9cd97b7a0..55e499c83 100644 --- a/Source/WebCore/rendering/RenderFileUploadControl.cpp +++ b/Source/WebCore/rendering/RenderFileUploadControl.cpp @@ -22,7 +22,7 @@ #include "RenderFileUploadControl.h" #include "FileList.h" -#include "Font.h" +#include "FontCascade.h" #include "GraphicsContext.h" #include "HTMLInputElement.h" #include "HTMLNames.h" @@ -58,8 +58,8 @@ const int defaultWidthNumChars = 38; #endif const int buttonShadowHeight = 2; -RenderFileUploadControl::RenderFileUploadControl(HTMLInputElement& input, PassRef<RenderStyle> style) - : RenderBlockFlow(input, std::move(style)) +RenderFileUploadControl::RenderFileUploadControl(HTMLInputElement& input, RenderStyle&& style) + : RenderBlockFlow(input, WTFMove(style)) , m_canReceiveDroppedFiles(input.canReceiveDroppedFiles()) { } @@ -70,12 +70,7 @@ RenderFileUploadControl::~RenderFileUploadControl() HTMLInputElement& RenderFileUploadControl::inputElement() const { - return toHTMLInputElement(nodeForNonAnonymous()); -} - -bool RenderFileUploadControl::canBeReplacedWithInlineRunIn() const -{ - return false; + return downcast<HTMLInputElement>(nodeForNonAnonymous()); } void RenderFileUploadControl::updateFromElement() @@ -100,13 +95,13 @@ void RenderFileUploadControl::updateFromElement() static int nodeWidth(Node* node) { - return (node && node->renderBox()) ? node->renderBox()->pixelSnappedWidth() : 0; + return (node && node->renderBox()) ? roundToInt(node->renderBox()->size().width()) : 0; } #if PLATFORM(IOS) static int nodeHeight(Node* node) { - return (node && node->renderBox()) ? node->renderBox()->pixelSnappedHeight() : 0; + return (node && node->renderBox()) ? roundToInt(node->renderBox()->size().height()) : 0; } #endif @@ -115,7 +110,7 @@ int RenderFileUploadControl::maxFilenameWidth() const #if PLATFORM(IOS) int iconWidth = nodeHeight(uploadButton()); #endif - return std::max(0, contentBoxRect().pixelSnappedWidth() - nodeWidth(uploadButton()) - afterButtonSpacing + return std::max(0, snappedIntRect(contentBoxRect()).width() - nodeWidth(uploadButton()) - afterButtonSpacing - (inputElement().icon() ? iconWidth + iconFilenameSpacing : 0)); } @@ -125,21 +120,20 @@ void RenderFileUploadControl::paintObject(PaintInfo& paintInfo, const LayoutPoin return; // Push a clip. - GraphicsContextStateSaver stateSaver(*paintInfo.context, false); + GraphicsContextStateSaver stateSaver(paintInfo.context(), false); if (paintInfo.phase == PaintPhaseForeground || paintInfo.phase == PaintPhaseChildBlockBackgrounds) { IntRect clipRect = enclosingIntRect(LayoutRect(paintOffset.x() + borderLeft(), paintOffset.y() + borderTop(), width() - borderLeft() - borderRight(), height() - borderBottom() - borderTop() + buttonShadowHeight)); if (clipRect.isEmpty()) return; stateSaver.save(); - paintInfo.context->clip(clipRect); + paintInfo.context().clip(clipRect); } if (paintInfo.phase == PaintPhaseForeground) { const String& displayedFilename = fileTextValue(); - const Font& font = style().font(); - TextRun textRun = constructTextRun(this, font, displayedFilename, style(), TextRun::AllowTrailingExpansion, RespectDirection | RespectDirectionOverride); - textRun.disableRoundingHacks(); + const FontCascade& font = style().fontCascade(); + TextRun textRun = constructTextRun(displayedFilename, style(), AllowTrailingExpansion, RespectDirection | RespectDirectionOverride); #if PLATFORM(IOS) int iconHeight = nodeHeight(uploadButton()); @@ -163,15 +157,15 @@ void RenderFileUploadControl::paintObject(PaintInfo& paintInfo, const LayoutPoin LayoutUnit textY = 0; // We want to match the button's baseline // FIXME: Make this work with transforms. - if (RenderButton* buttonRenderer = toRenderButton(button->renderer())) + if (RenderButton* buttonRenderer = downcast<RenderButton>(button->renderer())) textY = paintOffset.y() + borderTop() + paddingTop() + buttonRenderer->baselinePosition(AlphabeticBaseline, true, HorizontalLine, PositionOnContainingLine); else textY = baselinePosition(AlphabeticBaseline, true, HorizontalLine, PositionOnContainingLine); - paintInfo.context->setFillColor(style().visitedDependentColor(CSSPropertyColor), style().colorSpace()); + paintInfo.context().setFillColor(style().visitedDependentColor(CSSPropertyColor)); // Draw the filename - paintInfo.context->drawBidiText(font, textRun, IntPoint(roundToInt(textX), roundToInt(textY))); + paintInfo.context().drawBidiText(font, textRun, IntPoint(roundToInt(textX), roundToInt(textY))); if (inputElement().icon()) { // Determine where the icon should be placed @@ -183,15 +177,15 @@ void RenderFileUploadControl::paintObject(PaintInfo& paintInfo, const LayoutPoin iconX = contentLeft + contentWidth() - buttonWidth - afterButtonSpacing - iconWidth; #if PLATFORM(IOS) - if (RenderButton* buttonRenderer = toRenderButton(button->renderer())) { + if (RenderButton* buttonRenderer = downcast<RenderButton>(button->renderer())) { // Draw the file icon and decorations. IntRect iconRect(iconX, iconY, iconWidth, iconHeight); RenderTheme::FileUploadDecorations decorationsType = inputElement().files()->length() == 1 ? RenderTheme::SingleFile : RenderTheme::MultipleFiles; - theme().paintFileUploadIconDecorations(this, buttonRenderer, paintInfo, iconRect, inputElement().icon(), decorationsType); + theme().paintFileUploadIconDecorations(*this, *buttonRenderer, paintInfo, iconRect, inputElement().icon(), decorationsType); } #else // Draw the file icon - inputElement().icon()->paint(paintInfo.context, IntRect(roundToInt(iconX), roundToInt(iconY), iconWidth, iconHeight)); + inputElement().icon()->paint(paintInfo.context(), IntRect(roundToInt(iconX), roundToInt(iconY), iconWidth, iconHeight)); #endif } } @@ -206,19 +200,18 @@ void RenderFileUploadControl::computeIntrinsicLogicalWidths(LayoutUnit& minLogic // (using "0" as the nominal character). const UChar character = '0'; const String characterAsString = String(&character, 1); - const Font& font = style().font(); + const FontCascade& font = style().fontCascade(); // FIXME: Remove the need for this const_cast by making constructTextRun take a const RenderObject*. - RenderFileUploadControl* renderer = const_cast<RenderFileUploadControl*>(this); - float minDefaultLabelWidth = defaultWidthNumChars * font.width(constructTextRun(renderer, font, characterAsString, style(), TextRun::AllowTrailingExpansion)); + float minDefaultLabelWidth = defaultWidthNumChars * font.width(constructTextRun(characterAsString, style(), AllowTrailingExpansion)); const String label = theme().fileListDefaultLabel(inputElement().multiple()); - float defaultLabelWidth = font.width(constructTextRun(renderer, font, label, style(), TextRun::AllowTrailingExpansion)); + float defaultLabelWidth = font.width(constructTextRun(label, style(), AllowTrailingExpansion)); if (HTMLInputElement* button = uploadButton()) if (RenderObject* buttonRenderer = button->renderer()) defaultLabelWidth += buttonRenderer->maxPreferredLogicalWidth() + afterButtonSpacing; maxLogicalWidth = static_cast<int>(ceilf(std::max(minDefaultLabelWidth, defaultLabelWidth))); - if (!style().width().isPercent()) + if (!style().width().isPercentOrCalculated()) minLogicalWidth = maxLogicalWidth; } @@ -244,14 +237,14 @@ void RenderFileUploadControl::computePreferredLogicalWidths() m_minPreferredLogicalWidth = std::min(m_minPreferredLogicalWidth, adjustContentBoxLogicalWidthForBoxSizing(style().maxWidth().value())); } - int toAdd = borderAndPaddingWidth(); + int toAdd = horizontalBorderAndPaddingExtent(); m_minPreferredLogicalWidth += toAdd; m_maxPreferredLogicalWidth += toAdd; setPreferredLogicalWidthsDirty(false); } -VisiblePosition RenderFileUploadControl::positionForPoint(const LayoutPoint&) +VisiblePosition RenderFileUploadControl::positionForPoint(const LayoutPoint&, const RenderRegion*) { return VisiblePosition(); } @@ -260,7 +253,7 @@ HTMLInputElement* RenderFileUploadControl::uploadButton() const { ASSERT(inputElement().shadowRoot()); Node* buttonNode = inputElement().shadowRoot()->firstChild(); - return buttonNode && buttonNode->isHTMLElement() && isHTMLInputElement(buttonNode) ? toHTMLInputElement(buttonNode) : 0; + return is<HTMLInputElement>(buttonNode) ? downcast<HTMLInputElement>(buttonNode) : nullptr; } String RenderFileUploadControl::buttonValue() @@ -276,9 +269,9 @@ String RenderFileUploadControl::fileTextValue() const ASSERT(inputElement().files()); #if PLATFORM(IOS) if (inputElement().files()->length()) - return StringTruncator::rightTruncate(inputElement().displayString(), maxFilenameWidth(), style().font(), StringTruncator::EnableRoundingHacks); + return StringTruncator::rightTruncate(inputElement().displayString(), maxFilenameWidth(), style().fontCascade()); #endif - return theme().fileListNameForWidth(inputElement().files(), style().font(), maxFilenameWidth(), inputElement().multiple()); + return theme().fileListNameForWidth(inputElement().files(), style().fontCascade(), maxFilenameWidth(), inputElement().multiple()); } } // namespace WebCore |