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

Side by Side Diff: ash/ime/mode_indicator_view.cc

Issue 680383008: Move ash/ime to ui/chromeos/ime (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@athena_do_not_use_ash48_global_command
Patch Set: Created 6 years, 1 month 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
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "ash/ime/mode_indicator_view.h"
6
7 #include "base/logging.h"
8 #include "ui/gfx/display.h"
9 #include "ui/gfx/screen.h"
10 #include "ui/views/bubble/bubble_delegate.h"
11 #include "ui/views/bubble/bubble_frame_view.h"
12 #include "ui/views/controls/label.h"
13 #include "ui/views/layout/fill_layout.h"
14 #include "ui/wm/core/window_animations.h"
15
16 namespace ash {
17 namespace ime {
18
19 namespace {
20 // Minimum size of inner contents in pixel.
21 // 43 is the designed size including the default margin (6 * 2).
22 const int kMinSize = 31;
23
24 // After this duration in msec, the mode inicator will be fading out.
25 const int kShowingDuration = 500;
26
27 class ModeIndicatorFrameView : public views::BubbleFrameView {
28 public:
29 explicit ModeIndicatorFrameView(const gfx::Insets& content_margins)
30 : views::BubbleFrameView(content_margins) {}
31 ~ModeIndicatorFrameView() override {}
32
33 private:
34 // views::BubbleFrameView overrides:
35 gfx::Rect GetAvailableScreenBounds(const gfx::Rect& rect) override {
36 return gfx::Screen::GetNativeScreen()->GetDisplayNearestPoint(
37 rect.CenterPoint()).bounds();
38 }
39
40 DISALLOW_COPY_AND_ASSIGN(ModeIndicatorFrameView);
41 };
42
43 } // namespace
44
45
46 ModeIndicatorView::ModeIndicatorView(gfx::NativeView parent,
47 const gfx::Rect& cursor_bounds,
48 const base::string16& label)
49 : cursor_bounds_(cursor_bounds),
50 label_view_(new views::Label(label)) {
51 set_can_activate(false);
52 set_accept_events(false);
53 set_parent_window(parent);
54 set_shadow(views::BubbleBorder::NO_SHADOW);
55 set_arrow(views::BubbleBorder::TOP_CENTER);
56 }
57
58 ModeIndicatorView::~ModeIndicatorView() {}
59
60 void ModeIndicatorView::ShowAndFadeOut() {
61 wm::SetWindowVisibilityAnimationTransition(
62 GetWidget()->GetNativeView(),
63 wm::ANIMATE_HIDE);
64 GetWidget()->Show();
65 timer_.Start(FROM_HERE,
66 base::TimeDelta::FromMilliseconds(kShowingDuration),
67 GetWidget(),
68 &views::Widget::Close);
69 }
70
71 gfx::Size ModeIndicatorView::GetPreferredSize() const {
72 gfx::Size size = label_view_->GetPreferredSize();
73 size.SetToMax(gfx::Size(kMinSize, kMinSize));
74 return size;
75 }
76
77 void ModeIndicatorView::Init() {
78 SetLayoutManager(new views::FillLayout());
79 AddChildView(label_view_);
80
81 SetAnchorRect(cursor_bounds_);
82 }
83
84 views::NonClientFrameView* ModeIndicatorView::CreateNonClientFrameView(
85 views::Widget* widget) {
86 views::BubbleFrameView* frame = new ModeIndicatorFrameView(margins());
87 // arrow adjustment in BubbleDelegateView is unnecessary because arrow
88 // of this bubble is always center.
89 frame->SetBubbleBorder(scoped_ptr<views::BubbleBorder>(
90 new views::BubbleBorder(arrow(), shadow(), color())));
91 return frame;
92 }
93
94 } // namespace ime
95 } // namespace ash
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698