OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 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 #import "ui/views/cocoa/bridged_content_view.h" | 5 #import "ui/views/cocoa/bridged_content_view.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #import "base/mac/mac_util.h" | 8 #import "base/mac/mac_util.h" |
9 #import "base/mac/scoped_nsobject.h" | 9 #import "base/mac/scoped_nsobject.h" |
10 #include "base/strings/sys_string_conversions.h" | 10 #include "base/strings/sys_string_conversions.h" |
(...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
338 DCHECK(newTooltipText.empty()); | 338 DCHECK(newTooltipText.empty()); |
339 } | 339 } |
340 if (newTooltipText != lastTooltipText_) { | 340 if (newTooltipText != lastTooltipText_) { |
341 std::swap(newTooltipText, lastTooltipText_); | 341 std::swap(newTooltipText, lastTooltipText_); |
342 [self setToolTipAtMousePoint:base::SysUTF16ToNSString(lastTooltipText_)]; | 342 [self setToolTipAtMousePoint:base::SysUTF16ToNSString(lastTooltipText_)]; |
343 } | 343 } |
344 } | 344 } |
345 | 345 |
346 - (void)updateWindowMask { | 346 - (void)updateWindowMask { |
347 DCHECK(![self inLiveResize]); | 347 DCHECK(![self inLiveResize]); |
348 DCHECK(base::mac::IsOS10_9()); | 348 DCHECK(!base::mac::IsAtLeastOS10_10()); |
349 DCHECK(hostedView_); | 349 DCHECK(hostedView_); |
350 | 350 |
351 views::Widget* widget = hostedView_->GetWidget(); | 351 views::Widget* widget = hostedView_->GetWidget(); |
352 if (!widget->non_client_view()) | 352 if (!widget->non_client_view()) |
353 return; | 353 return; |
354 | 354 |
355 const NSRect frameRect = [self bounds]; | 355 const NSRect frameRect = [self bounds]; |
356 gfx::Path mask; | 356 gfx::Path mask; |
357 widget->non_client_view()->GetWindowMask(gfx::Size(frameRect.size), &mask); | 357 widget->non_client_view()->GetWindowMask(gfx::Size(frameRect.size), &mask); |
358 if (mask.isEmpty()) | 358 if (mask.isEmpty()) |
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
599 | 599 |
600 hostedView_->SetSize(gfx::Size(newSize.width, newSize.height)); | 600 hostedView_->SetSize(gfx::Size(newSize.width, newSize.height)); |
601 } | 601 } |
602 | 602 |
603 - (void)viewDidEndLiveResize { | 603 - (void)viewDidEndLiveResize { |
604 [super viewDidEndLiveResize]; | 604 [super viewDidEndLiveResize]; |
605 | 605 |
606 // We prevent updating the window mask and clipping the border around the | 606 // We prevent updating the window mask and clipping the border around the |
607 // view, during a live resize. Hence update the window mask and redraw the | 607 // view, during a live resize. Hence update the window mask and redraw the |
608 // view after resize has completed. | 608 // view after resize has completed. |
609 if (base::mac::IsOS10_9()) { | 609 if (!base::mac::IsAtLeastOS10_10()) { |
610 [self updateWindowMask]; | 610 [self updateWindowMask]; |
611 [self setNeedsDisplay:YES]; | 611 [self setNeedsDisplay:YES]; |
612 } | 612 } |
613 } | 613 } |
614 | 614 |
615 - (void)drawRect:(NSRect)dirtyRect { | 615 - (void)drawRect:(NSRect)dirtyRect { |
616 // Note that BridgedNativeWidget uses -[NSWindow setAutodisplay:NO] to | 616 // Note that BridgedNativeWidget uses -[NSWindow setAutodisplay:NO] to |
617 // suppress calls to this when the window is known to be hidden. | 617 // suppress calls to this when the window is known to be hidden. |
618 if (!hostedView_) | 618 if (!hostedView_) |
619 return; | 619 return; |
620 | 620 |
621 if (drawMenuBackgroundForBlur_) { | 621 if (drawMenuBackgroundForBlur_) { |
622 const CGFloat radius = views::MenuConfig::instance().corner_radius; | 622 const CGFloat radius = views::MenuConfig::instance().corner_radius; |
623 [skia::SkColorToSRGBNSColor(0x01000000) set]; | 623 [skia::SkColorToSRGBNSColor(0x01000000) set]; |
624 [[NSBezierPath bezierPathWithRoundedRect:[self bounds] | 624 [[NSBezierPath bezierPathWithRoundedRect:[self bounds] |
625 xRadius:radius | 625 xRadius:radius |
626 yRadius:radius] fill]; | 626 yRadius:radius] fill]; |
627 } | 627 } |
628 | 628 |
629 // On OS versions earlier than Yosemite, to generate a drop shadow, we set an | 629 // On OS versions earlier than Yosemite, to generate a drop shadow, we set an |
630 // opaque background. This causes windows with non rectangular shapes to have | 630 // opaque background. This causes windows with non rectangular shapes to have |
631 // square corners. To get around this, fill the path outside the window | 631 // square corners. To get around this, fill the path outside the window |
632 // boundary with clearColor and tell Cococa to regenerate drop shadow. See | 632 // boundary with clearColor and tell Cococa to regenerate drop shadow. See |
633 // crbug.com/543671. | 633 // crbug.com/543671. |
634 if (windowMask_ && ![self inLiveResize] && | 634 if (windowMask_ && ![self inLiveResize] && |
635 !IsRectInsidePath(dirtyRect, windowMask_)) { | 635 !IsRectInsidePath(dirtyRect, windowMask_)) { |
636 DCHECK(base::mac::IsOS10_9()); | 636 DCHECK(!base::mac::IsAtLeastOS10_10()); |
637 gfx::ScopedNSGraphicsContextSaveGState state; | 637 gfx::ScopedNSGraphicsContextSaveGState state; |
638 | 638 |
639 // The outer rectangular path corresponding to the window. | 639 // The outer rectangular path corresponding to the window. |
640 NSBezierPath* outerPath = [NSBezierPath bezierPathWithRect:[self bounds]]; | 640 NSBezierPath* outerPath = [NSBezierPath bezierPathWithRect:[self bounds]]; |
641 | 641 |
642 [outerPath appendBezierPath:windowMask_]; | 642 [outerPath appendBezierPath:windowMask_]; |
643 [outerPath setWindingRule:NSEvenOddWindingRule]; | 643 [outerPath setWindingRule:NSEvenOddWindingRule]; |
644 [[NSGraphicsContext currentContext] | 644 [[NSGraphicsContext currentContext] |
645 setCompositingOperation:NSCompositeCopy]; | 645 setCompositingOperation:NSCompositeCopy]; |
646 [[NSColor clearColor] set]; | 646 [[NSColor clearColor] set]; |
(...skipping 709 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1356 } | 1356 } |
1357 | 1357 |
1358 return [super accessibilityAttributeValue:attribute]; | 1358 return [super accessibilityAttributeValue:attribute]; |
1359 } | 1359 } |
1360 | 1360 |
1361 - (id)accessibilityHitTest:(NSPoint)point { | 1361 - (id)accessibilityHitTest:(NSPoint)point { |
1362 return [hostedView_->GetNativeViewAccessible() accessibilityHitTest:point]; | 1362 return [hostedView_->GetNativeViewAccessible() accessibilityHitTest:point]; |
1363 } | 1363 } |
1364 | 1364 |
1365 @end | 1365 @end |
OLD | NEW |