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 "content/renderer/render_view_impl.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/renderer_preferences.h" 87d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/linux/WebFontRendering.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using WebKit::WebFontRendering; 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static SkPaint::Hinting RendererPreferencesToSkiaHinting( 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const RendererPreferences& prefs) { 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!prefs.should_antialias_text) { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // When anti-aliasing is off, GTK maps all non-zero hinting settings to 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 'Normal' hinting so we do the same. Otherwise, folks who have 'Slight' 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // hinting selected will see readable text in everything expect Chromium. 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (prefs.hinting) { 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case RENDERER_PREFERENCES_HINTING_NONE: 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return SkPaint::kNo_Hinting; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case RENDERER_PREFERENCES_HINTING_SYSTEM_DEFAULT: 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case RENDERER_PREFERENCES_HINTING_SLIGHT: 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case RENDERER_PREFERENCES_HINTING_MEDIUM: 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case RENDERER_PREFERENCES_HINTING_FULL: 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return SkPaint::kNormal_Hinting; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return SkPaint::kNormal_Hinting; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (prefs.hinting) { 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case RENDERER_PREFERENCES_HINTING_SYSTEM_DEFAULT: 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return SkPaint::kNormal_Hinting; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case RENDERER_PREFERENCES_HINTING_NONE: 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return SkPaint::kNo_Hinting; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case RENDERER_PREFERENCES_HINTING_SLIGHT: 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return SkPaint::kSlight_Hinting; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case RENDERER_PREFERENCES_HINTING_MEDIUM: 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return SkPaint::kNormal_Hinting; 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case RENDERER_PREFERENCES_HINTING_FULL: 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return SkPaint::kFull_Hinting; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return SkPaint::kNormal_Hinting; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static SkFontHost::LCDOrder RendererPreferencesToSkiaLCDOrder( 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RendererPreferencesSubpixelRenderingEnum subpixel) { 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (subpixel) { 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case RENDERER_PREFERENCES_SUBPIXEL_RENDERING_SYSTEM_DEFAULT: 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case RENDERER_PREFERENCES_SUBPIXEL_RENDERING_NONE: 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case RENDERER_PREFERENCES_SUBPIXEL_RENDERING_RGB: 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case RENDERER_PREFERENCES_SUBPIXEL_RENDERING_VRGB: 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return SkFontHost::kRGB_LCDOrder; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case RENDERER_PREFERENCES_SUBPIXEL_RENDERING_BGR: 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case RENDERER_PREFERENCES_SUBPIXEL_RENDERING_VBGR: 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return SkFontHost::kBGR_LCDOrder; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return SkFontHost::kRGB_LCDOrder; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static SkFontHost::LCDOrientation 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RendererPreferencesToSkiaLCDOrientation( 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RendererPreferencesSubpixelRenderingEnum subpixel) { 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (subpixel) { 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case RENDERER_PREFERENCES_SUBPIXEL_RENDERING_SYSTEM_DEFAULT: 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case RENDERER_PREFERENCES_SUBPIXEL_RENDERING_NONE: 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case RENDERER_PREFERENCES_SUBPIXEL_RENDERING_RGB: 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case RENDERER_PREFERENCES_SUBPIXEL_RENDERING_BGR: 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return SkFontHost::kHorizontal_LCDOrientation; 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case RENDERER_PREFERENCES_SUBPIXEL_RENDERING_VRGB: 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case RENDERER_PREFERENCES_SUBPIXEL_RENDERING_VBGR: 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return SkFontHost::kVertical_LCDOrientation; 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return SkFontHost::kHorizontal_LCDOrientation; 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static bool RendererPreferencesToAntiAliasFlag( 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const RendererPreferences& prefs) { 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return prefs.should_antialias_text; 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static bool RendererPreferencesToSubpixelRenderingFlag( 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const RendererPreferences& prefs) { 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (prefs.subpixel_rendering != 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RENDERER_PREFERENCES_SUBPIXEL_RENDERING_SYSTEM_DEFAULT && 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs.subpixel_rendering != 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RENDERER_PREFERENCES_SUBPIXEL_RENDERING_NONE) { 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewImpl::UpdateFontRenderingFromRendererPrefs() { 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const RendererPreferences& prefs = renderer_preferences_; 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebFontRendering::setHinting(RendererPreferencesToSkiaHinting(prefs)); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebFontRendering::setAutoHint(prefs.use_autohinter); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebFontRendering::setUseBitmaps(prefs.use_bitmaps); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebFontRendering::setLCDOrder( 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RendererPreferencesToSkiaLCDOrder(prefs.subpixel_rendering)); 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebFontRendering::setLCDOrientation( 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RendererPreferencesToSkiaLCDOrientation(prefs.subpixel_rendering)); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebFontRendering::setAntiAlias(RendererPreferencesToAntiAliasFlag(prefs)); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebFontRendering::setSubpixelRendering( 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RendererPreferencesToSubpixelRenderingFlag(prefs)); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebFontRendering::setSubpixelPositioning(prefs.use_subpixel_positioning); 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 118