Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2)

Side by Side Diff: ui/native_theme/native_theme_base.cc

Issue 12383065: Remove old-checkbox-style flag, code and assets (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/native_theme/native_theme_base.h" 5 #include "ui/native_theme/native_theme_base.h"
6 6
7 #include <limits> 7 #include <limits>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 452 matching lines...) Expand 10 before | Expand all | Expand 10 after
463 paint); 463 paint);
464 DrawVertLine(canvas, 464 DrawVertLine(canvas,
465 midx + inter_grippy_offset, 465 midx + inter_grippy_offset,
466 midy - grippy_half_width, 466 midy - grippy_half_width,
467 midy + grippy_half_width, 467 midy + grippy_half_width,
468 paint); 468 paint);
469 } 469 }
470 } 470 }
471 } 471 }
472 472
473 bool NativeThemeBase::IsNewCheckboxStyleEnabled(SkCanvas* canvas) const {
474 // The new style is now the default.
475 // TODO(rbyers): Remove this flag once we're sure the new behavior is fine.
476 // http://crbug.com/133991
477 if (!CommandLine::ForCurrentProcess()->HasSwitch(
478 switches::kOldCheckboxStyle))
479 return true;
480
481 return false;
482 }
483
484 void NativeThemeBase::PaintCheckbox(SkCanvas* canvas, 473 void NativeThemeBase::PaintCheckbox(SkCanvas* canvas,
485 State state, 474 State state,
486 const gfx::Rect& rect, 475 const gfx::Rect& rect,
487 const ButtonExtraParams& button) const { 476 const ButtonExtraParams& button) const {
488 if (IsNewCheckboxStyleEnabled(canvas)) { 477 SkRect skrect = PaintCheckboxRadioCommon(canvas, state, rect,
489 PaintCheckboxNew(canvas, state, rect, button); 478 » » » » » » » » » » » SkIntToScalar(2));
490 return; 479 if (!skrect.isEmpty()) {
480 » // Draw the checkmark / dash.
sky 2013/03/05 17:01:00 It looks like spacing is all off here, and I'm see
481 » SkPaint paint;
482 » paint.setAntiAlias(true);
483 » paint.setStyle(SkPaint::kStroke_Style);
484 » if (state == kDisabled)
485 » paint.setColor(kCheckboxStrokeDisabledColor);
486 » else
487 » paint.setColor(kCheckboxStrokeColor);
488 » if (button.indeterminate) {
489 » SkPath dash;
490 » dash.moveTo(skrect.x() + skrect.width() * 0.16,
491 » » » » (skrect.y() + skrect.bottom()) / 2);
492 » dash.rLineTo(skrect.width() * 0.68, 0);
493 » paint.setStrokeWidth(SkFloatToScalar(skrect.height() * 0.2));
494 » canvas->drawPath(dash, paint);
495 » } else if (button.checked) {
496 » SkPath check;
497 » check.moveTo(skrect.x() + skrect.width() * 0.2,
498 » » » » skrect.y() + skrect.height() * 0.5);
499 » check.rLineTo(skrect.width() * 0.2, skrect.height() * 0.2);
500 » paint.setStrokeWidth(SkFloatToScalar(skrect.height() * 0.23));
501 » check.lineTo(skrect.right() - skrect.width() * 0.2,
502 » » » » skrect.y() + skrect.height() * 0.2);
503 » canvas->drawPath(check, paint);
504 » }
491 } 505 }
492
493 ResourceBundle& rb = ResourceBundle::GetSharedInstance();
494 gfx::ImageSkia* image = NULL;
495 if (button.indeterminate) {
496 image = state == kDisabled ?
497 rb.GetImageSkiaNamed(IDR_CHECKBOX_DISABLED_INDETERMINATE) :
498 rb.GetImageSkiaNamed(IDR_CHECKBOX_INDETERMINATE);
499 } else if (button.checked) {
500 image = state == kDisabled ?
501 rb.GetImageSkiaNamed(IDR_CHECKBOX_DISABLED_ON) :
502 rb.GetImageSkiaNamed(IDR_CHECKBOX_ON);
503 } else {
504 image = state == kDisabled ?
505 rb.GetImageSkiaNamed(IDR_CHECKBOX_DISABLED_OFF) :
506 rb.GetImageSkiaNamed(IDR_CHECKBOX_OFF);
507 }
508
509 gfx::Rect bounds = rect;
510 bounds.ClampToCenteredSize(gfx::Size(image->width(), image->height()));
511 DrawImageInt(canvas, *image, 0, 0, image->width(), image->height(),
512 bounds.x(), bounds.y(), bounds.width(), bounds.height());
513 } 506 }
514 507
515 // Draws the common elements of checkboxes and radio buttons. 508 // Draws the common elements of checkboxes and radio buttons.
516 // Returns the rectangle within which any additional decorations should be 509 // Returns the rectangle within which any additional decorations should be
517 // drawn, or empty if none. 510 // drawn, or empty if none.
518 SkRect NativeThemeBase::PaintCheckboxRadioNewCommon( 511 SkRect NativeThemeBase::PaintCheckboxRadioCommon(
519 SkCanvas* canvas, 512 SkCanvas* canvas,
520 State state, 513 State state,
521 const gfx::Rect& rect, 514 const gfx::Rect& rect,
522 const SkScalar borderRadius) const { 515 const SkScalar borderRadius) const {
523 516
524 SkRect skrect = gfx::RectToSkRect(rect); 517 SkRect skrect = gfx::RectToSkRect(rect);
525 518
526 // Use the largest square that fits inside the provided rectangle. 519 // Use the largest square that fits inside the provided rectangle.
527 // No other browser seems to support non-square widget, so accidentally 520 // No other browser seems to support non-square widget, so accidentally
528 // having non-square sizes is common (eg. amazon and webkit dev tools). 521 // having non-square sizes is common (eg. amazon and webkit dev tools).
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
597 paint.setStyle(SkPaint::kStroke_Style); 590 paint.setStyle(SkPaint::kStroke_Style);
598 paint.setStrokeWidth(SkIntToScalar(1)); 591 paint.setStrokeWidth(SkIntToScalar(1));
599 skrect.inset(SkFloatToScalar(.5f), SkFloatToScalar(.5f)); 592 skrect.inset(SkFloatToScalar(.5f), SkFloatToScalar(.5f));
600 canvas->drawRoundRect(skrect, borderRadius, borderRadius, paint); 593 canvas->drawRoundRect(skrect, borderRadius, borderRadius, paint);
601 594
602 // Return the rectangle excluding the drop shadow for drawing any additional 595 // Return the rectangle excluding the drop shadow for drawing any additional
603 // decorations. 596 // decorations.
604 return skrect; 597 return skrect;
605 } 598 }
606 599
607 void NativeThemeBase::PaintCheckboxNew(SkCanvas* canvas,
608 State state,
609 const gfx::Rect& rect,
610 const ButtonExtraParams& button) const {
611 SkRect skrect = PaintCheckboxRadioNewCommon(canvas, state, rect,
612 SkIntToScalar(2));
613 if (!skrect.isEmpty()) {
614 // Draw the checkmark / dash.
615 SkPaint paint;
616 paint.setAntiAlias(true);
617 paint.setStyle(SkPaint::kStroke_Style);
618 if (state == kDisabled)
619 paint.setColor(kCheckboxStrokeDisabledColor);
620 else
621 paint.setColor(kCheckboxStrokeColor);
622 if (button.indeterminate) {
623 SkPath dash;
624 dash.moveTo(skrect.x() + skrect.width() * 0.16,
625 (skrect.y() + skrect.bottom()) / 2);
626 dash.rLineTo(skrect.width() * 0.68, 0);
627 paint.setStrokeWidth(SkFloatToScalar(skrect.height() * 0.2));
628 canvas->drawPath(dash, paint);
629 } else if (button.checked) {
630 SkPath check;
631 check.moveTo(skrect.x() + skrect.width() * 0.2,
632 skrect.y() + skrect.height() * 0.5);
633 check.rLineTo(skrect.width() * 0.2, skrect.height() * 0.2);
634 paint.setStrokeWidth(SkFloatToScalar(skrect.height() * 0.23));
635 check.lineTo(skrect.right() - skrect.width() * 0.2,
636 skrect.y() + skrect.height() * 0.2);
637 canvas->drawPath(check, paint);
638 }
639 }
640 }
641
642 void NativeThemeBase::PaintRadio(SkCanvas* canvas, 600 void NativeThemeBase::PaintRadio(SkCanvas* canvas,
643 State state, 601 State state,
644 const gfx::Rect& rect, 602 const gfx::Rect& rect,
645 const ButtonExtraParams& button) const { 603 const ButtonExtraParams& button) const {
646 if (IsNewCheckboxStyleEnabled(canvas)) {
647 PaintRadioNew(canvas, state, rect, button);
648 return;
649 }
650
651 ResourceBundle& rb = ResourceBundle::GetSharedInstance();
652 gfx::ImageSkia* image = NULL;
653 if (state == kDisabled) {
654 image = button.checked ?
655 rb.GetImageSkiaNamed(IDR_RADIO_DISABLED_ON) :
656 rb.GetImageSkiaNamed(IDR_RADIO_DISABLED_OFF);
657 } else {
658 image = button.checked ?
659 rb.GetImageSkiaNamed(IDR_RADIO_ON) :
660 rb.GetImageSkiaNamed(IDR_RADIO_OFF);
661 }
662
663 gfx::Rect bounds = rect;
664 bounds.ClampToCenteredSize(gfx::Size(image->width(), image->height()));
665 DrawImageInt(canvas, *image, 0, 0, image->width(), image->height(),
666 bounds.x(), bounds.y(), bounds.width(), bounds.height());
667 }
668
669 void NativeThemeBase::PaintRadioNew(SkCanvas* canvas,
670 State state,
671 const gfx::Rect& rect,
672 const ButtonExtraParams& button) const {
673 604
674 // Most of a radio button is the same as a checkbox, except the the rounded 605 // Most of a radio button is the same as a checkbox, except the the rounded
675 // square is a circle (i.e. border radius >= 100%). 606 // square is a circle (i.e. border radius >= 100%).
676 const SkScalar radius = SkFloatToScalar( 607 const SkScalar radius = SkFloatToScalar(
677 static_cast<float>(std::max(rect.width(), rect.height())) / 2); 608 static_cast<float>(std::max(rect.width(), rect.height())) / 2);
678 SkRect skrect = PaintCheckboxRadioNewCommon(canvas, state, rect, radius); 609 SkRect skrect = PaintCheckboxRadioCommon(canvas, state, rect, radius);
679 if (!skrect.isEmpty() && button.checked) { 610 if (!skrect.isEmpty() && button.checked) {
680 // Draw the dot. 611 // Draw the dot.
681 SkPaint paint; 612 SkPaint paint;
682 paint.setAntiAlias(true); 613 paint.setAntiAlias(true);
683 paint.setStyle(SkPaint::kFill_Style); 614 paint.setStyle(SkPaint::kFill_Style);
684 if (state == kDisabled) 615 if (state == kDisabled)
685 paint.setColor(kRadioDotDisabledColor); 616 paint.setColor(kRadioDotDisabledColor);
686 else 617 else
687 paint.setColor(kRadioDotColor); 618 paint.setColor(kRadioDotColor);
688 skrect.inset(skrect.width() * 0.25, skrect.height() * 0.25); 619 skrect.inset(skrect.width() * 0.25, skrect.height() * 0.25);
(...skipping 443 matching lines...) Expand 10 before | Expand all | Expand 10 after
1132 SkScalar min_diff = Clamp((hsv1[1] + hsv2[1]) * 1.2f, 0.28f, 0.5f); 1063 SkScalar min_diff = Clamp((hsv1[1] + hsv2[1]) * 1.2f, 0.28f, 0.5f);
1133 SkScalar diff = Clamp(fabs(hsv1[2] - hsv2[2]) / 2, min_diff, 0.5f); 1064 SkScalar diff = Clamp(fabs(hsv1[2] - hsv2[2]) / 2, min_diff, 0.5f);
1134 1065
1135 if (hsv1[2] + hsv2[2] > 1.0) 1066 if (hsv1[2] + hsv2[2] > 1.0)
1136 diff = -diff; 1067 diff = -diff;
1137 1068
1138 return SaturateAndBrighten(hsv2, -0.2f, diff); 1069 return SaturateAndBrighten(hsv2, -0.2f, diff);
1139 } 1070 }
1140 1071
1141 } // namespace ui 1072 } // namespace ui
OLDNEW
« no previous file with comments | « ui/native_theme/native_theme_base.h ('k') | ui/resources/default_100_percent/linux/linux-checkbox-disabled-indeterminate.png » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698