Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4629)

Unified Diff: Source/core/rendering/RenderThemeChromiumMac.mm

Issue 16532002: Clear button for date/time inputs should be zoomable (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Added test expectation entries Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/css/html.css ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/rendering/RenderThemeChromiumMac.mm
diff --git a/Source/core/rendering/RenderThemeChromiumMac.mm b/Source/core/rendering/RenderThemeChromiumMac.mm
index d1995793d08be66eb6eb2a1a4335c1e5fa060aa0..43e0f028b11b594b6be1ffda0c13e10660dfb414 100644
--- a/Source/core/rendering/RenderThemeChromiumMac.mm
+++ b/Source/core/rendering/RenderThemeChromiumMac.mm
@@ -737,7 +737,10 @@ void RenderThemeChromiumMac::setFontFromControlSize(RenderStyle* style, NSContro
NSControlSize RenderThemeChromiumMac::controlSizeForSystemFont(RenderStyle* style) const
{
- int fontSize = style->fontSize();
+ float fontSize = style->fontSize();
+ float zoomLevel = style->effectiveZoom();
+ if (zoomLevel != 1)
+ fontSize /= zoomLevel;
if (fontSize >= [NSFont systemFontSizeForControlSize:NSRegularControlSize])
return NSRegularControlSize;
if (fontSize >= [NSFont systemFontSizeForControlSize:NSSmallControlSize])
@@ -1569,6 +1572,12 @@ const IntSize* RenderThemeChromiumMac::searchFieldSizes() const
return sizes;
}
+static const int* searchFieldHorizontalPaddings()
+{
+ static const int sizes[3] = { 3, 2, 1 };
+ return sizes;
+}
+
void RenderThemeChromiumMac::setSearchFieldSize(RenderStyle* style) const
{
// If the width and height are both specified, then we have nothing to do.
@@ -1597,14 +1606,16 @@ void RenderThemeChromiumMac::adjustSearchFieldStyle(RenderStyle* style, Element*
style->setHeight(Length(Auto));
setSearchFieldSize(style);
+ NSControlSize controlSize = controlSizeForFont(style);
+
// Override padding size to match AppKit text positioning.
- const int padding = 1 * style->effectiveZoom();
- style->setPaddingLeft(Length(padding, Fixed));
- style->setPaddingRight(Length(padding, Fixed));
- style->setPaddingTop(Length(padding, Fixed));
- style->setPaddingBottom(Length(padding, Fixed));
+ const int verticalPadding = 1 * style->effectiveZoom();
+ const int horizontalPadding = searchFieldHorizontalPaddings()[controlSize] * style->effectiveZoom();
+ style->setPaddingLeft(Length(horizontalPadding, Fixed));
+ style->setPaddingRight(Length(horizontalPadding, Fixed));
+ style->setPaddingTop(Length(verticalPadding, Fixed));
+ style->setPaddingBottom(Length(verticalPadding, Fixed));
- NSControlSize controlSize = controlSizeForFont(style);
setFontFromControlSize(style, controlSize);
style->setBoxShadow(nullptr);
@@ -1619,19 +1630,6 @@ bool RenderThemeChromiumMac::paintSearchFieldCancelButton(RenderObject* o, const
if (!input->renderer()->isBox())
return false;
- LocalCurrentGraphicsContext localContext(paintInfo.context);
-
- NSSearchFieldCell* search = this->search();
- setSearchCellState(input->renderer(), r);
- [search setControlSize:cancelButtonControlSizeForFont(o->style())];
-
- if (!input->isDisabledFormControl() && (input->isTextFormControl() && !toHTMLTextFormControlElement(input)->isReadOnly())) {
- updateActiveState([search cancelButtonCell], o);
- updatePressedState([search cancelButtonCell], o);
- }
- else if ([[search cancelButtonCell] isHighlighted])
- [[search cancelButtonCell] setHighlighted:NO];
-
GraphicsContextStateSaver stateSaver(*paintInfo.context);
float zoomLevel = o->style()->effectiveZoom();
@@ -1644,14 +1642,43 @@ bool RenderThemeChromiumMac::paintSearchFieldCancelButton(RenderObject* o, const
paintInfo.context->translate(-unzoomedRect.x(), -unzoomedRect.y());
}
- [[search cancelButtonCell] drawWithFrame:unzoomedRect inView:documentViewFor(o)];
- [[search cancelButtonCell] setControlView:nil];
+ Color fillColor(200, 200, 200);
+
+ if (isPressed(o)) {
+ Color tintColor(0, 0, 0, 32);
+ fillColor = fillColor.blend(tintColor);
+ }
+
+ float centerX = unzoomedRect.x() + unzoomedRect.width() / 2;
+ float centerY = unzoomedRect.y() + unzoomedRect.height() / 2;
+ // The line width is 3px on a regular sized, high DPI NSCancelButtonCell
+ // (which is 28px wide).
+ float lineWidth = unzoomedRect.width() * 3 / 28;
+ // The line length is 16px on a regular sized, high DPI NSCancelButtonCell.
+ float lineLength = unzoomedRect.width() * 16 / 28;
+
+ Path xPath;
+ FloatSize lineRectRadius(lineWidth / 2, lineWidth / 2);
+ xPath.addRoundedRect(FloatRect(-lineLength / 2, -lineWidth / 2, lineLength, lineWidth),
+ lineRectRadius, lineRectRadius, lineRectRadius, lineRectRadius);
+ xPath.addRoundedRect(FloatRect(-lineWidth / 2, -lineLength / 2, lineWidth, lineLength),
+ lineRectRadius, lineRectRadius, lineRectRadius, lineRectRadius);
+
+ paintInfo.context->translate(centerX, centerY);
+ paintInfo.context->rotate(deg2rad(45.0));
+ paintInfo.context->clipOut(xPath);
+ paintInfo.context->rotate(deg2rad(-45.0));
+ paintInfo.context->translate(-centerX, -centerY);
+
+ paintInfo.context->setFillColor(fillColor);
+ paintInfo.context->fillEllipse(unzoomedRect);
+
return false;
}
const IntSize* RenderThemeChromiumMac::cancelButtonSizes() const
{
- static const IntSize sizes[3] = { IntSize(16, 14), IntSize(13, 11), IntSize(13, 9) };
+ static const IntSize sizes[3] = { IntSize(14, 14), IntSize(11, 11), IntSize(9, 9) };
return sizes;
}
@@ -1665,7 +1692,7 @@ void RenderThemeChromiumMac::adjustSearchFieldCancelButtonStyle(RenderStyle* sty
const IntSize* RenderThemeChromiumMac::resultsButtonSizes() const
{
- static const IntSize sizes[3] = { IntSize(19, 13), IntSize(17, 11), IntSize(17, 9) };
+ static const IntSize sizes[3] = { IntSize(16, 13), IntSize(16, 11), IntSize(16, 9) };
return sizes;
}
« no previous file with comments | « Source/core/css/html.css ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698