diff options
author | Cary Clark <cary@android.com> | 2010-10-11 15:36:51 -0400 |
---|---|---|
committer | Cary Clark <cary@android.com> | 2010-10-11 15:36:51 -0400 |
commit | 5cff132af1e80304bdcb267bb9ee7201a25656ad (patch) | |
tree | 53ea8eed48421187c3d956775423afa10763eab9 | |
parent | 3f8366e53853027e7e11d4a40a1ad3f7a1ff5a65 (diff) | |
download | external_webkit-5cff132af1e80304bdcb267bb9ee7201a25656ad.zip external_webkit-5cff132af1e80304bdcb267bb9ee7201a25656ad.tar.gz external_webkit-5cff132af1e80304bdcb267bb9ee7201a25656ad.tar.bz2 |
change webkit text select to orange
This changes the selection to a transparent orange.
This won't match the UI exactly, because this draws
transparently over the text instead of opaquely
behind the text.
This also changes the design of the text selection
handles to match the bitmaps in the UI.
http://b/3083069
Change-Id: I02656c42a3020f9b1e5dbc431c47bf2b51d22de8
-rw-r--r-- | WebKit/android/nav/SelectText.cpp | 129 |
1 files changed, 80 insertions, 49 deletions
diff --git a/WebKit/android/nav/SelectText.cpp b/WebKit/android/nav/SelectText.cpp index 5ffb1e3..25f9482 100644 --- a/WebKit/android/nav/SelectText.cpp +++ b/WebKit/android/nav/SelectText.cpp @@ -33,6 +33,7 @@ #include "SkBitmap.h" #include "SkBounder.h" #include "SkCanvas.h" +#include "SkGradientShader.h" #include "SkMatrix.h" #include "SkPicture.h" #include "SkPixelXorXfermode.h" @@ -1175,70 +1176,100 @@ static WebCore::String text(const SkPicture& picture, const SkIRect& area, return extractor.text(); } -#define CONTROL_OFFSET 3 -#define CONTROL_NOTCH 9 -#define CONTROL_HEIGHT 18 -#define CONTROL_WIDTH 12 -#define STROKE_WIDTH 0.4f +#define CONTROL_OFFSET 0 +#define CONTROL_NOTCH 19 +#define CONTROL_HEIGHT 35 +#define CONTROL_WIDTH 21 +#define STROKE_WIDTH 2.0f +#define STROKE_OUTSET 1.0f +#define STROKE_NOTCH_R 2.2f +#define STROKE_NOTCH_L 1.7f +#define DROP_HEIGHT 4 + +#define STROKE_COLOR 0x90000000 +#define FILL_GRADIENT_TOP 0xD0F8DFA0 +#define FILL_GRADIENT_BOTTOM 0xD0FFEFEF +#define DROP_GRADIENT_TOP 0x50000000 +#define DROP_GRADIENT_BOTTOM 0x00000000 + #define SLOP 20 SelectText::SelectText() { reset(); - SkScalar innerW = CONTROL_WIDTH - STROKE_WIDTH; - SkScalar innerH = CONTROL_HEIGHT - STROKE_WIDTH; SkPaint paint; - paint.setAntiAlias(true); - paint.setStrokeWidth(STROKE_WIDTH); - SkPath startPath; - startPath.moveTo(-CONTROL_WIDTH, CONTROL_NOTCH); - startPath.lineTo(-CONTROL_WIDTH, CONTROL_HEIGHT); - startPath.lineTo(0, CONTROL_HEIGHT); - startPath.lineTo(0, CONTROL_OFFSET); - startPath.close(); - - SkCanvas* canvas = m_startControl.beginRecording(CONTROL_WIDTH, CONTROL_HEIGHT); + SkPath startFillPath; + startFillPath.moveTo(-CONTROL_WIDTH + STROKE_OUTSET, CONTROL_NOTCH); + startFillPath.lineTo(-CONTROL_WIDTH + STROKE_OUTSET, CONTROL_HEIGHT - STROKE_OUTSET); + startFillPath.lineTo(-STROKE_OUTSET, CONTROL_HEIGHT - STROKE_OUTSET); + startFillPath.lineTo(-STROKE_OUTSET, CONTROL_OFFSET + STROKE_NOTCH_R); + startFillPath.close(); + SkPath startStrokePath; + startStrokePath.moveTo(-CONTROL_WIDTH, CONTROL_NOTCH); + startStrokePath.lineTo(-CONTROL_WIDTH, CONTROL_HEIGHT); + startStrokePath.lineTo(0, CONTROL_HEIGHT); + startStrokePath.lineTo(0, CONTROL_OFFSET); + startStrokePath.close(); + SkPoint gradientLine[] = {{0, 0}, {0, CONTROL_HEIGHT}}; + SkColor gradientColors[] = {FILL_GRADIENT_TOP, FILL_GRADIENT_BOTTOM}; + SkShader* fillGradient = SkGradientShader::CreateLinear(gradientLine, + gradientColors, 0, 2, SkShader::kClamp_TileMode); + SkPoint dropLine[] = {{0, CONTROL_HEIGHT}, {0, CONTROL_HEIGHT + DROP_HEIGHT}}; + SkColor dropColors[] = {DROP_GRADIENT_TOP, DROP_GRADIENT_BOTTOM}; + SkShader* dropGradient = SkGradientShader::CreateLinear(dropLine, + dropColors, 0, 2, SkShader::kClamp_TileMode); + SkRect startDropRect = {-CONTROL_WIDTH - STROKE_OUTSET, CONTROL_HEIGHT, + STROKE_OUTSET, CONTROL_HEIGHT + DROP_HEIGHT}; + + SkCanvas* canvas = m_startControl.beginRecording(CONTROL_WIDTH, CONTROL_HEIGHT + DROP_HEIGHT); + paint.setAntiAlias(true); paint.setStyle(SkPaint::kFill_Style); - paint.setColor(0xD077A14B); - canvas->drawPath(startPath, paint); + paint.setShader(fillGradient); + canvas->drawPath(startFillPath, paint); + paint.setShader(0); paint.setStyle(SkPaint::kStroke_Style); - paint.setColor(0x40000000); - canvas->drawLine(-innerW, CONTROL_NOTCH, -innerW, innerH, paint); - canvas->drawLine(-innerW + STROKE_WIDTH, innerH, -STROKE_WIDTH, innerH, paint); - paint.setColor(0x40ffffff); - canvas->drawLine(0, CONTROL_OFFSET + STROKE_WIDTH, - -CONTROL_WIDTH, CONTROL_NOTCH + STROKE_WIDTH, paint); - canvas->drawLine(-STROKE_WIDTH, CONTROL_NOTCH + STROKE_WIDTH, - -STROKE_WIDTH, innerH, paint); - paint.setColor(0xffaaaaaa); - canvas->drawPath(startPath, paint); + paint.setColor(STROKE_COLOR); + paint.setStrokeWidth(STROKE_WIDTH); + canvas->drawPath(startStrokePath, paint); + paint.setStyle(SkPaint::kFill_Style); + paint.setColor(0xff000000); + paint.setShader(dropGradient); + canvas->drawRect(startDropRect, paint); m_startControl.endRecording(); - SkPath endPath; - endPath.moveTo(0, CONTROL_OFFSET); - endPath.lineTo(0, CONTROL_HEIGHT); - endPath.lineTo(CONTROL_WIDTH, CONTROL_HEIGHT); - endPath.lineTo(CONTROL_WIDTH, CONTROL_NOTCH); - endPath.close(); + SkPath endFillPath; + endFillPath.moveTo(STROKE_OUTSET, CONTROL_OFFSET + STROKE_NOTCH_R); + endFillPath.lineTo(STROKE_OUTSET, CONTROL_HEIGHT - STROKE_OUTSET); + endFillPath.lineTo(CONTROL_WIDTH - STROKE_OUTSET, CONTROL_HEIGHT - STROKE_OUTSET); + endFillPath.lineTo(CONTROL_WIDTH - STROKE_OUTSET, CONTROL_NOTCH); + endFillPath.close(); + SkPath endStrokePath; + endStrokePath.moveTo(0, CONTROL_OFFSET); + endStrokePath.lineTo(0, CONTROL_HEIGHT); + endStrokePath.lineTo(CONTROL_WIDTH, CONTROL_HEIGHT); + endStrokePath.lineTo(CONTROL_WIDTH, CONTROL_NOTCH); + endStrokePath.close(); + SkRect endDropRect = {-STROKE_OUTSET, CONTROL_HEIGHT, + CONTROL_WIDTH + STROKE_OUTSET, CONTROL_HEIGHT + DROP_HEIGHT}; canvas = m_endControl.beginRecording(CONTROL_WIDTH, CONTROL_HEIGHT); + paint.setColor(0xff000000); paint.setStyle(SkPaint::kFill_Style); - paint.setColor(0xD077A14B); - canvas->drawPath(endPath, paint); + paint.setShader(fillGradient); + canvas->drawPath(endFillPath, paint); + paint.setShader(0); paint.setStyle(SkPaint::kStroke_Style); - paint.setColor(0x40000000); - canvas->drawLine(STROKE_WIDTH, CONTROL_OFFSET + STROKE_WIDTH, - STROKE_WIDTH, innerH, paint); - canvas->drawLine(STROKE_WIDTH + STROKE_WIDTH, innerH, innerW, innerH, paint); - paint.setColor(0x40ffffff); - canvas->drawLine(0, CONTROL_OFFSET + STROKE_WIDTH, - CONTROL_WIDTH, CONTROL_NOTCH + STROKE_WIDTH, paint); - canvas->drawLine(STROKE_WIDTH, CONTROL_NOTCH + STROKE_WIDTH, - STROKE_WIDTH, innerH, paint); - paint.setColor(0xffaaaaaa); - canvas->drawPath(endPath, paint); + paint.setColor(STROKE_COLOR); + paint.setStrokeWidth(STROKE_WIDTH); + canvas->drawPath(endStrokePath, paint); + paint.setStyle(SkPaint::kFill_Style); + paint.setColor(0xff000000); + paint.setShader(dropGradient); + canvas->drawRect(endDropRect, paint); m_endControl.endRecording(); + fillGradient->safeUnref(); + dropGradient->safeUnref(); m_picture = 0; } @@ -1310,7 +1341,7 @@ void SelectText::drawSelectionRegion(SkCanvas* canvas) SkPaint paint; paint.setAntiAlias(true); - paint.setColor(SkColorSetARGB(0x80, 151, 200, 73)); + paint.setColor(SkColorSetARGB(0x80, 0xFF, 0xA8, 0x00)); canvas->drawPath(path, paint); // experiment to draw touchable controls that resize the selection canvas->save(); |