Index: Source/core/rendering/RenderThemeChromiumMac.mm |
diff --git a/Source/core/rendering/RenderThemeChromiumMac.mm b/Source/core/rendering/RenderThemeChromiumMac.mm |
index 445633332d1ca96b16f8095941f06615fd9031fe..8576657285e4b43ec064886fbb14af39809f78a9 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" |
@@ -771,8 +770,59 @@ bool RenderThemeChromiumMac::paintCapsLockIndicator(RenderObject*, const PaintIn |
if (paintInfo.context->paintingDisabled()) |
return true; |
+ // This draws the caps lock indicator as it was done by WKDrawCapsLockIndicator. |
LocalCurrentGraphicsContext localContext(paintInfo.context); |
- WKDrawCapsLockIndicator(localContext.cgContext(), r); |
+ CGContextRef c = localContext.cgContext(); |
+ 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); |
return false; |
} |