| OLD | NEW | 
|   1 /* |   1 /* | 
|   2  * Copyright (C) 2011 Apple Inc. All Rights Reserved. |   2  * Copyright (C) 2011 Apple Inc. All Rights Reserved. | 
|   3  * Copyright (C) 2011 Google Inc. All Rights Reserved. |   3  * Copyright (C) 2011 Google Inc. All Rights Reserved. | 
|   4  * |   4  * | 
|   5  * Redistribution and use in source and binary forms, with or without |   5  * Redistribution and use in source and binary forms, with or without | 
|   6  * modification, are permitted provided that the following conditions |   6  * modification, are permitted provided that the following conditions | 
|   7  * are met: |   7  * are met: | 
|   8  * 1. Redistributions of source code must retain the above copyright |   8  * 1. Redistributions of source code must retain the above copyright | 
|   9  *    notice, this list of conditions and the following disclaimer. |   9  *    notice, this list of conditions and the following disclaimer. | 
|  10  * 2. Redistributions in binary form must reproduce the above copyright |  10  * 2. Redistributions in binary form must reproduce the above copyright | 
| (...skipping 11 matching lines...) Expand all  Loading... | 
|  22  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |  22  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 
|  23  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |  23  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 
|  24  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |  24  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 
|  25  */ |  25  */ | 
|  26  |  26  | 
|  27  |  27  | 
|  28 #include "config.h" |  28 #include "config.h" | 
|  29 #include "RuntimeEnabledFeatures.h" |  29 #include "RuntimeEnabledFeatures.h" | 
|  30 #include "core/platform/mac/NSScrollerImpDetails.h" |  30 #include "core/platform/mac/NSScrollerImpDetails.h" | 
|  31  |  31  | 
 |  32 namespace { | 
 |  33  | 
 |  34 // Declare notification names from the 10.7 SDK. | 
 |  35 #if !defined(MAC_OS_X_VERSION_10_7) || MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_V
    ERSION_10_7 | 
 |  36 NSString* NSPreferredScrollerStyleDidChangeNotification = @"NSPreferredScrollerS
    tyleDidChangeNotification"; | 
 |  37 #endif | 
 |  38  | 
 |  39 // Storing the current NSScrollerStyle as a global is appreciably faster than | 
 |  40 // having it be a property of ScrollerStylerObserver. | 
 |  41 NSScrollerStyle g_scrollerStyle = NSScrollerStyleLegacy; | 
 |  42  | 
 |  43 }  // anonymous namespace | 
 |  44  | 
 |  45 @interface ScrollerStyleObserver : NSObject | 
 |  46 - (id)init; | 
 |  47 - (void)preferredScrollerStyleDidChange:(NSNotification*)notification; | 
 |  48 @end | 
 |  49  | 
 |  50 @implementation ScrollerStyleObserver | 
 |  51 - (id)init | 
 |  52 { | 
 |  53     if ((self = [super init])) { | 
 |  54         if ([NSScroller respondsToSelector:@selector(preferredScrollerStyle)]) { | 
 |  55             g_scrollerStyle = [NSScroller preferredScrollerStyle]; | 
 |  56             NSNotificationCenter* center = [NSNotificationCenter defaultCenter]; | 
 |  57             [center addObserver:self | 
 |  58                        selector:@selector(preferredScrollerStyleDidChange:) | 
 |  59                            name:NSPreferredScrollerStyleDidChangeNotification | 
 |  60                          object:nil]; | 
 |  61         } | 
 |  62     } | 
 |  63     return self; | 
 |  64 } | 
 |  65  | 
 |  66 - (void)preferredScrollerStyleDidChange:(NSNotification*)notification | 
 |  67 { | 
 |  68     g_scrollerStyle = [NSScroller preferredScrollerStyle]; | 
 |  69 } | 
 |  70 @end | 
 |  71  | 
|  32 namespace WebCore { |  72 namespace WebCore { | 
|  33  |  73  | 
|  34 bool isScrollbarOverlayAPIAvailable() |  74 bool isScrollbarOverlayAPIAvailable() | 
|  35 { |  75 { | 
|  36     static bool apiAvailable; |  76     static bool apiAvailable = | 
|  37     static bool shouldInitialize = true; |  77         [NSClassFromString(@"NSScrollerImp") respondsToSelector:@selector(scroll
    erImpWithStyle:controlSize:horizontal:replacingScrollerImp:)] | 
|  38     if (shouldInitialize) { |  78         && [NSClassFromString(@"NSScrollerImpPair") instancesRespondToSelector:@
    selector(scrollerStyle)]; | 
|  39         shouldInitialize = false; |  | 
|  40         Class scrollerImpClass = NSClassFromString(@"NSScrollerImp"); |  | 
|  41         Class scrollerImpPairClass = NSClassFromString(@"NSScrollerImpPair"); |  | 
|  42         apiAvailable = [scrollerImpClass respondsToSelector:@selector(scrollerIm
    pWithStyle:controlSize:horizontal:replacingScrollerImp:)] |  | 
|  43                        && [scrollerImpPairClass instancesRespondToSelector:@sele
    ctor(scrollerStyle)]; |  | 
|  44     } |  | 
|  45     return apiAvailable; |  79     return apiAvailable; | 
|  46 } |  80 } | 
|  47  |  81  | 
|  48 NSScrollerStyle recommendedScrollerStyle() { |  82 NSScrollerStyle recommendedScrollerStyle() | 
 |  83 { | 
|  49     if (RuntimeEnabledFeatures::overlayScrollbarsEnabled()) |  84     if (RuntimeEnabledFeatures::overlayScrollbarsEnabled()) | 
|  50         return NSScrollerStyleOverlay; |  85         return NSScrollerStyleOverlay; | 
|  51     if ([NSScroller respondsToSelector:@selector(preferredScrollerStyle)]) |  86  | 
|  52         return [NSScroller preferredScrollerStyle]; |  87     // The ScrollerStyleObserver will update g_scrollerStyle at init and when ne
    eded. | 
|  53     return NSScrollerStyleLegacy; |  88     // This function is hot. | 
 |  89     // http://crbug.com/303205 | 
 |  90     static ScrollerStyleObserver* scrollerStyleObserver = [[ScrollerStyleObserve
    r alloc] init]; | 
 |  91     return g_scrollerStyle; | 
|  54 } |  92 } | 
|  55  |  93  | 
|  56 } |  94 } | 
| OLD | NEW |