1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "ui/base/resource/resource_bundle_win.h"
6
7#include "base/logging.h"
8#include "base/path_service.h"
9#include "base/strings/utf_string_conversions.h"
10#include "skia/ext/image_operations.h"
11#include "ui/base/layout.h"
12#include "ui/base/resource/resource_bundle.h"
13#include "ui/base/resource/resource_data_dll_win.h"
14#include "ui/gfx/geometry/size_conversions.h"
15#include "ui/gfx/image/image_skia.h"
16#include "ui/gfx/image/image_skia_source.h"
17#include "ui/gfx/win/dpi.h"
18
19namespace ui {
20
21namespace {
22
23HINSTANCE resources_data_dll;
24
25HINSTANCE GetCurrentResourceDLL() {
26  if (resources_data_dll)
27    return resources_data_dll;
28  return GetModuleHandle(NULL);
29}
30
31base::FilePath GetResourcesPakFilePath(const std::string& pak_name) {
32  base::FilePath path;
33  if (PathService::Get(base::DIR_MODULE, &path))
34    return path.AppendASCII(pak_name.c_str());
35
36  // Return just the name of the pack file.
37  return base::FilePath(base::ASCIIToUTF16(pak_name));
38}
39
40}  // namespace
41
42void ResourceBundle::LoadCommonResources() {
43  // As a convenience, add the current resource module as a data packs.
44  data_packs_.push_back(new ResourceDataDLL(GetCurrentResourceDLL()));
45
46  if (IsScaleFactorSupported(SCALE_FACTOR_100P)) {
47    AddDataPackFromPath(
48        GetResourcesPakFilePath("chrome_100_percent.pak"),
49        SCALE_FACTOR_100P);
50  }
51  if (IsScaleFactorSupported(SCALE_FACTOR_200P)) {
52    DCHECK(gfx::IsHighDPIEnabled());
53    AddDataPackFromPath(
54        GetResourcesPakFilePath("chrome_200_percent.pak"),
55        SCALE_FACTOR_200P);
56  }
57}
58
59gfx::Image& ResourceBundle::GetNativeImageNamed(int resource_id, ImageRTL rtl) {
60  // Flipped image is not used on Windows.
61  DCHECK_EQ(rtl, RTL_DISABLED);
62
63  // Windows only uses SkBitmap for gfx::Image, so this is the same as
64  // GetImageNamed.
65  return GetImageNamed(resource_id);
66}
67
68void SetResourcesDataDLL(HINSTANCE handle) {
69  resources_data_dll = handle;
70}
71
72HICON LoadThemeIconFromResourcesDataDLL(int icon_id) {
73  return ::LoadIcon(GetCurrentResourceDLL(), MAKEINTRESOURCE(icon_id));
74}
75
76}  // namespace ui;
77