summaryrefslogtreecommitdiff
path: root/Source/WebCore/rendering/RenderFileUploadControl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/rendering/RenderFileUploadControl.cpp')
-rw-r--r--Source/WebCore/rendering/RenderFileUploadControl.cpp59
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