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

Unified Diff: ui/app_list/search_result_view.cc

Issue 11784034: Skeleton for app_list on OSX, and refactoring for enable_app_list=1 on OS=="mac". (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase for 175876 and 175961 Created 7 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/app_list/search_result_view.h ('k') | ui/app_list/test/apps_grid_view_test_api.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/app_list/search_result_view.cc
diff --git a/ui/app_list/search_result_view.cc b/ui/app_list/search_result_view.cc
deleted file mode 100644
index 3753b9a8737805c41ff3a3ed58612668c569de58..0000000000000000000000000000000000000000
--- a/ui/app_list/search_result_view.cc
+++ /dev/null
@@ -1,309 +0,0 @@
-// Copyright (c) 2012 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.
-
-#include "ui/app_list/search_result_view.h"
-
-#include "ui/app_list/app_list_constants.h"
-#include "ui/app_list/search_result.h"
-#include "ui/app_list/search_result_list_view.h"
-#include "ui/gfx/canvas.h"
-#include "ui/gfx/font.h"
-#include "ui/gfx/image/image_skia_operations.h"
-#include "ui/gfx/render_text.h"
-#include "ui/views/controls/button/image_button.h"
-#include "ui/views/controls/image_view.h"
-
-namespace {
-
-const int kPreferredWidth = 300;
-const int kPreferredHeight = 52;
-const int kIconDimension = 32;
-const int kIconPadding = 14;
-const int kIconViewWidth = kIconDimension + 2 * kIconPadding;
-const int kTextTrailPadding = kIconPadding;
-const int kBorderSize = 1;
-
-// Maximum dimensions of a search result's action icons.
-const int kActionIconDimension = 24;
-
-// Total space (including padding) used for each action icon's button.
-const int kActionButtonWidth = 32;
-
-// Extra margin at the right of the rightmost action icon.
-const int kActionButtonRightMargin = 8;
-
-const SkColor kBorderColor = SkColorSetARGB(0x0F, 0, 0, 0);
-
-const SkColor kDefaultTextColor = SkColorSetRGB(0x33, 0x33, 0x33);
-const SkColor kDimmedTextColor = SkColorSetRGB(0x96, 0x96, 0x96);
-const SkColor kURLTextColor = SkColorSetRGB(0x00, 0x99, 0x33);
-
-const SkColor kSelectedBorderColor = kBorderColor;
-const SkColor kSelectedBackgroundColor = SkColorSetARGB(0x0F, 0x4D, 0x90, 0xFE);
-const SkColor kHoverAndPushedColor = SkColorSetARGB(0x05, 0, 0, 0);
-
-// A non-interactive image view to display result icon.
-class IconView : public views::ImageView {
- public:
- IconView() : ImageView() {}
- virtual ~IconView() {}
-
- private:
- // views::View overrides:
- virtual bool HitTestRect(const gfx::Rect& rect) const OVERRIDE {
- return false;
- }
-
- DISALLOW_COPY_AND_ASSIGN(IconView);
-};
-
-// Creates a RenderText of given |text| and |styles|. Caller takes ownership
-// of returned RenderText.
-gfx::RenderText* CreateRenderText(const string16& text,
- const app_list::SearchResult::Tags& tags) {
- gfx::RenderText* render_text = gfx::RenderText::CreateInstance();
- render_text->SetText(text);
-
- gfx::StyleRange default_style;
- default_style.foreground = kDefaultTextColor;
- render_text->set_default_style(default_style);
- render_text->ApplyDefaultStyle();
-
- for (app_list::SearchResult::Tags::const_iterator it = tags.begin();
- it != tags.end();
- ++it) {
- // NONE means default style so do nothing.
- if (it->styles == app_list::SearchResult::Tag::NONE)
- continue;
-
- gfx::StyleRange style;
- style.range = it->range;
-
- if (it->styles & app_list::SearchResult::Tag::MATCH)
- style.font_style = gfx::Font::BOLD;
- if (it->styles & app_list::SearchResult::Tag::URL)
- style.foreground = kURLTextColor;
- if (it->styles & app_list::SearchResult::Tag::DIM)
- style.foreground = kDimmedTextColor;
-
- render_text->ApplyStyleRange(style);
- }
-
- return render_text;
-}
-
-} // namespace
-
-namespace app_list {
-
-// static
-const char SearchResultView::kViewClassName[] = "ui/app_list/SearchResultView";
-
-SearchResultView::SearchResultView(SearchResultListView* list_view,
- SearchResultViewDelegate* delegate)
- : views::CustomButton(this),
- result_(NULL),
- list_view_(list_view),
- delegate_(delegate),
- icon_(new IconView) {
- AddChildView(icon_);
-}
-
-SearchResultView::~SearchResultView() {
- ClearResultNoRepaint();
-}
-
-void SearchResultView::SetResult(SearchResult* result) {
- ClearResultNoRepaint();
-
- result_ = result;
- if (result_)
- result_->AddObserver(this);
-
- OnIconChanged();
- OnActionIconsChanged();
- UpdateTitleText();
- UpdateDetailsText();
- SchedulePaint();
-}
-
-void SearchResultView::ClearResultNoRepaint() {
- if (result_)
- result_->RemoveObserver(this);
- result_ = NULL;
-}
-
-void SearchResultView::UpdateTitleText() {
- if (!result_ || result_->title().empty()) {
- title_text_.reset();
- } else {
- title_text_.reset(CreateRenderText(result_->title(),
- result_->title_tags()));
- }
-}
-
-void SearchResultView::UpdateDetailsText() {
- if (!result_ || result_->details().empty()) {
- details_text_.reset();
- } else {
- details_text_.reset(CreateRenderText(result_->details(),
- result_->details_tags()));
- }
-}
-
-std::string SearchResultView::GetClassName() const {
- return kViewClassName;
-}
-
-gfx::Size SearchResultView::GetPreferredSize() {
- return gfx::Size(kPreferredWidth, kPreferredHeight);
-}
-
-void SearchResultView::Layout() {
- gfx::Rect rect(GetContentsBounds());
- if (rect.IsEmpty())
- return;
-
- gfx::Rect icon_bounds(rect);
- icon_bounds.set_width(kIconViewWidth);
- icon_bounds.Inset(kIconPadding, (rect.height() - kIconDimension) / 2);
- icon_bounds.Intersect(rect);
- icon_->SetBoundsRect(icon_bounds);
-
- size_t num_buttons = action_buttons_.size();
- for (size_t i = 0; i < num_buttons; ++i) {
- views::ImageButton* button = action_buttons_[i];
- gfx::Rect button_bounds(
- rect.right() - kActionButtonRightMargin -
- (num_buttons - i) * kActionButtonWidth,
- (rect.y() + rect.height() - kActionIconDimension) / 2,
- kActionButtonWidth, kActionIconDimension);
- button->SetBoundsRect(button_bounds);
- }
-}
-
-void SearchResultView::OnPaint(gfx::Canvas* canvas) {
- gfx::Rect rect(GetContentsBounds());
- if (rect.IsEmpty())
- return;
-
- gfx::Rect content_rect(rect);
- content_rect.set_height(rect.height() - kBorderSize);
-
- canvas->FillRect(content_rect, kContentsBackgroundColor);
-
- bool selected = list_view_->IsResultViewSelected(this);
- if (selected) {
- canvas->FillRect(content_rect, kSelectedBackgroundColor);
- } else if (state() == STATE_HOVERED || state() == STATE_PRESSED) {
- canvas->FillRect(content_rect, kHoverAndPushedColor);
- }
-
- gfx::Rect border_bottom = gfx::SubtractRects(rect, content_rect);
- canvas->FillRect(border_bottom,
- selected ? kSelectedBorderColor : kBorderColor);
-
- gfx::Rect text_bounds(rect);
- text_bounds.set_x(kIconViewWidth);
- text_bounds.set_width(
- rect.width() - kIconViewWidth - kTextTrailPadding -
- action_buttons_.size() * kActionButtonWidth -
- (!action_buttons_.empty() ? kActionButtonRightMargin : 0));
- text_bounds.set_x(GetMirroredXWithWidthInView(text_bounds.x(),
- text_bounds.width()));
-
- if (title_text_.get() && details_text_.get()) {
- gfx::Size title_size(text_bounds.width(),
- title_text_->GetStringSize().height());
- gfx::Size details_size(text_bounds.width(),
- details_text_->GetStringSize().height());
- int total_height = title_size.height() + + details_size.height();
- int y = text_bounds.y() + (text_bounds.height() - total_height) / 2;
-
- title_text_->SetDisplayRect(gfx::Rect(gfx::Point(text_bounds.x(), y),
- title_size));
- title_text_->Draw(canvas);
-
- y += title_size.height();
- details_text_->SetDisplayRect(gfx::Rect(gfx::Point(text_bounds.x(), y),
- details_size));
- details_text_->Draw(canvas);
- } else if (title_text_.get()) {
- gfx::Size title_size(text_bounds.width(),
- title_text_->GetStringSize().height());
- gfx::Rect centered_title_rect(text_bounds);
- centered_title_rect.ClampToCenteredSize(title_size);
- title_text_->SetDisplayRect(centered_title_rect);
- title_text_->Draw(canvas);
- }
-}
-
-void SearchResultView::ButtonPressed(views::Button* sender,
- const ui::Event& event) {
- if (sender == this) {
- delegate_->SearchResultActivated(this, event);
- return;
- }
-
- for (size_t i = 0; i < action_buttons_.size(); ++i) {
- if (sender == action_buttons_[i]) {
- delegate_->SearchResultActionActivated(this, i, event);
- return;
- }
- }
- NOTREACHED() << "Got unexpected button press on " << sender;
-}
-
-void SearchResultView::OnIconChanged() {
- gfx::ImageSkia image(result_ ? result_->icon() : gfx::ImageSkia());
- // Note this might leave the view with an old icon. But it is needed to avoid
- // flash when a SearchResult's icon is loaded asynchronously. In this case, it
- // looks nicer to keep the stale icon for a little while on screen instead of
- // clearing it out. It should work correctly as long as the SearchResult does
- // not forget to SetIcon when it's ready.
- if (image.isNull())
- return;
-
- // Scales down big icons but leave small ones unchanged.
- if (image.width() > kIconDimension || image.height() > kIconDimension) {
- image = gfx::ImageSkiaOperations::CreateResizedImage(
- image,
- skia::ImageOperations::RESIZE_BEST,
- gfx::Size(kIconDimension, kIconDimension));
- } else {
- icon_->ResetImageSize();
- }
-
- icon_->SetImage(image);
-}
-
-void SearchResultView::OnActionIconsChanged() {
- while (action_buttons_.size() >
- (result_ ? result_->action_icons().size() : 0)) {
- RemoveChildView(action_buttons_.back());
- action_buttons_.pop_back();
- }
-
- if (result_) {
- while (action_buttons_.size() < result_->action_icons().size()) {
- views::ImageButton* button = new views::ImageButton(this);
- button->SetImageAlignment(views::ImageButton::ALIGN_CENTER,
- views::ImageButton::ALIGN_MIDDLE);
- AddChildView(button);
- action_buttons_.push_back(button);
- }
-
- const SearchResult::ActionIconSets& icons = result_->action_icons();
- for (size_t i = 0; i < icons.size(); ++i) {
- const SearchResult::ActionIconSet& icon = icons.at(i);
- views::ImageButton* button = action_buttons_[i];
- button->SetImage(views::CustomButton::STATE_NORMAL, &icon.base_image);
- button->SetImage(views::CustomButton::STATE_HOVERED, &icon.hover_image);
- button->SetImage(views::CustomButton::STATE_PRESSED, &icon.pressed_image);
- button->SetTooltipText(icon.tooltip_text);
- }
- }
-}
-
-} // namespace app_list
« no previous file with comments | « ui/app_list/search_result_view.h ('k') | ui/app_list/test/apps_grid_view_test_api.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698