OLD | NEW |
1 /* | 1 /* |
2 * This file is part of the WebKit project. | 2 * This file is part of the WebKit project. |
3 * | 3 * |
4 * Copyright (C) 2006 Apple Computer, Inc. | 4 * Copyright (C) 2006 Apple Computer, Inc. |
5 * Copyright (C) 2008, 2009 Google, Inc. | 5 * Copyright (C) 2008, 2009 Google, Inc. |
6 * | 6 * |
7 * This library is free software; you can redistribute it and/or | 7 * This library is free software; you can redistribute it and/or |
8 * modify it under the terms of the GNU Library General Public | 8 * modify it under the terms of the GNU Library General Public |
9 * License as published by the Free Software Foundation; either | 9 * License as published by the Free Software Foundation; either |
10 * version 2 of the License, or (at your option) any later version. | 10 * version 2 of the License, or (at your option) any later version. |
(...skipping 13 matching lines...) Expand all Loading... |
24 #include "config.h" | 24 #include "config.h" |
25 #include "RenderThemeChromiumWin.h" | 25 #include "RenderThemeChromiumWin.h" |
26 | 26 |
27 #include <windows.h> | 27 #include <windows.h> |
28 #include <uxtheme.h> | 28 #include <uxtheme.h> |
29 #include <vssym32.h> | 29 #include <vssym32.h> |
30 | 30 |
31 #include "ChromiumBridge.h" | 31 #include "ChromiumBridge.h" |
32 #include "CSSStyleSheet.h" | 32 #include "CSSStyleSheet.h" |
33 #include "CSSValueKeywords.h" | 33 #include "CSSValueKeywords.h" |
34 #include "Document.h" | |
35 #include "FontSelector.h" | 34 #include "FontSelector.h" |
36 #include "FontUtilsChromiumWin.h" | 35 #include "FontUtilsChromiumWin.h" |
37 #include "GraphicsContext.h" | 36 #include "GraphicsContext.h" |
38 #include "RenderBox.h" | 37 #include "RenderBox.h" |
39 #include "RenderSlider.h" | 38 #include "RenderSlider.h" |
40 #include "ScrollbarTheme.h" | 39 #include "ScrollbarTheme.h" |
41 #include "SkiaUtils.h" | 40 #include "SkiaUtils.h" |
42 #include "TransparencyWin.h" | 41 #include "TransparencyWin.h" |
43 #include "UserAgentStyleSheets.h" | 42 #include "UserAgentStyleSheets.h" |
44 #include "WindowsVersion.h" | 43 #include "WindowsVersion.h" |
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
199 | 198 |
200 // We aim to match IE here. | 199 // We aim to match IE here. |
201 // -IE uses a font based on the encoding as the default font for form controls. | 200 // -IE uses a font based on the encoding as the default font for form controls. |
202 // -Gecko uses MS Shell Dlg (actually calls GetStockObject(DEFAULT_GUI_FONT), | 201 // -Gecko uses MS Shell Dlg (actually calls GetStockObject(DEFAULT_GUI_FONT), |
203 // which returns MS Shell Dlg) | 202 // which returns MS Shell Dlg) |
204 // -Safari uses Lucida Grande. | 203 // -Safari uses Lucida Grande. |
205 // | 204 // |
206 // FIXME: The only case where we know we don't match IE is for ANSI encodings. | 205 // FIXME: The only case where we know we don't match IE is for ANSI encodings. |
207 // IE uses MS Shell Dlg there, which we render incorrectly at certain pixel | 206 // IE uses MS Shell Dlg there, which we render incorrectly at certain pixel |
208 // sizes (e.g. 15px). So, for now we just use Arial. | 207 // sizes (e.g. 15px). So, for now we just use Arial. |
209 static wchar_t* defaultGUIFont(Document* document) | 208 static wchar_t* defaultGUIFont() |
210 { | 209 { |
211 UScriptCode dominantScript = document->dominantScript(); | |
212 const wchar_t* family = NULL; | |
213 | |
214 // FIXME: Special-casing of Latin/Greeek/Cyrillic should go away once | |
215 // GetFontFamilyForScript is enhanced to support GenericFamilyType for | |
216 // real. For now, we make sure that we use Arial to match IE for those | |
217 // scripts. | |
218 if (dominantScript != USCRIPT_LATIN && | |
219 dominantScript != USCRIPT_CYRILLIC && | |
220 dominantScript != USCRIPT_GREEK && | |
221 dominantScript != USCRIPT_INVALID_CODE) { | |
222 family = getFontFamilyForScript(dominantScript, FontDescription::NoFamil
y); | |
223 if (family) | |
224 return const_cast<wchar_t*>(family); | |
225 } | |
226 return L"Arial"; | 210 return L"Arial"; |
227 } | 211 } |
228 | 212 |
229 // Converts |points| to pixels. One point is 1/72 of an inch. | 213 // Converts |points| to pixels. One point is 1/72 of an inch. |
230 static float pointsToPixels(float points) | 214 static float pointsToPixels(float points) |
231 { | 215 { |
232 static float pixelsPerInch = 0.0f; | 216 static float pixelsPerInch = 0.0f; |
233 if (!pixelsPerInch) { | 217 if (!pixelsPerInch) { |
234 HDC hdc = GetDC(0); // What about printing? Is this the right DC? | 218 HDC hdc = GetDC(0); // What about printing? Is this the right DC? |
235 if (hdc) { // Can this ever actually be NULL? | 219 if (hdc) { // Can this ever actually be NULL? |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
331 // Disable the blinking caret in layout test mode, as it introduces | 315 // Disable the blinking caret in layout test mode, as it introduces |
332 // a race condition for the pixel tests. http://b/1198440 | 316 // a race condition for the pixel tests. http://b/1198440 |
333 if (ChromiumBridge::layoutTestMode()) | 317 if (ChromiumBridge::layoutTestMode()) |
334 return 0; | 318 return 0; |
335 | 319 |
336 // This involves a system call, so we cache the result. | 320 // This involves a system call, so we cache the result. |
337 static double blinkInterval = querySystemBlinkInterval(RenderTheme::caretBli
nkInterval()); | 321 static double blinkInterval = querySystemBlinkInterval(RenderTheme::caretBli
nkInterval()); |
338 return blinkInterval; | 322 return blinkInterval; |
339 } | 323 } |
340 | 324 |
341 void RenderThemeChromiumWin::systemFont(int propId, Document* document, FontDesc
ription& fontDescription) const | 325 void RenderThemeChromiumWin::systemFont(int propId, FontDescription& fontDescrip
tion) const |
342 { | 326 { |
343 // This logic owes much to RenderThemeSafari.cpp. | 327 // This logic owes much to RenderThemeSafari.cpp. |
344 FontDescription* cachedDesc = NULL; | 328 FontDescription* cachedDesc = NULL; |
345 wchar_t* faceName = 0; | 329 wchar_t* faceName = 0; |
346 float fontSize = 0; | 330 float fontSize = 0; |
347 switch (propId) { | 331 switch (propId) { |
348 case CSSValueSmallCaption: | 332 case CSSValueSmallCaption: |
349 cachedDesc = &smallSystemFont; | 333 cachedDesc = &smallSystemFont; |
350 if (!smallSystemFont.isAbsoluteSize()) { | 334 if (!smallSystemFont.isAbsoluteSize()) { |
351 NONCLIENTMETRICS metrics; | 335 NONCLIENTMETRICS metrics; |
(...skipping 16 matching lines...) Expand all Loading... |
368 if (!labelFont.isAbsoluteSize()) { | 352 if (!labelFont.isAbsoluteSize()) { |
369 NONCLIENTMETRICS metrics; | 353 NONCLIENTMETRICS metrics; |
370 getNonClientMetrics(&metrics); | 354 getNonClientMetrics(&metrics); |
371 faceName = metrics.lfStatusFont.lfFaceName; | 355 faceName = metrics.lfStatusFont.lfFaceName; |
372 fontSize = systemFontSize(metrics.lfStatusFont); | 356 fontSize = systemFontSize(metrics.lfStatusFont); |
373 } | 357 } |
374 break; | 358 break; |
375 case CSSValueWebkitMiniControl: | 359 case CSSValueWebkitMiniControl: |
376 case CSSValueWebkitSmallControl: | 360 case CSSValueWebkitSmallControl: |
377 case CSSValueWebkitControl: | 361 case CSSValueWebkitControl: |
378 faceName = defaultGUIFont(document); | 362 faceName = defaultGUIFont(); |
379 // Why 2 points smaller? Because that's what Gecko does. | 363 // Why 2 points smaller? Because that's what Gecko does. |
380 fontSize = defaultFontSize - pointsToPixels(2); | 364 fontSize = defaultFontSize - pointsToPixels(2); |
381 break; | 365 break; |
382 default: | 366 default: |
383 faceName = defaultGUIFont(document); | 367 faceName = defaultGUIFont(); |
384 fontSize = defaultFontSize; | 368 fontSize = defaultFontSize; |
385 break; | 369 break; |
386 } | 370 } |
387 | 371 |
388 if (!cachedDesc) | 372 if (!cachedDesc) |
389 cachedDesc = &fontDescription; | 373 cachedDesc = &fontDescription; |
390 | 374 |
391 if (fontSize) { | 375 if (fontSize) { |
392 ASSERT(faceName); | 376 ASSERT(faceName); |
393 cachedDesc->firstFamily().setFamily(AtomicString(faceName, | 377 cachedDesc->firstFamily().setFamily(AtomicString(faceName, |
(...skipping 451 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
845 // static | 829 // static |
846 void RenderThemeChromiumWin::setFindInPageMode(bool enable) { | 830 void RenderThemeChromiumWin::setFindInPageMode(bool enable) { |
847 if (m_findInPageMode == enable) | 831 if (m_findInPageMode == enable) |
848 return; | 832 return; |
849 | 833 |
850 m_findInPageMode = enable; | 834 m_findInPageMode = enable; |
851 theme()->platformColorsDidChange(); | 835 theme()->platformColorsDidChange(); |
852 } | 836 } |
853 | 837 |
854 } // namespace WebCore | 838 } // namespace WebCore |
OLD | NEW |