diff options
Diffstat (limited to 'ui/gfx/win_util.cc')
-rw-r--r-- | ui/gfx/win_util.cc | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/ui/gfx/win_util.cc b/ui/gfx/win_util.cc new file mode 100644 index 0000000..9941a65 --- /dev/null +++ b/ui/gfx/win_util.cc @@ -0,0 +1,63 @@ +// Copyright (c) 2010 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 "gfx/win_util.h" + +#include <windows.h> + +#include "base/win/windows_version.h" + +namespace { + +bool DynamicLibraryPresent(const wchar_t* lib_name) { + HINSTANCE lib = LoadLibrary(lib_name); + if (lib) { + FreeLibrary(lib); + return true; + } + return false; +} + +} // namespace + +namespace gfx { + +// Returns true if Direct2d is available, false otherwise. +bool Direct2dIsAvailable() { + static bool checked = false; + static bool available = false; + + if (!checked) { + base::win::Version version = base::win::GetVersion(); + if (version < base::win::VERSION_VISTA) + available = false; + else if (version >= base::win::VERSION_WIN7) + available = true; + else + available = DynamicLibraryPresent(L"d2d1.dll"); + checked = true; + } + return available; +} + +// Returns true if DirectWrite is available, false otherwise. +bool DirectWriteIsAvailable() { + static bool checked = false; + static bool available = false; + + if (!checked) { + base::win::Version version = base::win::GetVersion(); + if (version < base::win::VERSION_VISTA) + available = false; + else if (version >= base::win::VERSION_WIN7) + available = true; + else + available = DynamicLibraryPresent(L"dwrite.dll"); + checked = true; + } + return available; +} + +} // namespace gfx + |