1// Copyright 2014 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/gfx/font_render_params.h" 6 7#include "base/memory/scoped_ptr.h" 8#include "base/memory/singleton.h" 9#include "ui/gfx/win/singleton_hwnd.h" 10 11namespace gfx { 12 13namespace { 14 15// Caches font render params and updates them on system notifications. 16class CachedFontRenderParams : public gfx::SingletonHwnd::Observer { 17 public: 18 static CachedFontRenderParams* GetInstance() { 19 return Singleton<CachedFontRenderParams>::get(); 20 } 21 22 const FontRenderParams& GetParams(bool for_web_contents) { 23 if (params_) 24 return *params_; 25 26 params_.reset(new FontRenderParams()); 27 params_->antialiasing = false; 28 params_->subpixel_positioning = false; 29 params_->autohinter = false; 30 params_->use_bitmaps = false; 31 params_->hinting = FontRenderParams::HINTING_MEDIUM; 32 params_->subpixel_rendering = FontRenderParams::SUBPIXEL_RENDERING_NONE; 33 34 BOOL enabled = false; 35 if (SystemParametersInfo(SPI_GETFONTSMOOTHING, 0, &enabled, 0) && enabled) { 36 params_->antialiasing = true; 37 // Subpixel positioning is not yet implemented for UI. crbug.com/389649 38 params_->subpixel_positioning = for_web_contents; 39 40 UINT type = 0; 41 if (SystemParametersInfo(SPI_GETFONTSMOOTHINGTYPE, 0, &type, 0) && 42 type == FE_FONTSMOOTHINGCLEARTYPE) { 43 params_->subpixel_rendering = FontRenderParams::SUBPIXEL_RENDERING_RGB; 44 } 45 } 46 gfx::SingletonHwnd::GetInstance()->AddObserver(this); 47 return *params_; 48 } 49 50 private: 51 friend struct DefaultSingletonTraits<CachedFontRenderParams>; 52 53 CachedFontRenderParams() {} 54 virtual ~CachedFontRenderParams() { 55 // Can't remove the SingletonHwnd observer here since SingletonHwnd may have 56 // been destroyed already (both singletons). 57 } 58 59 virtual void OnWndProc(HWND hwnd, 60 UINT message, 61 WPARAM wparam, 62 LPARAM lparam) OVERRIDE { 63 if (message == WM_SETTINGCHANGE) { 64 params_.reset(); 65 gfx::SingletonHwnd::GetInstance()->RemoveObserver(this); 66 } 67 } 68 69 scoped_ptr<FontRenderParams> params_; 70 71 DISALLOW_COPY_AND_ASSIGN(CachedFontRenderParams); 72}; 73 74} // namespace 75 76FontRenderParams GetFontRenderParams(const FontRenderParamsQuery& query, 77 std::string* family_out) { 78 // Customized font rendering settings are not supported, only defaults. 79 if (!query.is_empty() || family_out) 80 NOTIMPLEMENTED(); 81 return CachedFontRenderParams::GetInstance()->GetParams( 82 query.for_web_contents); 83} 84 85} // namespace gfx 86