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

Side by Side Diff: ui/base/test/scoped_preferred_scroller_style_mac.mm

Issue 1671313002: MacViews: Overlay Scrollbars with Show/Hide Animations (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 10 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
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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/base/test/scoped_preferred_scroller_style_legacy_mac.h" 5 #import "ui/base/test/scoped_preferred_scroller_style_mac.h"
6 6
7 #import "base/mac/sdk_forward_declarations.h" 7 #import "base/mac/sdk_forward_declarations.h"
8 #import "base/mac/scoped_objc_class_swizzler.h" 8 #import "base/mac/scoped_objc_class_swizzler.h"
9 9
10 using base::mac::ScopedObjCClassSwizzler; 10 using base::mac::ScopedObjCClassSwizzler;
11 11
12 namespace { 12 namespace {
13 13
14 void NotifyStyleChanged() { 14 void NotifyStyleChanged() {
15 [[NSNotificationCenter defaultCenter] 15 [[NSNotificationCenter defaultCenter]
16 postNotificationName:NSPreferredScrollerStyleDidChangeNotification 16 postNotificationName:NSPreferredScrollerStyleDidChangeNotification
17 object:nil]; 17 object:nil];
18 } 18 }
19 19
20 NSScrollerStyle GetScrollerStyle(bool overlay) {
21 return overlay ? NSScrollerStyleOverlay : NSScrollerStyleLegacy;
22 }
23
20 } // namespace 24 } // namespace
21 25
22 // Donates a testing implementation of +[NSScroller preferredScrollerStyle]. 26 // Donates a testing implementation of +[NSScroller preferredScrollerStyle] by
23 @interface FakeNSScrollerPreferredStyleDonor : NSObject 27 // returning NSScrollerStyleLegacy.
28 @interface FakeNSScrollerPreferredStyleLegacyDonor : NSObject
24 @end 29 @end
25 30
26 @implementation FakeNSScrollerPreferredStyleDonor 31 @implementation FakeNSScrollerPreferredStyleLegacyDonor
27 32
28 + (NSInteger)preferredScrollerStyle { 33 + (NSInteger)preferredScrollerStyle {
29 return NSScrollerStyleLegacy; 34 return NSScrollerStyleLegacy;
30 } 35 }
31 36
32 @end 37 @end
33 38
39 // Donates a testing implementation of +[NSScroller preferredScrollerStyle] by
40 // returning NSScrollerStyleOverlay.
41 @interface FakeNSScrollerPreferredStyleOverlayDonor : NSObject
42 @end
43
44 @implementation FakeNSScrollerPreferredStyleOverlayDonor
45
46 + (NSInteger)preferredScrollerStyle {
47 return NSScrollerStyleOverlay;
48 }
49
50 @end
51
34 namespace ui { 52 namespace ui {
35 namespace test { 53 namespace test {
36 54
37 ScopedPreferredScrollerStyleLegacy::ScopedPreferredScrollerStyleLegacy() { 55 ScopedPreferredScrollerStyle::ScopedPreferredScrollerStyle(bool overlay) :
56 overlay_(overlay) {
38 if (![NSScroller respondsToSelector:@selector(preferredScrollerStyle)]) 57 if (![NSScroller respondsToSelector:@selector(preferredScrollerStyle)])
39 return; 58 return;
40 59
41 NSInteger previous_style = [NSScroller preferredScrollerStyle]; 60 NSInteger previous_style = [NSScroller preferredScrollerStyle];
61 Class style_class = overlay_ ?
62 [FakeNSScrollerPreferredStyleOverlayDonor class] :
63 [FakeNSScrollerPreferredStyleLegacyDonor class];
42 64
43 swizzler_.reset( 65 swizzler_.reset(
44 new ScopedObjCClassSwizzler([NSScroller class], 66 new ScopedObjCClassSwizzler([NSScroller class],
45 [FakeNSScrollerPreferredStyleDonor class], 67 style_class,
46 @selector(preferredScrollerStyle))); 68 @selector(preferredScrollerStyle)));
47 69
48 if (previous_style != NSScrollerStyleLegacy) 70 if (previous_style != GetScrollerStyle(overlay_))
49 NotifyStyleChanged(); 71 NotifyStyleChanged();
50 } 72 }
51 73
52 ScopedPreferredScrollerStyleLegacy::~ScopedPreferredScrollerStyleLegacy() { 74 ScopedPreferredScrollerStyle::~ScopedPreferredScrollerStyle() {
53 if (!swizzler_) 75 if (!swizzler_)
54 return; // Handle 10.6, which wouldn't have swizzled anything. 76 return; // Handle 10.6, which wouldn't have swizzled anything.
55 77
56 swizzler_.reset(); 78 swizzler_.reset();
57 79
58 if ([NSScroller preferredScrollerStyle] != NSScrollerStyleLegacy) 80 if ([NSScroller preferredScrollerStyle] != GetScrollerStyle(overlay_))
59 NotifyStyleChanged(); 81 NotifyStyleChanged();
60 } 82 }
61 83
62 } // namespace test 84 } // namespace test
63 } // namespace ui 85 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698