// Copyright 2016 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "ui/gfx/animation/animation.h" #import #include "base/mac/mac_util.h" #include "base/task/current_thread.h" // Only available since 10.12. @interface NSWorkspace (AvailableSinceSierra) @property(readonly) BOOL accessibilityDisplayShouldReduceMotion; @end namespace gfx { // static bool Animation::ShouldRenderRichAnimationImpl() { return !PrefersReducedMotion(); } // static bool Animation::ScrollAnimationsEnabledBySystem() { // Because of sandboxing, OS settings should only be queried from the browser // process. DCHECK(base::CurrentUIThread::IsSet() || base::CurrentIOThread::IsSet()); bool enabled = false; id value = nil; value = [[NSUserDefaults standardUserDefaults] objectForKey:@"NSScrollAnimationEnabled"]; if (value) enabled = [value boolValue]; return enabled; } // static void Animation::UpdatePrefersReducedMotion() { // prefers_reduced_motion_ should only be modified on the UI thread. // TODO(crbug.com/927163): DCHECK this assertion once tests are well-behaved. // We default to assuming that animations are enabled, to avoid impacting the // experience for users on pre-10.12 systems. prefers_reduced_motion_ = false; SEL sel = @selector(accessibilityDisplayShouldReduceMotion); if ([[NSWorkspace sharedWorkspace] respondsToSelector:sel]) { prefers_reduced_motion_ = [[NSWorkspace sharedWorkspace] accessibilityDisplayShouldReduceMotion]; } } } // namespace gfx