15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/resource/resource_bundle_win.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/path_service.h"
9868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h"
10effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "skia/ext/image_operations.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/layout.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/resource/resource_bundle.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/resource/resource_data_dll_win.h"
14effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "ui/gfx/geometry/size_conversions.h"
15effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "ui/gfx/image/image_skia.h"
16effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "ui/gfx/image/image_skia_source.h"
17d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/gfx/win/dpi.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ui {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)HINSTANCE resources_data_dll;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)HINSTANCE GetCurrentResourceDLL() {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (resources_data_dll)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return resources_data_dll;
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return GetModuleHandle(NULL);
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::FilePath GetResourcesPakFilePath(const std::string& pak_name) {
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath path;
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (PathService::Get(base::DIR_MODULE, &path))
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return path.AppendASCII(pak_name.c_str());
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Return just the name of the pack file.
375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return base::FilePath(base::ASCIIToUTF16(pak_name));
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ResourceBundle::LoadCommonResources() {
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // As a convenience, add the current resource module as a data packs.
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  data_packs_.push_back(new ResourceDataDLL(GetCurrentResourceDLL()));
45a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
46a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  if (IsScaleFactorSupported(SCALE_FACTOR_100P)) {
47a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    AddDataPackFromPath(
48a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        GetResourcesPakFilePath("chrome_100_percent.pak"),
49a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        SCALE_FACTOR_100P);
50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  }
51a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  if (IsScaleFactorSupported(SCALE_FACTOR_200P)) {
52a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    DCHECK(gfx::IsHighDPIEnabled());
53a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    AddDataPackFromPath(
54a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        GetResourcesPakFilePath("chrome_200_percent.pak"),
55a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        SCALE_FACTOR_200P);
56a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  }
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)gfx::Image& ResourceBundle::GetNativeImageNamed(int resource_id, ImageRTL rtl) {
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Flipped image is not used on Windows.
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK_EQ(rtl, RTL_DISABLED);
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Windows only uses SkBitmap for gfx::Image, so this is the same as
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // GetImageNamed.
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return GetImageNamed(resource_id);
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SetResourcesDataDLL(HINSTANCE handle) {
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  resources_data_dll = handle;
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)HICON LoadThemeIconFromResourcesDataDLL(int icon_id) {
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return ::LoadIcon(GetCurrentResourceDLL(), MAKEINTRESOURCE(icon_id));
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace ui;
77