OLD | NEW |
1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
6 | 6 |
7 #include "core/include/fxge/fx_ge.h" | 7 #include "core/include/fxge/fx_ge.h" |
8 | 8 |
9 #if _FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN64_DESKTOP_ | 9 #if _FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN64_DESKTOP_ |
10 #include <crtdbg.h> | 10 #include <crtdbg.h> |
(...skipping 420 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
431 return TRUE; | 431 return TRUE; |
432 } | 432 } |
433 FX_BOOL CFX_Win32FontInfo::GetFontCharset(void* hFont, int& charset) { | 433 FX_BOOL CFX_Win32FontInfo::GetFontCharset(void* hFont, int& charset) { |
434 TEXTMETRIC tm; | 434 TEXTMETRIC tm; |
435 HFONT hOldFont = (HFONT)::SelectObject(m_hDC, (HFONT)hFont); | 435 HFONT hOldFont = (HFONT)::SelectObject(m_hDC, (HFONT)hFont); |
436 ::GetTextMetrics(m_hDC, &tm); | 436 ::GetTextMetrics(m_hDC, &tm); |
437 ::SelectObject(m_hDC, hOldFont); | 437 ::SelectObject(m_hDC, hOldFont); |
438 charset = tm.tmCharSet; | 438 charset = tm.tmCharSet; |
439 return TRUE; | 439 return TRUE; |
440 } | 440 } |
441 IFX_SystemFontInfo* IFX_SystemFontInfo::CreateDefault(const char** pUnused) { | 441 static FX_BOOL IsGDIEnabled() { |
| 442 // If GDI is disabled then GetDC for the desktop will fail. |
442 HDC hdc = ::GetDC(NULL); | 443 HDC hdc = ::GetDC(NULL); |
443 if (hdc) { | 444 if (hdc) { |
444 ::ReleaseDC(NULL, hdc); | 445 ::ReleaseDC(NULL, hdc); |
| 446 return TRUE; |
| 447 } |
| 448 return FALSE; |
| 449 } |
| 450 IFX_SystemFontInfo* IFX_SystemFontInfo::CreateDefault(const char** pUnused) { |
| 451 if (IsGDIEnabled()) { |
445 return new CFX_Win32FontInfo; | 452 return new CFX_Win32FontInfo; |
446 } | 453 } |
447 // If GDI is disabled then GetDC for the desktop will fail. Select the | 454 // Select the fallback font information class if GDI is disabled. |
448 // fallback font information class if GDI is disabled. | |
449 CFX_Win32FallbackFontInfo* pInfoFallback = new CFX_Win32FallbackFontInfo; | 455 CFX_Win32FallbackFontInfo* pInfoFallback = new CFX_Win32FallbackFontInfo; |
450 // Construct the font path manually, SHGetKnownFolderPath won't work under | 456 // Construct the font path manually, SHGetKnownFolderPath won't work under |
451 // a restrictive sandbox. | 457 // a restrictive sandbox. |
452 CHAR windows_path[MAX_PATH] = {}; | 458 CHAR windows_path[MAX_PATH] = {}; |
453 DWORD path_len = ::GetWindowsDirectoryA(windows_path, MAX_PATH); | 459 DWORD path_len = ::GetWindowsDirectoryA(windows_path, MAX_PATH); |
454 if (path_len > 0 && path_len < MAX_PATH) { | 460 if (path_len > 0 && path_len < MAX_PATH) { |
455 CFX_ByteString fonts_path(windows_path); | 461 CFX_ByteString fonts_path(windows_path); |
456 fonts_path += "\\Fonts"; | 462 fonts_path += "\\Fonts"; |
457 pInfoFallback->AddPath(fonts_path); | 463 pInfoFallback->AddPath(fonts_path); |
458 } | 464 } |
459 return pInfoFallback; | 465 return pInfoFallback; |
460 } | 466 } |
461 void CFX_GEModule::InitPlatform() { | 467 void CFX_GEModule::InitPlatform() { |
462 CWin32Platform* pPlatformData = new CWin32Platform; | 468 CWin32Platform* pPlatformData = new CWin32Platform; |
463 OSVERSIONINFO ver; | 469 OSVERSIONINFO ver; |
464 ver.dwOSVersionInfoSize = sizeof(ver); | 470 ver.dwOSVersionInfoSize = sizeof(ver); |
465 GetVersionEx(&ver); | 471 GetVersionEx(&ver); |
466 pPlatformData->m_bHalfTone = ver.dwMajorVersion >= 5; | 472 pPlatformData->m_bHalfTone = ver.dwMajorVersion >= 5; |
467 pPlatformData->m_GdiplusExt.Load(); | 473 if (IsGDIEnabled()) { |
| 474 pPlatformData->m_GdiplusExt.Load(); |
| 475 } |
468 m_pPlatformData = pPlatformData; | 476 m_pPlatformData = pPlatformData; |
469 m_pFontMgr->SetSystemFontInfo(IFX_SystemFontInfo::CreateDefault(nullptr)); | 477 m_pFontMgr->SetSystemFontInfo(IFX_SystemFontInfo::CreateDefault(nullptr)); |
470 } | 478 } |
471 void CFX_GEModule::DestroyPlatform() { | 479 void CFX_GEModule::DestroyPlatform() { |
472 delete (CWin32Platform*)m_pPlatformData; | 480 delete (CWin32Platform*)m_pPlatformData; |
473 m_pPlatformData = NULL; | 481 m_pPlatformData = NULL; |
474 } | 482 } |
475 CGdiDeviceDriver::CGdiDeviceDriver(HDC hDC, int device_class) { | 483 CGdiDeviceDriver::CGdiDeviceDriver(HDC hDC, int device_class) { |
476 m_hDC = hDC; | 484 m_hDC = hDC; |
477 m_DeviceClass = device_class; | 485 m_DeviceClass = device_class; |
(...skipping 878 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1356 SelectObject(m_hDC, m_hOldBitmap); | 1364 SelectObject(m_hDC, m_hOldBitmap); |
1357 DeleteDC(m_hDC); | 1365 DeleteDC(m_hDC); |
1358 } | 1366 } |
1359 if (m_hBitmap) { | 1367 if (m_hBitmap) { |
1360 DeleteObject(m_hBitmap); | 1368 DeleteObject(m_hBitmap); |
1361 } | 1369 } |
1362 delete GetBitmap(); | 1370 delete GetBitmap(); |
1363 } | 1371 } |
1364 | 1372 |
1365 #endif // _FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN64_ | 1373 #endif // _FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN64_ |
OLD | NEW |