OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 "chrome/browser/views/download_item_view.h" | 5 #include "chrome/browser/views/download_item_view.h" |
6 | 6 |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "app/l10n_util.h" | 9 #include "app/l10n_util.h" |
10 #include "app/resource_bundle.h" | 10 #include "app/resource_bundle.h" |
11 #include "app/text_elider.h" | 11 #include "app/text_elider.h" |
12 #include "app/theme_provider.h" | 12 #include "app/theme_provider.h" |
13 #include "base/callback.h" | 13 #include "base/callback.h" |
14 #include "base/file_path.h" | 14 #include "base/file_path.h" |
15 #include "base/i18n/rtl.h" | 15 #include "base/i18n/rtl.h" |
16 #include "base/string_util.h" | 16 #include "base/string_util.h" |
17 #include "base/sys_string_conversions.h" | 17 #include "base/sys_string_conversions.h" |
18 #include "chrome/browser/browser_process.h" | 18 #include "chrome/browser/browser_process.h" |
19 #include "chrome/browser/browser_theme_provider.h" | 19 #include "chrome/browser/browser_theme_provider.h" |
20 #include "chrome/browser/download/download_item_model.h" | 20 #include "chrome/browser/download/download_item_model.h" |
21 #include "chrome/browser/download/download_util.h" | 21 #include "chrome/browser/download/download_util.h" |
22 #include "chrome/browser/views/download_shelf_view.h" | 22 #include "chrome/browser/views/download_shelf_view.h" |
23 #include "gfx/canvas_skia.h" | 23 #include "gfx/canvas.h" |
24 #include "gfx/color_utils.h" | 24 #include "gfx/color_utils.h" |
25 #include "grit/generated_resources.h" | 25 #include "grit/generated_resources.h" |
26 #include "grit/theme_resources.h" | 26 #include "grit/theme_resources.h" |
27 #include "views/controls/button/native_button.h" | 27 #include "views/controls/button/native_button.h" |
28 #include "views/controls/menu/menu_2.h" | 28 #include "views/controls/menu/menu_2.h" |
29 #include "views/widget/root_view.h" | 29 #include "views/widget/root_view.h" |
30 #include "views/widget/widget.h" | 30 #include "views/widget/widget.h" |
31 | 31 |
32 #if defined(OS_WIN) | 32 #if defined(OS_WIN) |
33 #include "app/win_util.h" | 33 #include "app/win_util.h" |
(...skipping 474 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
508 | 508 |
509 // Paint the background images. | 509 // Paint the background images. |
510 int x = kLeftPadding; | 510 int x = kLeftPadding; |
511 bool rtl_ui = base::i18n::IsRTL(); | 511 bool rtl_ui = base::i18n::IsRTL(); |
512 if (rtl_ui) { | 512 if (rtl_ui) { |
513 // Since we do not have the mirrored images for | 513 // Since we do not have the mirrored images for |
514 // (hot_)body_image_set->top_left, (hot_)body_image_set->left, | 514 // (hot_)body_image_set->top_left, (hot_)body_image_set->left, |
515 // (hot_)body_image_set->bottom_left, and drop_down_image_set, | 515 // (hot_)body_image_set->bottom_left, and drop_down_image_set, |
516 // for RTL UI, we flip the canvas to draw those images mirrored. | 516 // for RTL UI, we flip the canvas to draw those images mirrored. |
517 // Consequently, we do not need to mirror the x-axis of those images. | 517 // Consequently, we do not need to mirror the x-axis of those images. |
518 canvas->AsCanvasSkia()->save(); | 518 canvas->save(); |
519 canvas->TranslateInt(width(), 0); | 519 canvas->TranslateInt(width(), 0); |
520 canvas->ScaleInt(-1, 1); | 520 canvas->ScaleInt(-1, 1); |
521 } | 521 } |
522 PaintBitmaps(canvas, | 522 PaintBitmaps(canvas, |
523 body_image_set->top_left, body_image_set->left, | 523 body_image_set->top_left, body_image_set->left, |
524 body_image_set->bottom_left, | 524 body_image_set->bottom_left, |
525 x, box_y_, box_height_, body_image_set->top_left->width()); | 525 x, box_y_, box_height_, body_image_set->top_left->width()); |
526 x += body_image_set->top_left->width(); | 526 x += body_image_set->top_left->width(); |
527 PaintBitmaps(canvas, | 527 PaintBitmaps(canvas, |
528 body_image_set->top, body_image_set->center, | 528 body_image_set->top, body_image_set->center, |
529 body_image_set->bottom, | 529 body_image_set->bottom, |
530 x, box_y_, box_height_, center_width); | 530 x, box_y_, box_height_, center_width); |
531 x += center_width; | 531 x += center_width; |
532 PaintBitmaps(canvas, | 532 PaintBitmaps(canvas, |
533 body_image_set->top_right, body_image_set->right, | 533 body_image_set->top_right, body_image_set->right, |
534 body_image_set->bottom_right, | 534 body_image_set->bottom_right, |
535 x, box_y_, box_height_, body_image_set->top_right->width()); | 535 x, box_y_, box_height_, body_image_set->top_right->width()); |
536 | 536 |
537 // Overlay our body hot state. | 537 // Overlay our body hot state. |
538 if (body_hover_animation_->GetCurrentValue() > 0) { | 538 if (body_hover_animation_->GetCurrentValue() > 0) { |
539 canvas->AsCanvasSkia()->saveLayerAlpha(NULL, | 539 canvas->saveLayerAlpha(NULL, |
540 static_cast<int>(body_hover_animation_->GetCurrentValue() * 255), | 540 static_cast<int>(body_hover_animation_->GetCurrentValue() * 255), |
541 SkCanvas::kARGB_NoClipLayer_SaveFlag); | 541 SkCanvas::kARGB_NoClipLayer_SaveFlag); |
542 canvas->AsCanvasSkia()->drawARGB(0, 255, 255, 255, SkXfermode::kClear_Mode); | 542 canvas->drawARGB(0, 255, 255, 255, SkXfermode::kClear_Mode); |
543 | 543 |
544 int x = kLeftPadding; | 544 int x = kLeftPadding; |
545 PaintBitmaps(canvas, | 545 PaintBitmaps(canvas, |
546 hot_body_image_set_.top_left, hot_body_image_set_.left, | 546 hot_body_image_set_.top_left, hot_body_image_set_.left, |
547 hot_body_image_set_.bottom_left, | 547 hot_body_image_set_.bottom_left, |
548 x, box_y_, box_height_, hot_body_image_set_.top_left->width()); | 548 x, box_y_, box_height_, hot_body_image_set_.top_left->width()); |
549 x += body_image_set->top_left->width(); | 549 x += body_image_set->top_left->width(); |
550 PaintBitmaps(canvas, | 550 PaintBitmaps(canvas, |
551 hot_body_image_set_.top, hot_body_image_set_.center, | 551 hot_body_image_set_.top, hot_body_image_set_.center, |
552 hot_body_image_set_.bottom, | 552 hot_body_image_set_.bottom, |
553 x, box_y_, box_height_, center_width); | 553 x, box_y_, box_height_, center_width); |
554 x += center_width; | 554 x += center_width; |
555 PaintBitmaps(canvas, | 555 PaintBitmaps(canvas, |
556 hot_body_image_set_.top_right, hot_body_image_set_.right, | 556 hot_body_image_set_.top_right, hot_body_image_set_.right, |
557 hot_body_image_set_.bottom_right, | 557 hot_body_image_set_.bottom_right, |
558 x, box_y_, box_height_, | 558 x, box_y_, box_height_, |
559 hot_body_image_set_.top_right->width()); | 559 hot_body_image_set_.top_right->width()); |
560 canvas->AsCanvasSkia()->restore(); | 560 canvas->restore(); |
561 if (rtl_ui) { | 561 if (rtl_ui) { |
562 canvas->AsCanvasSkia()->restore(); | 562 canvas->restore(); |
563 canvas->AsCanvasSkia()->save(); | 563 canvas->save(); |
564 // Flip it for drawing drop-down images for RTL locales. | 564 // Flip it for drawing drop-down images for RTL locales. |
565 canvas->TranslateInt(width(), 0); | 565 canvas->TranslateInt(width(), 0); |
566 canvas->ScaleInt(-1, 1); | 566 canvas->ScaleInt(-1, 1); |
567 } | 567 } |
568 } | 568 } |
569 | 569 |
570 x += body_image_set->top_right->width(); | 570 x += body_image_set->top_right->width(); |
571 | 571 |
572 // Paint the drop-down. | 572 // Paint the drop-down. |
573 if (drop_down_image_set) { | 573 if (drop_down_image_set) { |
574 PaintBitmaps(canvas, | 574 PaintBitmaps(canvas, |
575 drop_down_image_set->top, drop_down_image_set->center, | 575 drop_down_image_set->top, drop_down_image_set->center, |
576 drop_down_image_set->bottom, | 576 drop_down_image_set->bottom, |
577 x, box_y_, box_height_, drop_down_image_set->top->width()); | 577 x, box_y_, box_height_, drop_down_image_set->top->width()); |
578 | 578 |
579 // Overlay our drop-down hot state. | 579 // Overlay our drop-down hot state. |
580 if (drop_hover_animation_->GetCurrentValue() > 0) { | 580 if (drop_hover_animation_->GetCurrentValue() > 0) { |
581 canvas->AsCanvasSkia()->saveLayerAlpha( | 581 canvas->saveLayerAlpha(NULL, |
582 NULL, | |
583 static_cast<int>(drop_hover_animation_->GetCurrentValue() * 255), | 582 static_cast<int>(drop_hover_animation_->GetCurrentValue() * 255), |
584 SkCanvas::kARGB_NoClipLayer_SaveFlag); | 583 SkCanvas::kARGB_NoClipLayer_SaveFlag); |
585 canvas->AsCanvasSkia()->drawARGB(0, 255, 255, 255, | 584 canvas->drawARGB(0, 255, 255, 255, SkXfermode::kClear_Mode); |
586 SkXfermode::kClear_Mode); | |
587 | 585 |
588 PaintBitmaps(canvas, | 586 PaintBitmaps(canvas, |
589 drop_down_image_set->top, drop_down_image_set->center, | 587 drop_down_image_set->top, drop_down_image_set->center, |
590 drop_down_image_set->bottom, | 588 drop_down_image_set->bottom, |
591 x, box_y_, box_height_, drop_down_image_set->top->width()); | 589 x, box_y_, box_height_, drop_down_image_set->top->width()); |
592 | 590 |
593 canvas->AsCanvasSkia()->restore(); | 591 canvas->restore(); |
594 } | 592 } |
595 } | 593 } |
596 | 594 |
597 if (rtl_ui) { | 595 if (rtl_ui) { |
598 // Restore the canvas to avoid file name etc. text are drawn flipped. | 596 // Restore the canvas to avoid file name etc. text are drawn flipped. |
599 // Consequently, the x-axis of following canvas->DrawXXX() method should be | 597 // Consequently, the x-axis of following canvas->DrawXXX() method should be |
600 // mirrored so the text and images are down in the right positions. | 598 // mirrored so the text and images are down in the right positions. |
601 canvas->AsCanvasSkia()->restore(); | 599 canvas->restore(); |
602 } | 600 } |
603 | 601 |
604 // Print the text, left aligned and always print the file extension. | 602 // Print the text, left aligned and always print the file extension. |
605 // Last value of x was the end of the right image, just before the button. | 603 // Last value of x was the end of the right image, just before the button. |
606 // Note that in dangerous mode we use a label (as the text is multi-line). | 604 // Note that in dangerous mode we use a label (as the text is multi-line). |
607 if (!IsDangerousMode()) { | 605 if (!IsDangerousMode()) { |
608 std::wstring filename; | 606 std::wstring filename; |
609 if (!disabled_while_opening_) { | 607 if (!disabled_while_opening_) { |
610 filename = gfx::ElideFilename(download_->GetFileName(), | 608 filename = gfx::ElideFilename(download_->GetFileName(), |
611 font_, kTextWidth); | 609 font_, kTextWidth); |
(...skipping 397 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1009 void DownloadItemView::Reenable() { | 1007 void DownloadItemView::Reenable() { |
1010 disabled_while_opening_ = false; | 1008 disabled_while_opening_ = false; |
1011 SetEnabled(true); // Triggers a repaint. | 1009 SetEnabled(true); // Triggers a repaint. |
1012 } | 1010 } |
1013 | 1011 |
1014 bool DownloadItemView::InDropDownButtonXCoordinateRange(int x) { | 1012 bool DownloadItemView::InDropDownButtonXCoordinateRange(int x) { |
1015 if (x > drop_down_x_left_ && x < drop_down_x_right_) | 1013 if (x > drop_down_x_left_ && x < drop_down_x_right_) |
1016 return true; | 1014 return true; |
1017 return false; | 1015 return false; |
1018 } | 1016 } |
OLD | NEW |