| // Copyright 2016 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #import "components/remote_cocoa/app_shim/views_scrollbar_bridge.h" |
| |
| #include "base/check.h" |
| #include "base/memory/raw_ptr.h" |
| |
| @interface ViewsScrollbarBridge () |
| |
| // Called when we receive a NSPreferredScrollerStyleDidChangeNotification. |
| - (void)onScrollerStyleChanged:(NSNotification*)notification; |
| |
| @end |
| |
| @implementation ViewsScrollbarBridge { |
| raw_ptr<ViewsScrollbarBridgeDelegate> _delegate; // Weak. Owns this. |
| } |
| |
| - (instancetype)initWithDelegate:(ViewsScrollbarBridgeDelegate*)delegate { |
| if ((self = [super init])) { |
| _delegate = delegate; |
| [NSNotificationCenter.defaultCenter |
| addObserver:self |
| selector:@selector(onScrollerStyleChanged:) |
| name:NSPreferredScrollerStyleDidChangeNotification |
| object:nil]; |
| } |
| return self; |
| } |
| |
| - (void)dealloc { |
| DCHECK(!_delegate); |
| } |
| |
| - (void)clearDelegate { |
| _delegate = nullptr; |
| [NSNotificationCenter.defaultCenter removeObserver:self]; |
| } |
| |
| - (void)onScrollerStyleChanged:(NSNotification*)notification { |
| if (_delegate) |
| _delegate->OnScrollerStyleChanged(); |
| } |
| |
| + (NSScrollerStyle)preferredScrollerStyle { |
| return NSScroller.preferredScrollerStyle; |
| } |
| |
| @end |