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/views/tabs/tab.h" | 5 #include "chrome/browser/ui/views/tabs/tab.h" |
6 | 6 |
7 #include <limits> | 7 #include <limits> |
8 | 8 |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/debug/alias.h" | 10 #include "base/debug/alias.h" |
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
244 | 244 |
245 // Number of steps in the immersive mode loading animation. | 245 // Number of steps in the immersive mode loading animation. |
246 const int kImmersiveLoadingStepCount = 32; | 246 const int kImmersiveLoadingStepCount = 32; |
247 | 247 |
248 // Scale to resize the current favicon by when projecting. | 248 // Scale to resize the current favicon by when projecting. |
249 const double kProjectingFaviconResizeScale = 0.75; | 249 const double kProjectingFaviconResizeScale = 0.75; |
250 | 250 |
251 // Scale to resize the projection sheet glow by. | 251 // Scale to resize the projection sheet glow by. |
252 const double kProjectingGlowResizeScale = 2.0; | 252 const double kProjectingGlowResizeScale = 2.0; |
253 | 253 |
| 254 const char kTabCloseButtonName[] = "TabCloseButton"; |
| 255 |
254 void DrawIconAtLocation(gfx::Canvas* canvas, | 256 void DrawIconAtLocation(gfx::Canvas* canvas, |
255 const gfx::ImageSkia& image, | 257 const gfx::ImageSkia& image, |
256 int image_offset, | 258 int image_offset, |
257 int dst_x, | 259 int dst_x, |
258 int dst_y, | 260 int dst_y, |
259 int icon_width, | 261 int icon_width, |
260 int icon_height, | 262 int icon_height, |
261 bool filter, | 263 bool filter, |
262 const SkPaint& paint) { | 264 const SkPaint& paint) { |
263 // NOTE: the clipping is a work around for 69528, it shouldn't be necessary. | 265 // NOTE: the clipping is a work around for 69528, it shouldn't be necessary. |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
353 // TabCloseButton | 355 // TabCloseButton |
354 // | 356 // |
355 // This is a Button subclass that causes middle clicks to be forwarded to the | 357 // This is a Button subclass that causes middle clicks to be forwarded to the |
356 // parent View by explicitly not handling them in OnMousePressed. | 358 // parent View by explicitly not handling them in OnMousePressed. |
357 class Tab::TabCloseButton : public views::ImageButton { | 359 class Tab::TabCloseButton : public views::ImageButton { |
358 public: | 360 public: |
359 explicit TabCloseButton(Tab* tab) : views::ImageButton(tab), tab_(tab) {} | 361 explicit TabCloseButton(Tab* tab) : views::ImageButton(tab), tab_(tab) {} |
360 virtual ~TabCloseButton() {} | 362 virtual ~TabCloseButton() {} |
361 | 363 |
362 // Overridden from views::View. | 364 // Overridden from views::View. |
363 virtual View* GetEventHandlerForPoint(const gfx::Point& point) OVERRIDE { | 365 virtual View* GetEventHandlerForRect(const gfx::Rect& rect) OVERRIDE { |
| 366 if (!View::UsePointBasedTargeting(rect)) |
| 367 return View::GetEventHandlerForRect(rect); |
| 368 |
364 // Ignore the padding set on the button. | 369 // Ignore the padding set on the button. |
365 gfx::Rect rect = GetContentsBounds(); | 370 gfx::Rect contents_bounds = GetContentsBounds(); |
366 rect.set_x(GetMirroredXForRect(rect)); | 371 contents_bounds.set_x(GetMirroredXForRect(contents_bounds)); |
367 | 372 |
368 #if defined(USE_ASH) | 373 #if defined(USE_ASH) |
369 // Include the padding in hit-test for touch events. | 374 // Include the padding in hit-test for touch events. |
370 if (aura::Env::GetInstance()->is_touch_down()) | 375 if (aura::Env::GetInstance()->is_touch_down()) |
371 rect = GetLocalBounds(); | 376 contents_bounds = GetLocalBounds(); |
372 #elif defined(OS_WIN) | 377 #elif defined(OS_WIN) |
373 // TODO(sky): Use local-bounds if a touch-point is active. | 378 // TODO(sky): Use local-bounds if a touch-point is active. |
374 // http://crbug.com/145258 | 379 // http://crbug.com/145258 |
375 #endif | 380 #endif |
376 | 381 |
377 return rect.Contains(point) ? this : parent(); | 382 return contents_bounds.Intersects(rect) ? this : parent(); |
378 } | 383 } |
379 | 384 |
380 // Overridden from views::View. | 385 // Overridden from views::View. |
381 virtual View* GetTooltipHandlerForPoint(const gfx::Point& point) OVERRIDE { | 386 virtual View* GetTooltipHandlerForPoint(const gfx::Point& point) OVERRIDE { |
382 // Tab close button has no children, so tooltip handler should be the same | 387 // Tab close button has no children, so tooltip handler should be the same |
383 // as the event handler. | 388 // as the event handler. |
384 // In addition, a hit test has to be performed for the point (as | 389 // In addition, a hit test has to be performed for the point (as |
385 // GetTooltipHandlerForPoint() is responsible for it). | 390 // GetTooltipHandlerForPoint() is responsible for it). |
386 if (!HitTestPoint(point)) | 391 if (!HitTestPoint(point)) |
387 return NULL; | 392 return NULL; |
(...skipping 22 matching lines...) Expand all Loading... |
410 CustomButton::OnMouseReleased(event); | 415 CustomButton::OnMouseReleased(event); |
411 } | 416 } |
412 | 417 |
413 virtual void OnGestureEvent(ui::GestureEvent* event) OVERRIDE { | 418 virtual void OnGestureEvent(ui::GestureEvent* event) OVERRIDE { |
414 // Consume all gesture events here so that the parent (Tab) does not | 419 // Consume all gesture events here so that the parent (Tab) does not |
415 // start consuming gestures. | 420 // start consuming gestures. |
416 ImageButton::OnGestureEvent(event); | 421 ImageButton::OnGestureEvent(event); |
417 event->SetHandled(); | 422 event->SetHandled(); |
418 } | 423 } |
419 | 424 |
| 425 virtual const char* GetClassName() const OVERRIDE { |
| 426 return kTabCloseButtonName; |
| 427 } |
| 428 |
420 private: | 429 private: |
421 Tab* tab_; | 430 Tab* tab_; |
422 | 431 |
423 DISALLOW_COPY_AND_ASSIGN(TabCloseButton); | 432 DISALLOW_COPY_AND_ASSIGN(TabCloseButton); |
424 }; | 433 }; |
425 | 434 |
426 //////////////////////////////////////////////////////////////////////////////// | 435 //////////////////////////////////////////////////////////////////////////////// |
427 // ImageCacheEntry | 436 // ImageCacheEntry |
428 | 437 |
429 Tab::ImageCacheEntry::ImageCacheEntry() | 438 Tab::ImageCacheEntry::ImageCacheEntry() |
(...skipping 1404 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1834 const gfx::ImageSkia& image) { | 1843 const gfx::ImageSkia& image) { |
1835 DCHECK_NE(scale_factor, ui::SCALE_FACTOR_NONE); | 1844 DCHECK_NE(scale_factor, ui::SCALE_FACTOR_NONE); |
1836 ImageCacheEntry entry; | 1845 ImageCacheEntry entry; |
1837 entry.resource_id = resource_id; | 1846 entry.resource_id = resource_id; |
1838 entry.scale_factor = scale_factor; | 1847 entry.scale_factor = scale_factor; |
1839 entry.image = image; | 1848 entry.image = image; |
1840 image_cache_->push_front(entry); | 1849 image_cache_->push_front(entry); |
1841 if (image_cache_->size() > kMaxImageCacheSize) | 1850 if (image_cache_->size() > kMaxImageCacheSize) |
1842 image_cache_->pop_back(); | 1851 image_cache_->pop_back(); |
1843 } | 1852 } |
OLD | NEW |