OLD | NEW |
---|---|
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 "chrome/browser/ui/panels/panel_window_controller_cocoa.h" | 5 #include "chrome/browser/ui/panels/panel_window_controller_cocoa.h" |
6 | 6 |
7 #import <Cocoa/Cocoa.h> | 7 #import <Cocoa/Cocoa.h> |
8 | 8 |
9 #include "base/auto_reset.h" | 9 #include "base/auto_reset.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
165 } | 165 } |
166 return self; | 166 return self; |
167 } | 167 } |
168 | 168 |
169 - (BOOL)acceptsFirstMouse:(NSEvent*)event { | 169 - (BOOL)acceptsFirstMouse:(NSEvent*)event { |
170 return YES; | 170 return YES; |
171 } | 171 } |
172 | 172 |
173 // |pointInWindow| is in window coordinates. | 173 // |pointInWindow| is in window coordinates. |
174 - (panel::ResizingSides)edgeHitTest:(NSPoint)pointInWindow { | 174 - (panel::ResizingSides)edgeHitTest:(NSPoint)pointInWindow { |
175 DCHECK(panel_->CanResizeByMouse()); | 175 panel::Resizability resizability = panel_->CanResizeByMouse(); |
176 DCHECK_NE(panel::NOT_RESIZABLE, resizability); | |
176 | 177 |
177 NSPoint point = [self convertPoint:pointInWindow fromView:nil]; | 178 NSPoint point = [self convertPoint:pointInWindow fromView:nil]; |
178 BOOL flipped = [self isFlipped]; | 179 BOOL flipped = [self isFlipped]; |
179 if (NSMouseInRect(point, leftCursorRect_, flipped)) | 180 if (NSMouseInRect(point, leftCursorRect_, flipped)) |
180 return panel::RESIZE_LEFT; | 181 return panel::RESIZE_LEFT; |
181 if (NSMouseInRect(point, rightCursorRect_, flipped)) | 182 if (NSMouseInRect(point, rightCursorRect_, flipped)) |
182 return panel::RESIZE_RIGHT; | 183 return panel::RESIZE_RIGHT; |
183 if (NSMouseInRect(point, topCursorRect_, flipped)) | 184 if (NSMouseInRect(point, topCursorRect_, flipped)) |
184 return panel::RESIZE_TOP; | 185 return panel::RESIZE_TOP; |
185 if (NSMouseInRect(point, bottomCursorRect_, flipped)) | |
186 return panel::RESIZE_BOTTOM; | |
187 if (NSMouseInRect(point, topLeftCursorRect_, flipped)) | 186 if (NSMouseInRect(point, topLeftCursorRect_, flipped)) |
188 return panel::RESIZE_TOP_LEFT; | 187 return panel::RESIZE_TOP_LEFT; |
189 if (NSMouseInRect(point, topRightCursorRect_, flipped)) | 188 if (NSMouseInRect(point, topRightCursorRect_, flipped)) |
190 return panel::RESIZE_TOP_RIGHT; | 189 return panel::RESIZE_TOP_RIGHT; |
191 if (NSMouseInRect(point, bottomLeftCursorRect_, flipped)) | 190 |
192 return panel::RESIZE_BOTTOM_LEFT; | 191 // Special handling if bottom edge is not resizable. |
193 if (NSMouseInRect(point, bottomRightCursorRect_, flipped)) | 192 if (panel::ALL_SIDES == resizability) { |
194 return panel::RESIZE_BOTTOM_RIGHT; | 193 if (NSMouseInRect(point, bottomCursorRect_, flipped)) |
194 return panel::RESIZE_BOTTOM; | |
195 if (NSMouseInRect(point, bottomLeftCursorRect_, flipped)) | |
196 return panel::RESIZE_BOTTOM_LEFT; | |
197 if (NSMouseInRect(point, bottomRightCursorRect_, flipped)) | |
198 return panel::RESIZE_BOTTOM_RIGHT; | |
199 } else if (panel::ALL_SIDES_EXCEPT_BOTTOM == resizability) { | |
200 if (NSMouseInRect(point, bottomLeftCursorRect_, flipped)) | |
Dmitry Titov
2012/04/13 02:55:45
Why do we want the bottom corners to do horizontal
jennb
2012/04/13 16:39:43
I tried ignoring the bottom corners, but it didn't
| |
201 return panel::RESIZE_LEFT; | |
202 if (NSMouseInRect(point, bottomRightCursorRect_, flipped)) | |
203 return panel::RESIZE_RIGHT; | |
204 } | |
195 | 205 |
196 return panel::RESIZE_NONE; | 206 return panel::RESIZE_NONE; |
197 } | 207 } |
198 | 208 |
199 // NSWindow uses this method to figure out if this view is under the mouse | 209 // NSWindow uses this method to figure out if this view is under the mouse |
200 // and hence the one to handle the incoming mouse event. | 210 // and hence the one to handle the incoming mouse event. |
201 // Since this view covers the whole panel, it is asked first. | 211 // Since this view covers the whole panel, it is asked first. |
202 // See if this is the mouse event we are interested in (in the resize areas) | 212 // See if this is the mouse event we are interested in (in the resize areas) |
203 // and return 'nil' to let NSWindow find another candidate otherwise. | 213 // and return 'nil' to let NSWindow find another candidate otherwise. |
204 // |point| is in coordinate system of the parent view. | 214 // |point| is in coordinate system of the parent view. |
205 - (NSView*)hitTest:(NSPoint)point { | 215 - (NSView*)hitTest:(NSPoint)point { |
206 // If panel is not resizable, let the mouse events fall through. | 216 // If panel is not resizable, let the mouse events fall through. |
207 if (!panel_->CanResizeByMouse()) | 217 if (panel::NOT_RESIZABLE == panel_->CanResizeByMouse()) |
208 return nil; | 218 return nil; |
209 | 219 |
210 NSPoint pointInWindow = [[self superview] convertPoint:point toView:nil]; | 220 NSPoint pointInWindow = [[self superview] convertPoint:point toView:nil]; |
211 return [self edgeHitTest:pointInWindow] == panel::RESIZE_NONE ? nil : self; | 221 return [self edgeHitTest:pointInWindow] == panel::RESIZE_NONE ? nil : self; |
212 } | 222 } |
213 | 223 |
214 - (void)mouseDown:(NSEvent*)event { | 224 - (void)mouseDown:(NSEvent*)event { |
215 // If the panel is not resizable, hitTest should have failed and no mouse | 225 // If the panel is not resizable, hitTest should have failed and no mouse |
216 // events should have came here. | 226 // events should have came here. |
217 DCHECK(panel_->CanResizeByMouse()); | 227 DCHECK_NE(panel::NOT_RESIZABLE, panel_->CanResizeByMouse()); |
218 [self prepareForDrag:event]; | 228 [self prepareForDrag:event]; |
219 } | 229 } |
220 | 230 |
221 - (void)mouseUp:(NSEvent*)event { | 231 - (void)mouseUp:(NSEvent*)event { |
222 // The mouseUp while in drag should be processed by nested message loop | 232 // The mouseUp while in drag should be processed by nested message loop |
223 // in mouseDragged: method. | 233 // in mouseDragged: method. |
224 DCHECK(dragState_ != PANEL_DRAG_IN_PROGRESS); | 234 DCHECK(dragState_ != PANEL_DRAG_IN_PROGRESS); |
225 // Cleanup in case the actual drag was not started (because of threshold). | 235 // Cleanup in case the actual drag was not started (because of threshold). |
226 [self cleanupAfterDrag]; | 236 [self cleanupAfterDrag]; |
227 } | 237 } |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
358 panel_->manager()->ResizeByMouse( | 368 panel_->manager()->ResizeByMouse( |
359 cocoa_utils::ConvertPointFromCocoaCoordinates(mouseLocationScreen)); | 369 cocoa_utils::ConvertPointFromCocoaCoordinates(mouseLocationScreen)); |
360 } | 370 } |
361 | 371 |
362 - (void)endResize:(BOOL)cancelled { | 372 - (void)endResize:(BOOL)cancelled { |
363 DCHECK(dragState_ == PANEL_DRAG_IN_PROGRESS); | 373 DCHECK(dragState_ == PANEL_DRAG_IN_PROGRESS); |
364 panel_->manager()->EndResizingByMouse(cancelled); | 374 panel_->manager()->EndResizingByMouse(cancelled); |
365 } | 375 } |
366 | 376 |
367 - (void)resetCursorRects { | 377 - (void)resetCursorRects { |
368 if(!panel_->CanResizeByMouse()) | 378 if(panel::NOT_RESIZABLE == panel_->CanResizeByMouse()) |
369 return; | 379 return; |
370 | 380 |
371 NSRect bounds = [self bounds]; | 381 NSRect bounds = [self bounds]; |
372 | 382 |
373 // Left vertical edge. | 383 // Left vertical edge. |
374 leftCursorRect_ = NSMakeRect(NSMinX(bounds), | 384 leftCursorRect_ = NSMakeRect(NSMinX(bounds), |
375 NSMinY(bounds) + kWidthOfMouseResizeArea, | 385 NSMinY(bounds) + kWidthOfMouseResizeArea, |
376 kWidthOfMouseResizeArea, | 386 kWidthOfMouseResizeArea, |
377 NSHeight(bounds) - 2 * kWidthOfMouseResizeArea); | 387 NSHeight(bounds) - 2 * kWidthOfMouseResizeArea); |
378 [self addCursorRect:leftCursorRect_ cursor:eastWestCursor_]; | 388 [self addCursorRect:leftCursorRect_ cursor:eastWestCursor_]; |
(...skipping 695 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1074 if (![self isWindowLoaded]) | 1084 if (![self isWindowLoaded]) |
1075 return; | 1085 return; |
1076 [[self window] invalidateCursorRectsForView:overlayView_]; | 1086 [[self window] invalidateCursorRectsForView:overlayView_]; |
1077 } | 1087 } |
1078 | 1088 |
1079 - (BOOL)isActivationByClickingTitlebarEnabled { | 1089 - (BOOL)isActivationByClickingTitlebarEnabled { |
1080 return !windowShim_->panel()->always_on_top(); | 1090 return !windowShim_->panel()->always_on_top(); |
1081 } | 1091 } |
1082 | 1092 |
1083 @end | 1093 @end |
OLD | NEW |