Chromium Code Reviews| Index: Source/core/rendering/RenderThemeChromiumMac.mm |
| diff --git a/Source/core/rendering/RenderThemeChromiumMac.mm b/Source/core/rendering/RenderThemeChromiumMac.mm |
| index 445633332d1ca96b16f8095941f06615fd9031fe..c3ee2839cbaca5b90a103d8018d36868a370fe04 100644 |
| --- a/Source/core/rendering/RenderThemeChromiumMac.mm |
| +++ b/Source/core/rendering/RenderThemeChromiumMac.mm |
| @@ -48,7 +48,6 @@ |
| #import "core/platform/mac/LocalCurrentGraphicsContext.h" |
| #import "core/platform/mac/ThemeMac.h" |
| #import "core/platform/mac/WebCoreNSCellExtras.h" |
| -#import "core/platform/mac/WebCoreSystemInterface.h" |
| #import "core/rendering/PaintInfo.h" |
| #import "core/rendering/RenderLayer.h" |
| #import "core/rendering/RenderMedia.h" |
| @@ -772,7 +771,61 @@ bool RenderThemeChromiumMac::paintCapsLockIndicator(RenderObject*, const PaintIn |
| return true; |
| LocalCurrentGraphicsContext localContext(paintInfo.context); |
| - WKDrawCapsLockIndicator(localContext.cgContext(), r); |
| + |
|
Nico
2013/05/02 20:57:13
Can you add a comment like
// Matches the appeara
Robert Sesek
2013/05/02 21:07:25
Done.
|
| + CGContextRef c = localContext.cgContext(); |
| + CGContextSaveGState(c); |
|
Nico
2013/05/02 20:57:13
.cgContext() returns a fresh context, so you proba
Robert Sesek
2013/05/02 21:07:25
Done.
|
| + CGMutablePathRef shape = CGPathCreateMutable(); |
| + |
| + // To draw the caps lock indicator, draw the shape into a small |
| + // square that is then scaled to the size of r. |
| + const CGFloat kSquareSize = 17; |
| + |
| + // Create a rounted square shape. |
| + CGPathMoveToPoint(shape, NULL, 16.5, 4.5); |
| + CGPathAddArc(shape, NULL, 12.5, 12.5, 4, 0, M_PI_2, false); |
| + CGPathAddArc(shape, NULL, 4.5, 12.5, 4, M_PI_2, M_PI, false); |
| + CGPathAddArc(shape, NULL, 4.5, 4.5, 4, M_PI, 3*M_PI/2, false); |
| + CGPathAddArc(shape, NULL, 12.5, 4.5, 4, 3*M_PI/2, 0, false); |
| + |
| + // Draw the arrow - note this is drawing in a flipped coordinate system, so the |
| + // arrow is pointing down. |
| + CGPathMoveToPoint(shape, NULL, 8.5, 2); // Tip point. |
| + CGPathAddLineToPoint(shape, NULL, 4, 7); |
| + CGPathAddLineToPoint(shape, NULL, 6.25, 7); |
| + CGPathAddLineToPoint(shape, NULL, 6.25, 10.25); |
| + CGPathAddLineToPoint(shape, NULL, 10.75, 10.25); |
| + CGPathAddLineToPoint(shape, NULL, 10.75, 7); |
| + CGPathAddLineToPoint(shape, NULL, 13, 7); |
| + CGPathAddLineToPoint(shape, NULL, 8.5, 2); |
| + |
| + // Draw the rectangle that underneath (or above in the flipped system) the arrow. |
| + CGPathAddLineToPoint(shape, NULL, 10.75, 12); |
| + CGPathAddLineToPoint(shape, NULL, 6.25, 12); |
| + CGPathAddLineToPoint(shape, NULL, 6.25, 14.25); |
| + CGPathAddLineToPoint(shape, NULL, 10.75, 14.25); |
| + CGPathAddLineToPoint(shape, NULL, 10.75, 12); |
| + |
| + // Scale and translate the shape. |
| + CGRect cgr = r; |
| + CGFloat maxX = CGRectGetMaxX(cgr); |
| + CGFloat minY = CGRectGetMinY(cgr); |
| + CGFloat heightScale = r.height() / kSquareSize; |
| + CGAffineTransform transform = CGAffineTransformMake( |
| + heightScale, 0, // A B |
| + 0, heightScale, // C D |
| + maxX - r.height(), minY); // Tx Ty |
| + |
| + CGMutablePathRef paintPath = CGPathCreateMutable(); |
| + CGPathAddPath(paintPath, &transform, shape); |
| + CGPathRelease(shape); |
| + |
| + CGContextSetRGBFillColor(c, 0, 0, 0, 0.4); |
| + CGContextBeginPath(c); |
| + CGContextAddPath(c, paintPath); |
| + CGContextFillPath(c); |
| + CGPathRelease(paintPath); |
| + |
| + CGContextRestoreGState(c); |
| return false; |
| } |