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

Unified Diff: ui/app_list/views/search_result_view.cc

Issue 645853013: Remove some platform specific stuff from views. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 6 years, 2 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/views/search_result_view.h ('k') | ui/app_list/views/speech_view.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/app_list/views/search_result_view.cc
diff --git a/ui/app_list/views/search_result_view.cc b/ui/app_list/views/search_result_view.cc
deleted file mode 100644
index de1f324da89d4b9b42c8344c3475489c032e057a..0000000000000000000000000000000000000000
--- a/ui/app_list/views/search_result_view.cc
+++ /dev/null
@@ -1,358 +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/views/search_result_view.h"
-
-#include <algorithm>
-
-#include "ui/app_list/app_list_constants.h"
-#include "ui/app_list/search_result.h"
-#include "ui/app_list/views/progress_bar_view.h"
-#include "ui/app_list/views/search_result_actions_view.h"
-#include "ui/app_list/views/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"
-#include "ui/views/controls/menu/menu_runner.h"
-
-namespace app_list {
-
-namespace {
-
-const int kPreferredWidth = 300;
-const int kPreferredHeight = 52;
-const int kIconPadding = 14;
-const int kTextTrailPadding = kIconPadding;
-const int kBorderSize = 1;
-
-// Extra margin at the right of the rightmost action icon.
-const int kActionButtonRightMargin = 8;
-
-int GetIconViewWidth() {
- return kListIconSize + 2 * kIconPadding;
-}
-
-// Creates a RenderText of given |text| and |styles|. Caller takes ownership
-// of returned RenderText.
-gfx::RenderText* CreateRenderText(const base::string16& text,
- const SearchResult::Tags& tags) {
- gfx::RenderText* render_text = gfx::RenderText::CreateInstance();
- render_text->SetText(text);
- render_text->SetColor(kResultDefaultTextColor);
-
- for (SearchResult::Tags::const_iterator it = tags.begin();
- it != tags.end();
- ++it) {
- // NONE means default style so do nothing.
- if (it->styles == SearchResult::Tag::NONE)
- continue;
-
- if (it->styles & SearchResult::Tag::MATCH)
- render_text->ApplyStyle(gfx::BOLD, true, it->range);
- if (it->styles & SearchResult::Tag::DIM)
- render_text->ApplyColor(kResultDimmedTextColor, it->range);
- else if (it->styles & SearchResult::Tag::URL)
- render_text->ApplyColor(kResultURLTextColor, it->range);
- }
-
- return render_text;
-}
-
-} // namespace
-
-// static
-const char SearchResultView::kViewClassName[] = "ui/app_list/SearchResultView";
-
-SearchResultView::SearchResultView(SearchResultListView* list_view)
- : views::CustomButton(this),
- result_(NULL),
- list_view_(list_view),
- icon_(new views::ImageView),
- actions_view_(new SearchResultActionsView(this)),
- progress_bar_(new ProgressBarView) {
- icon_->set_interactive(false);
-
- AddChildView(icon_);
- AddChildView(actions_view_);
- AddChildView(progress_bar_);
- set_context_menu_controller(this);
-}
-
-SearchResultView::~SearchResultView() {
- ClearResultNoRepaint();
-}
-
-void SearchResultView::SetResult(SearchResult* result) {
- ClearResultNoRepaint();
-
- result_ = result;
- if (result_)
- result_->AddObserver(this);
-
- OnIconChanged();
- OnActionsChanged();
- UpdateTitleText();
- UpdateDetailsText();
- OnIsInstallingChanged();
- OnPercentDownloadedChanged();
- SchedulePaint();
-}
-
-void SearchResultView::ClearResultNoRepaint() {
- if (result_)
- result_->RemoveObserver(this);
- result_ = NULL;
-}
-
-void SearchResultView::ClearSelectedAction() {
- actions_view_->SetSelectedAction(-1);
-}
-
-void SearchResultView::UpdateTitleText() {
- if (!result_ || result_->title().empty()) {
- title_text_.reset();
- SetAccessibleName(base::string16());
- } else {
- title_text_.reset(CreateRenderText(result_->title(),
- result_->title_tags()));
- SetAccessibleName(result_->title());
- }
-}
-
-void SearchResultView::UpdateDetailsText() {
- if (!result_ || result_->details().empty()) {
- details_text_.reset();
- } else {
- details_text_.reset(CreateRenderText(result_->details(),
- result_->details_tags()));
- }
-}
-
-const char* SearchResultView::GetClassName() const {
- return kViewClassName;
-}
-
-gfx::Size SearchResultView::GetPreferredSize() const {
- 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(GetIconViewWidth());
- icon_bounds.Inset(kIconPadding, (rect.height() - kListIconSize) / 2);
- icon_bounds.Intersect(rect);
- icon_->SetBoundsRect(icon_bounds);
-
- const int max_actions_width =
- (rect.right() - kActionButtonRightMargin - icon_bounds.right()) / 2;
- int actions_width = std::min(max_actions_width,
- actions_view_->GetPreferredSize().width());
-
- gfx::Rect actions_bounds(rect);
- actions_bounds.set_x(rect.right() - kActionButtonRightMargin - actions_width);
- actions_bounds.set_width(actions_width);
- actions_view_->SetBoundsRect(actions_bounds);
-
- const int progress_width = rect.width() / 5;
- const int progress_height = progress_bar_->GetPreferredSize().height();
- const gfx::Rect progress_bounds(
- rect.right() - kActionButtonRightMargin - progress_width,
- rect.y() + (rect.height() - progress_height) / 2,
- progress_width,
- progress_height);
- progress_bar_->SetBoundsRect(progress_bounds);
-}
-
-bool SearchResultView::OnKeyPressed(const ui::KeyEvent& event) {
- // |result_| could be NULL when result list is changing.
- if (!result_)
- return false;
-
- switch (event.key_code()) {
- case ui::VKEY_TAB: {
- int new_selected = actions_view_->selected_action()
- + (event.IsShiftDown() ? -1 : 1);
- actions_view_->SetSelectedAction(new_selected);
- return actions_view_->IsValidActionIndex(new_selected);
- }
- case ui::VKEY_RETURN: {
- int selected = actions_view_->selected_action();
- if (actions_view_->IsValidActionIndex(selected)) {
- OnSearchResultActionActivated(selected, event.flags());
- } else {
- list_view_->SearchResultActivated(this, event.flags());
- }
- return true;
- }
- default:
- break;
- }
-
- return false;
-}
-
-void SearchResultView::ChildPreferredSizeChanged(views::View* child) {
- Layout();
-}
-
-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);
-
- const bool selected = list_view_->IsResultViewSelected(this);
- const bool hover = state() == STATE_HOVERED || state() == STATE_PRESSED;
- if (selected)
- canvas->FillRect(content_rect, kSelectedColor);
- else if (hover)
- canvas->FillRect(content_rect, kHighlightedColor);
- else
- canvas->FillRect(content_rect, kContentsBackgroundColor);
-
- gfx::Rect border_bottom = gfx::SubtractRects(rect, content_rect);
- canvas->FillRect(border_bottom, kResultBorderColor);
-
- gfx::Rect text_bounds(rect);
- text_bounds.set_x(GetIconViewWidth());
- if (actions_view_->visible()) {
- text_bounds.set_width(
- rect.width() - GetIconViewWidth() - kTextTrailPadding -
- actions_view_->bounds().width() -
- (actions_view_->has_children() ? kActionButtonRightMargin : 0));
- } else {
- text_bounds.set_width(rect.width() - GetIconViewWidth() -
- kTextTrailPadding - progress_bar_->bounds().width() -
- kActionButtonRightMargin);
- }
- text_bounds.set_x(GetMirroredXWithWidthInView(text_bounds.x(),
- text_bounds.width()));
-
- if (title_text_ && details_text_) {
- 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_) {
- 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) {
- DCHECK(sender == this);
-
- list_view_->SearchResultActivated(this, event.flags());
-}
-
-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() > kListIconSize || image.height() > kListIconSize) {
- image = gfx::ImageSkiaOperations::CreateResizedImage(
- image,
- skia::ImageOperations::RESIZE_BEST,
- gfx::Size(kListIconSize, kListIconSize));
- } else {
- icon_->ResetImageSize();
- }
-
- // Set the image to an empty image before we reset the image because
- // since we're using the same backing store for our images, sometimes
- // ImageView won't detect that we have a new image set due to the pixel
- // buffer pointers remaining the same despite the image changing.
- icon_->SetImage(gfx::ImageSkia());
- icon_->SetImage(image);
-}
-
-void SearchResultView::OnActionsChanged() {
- actions_view_->SetActions(result_ ? result_->actions()
- : SearchResult::Actions());
-}
-
-void SearchResultView::OnIsInstallingChanged() {
- const bool is_installing = result_ && result_->is_installing();
- actions_view_->SetVisible(!is_installing);
- progress_bar_->SetVisible(is_installing);
-}
-
-void SearchResultView::OnPercentDownloadedChanged() {
- progress_bar_->SetValue(result_ ? result_->percent_downloaded() / 100.0 : 0);
-}
-
-void SearchResultView::OnItemInstalled() {
- list_view_->OnSearchResultInstalled(this);
-}
-
-void SearchResultView::OnItemUninstalled() {
- list_view_->OnSearchResultUninstalled(this);
-}
-
-void SearchResultView::OnSearchResultActionActivated(size_t index,
- int event_flags) {
- // |result_| could be NULL when result list is changing.
- if (!result_)
- return;
-
- DCHECK_LT(index, result_->actions().size());
-
- list_view_->SearchResultActionActivated(this, index, event_flags);
-}
-
-void SearchResultView::ShowContextMenuForView(views::View* source,
- const gfx::Point& point,
- ui::MenuSourceType source_type) {
- // |result_| could be NULL when result list is changing.
- if (!result_)
- return;
-
- ui::MenuModel* menu_model = result_->GetContextMenuModel();
- if (!menu_model)
- return;
-
- context_menu_runner_.reset(
- new views::MenuRunner(menu_model, views::MenuRunner::HAS_MNEMONICS));
- if (context_menu_runner_->RunMenuAt(GetWidget(),
- NULL,
- gfx::Rect(point, gfx::Size()),
- views::MENU_ANCHOR_TOPLEFT,
- source_type) ==
- views::MenuRunner::MENU_DELETED)
- return;
-}
-
-} // namespace app_list
« no previous file with comments | « ui/app_list/views/search_result_view.h ('k') | ui/app_list/views/speech_view.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698