| 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
|
| -
|
|
|