Commit f5232c5d authored by David Black's avatar David Black Committed by Commit Bot

Create base class for AssistantUiElement views.

This is part of a multi-CL effort to clean up the AssistantUiElement
modeling/rendering pipeline. Once complete, UiElementContainerView will
only know about AssistantUiElementViews, not inheriting subclasses.

More details in the bug.

Bug: b:145003512
Change-Id: I6b9b96af2f7f7e73a19785d58104049f287616df
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1953700
Commit-Queue: David Black <dmblack@google.com>
Reviewed-by: default avatarXiaohui Chen <xiaohuic@chromium.org>
Cr-Commit-Position: refs/heads/master@{#726629}
parent 168891af
......@@ -89,6 +89,7 @@ component("ui") {
"main_stage/assistant_query_view.h",
"main_stage/assistant_text_element_view.cc",
"main_stage/assistant_text_element_view.h",
"main_stage/assistant_ui_element_view.h",
"main_stage/element_animator.cc",
"main_stage/element_animator.h",
"main_stage/suggestion_chip_view.cc",
......
......@@ -5,11 +5,11 @@
#ifndef ASH_ASSISTANT_UI_MAIN_STAGE_ASSISTANT_CARD_ELEMENT_VIEW_H_
#define ASH_ASSISTANT_UI_MAIN_STAGE_ASSISTANT_CARD_ELEMENT_VIEW_H_
#include "ash/assistant/ui/main_stage/assistant_ui_element_view.h"
#include "base/component_export.h"
#include "base/macros.h"
#include "services/content/public/cpp/navigable_contents.h"
#include "services/content/public/cpp/navigable_contents_view.h"
#include "ui/views/view.h"
namespace ash {
......@@ -19,14 +19,14 @@ class AssistantViewDelegate;
// AssistantCardElementView is the visual representation of an
// AssistantCardElement. It is a child view of UiElementContainerView.
class COMPONENT_EXPORT(ASSISTANT_UI) AssistantCardElementView
: public views::View,
: public AssistantUiElementView,
public content::NavigableContentsObserver {
public:
AssistantCardElementView(AssistantViewDelegate* delegate,
const AssistantCardElement* card_element);
~AssistantCardElementView() override;
// views::View:
// AssistantUiElementView:
const char* GetClassName() const override;
void AddedToWidget() override;
void ChildPreferredSizeChanged(views::View* child) override;
......
......@@ -4,26 +4,22 @@
#include "ash/assistant/ui/main_stage/assistant_text_element_view.h"
#include <memory>
#include "ash/assistant/model/ui/assistant_text_element.h"
#include "ash/assistant/ui/assistant_ui_constants.h"
#include "base/strings/utf_string_conversions.h"
#include "ui/views/background.h"
#include "ui/views/controls/label.h"
#include "ui/views/layout/fill_layout.h"
namespace ash {
// AssistantTextElementView ----------------------------------------------------
AssistantTextElementView::AssistantTextElementView(
const AssistantTextElement* text_element)
: views::Label(base::UTF8ToUTF16(text_element->text())) {
SetAutoColorReadabilityEnabled(false);
SetEnabledColor(kTextColorPrimary);
SetFontList(assistant::ui::GetDefaultFontList()
.DeriveWithSizeDelta(2)
.DeriveWithWeight(gfx::Font::Weight::MEDIUM));
SetHorizontalAlignment(gfx::HorizontalAlignment::ALIGN_LEFT);
SetMultiLine(true);
SetBackground(views::CreateSolidBackground(SK_ColorWHITE));
const AssistantTextElement* text_element) {
InitLayout(text_element);
}
AssistantTextElementView::~AssistantTextElementView() = default;
......@@ -32,4 +28,25 @@ const char* AssistantTextElementView::GetClassName() const {
return "AssistantTextElementView";
}
void AssistantTextElementView::ChildPreferredSizeChanged(views::View* child) {
PreferredSizeChanged();
}
void AssistantTextElementView::InitLayout(
const AssistantTextElement* text_element) {
SetLayoutManager(std::make_unique<views::FillLayout>());
// Label.
views::Label* label = AddChildView(
std::make_unique<views::Label>(base::UTF8ToUTF16(text_element->text())));
label->SetAutoColorReadabilityEnabled(false);
label->SetBackground(views::CreateSolidBackground(SK_ColorWHITE));
label->SetEnabledColor(kTextColorPrimary);
label->SetFontList(assistant::ui::GetDefaultFontList()
.DeriveWithSizeDelta(2)
.DeriveWithWeight(gfx::Font::Weight::MEDIUM));
label->SetHorizontalAlignment(gfx::HorizontalAlignment::ALIGN_LEFT);
label->SetMultiLine(true);
}
} // namespace ash
......@@ -5,9 +5,9 @@
#ifndef ASH_ASSISTANT_UI_MAIN_STAGE_ASSISTANT_TEXT_ELEMENT_VIEW_H_
#define ASH_ASSISTANT_UI_MAIN_STAGE_ASSISTANT_TEXT_ELEMENT_VIEW_H_
#include "ash/assistant/ui/main_stage/assistant_ui_element_view.h"
#include "base/component_export.h"
#include "base/macros.h"
#include "ui/views/controls/label.h"
namespace ash {
......@@ -16,15 +16,18 @@ class AssistantTextElement;
// AssistantTextElementView is the visual representation of an
// AssistantTextElement. It is a child view of UiElementContainerView.
class COMPONENT_EXPORT(ASSISTANT_UI) AssistantTextElementView
: public views::Label {
: public AssistantUiElementView {
public:
explicit AssistantTextElementView(const AssistantTextElement* text_element);
~AssistantTextElementView() override;
// views::Label:
// AssistantUiElementView:
const char* GetClassName() const override;
void ChildPreferredSizeChanged(views::View* child) override;
private:
void InitLayout(const AssistantTextElement* text_element);
DISALLOW_COPY_AND_ASSIGN(AssistantTextElementView);
};
......
// Copyright 2018 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.
#ifndef ASH_ASSISTANT_UI_MAIN_STAGE_ASSISTANT_UI_ELEMENT_VIEW_H_
#define ASH_ASSISTANT_UI_MAIN_STAGE_ASSISTANT_UI_ELEMENT_VIEW_H_
#include "base/component_export.h"
#include "ui/views/view.h"
namespace ash {
// Base class for a visual representation of an AssistantUiElement. It is a
// child view of UiElementContainerView.
class COMPONENT_EXPORT(ASSISTANT_UI) AssistantUiElementView
: public views::View {
public:
explicit AssistantUiElementView(AssistantUiElementView& copy) = delete;
AssistantUiElementView& operator=(AssistantUiElementView& assign) = delete;
~AssistantUiElementView() override = default;
protected:
AssistantUiElementView() = default;
};
} // namespace ash
#endif // ASH_ASSISTANT_UI_MAIN_STAGE_ASSISTANT_UI_ELEMENT_VIEW_H_
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment