OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "ui/touch_selection/touch_handle_drawable_aura.h" | 5 #include "ui/touch_selection/touch_handle_drawable_aura.h" |
6 | 6 |
7 #include "ui/aura/window.h" | 7 #include "ui/aura/window.h" |
8 #include "ui/aura/window_targeter.h" | 8 #include "ui/aura/window_targeter.h" |
9 #include "ui/aura_extra/image_window_delegate.h" | 9 #include "ui/aura_extra/image_window_delegate.h" |
10 #include "ui/base/cursor/cursor.h" | 10 #include "ui/base/cursor/cursor.h" |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
70 window_->set_owned_by_parent(false); | 70 window_->set_owned_by_parent(false); |
71 window_->set_ignore_events(true); | 71 window_->set_ignore_events(true); |
72 parent->AddChild(window_.get()); | 72 parent->AddChild(window_.get()); |
73 } | 73 } |
74 | 74 |
75 TouchHandleDrawableAura::~TouchHandleDrawableAura() { | 75 TouchHandleDrawableAura::~TouchHandleDrawableAura() { |
76 } | 76 } |
77 | 77 |
78 void TouchHandleDrawableAura::UpdateBounds() { | 78 void TouchHandleDrawableAura::UpdateBounds() { |
79 gfx::RectF new_bounds = relative_bounds_; | 79 gfx::RectF new_bounds = relative_bounds_; |
80 new_bounds.Offset(focal_position_.x(), focal_position_.y()); | 80 new_bounds.Offset(origin_position_.x(), origin_position_.y()); |
81 window_->SetBounds(gfx::ToEnclosingRect(new_bounds)); | 81 window_->SetBounds(gfx::ToEnclosingRect(new_bounds)); |
82 } | 82 } |
83 | 83 |
84 bool TouchHandleDrawableAura::IsVisible() const { | 84 bool TouchHandleDrawableAura::IsVisible() const { |
85 return enabled_ && !IsNearlyZero(alpha_); | 85 return enabled_ && !IsNearlyZero(alpha_); |
86 } | 86 } |
87 | 87 |
88 void TouchHandleDrawableAura::SetEnabled(bool enabled) { | 88 void TouchHandleDrawableAura::SetEnabled(bool enabled) { |
89 if (enabled == enabled_) | 89 if (enabled == enabled_) |
90 return; | 90 return; |
91 | 91 |
92 enabled_ = enabled; | 92 enabled_ = enabled; |
93 if (IsVisible()) | 93 if (IsVisible()) |
94 window_->Show(); | 94 window_->Show(); |
95 else | 95 else |
96 window_->Hide(); | 96 window_->Hide(); |
97 } | 97 } |
98 | 98 |
99 void TouchHandleDrawableAura::SetOrientation( | 99 void TouchHandleDrawableAura::SetOrientation(TouchHandleOrientation orientation, |
100 TouchHandleOrientation orientation) { | 100 bool mirror_vertical, |
| 101 bool mirror_horizontal) { |
| 102 // TODO(AviD): Implement adaptive handle orientation logic for Aura |
| 103 DCHECK(!mirror_vertical); |
| 104 DCHECK(!mirror_horizontal); |
| 105 |
101 if (orientation_ == orientation) | 106 if (orientation_ == orientation) |
102 return; | 107 return; |
103 orientation_ = orientation; | 108 orientation_ = orientation; |
104 gfx::Image* image = GetHandleImage(orientation); | 109 gfx::Image* image = GetHandleImage(orientation); |
105 window_delegate_->SetImage(*image); | 110 window_delegate_->SetImage(*image); |
106 | 111 |
107 // Calculate the relative bounds. | 112 // Calculate the relative bounds. |
108 gfx::Size image_size = image->Size(); | 113 gfx::Size image_size = image->Size(); |
109 int window_width = image_size.width() + 2 * kSelectionHandlePadding; | 114 int window_width = image_size.width() + 2 * kSelectionHandlePadding; |
110 int window_height = image_size.height() + 2 * kSelectionHandlePadding; | 115 int window_height = image_size.height() + 2 * kSelectionHandlePadding; |
111 // Due to the shape of the handle images, the window is aligned differently to | 116 relative_bounds_ = |
112 // the selection bound depending on the orientation. | 117 gfx::RectF(-kSelectionHandlePadding, |
113 int window_left = 0; | 118 kSelectionHandleVerticalVisualOffset - kSelectionHandlePadding, |
114 switch (orientation) { | 119 window_width, window_height); |
115 case TouchHandleOrientation::LEFT: | |
116 window_left = -image_size.width() - kSelectionHandlePadding; | |
117 break; | |
118 case TouchHandleOrientation::RIGHT: | |
119 window_left = -kSelectionHandlePadding; | |
120 break; | |
121 case TouchHandleOrientation::CENTER: | |
122 window_left = -window_width / 2; | |
123 break; | |
124 case TouchHandleOrientation::UNDEFINED: | |
125 NOTREACHED() << "Undefined handle orientation."; | |
126 break; | |
127 }; | |
128 relative_bounds_ = gfx::RectF( | |
129 window_left, | |
130 kSelectionHandleVerticalVisualOffset - kSelectionHandlePadding, | |
131 window_width, | |
132 window_height); | |
133 UpdateBounds(); | 120 UpdateBounds(); |
134 } | 121 } |
135 | 122 |
| 123 void TouchHandleDrawableAura::SetOrigin(const gfx::PointF& position) { |
| 124 origin_position_ = position; |
| 125 UpdateBounds(); |
| 126 } |
| 127 |
136 void TouchHandleDrawableAura::SetAlpha(float alpha) { | 128 void TouchHandleDrawableAura::SetAlpha(float alpha) { |
137 if (alpha == alpha_) | 129 if (alpha == alpha_) |
138 return; | 130 return; |
139 | 131 |
140 alpha_ = alpha; | 132 alpha_ = alpha; |
141 window_->layer()->SetOpacity(alpha_); | 133 window_->layer()->SetOpacity(alpha_); |
142 if (IsVisible()) | 134 if (IsVisible()) |
143 window_->Show(); | 135 window_->Show(); |
144 else | 136 else |
145 window_->Hide(); | 137 window_->Hide(); |
146 } | 138 } |
147 | 139 |
148 void TouchHandleDrawableAura::SetFocus(const gfx::PointF& position) { | |
149 focal_position_ = position; | |
150 UpdateBounds(); | |
151 } | |
152 | |
153 gfx::RectF TouchHandleDrawableAura::GetVisibleBounds() const { | 140 gfx::RectF TouchHandleDrawableAura::GetVisibleBounds() const { |
154 gfx::RectF bounds(window_->bounds()); | 141 gfx::RectF bounds(window_->bounds()); |
155 bounds.Inset(kSelectionHandlePadding, | 142 bounds.Inset(kSelectionHandlePadding, |
156 kSelectionHandlePadding + kSelectionHandleVerticalVisualOffset, | 143 kSelectionHandlePadding + kSelectionHandleVerticalVisualOffset, |
157 kSelectionHandlePadding, | 144 kSelectionHandlePadding, |
158 kSelectionHandlePadding); | 145 kSelectionHandlePadding); |
159 return bounds; | 146 return bounds; |
160 } | 147 } |
161 | 148 |
| 149 float TouchHandleDrawableAura::GetDrawableHorizontalPaddingRatio() const { |
| 150 // Aura does not have any transparent padding for its handle drawable. |
| 151 return 0.0f; |
| 152 } |
| 153 |
162 } // namespace ui | 154 } // namespace ui |
OLD | NEW |