|  | // Copyright 2013 The Flutter 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 "flutter/shell/platform/windows/windows_proc_table.h" | 
|  |  | 
|  | #include <WinUser.h> | 
|  | #include <dwmapi.h> | 
|  |  | 
|  | namespace flutter { | 
|  |  | 
|  | WindowsProcTable::WindowsProcTable() { | 
|  | user32_ = fml::NativeLibrary::Create("user32.dll"); | 
|  | get_pointer_type_ = | 
|  | user32_->ResolveFunction<GetPointerType_*>("GetPointerType"); | 
|  | } | 
|  |  | 
|  | WindowsProcTable::~WindowsProcTable() { | 
|  | user32_ = nullptr; | 
|  | } | 
|  |  | 
|  | BOOL WindowsProcTable::GetPointerType(UINT32 pointer_id, | 
|  | POINTER_INPUT_TYPE* pointer_type) const { | 
|  | if (!get_pointer_type_.has_value()) { | 
|  | return FALSE; | 
|  | } | 
|  |  | 
|  | return get_pointer_type_.value()(pointer_id, pointer_type); | 
|  | } | 
|  |  | 
|  | LRESULT WindowsProcTable::GetThreadPreferredUILanguages(DWORD flags, | 
|  | PULONG count, | 
|  | PZZWSTR languages, | 
|  | PULONG length) const { | 
|  | return ::GetThreadPreferredUILanguages(flags, count, languages, length); | 
|  | } | 
|  |  | 
|  | bool WindowsProcTable::GetHighContrastEnabled() const { | 
|  | HIGHCONTRAST high_contrast = {.cbSize = sizeof(HIGHCONTRAST)}; | 
|  | if (!::SystemParametersInfoW(SPI_GETHIGHCONTRAST, sizeof(HIGHCONTRAST), | 
|  | &high_contrast, 0)) { | 
|  | return false; | 
|  | } | 
|  |  | 
|  | return high_contrast.dwFlags & HCF_HIGHCONTRASTON; | 
|  | } | 
|  |  | 
|  | bool WindowsProcTable::DwmIsCompositionEnabled() const { | 
|  | BOOL composition_enabled; | 
|  | if (SUCCEEDED(::DwmIsCompositionEnabled(&composition_enabled))) { | 
|  | return composition_enabled; | 
|  | } | 
|  |  | 
|  | return true; | 
|  | } | 
|  |  | 
|  | HRESULT WindowsProcTable::DwmFlush() const { | 
|  | return ::DwmFlush(); | 
|  | } | 
|  |  | 
|  | }  // namespace flutter |