Index: webkit/tools/test_shell/test_shell_webthemecontrol.cc |
diff --git a/webkit/tools/test_shell/test_shell_webthemecontrol.cc b/webkit/tools/test_shell/test_shell_webthemecontrol.cc |
deleted file mode 100644 |
index 25cd94fd18c3b20101b32e77230167df497a80ad..0000000000000000000000000000000000000000 |
--- a/webkit/tools/test_shell/test_shell_webthemecontrol.cc |
+++ /dev/null |
@@ -1,438 +0,0 @@ |
-// Copyright (c) 2010 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-// This file implements a simple generic version of the WebKitThemeEngine, |
-// which is used to draw all the native controls on a web page. We use this |
-// file when running in layout test mode in order to remove any |
-// platform-specific rendering differences due to themes, colors, etc. |
-// |
- |
-#include "webkit/tools/test_shell/test_shell_webthemecontrol.h" |
- |
-#include "base/logging.h" |
-#include "skia/ext/platform_canvas.h" |
-#include "skia/ext/skia_utils_win.h" |
-#include "third_party/skia/include/core/SkPaint.h" |
-#include "third_party/skia/include/core/SkPath.h" |
- |
-namespace TestShellWebTheme { |
- |
-const SkColor kEdgeColor = SK_ColorBLACK; |
-const SkColor kReadOnlyColor = SkColorSetRGB(0xe9, 0xc2, 0xa6); |
-const SkColor kFgColor = SK_ColorBLACK; |
- |
-const SkColor kBgColors[] = { |
- SK_ColorBLACK, // Unknown |
- SkColorSetRGB(0xc9, 0xc9, 0xc9), // Disabled |
- SkColorSetRGB(0xf3, 0xe0, 0xd0), // Readonly |
- SkColorSetRGB(0x89, 0xc4, 0xff), // Normal |
- SkColorSetRGB(0x43, 0xf9, 0xff), // Hot |
- SkColorSetRGB(0x20, 0xf6, 0xcc), // Focused |
- SkColorSetRGB(0x00, 0xf3, 0xac), // Hover |
- SkColorSetRGB(0xa9, 0xff, 0x12), // Pressed |
- SkColorSetRGB(0xcc, 0xcc, 0xcc) // Indeterminate |
-}; |
- |
-SkIRect Validate(const SkIRect& rect, Control::Type ctype) { |
- SkIRect retval = rect; |
- if (ctype == Control::kUncheckedBox_Type || |
- ctype == Control::kCheckedBox_Type || |
- ctype == Control::kUncheckedRadio_Type || |
- ctype == Control::kCheckedRadio_Type) { |
- // The maximum width and height is 13. Center the square in the passed |
- // rectangle. |
- const int kMaxControlSize = 13; |
- int control_size = std::min(rect.width(), rect.height()); |
- control_size = std::min(control_size, kMaxControlSize); |
- |
- retval.fLeft = rect.fLeft + (rect.width() / 2) - (control_size / 2); |
- retval.fRight = retval.fLeft + control_size - 1; |
- retval.fTop = rect.fTop + (rect.height() / 2) - (control_size / 2); |
- retval.fBottom = retval.fTop + control_size - 1; |
- } |
- return retval; |
-} |
- |
-Control::Control(SkCanvas* canvas, const SkIRect& irect, |
- Type ctype, State cstate) |
- : canvas_(canvas), |
- irect_(Validate(irect, ctype)), |
- type_(ctype), |
- state_(cstate), |
- left_(irect_.fLeft), |
- right_(irect_.fRight), |
- top_(irect_.fTop), |
- bottom_(irect_.fBottom), |
- height_(irect_.height()), |
- width_(irect_.width()), |
- edge_color_(kEdgeColor), |
- bg_color_(kBgColors[cstate]), |
- fg_color_(kFgColor) { |
-} |
- |
-Control::~Control() { |
-} |
- |
-void Control::box(const SkIRect& rect, SkColor fill_color) { |
- SkPaint paint; |
- |
- paint.setStyle(SkPaint::kFill_Style); |
- paint.setColor(fill_color); |
- canvas_->drawIRect(rect, paint); |
- |
- paint.setColor(edge_color_); |
- paint.setStyle(SkPaint::kStroke_Style); |
- canvas_->drawIRect(rect, paint); |
-} |
- |
-void Control::line(int x0, int y0, int x1, int y1, SkColor color) { |
- SkPaint paint; |
- paint.setColor(color); |
- canvas_->drawLine(SkIntToScalar(x0), SkIntToScalar(y0), |
- SkIntToScalar(x1), SkIntToScalar(y1), |
- paint); |
-} |
- |
-void Control::triangle(int x0, int y0, |
- int x1, int y1, |
- int x2, int y2, |
- SkColor color) { |
- SkPath path; |
- SkPaint paint; |
- |
- paint.setColor(color); |
- paint.setStyle(SkPaint::kFill_Style); |
- path.incReserve(4); |
- path.moveTo(SkIntToScalar(x0), SkIntToScalar(y0)); |
- path.lineTo(SkIntToScalar(x1), SkIntToScalar(y1)); |
- path.lineTo(SkIntToScalar(x2), SkIntToScalar(y2)); |
- path.close(); |
- canvas_->drawPath(path, paint); |
- |
- paint.setColor(edge_color_); |
- paint.setStyle(SkPaint::kStroke_Style); |
- canvas_->drawPath(path, paint); |
-} |
- |
-void Control::roundRect(SkColor color) { |
- SkRect rect; |
- SkScalar radius = SkIntToScalar(5); |
- SkPaint paint; |
- |
- rect.set(irect_); |
- paint.setColor(color); |
- paint.setStyle(SkPaint::kFill_Style); |
- canvas_->drawRoundRect(rect, radius, radius, paint); |
- |
- paint.setColor(edge_color_); |
- paint.setStyle(SkPaint::kStroke_Style); |
- canvas_->drawRoundRect(rect, radius, radius, paint); |
-} |
- |
-void Control::oval(SkColor color) { |
- SkRect rect; |
- SkPaint paint; |
- |
- rect.set(irect_); |
- paint.setColor(color); |
- paint.setStyle(SkPaint::kFill_Style); |
- canvas_->drawOval(rect, paint); |
- |
- paint.setColor(edge_color_); |
- paint.setStyle(SkPaint::kStroke_Style); |
- canvas_->drawOval(rect, paint); |
-} |
- |
-void Control::circle(SkScalar radius, SkColor color) { |
- SkScalar cy = SkIntToScalar(top_ + height_ / 2); |
- SkScalar cx = SkIntToScalar(left_ + width_ / 2); |
- SkPaint paint; |
- |
- paint.setColor(color); |
- paint.setStyle(SkPaint::kFill_Style); |
- canvas_->drawCircle(cx, cy, radius, paint); |
- |
- paint.setColor(edge_color_); |
- paint.setStyle(SkPaint::kStroke_Style); |
- canvas_->drawCircle(cx, cy, radius, paint); |
-} |
- |
-void Control::nested_boxes(int indent_left, int indent_top, |
- int indent_right, int indent_bottom, |
- SkColor outer_color, SkColor inner_color) { |
- SkIRect lirect; |
- box(irect_, outer_color); |
- lirect.set(irect_.fLeft + indent_left, irect_.fTop + indent_top, |
- irect_.fRight - indent_right, irect_.fBottom - indent_bottom); |
- box(lirect, inner_color); |
-} |
- |
- |
-void Control::markState() { |
- // The horizontal lines in a read only control are spaced by this amount. |
- const int kReadOnlyLineOffset = 5; |
- |
- // The length of a triangle side for the corner marks. |
- const int kTriangleSize = 5; |
- |
- switch (state_) { |
- case kUnknown_State: // FALLTHROUGH |
- case kDisabled_State: // FALLTHROUGH |
- case kNormal_State: |
- // Don't visually mark these states (color is enough). |
- break; |
- case kReadOnly_State: |
- // Drawing lines across the control. |
- for (int i = top_ + kReadOnlyLineOffset; i < bottom_ ; |
- i += kReadOnlyLineOffset) { |
- line(left_ + 1, i, right_ - 1, i, kReadOnlyColor); |
- } |
- break; |
- case kHot_State: |
- // Draw a triangle in the upper left corner of the control. |
- triangle(left_, top_, |
- left_ + kTriangleSize, top_, |
- left_, top_ + kTriangleSize, edge_color_); |
- break; |
- case kHover_State: |
- // Draw a triangle in the upper right corner of the control. |
- triangle(right_, top_, |
- right_, top_ + kTriangleSize, |
- right_ - kTriangleSize, top_, edge_color_); |
- break; |
- case kFocused_State: |
- // Draw a triangle in the bottom right corner of the control. |
- triangle(right_, bottom_, |
- right_ - kTriangleSize, bottom_, |
- right_, bottom_ - kTriangleSize, edge_color_); |
- break; |
- case kPressed_State: |
- // Draw a triangle in the bottom left corner of the control. |
- triangle(left_, bottom_, |
- left_, bottom_ - kTriangleSize, |
- left_ + kTriangleSize, bottom_, edge_color_); |
- break; |
- default: |
- NOTREACHED(); |
- break; |
- } |
-} |
- |
-void Control::draw() { |
- int half_width = width_ / 2; |
- int half_height = height_ / 2; |
- int quarter_width = width_ / 4; |
- int quarter_height = height_ / 4; |
- |
- // Indent amounts for the check in a checkbox or radio button. |
- const int kCheckIndent = 3; |
- |
- // Indent amounts for short and long sides of the scrollbar notches. |
- const int kNotchLongOffset = 1; |
- const int kNotchShortOffset = 4; |
- const int kNoOffset = 0; |
- int short_offset; |
- int long_offset; |
- |
- // Indent amounts for the short and long sides of a scroll thumb box. |
- const int kThumbLongIndent = 0; |
- const int kThumbShortIndent = 2; |
- |
- // Indents for the crosshatch on a scroll grip. |
- const int kGripLongIndent = 3; |
- const int kGripShortIndent = 5; |
- |
- // Indents for the the slider track. |
- const int kSliderIndent = 2; |
- |
- skia::ScopedPlatformPaint scoped_platform_paint(canvas_); |
- switch (type_) { |
- case kUnknown_Type: |
- NOTREACHED(); |
- break; |
- case kTextField_Type: |
- // We render this by hand outside of this function. |
- NOTREACHED(); |
- break; |
- case kPushButton_Type: |
- // push buttons render as a rounded rectangle |
- roundRect(bg_color_); |
- break; |
- case kUncheckedBox_Type: |
- // Unchecked boxes are simply plain boxes. |
- box(irect_, bg_color_); |
- break; |
- case kCheckedBox_Type: |
- nested_boxes(kCheckIndent, kCheckIndent, kCheckIndent, kCheckIndent, |
- bg_color_, fg_color_); |
- break; |
- case kIndeterminateCheckBox_Type: |
- // Indeterminate checkbox is a box containing '-'. |
- nested_boxes(kCheckIndent, height_ / 2, kCheckIndent, height_ / 2, |
- bg_color_, fg_color_); |
- break; |
- case kUncheckedRadio_Type: |
- circle(SkIntToScalar(half_height), bg_color_); |
- break; |
- case kCheckedRadio_Type: |
- circle(SkIntToScalar(half_height), bg_color_); |
- circle(SkIntToScalar(half_height - kCheckIndent), fg_color_); |
- break; |
- case kHorizontalScrollTrackBack_Type: |
- // Draw a box with a notch at the left. |
- long_offset = half_height - kNotchLongOffset; |
- short_offset = width_ - kNotchShortOffset; |
- nested_boxes(kNoOffset, long_offset, short_offset, long_offset, |
- bg_color_, edge_color_); |
- break; |
- case kHorizontalScrollTrackForward_Type: |
- // Draw a box with a notch at the right. |
- long_offset = half_height - kNotchLongOffset; |
- short_offset = width_ - kNotchShortOffset; |
- nested_boxes(short_offset, long_offset, kNoOffset, long_offset, |
- bg_color_, fg_color_); |
- break; |
- case kVerticalScrollTrackBack_Type: |
- // Draw a box with a notch at the top. |
- long_offset = half_width - kNotchLongOffset; |
- short_offset = height_ - kNotchShortOffset; |
- nested_boxes(long_offset, kNoOffset, long_offset, short_offset, |
- bg_color_, fg_color_); |
- break; |
- case kVerticalScrollTrackForward_Type: |
- // Draw a box with a notch at the bottom. |
- long_offset = half_width - kNotchLongOffset; |
- short_offset = height_ - kNotchShortOffset; |
- nested_boxes(long_offset, short_offset, long_offset, kNoOffset, |
- bg_color_, fg_color_); |
- break; |
- case kHorizontalScrollThumb_Type: |
- // Draw a narrower box on top of the outside box. |
- nested_boxes(kThumbLongIndent, kThumbShortIndent, kThumbLongIndent, |
- kThumbShortIndent, bg_color_, bg_color_); |
- break; |
- case kVerticalScrollThumb_Type: |
- // Draw a shorter box on top of the outside box. |
- nested_boxes(kThumbShortIndent, kThumbLongIndent, kThumbShortIndent, |
- kThumbLongIndent, bg_color_, bg_color_); |
- break; |
- case kHorizontalSliderThumb_Type: |
- // Slider thumbs are ovals. |
- oval(bg_color_); |
- break; |
- case kHorizontalScrollGrip_Type: |
- // Draw a horizontal crosshatch for the grip. |
- long_offset = half_width - kGripLongIndent; |
- line(left_ + kGripLongIndent, top_ + half_height, |
- right_ - kGripLongIndent, top_ + half_height, fg_color_); |
- line(left_ + long_offset, top_ + kGripShortIndent, |
- left_ + long_offset, bottom_ - kGripShortIndent, fg_color_); |
- line(right_ - long_offset, top_ + kGripShortIndent, |
- right_ - long_offset, bottom_ - kGripShortIndent, fg_color_); |
- break; |
- case kVerticalScrollGrip_Type: |
- // Draw a vertical crosshatch for the grip. |
- long_offset = half_height - kGripLongIndent; |
- line(left_ + half_width, top_ + kGripLongIndent, |
- left_ + half_width, bottom_ - kGripLongIndent, fg_color_); |
- line(left_ + kGripShortIndent, top_ + long_offset, |
- right_ - kGripShortIndent, top_ + long_offset, fg_color_); |
- line(left_ + kGripShortIndent, bottom_ - long_offset, |
- right_ - kGripShortIndent, bottom_ - long_offset, fg_color_); |
- break; |
- case kLeftArrow_Type: |
- // Draw a left arrow inside a box. |
- box(irect_, bg_color_); |
- triangle(right_ - quarter_width, top_ + quarter_height, |
- right_ - quarter_width, bottom_ - quarter_height, |
- left_ + quarter_width, top_ + half_height, fg_color_); |
- break; |
- case kRightArrow_Type: |
- // Draw a left arrow inside a box. |
- box(irect_, bg_color_); |
- triangle(left_ + quarter_width, top_ + quarter_height, |
- right_ - quarter_width, top_ + half_height, |
- left_ + quarter_width, bottom_ - quarter_height, fg_color_); |
- break; |
- case kUpArrow_Type: |
- // Draw an up arrow inside a box. |
- box(irect_, bg_color_); |
- triangle(left_ + quarter_width, bottom_ - quarter_height, |
- left_ + half_width, top_ + quarter_height, |
- right_ - quarter_width, bottom_ - quarter_height, fg_color_); |
- break; |
- case kDownArrow_Type: |
- // Draw a down arrow inside a box. |
- box(irect_, bg_color_); |
- triangle(left_ + quarter_width, top_ + quarter_height, |
- right_ - quarter_width, top_ + quarter_height, |
- left_ + half_width, bottom_ - quarter_height, fg_color_); |
- break; |
- case kHorizontalSliderTrack_Type: |
- // Draw a narrow rect for the track plus box hatches on the ends. |
- SkIRect lirect; |
- lirect = irect_; |
- lirect.inset(kNoOffset, half_height - kSliderIndent); |
- box(lirect, bg_color_); |
- line(left_, top_, left_, bottom_, edge_color_); |
- line(right_, top_, right_, bottom_, edge_color_); |
- break; |
- case kDropDownButton_Type: |
- // Draw a box with a big down arrow on top. |
- box(irect_, bg_color_); |
- triangle(left_ + quarter_width, top_, |
- right_ - quarter_width, top_, |
- left_ + half_width, bottom_, fg_color_); |
- break; |
- default: |
- NOTREACHED(); |
- break; |
- } |
- |
- markState(); |
-} |
- |
-// Because rendering a text field is dependent on input |
-// parameters the other controls don't have, we render it directly |
-// rather than trying to overcomplicate draw() further. |
-void Control::drawTextField(bool draw_edges, bool fill_content_area, |
- SkColor color) { |
- SkPaint paint; |
- |
- skia::ScopedPlatformPaint scoped_platform_paint(canvas_); |
- if (fill_content_area) { |
- paint.setColor(color); |
- paint.setStyle(SkPaint::kFill_Style); |
- canvas_->drawIRect(irect_, paint); |
- } |
- if (draw_edges) { |
- paint.setColor(edge_color_); |
- paint.setStyle(SkPaint::kStroke_Style); |
- canvas_->drawIRect(irect_, paint); |
- } |
- |
- markState(); |
-} |
- |
-void |
-Control::drawProgressBar(const SkIRect& fill_rect) { |
- SkPaint paint; |
- |
- skia::ScopedPlatformPaint scoped_platform_paint(canvas_); |
- paint.setColor(bg_color_); |
- paint.setStyle(SkPaint::kFill_Style); |
- canvas_->drawIRect(irect_, paint); |
- |
- // Emulate clipping |
- SkIRect tofill; |
- tofill.intersect(irect_, fill_rect); |
- paint.setColor(fg_color_); |
- paint.setStyle(SkPaint::kFill_Style); |
- canvas_->drawIRect(tofill, paint); |
- |
- markState(); |
-} |
- |
-} // namespace TestShellWebTheme |
- |