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

Side by Side Diff: ash/wm/partial_screenshot_view.cc

Issue 13006010: Add support for taking partial screenshot using touch (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: fixed nit Created 7 years, 9 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 unified diff | Download patch
« no previous file with comments | « ash/wm/partial_screenshot_view.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "ash/wm/partial_screenshot_view.h" 5 #include "ash/wm/partial_screenshot_view.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "ash/display/mouse_cursor_event_filter.h" 9 #include "ash/display/mouse_cursor_event_filter.h"
10 #include "ash/screenshot_delegate.h" 10 #include "ash/screenshot_delegate.h"
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 } 133 }
134 134
135 gfx::Rect PartialScreenshotView::GetScreenshotRect() const { 135 gfx::Rect PartialScreenshotView::GetScreenshotRect() const {
136 int left = std::min(start_position_.x(), current_position_.x()); 136 int left = std::min(start_position_.x(), current_position_.x());
137 int top = std::min(start_position_.y(), current_position_.y()); 137 int top = std::min(start_position_.y(), current_position_.y());
138 int width = ::abs(start_position_.x() - current_position_.x()); 138 int width = ::abs(start_position_.x() - current_position_.x());
139 int height = ::abs(start_position_.y() - current_position_.y()); 139 int height = ::abs(start_position_.y() - current_position_.y());
140 return gfx::Rect(left, top, width, height); 140 return gfx::Rect(left, top, width, height);
141 } 141 }
142 142
143 void PartialScreenshotView::OnSelectionStarted(const gfx::Point& position) {
144 start_position_ = position;
145 }
146
147 void PartialScreenshotView::OnSelectionChanged(const gfx::Point& position) {
148 current_position_ = position;
sky 2013/03/25 23:42:29 Can this early out if is_dragging_ and current_pos
Yufeng Shen (Slow to review) 2013/03/26 01:24:03 Done.
149 SchedulePaint();
150 is_dragging_ = true;
151 }
152
153 void PartialScreenshotView::OnSelectionFinished() {
154 overlay_delegate_->Cancel();
155 if (!is_dragging_)
156 return;
157
158 is_dragging_ = false;
159 if (screenshot_delegate_) {
160 aura::RootWindow *root_window =
161 GetWidget()->GetNativeWindow()->GetRootWindow();
162 screenshot_delegate_->HandleTakePartialScreenshot(
163 root_window,
164 gfx::IntersectRects(root_window->bounds(), GetScreenshotRect()));
165 }
166 }
167
143 gfx::NativeCursor PartialScreenshotView::GetCursor( 168 gfx::NativeCursor PartialScreenshotView::GetCursor(
144 const ui::MouseEvent& event) { 169 const ui::MouseEvent& event) {
145 // Always use "crosshair" cursor. 170 // Always use "crosshair" cursor.
146 return ui::kCursorCross; 171 return ui::kCursorCross;
147 } 172 }
148 173
149 void PartialScreenshotView::OnPaint(gfx::Canvas* canvas) { 174 void PartialScreenshotView::OnPaint(gfx::Canvas* canvas) {
150 if (is_dragging_) { 175 if (is_dragging_) {
151 // Screenshot area representation: black rectangle with white 176 // Screenshot area representation: black rectangle with white
152 // rectangle inside. To avoid capturing these rectangles when mouse 177 // rectangle inside. To avoid capturing these rectangles when mouse
153 // release, they should be outside of the actual capturing area. 178 // release, they should be outside of the actual capturing area.
154 gfx::Rect screenshot_rect = GetScreenshotRect(); 179 gfx::Rect screenshot_rect = GetScreenshotRect();
155 screenshot_rect.Inset(-1, -1, -1, -1); 180 screenshot_rect.Inset(-1, -1, -1, -1);
156 canvas->DrawRect(screenshot_rect, SK_ColorWHITE); 181 canvas->DrawRect(screenshot_rect, SK_ColorWHITE);
157 screenshot_rect.Inset(-1, -1, -1, -1); 182 screenshot_rect.Inset(-1, -1, -1, -1);
158 canvas->DrawRect(screenshot_rect, SK_ColorBLACK); 183 canvas->DrawRect(screenshot_rect, SK_ColorBLACK);
159 } 184 }
160 } 185 }
161 186
162 bool PartialScreenshotView::OnMousePressed(const ui::MouseEvent& event) { 187 bool PartialScreenshotView::OnMousePressed(const ui::MouseEvent& event) {
163 // Prevent moving across displays during drag. Capturing a screenshot across 188 // Prevent moving across displays during drag. Capturing a screenshot across
164 // the displays is not supported yet. 189 // the displays is not supported yet.
165 // TODO(mukai): remove this restriction. 190 // TODO(mukai): remove this restriction.
166 internal::MouseCursorEventFilter* mouse_cursor_filter = 191 internal::MouseCursorEventFilter* mouse_cursor_filter =
167 Shell::GetInstance()->mouse_cursor_filter(); 192 Shell::GetInstance()->mouse_cursor_filter();
168 mouse_cursor_filter->set_mouse_warp_mode( 193 mouse_cursor_filter->set_mouse_warp_mode(
169 internal::MouseCursorEventFilter::WARP_NONE); 194 internal::MouseCursorEventFilter::WARP_NONE);
170 start_position_ = event.location(); 195 OnSelectionStarted(event.location());
171 return true; 196 return true;
172 } 197 }
173 198
174 bool PartialScreenshotView::OnMouseDragged(const ui::MouseEvent& event) { 199 bool PartialScreenshotView::OnMouseDragged(const ui::MouseEvent& event) {
175 current_position_ = event.location(); 200 OnSelectionChanged(event.location());
176 SchedulePaint();
177 is_dragging_ = true;
178 return true; 201 return true;
179 } 202 }
180 203
181 bool PartialScreenshotView::OnMouseWheel(const ui::MouseWheelEvent& event) { 204 bool PartialScreenshotView::OnMouseWheel(const ui::MouseWheelEvent& event) {
182 // Do nothing but do not propagate events futhermore. 205 // Do nothing but do not propagate events futhermore.
183 return true; 206 return true;
184 } 207 }
185 208
186 void PartialScreenshotView::OnMouseReleased(const ui::MouseEvent& event) { 209 void PartialScreenshotView::OnMouseReleased(const ui::MouseEvent& event) {
187 overlay_delegate_->Cancel(); 210 OnSelectionFinished();
sky 2013/03/25 23:42:29 What about if capture is lost?
Yufeng Shen (Slow to review) 2013/03/26 01:24:03 Added OnMouseCaptureLost() which basically cancels
188 if (!is_dragging_) 211 }
189 return;
190 212
191 is_dragging_ = false; 213 void PartialScreenshotView::OnGestureEvent(ui::GestureEvent* event) {
192 if (screenshot_delegate_) { 214 gfx::Point position = event->location();
sky 2013/03/25 23:42:29 const gfx::Point&, although you only use this in t
Yufeng Shen (Slow to review) 2013/03/26 01:24:03 Done.
193 aura::RootWindow *root_window = 215 switch(event->type()) {
194 GetWidget()->GetNativeWindow()->GetRootWindow(); 216 case ui::ET_GESTURE_TAP_DOWN:
195 screenshot_delegate_->HandleTakePartialScreenshot( 217 OnSelectionStarted(position);
196 root_window, 218 break;
197 gfx::IntersectRects(root_window->bounds(), GetScreenshotRect())); 219 case ui::ET_GESTURE_SCROLL_UPDATE:
220 OnSelectionChanged(position);
221 break;
222 case ui::ET_GESTURE_SCROLL_END:
223 case ui::ET_SCROLL_FLING_START:
224 OnSelectionFinished();
225 break;
226 default:
227 break;
198 } 228 }
229
230 event->SetHandled();
199 } 231 }
200 232
201 } // namespace ash 233 } // namespace ash
OLDNEW
« no previous file with comments | « ash/wm/partial_screenshot_view.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698