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