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 <windows.h> | 10 #include <windows.h> |
(...skipping 668 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
679 m_pGdiRemoveFontMemResourseEx = NULL; | 679 m_pGdiRemoveFontMemResourseEx = NULL; |
680 } | 680 } |
681 void CGdiplusExt::Load() { | 681 void CGdiplusExt::Load() { |
682 CFX_ByteString strPlusPath = ""; | 682 CFX_ByteString strPlusPath = ""; |
683 FX_CHAR buf[MAX_PATH]; | 683 FX_CHAR buf[MAX_PATH]; |
684 GetSystemDirectoryA(buf, MAX_PATH); | 684 GetSystemDirectoryA(buf, MAX_PATH); |
685 strPlusPath += buf; | 685 strPlusPath += buf; |
686 strPlusPath += "\\"; | 686 strPlusPath += "\\"; |
687 strPlusPath += "GDIPLUS.DLL"; | 687 strPlusPath += "GDIPLUS.DLL"; |
688 m_hModule = LoadLibraryA(strPlusPath); | 688 m_hModule = LoadLibraryA(strPlusPath); |
689 if (m_hModule == NULL) { | 689 if (!m_hModule) { |
690 return; | 690 return; |
691 } | 691 } |
692 for (int i = 0; i < sizeof g_GdipFuncNames / sizeof(LPCSTR); i++) { | 692 for (int i = 0; i < sizeof g_GdipFuncNames / sizeof(LPCSTR); i++) { |
693 m_Functions[i] = GetProcAddress(m_hModule, g_GdipFuncNames[i]); | 693 m_Functions[i] = GetProcAddress(m_hModule, g_GdipFuncNames[i]); |
694 if (m_Functions[i] == NULL) { | 694 if (!m_Functions[i]) { |
695 m_hModule = NULL; | 695 m_hModule = NULL; |
696 return; | 696 return; |
697 } | 697 } |
698 } | 698 } |
699 uintptr_t gdiplusToken; | 699 uintptr_t gdiplusToken; |
700 GdiplusStartupInput gdiplusStartupInput; | 700 GdiplusStartupInput gdiplusStartupInput; |
701 ((FuncType_GdiplusStartup)m_Functions[FuncId_GdiplusStartup])( | 701 ((FuncType_GdiplusStartup)m_Functions[FuncId_GdiplusStartup])( |
702 &gdiplusToken, &gdiplusStartupInput, NULL); | 702 &gdiplusToken, &gdiplusStartupInput, NULL); |
703 m_GdiModule = LoadLibraryA("GDI32.DLL"); | 703 m_GdiModule = LoadLibraryA("GDI32.DLL"); |
704 if (m_GdiModule == NULL) { | 704 if (!m_GdiModule) { |
705 return; | 705 return; |
706 } | 706 } |
707 m_pGdiAddFontMemResourceEx = | 707 m_pGdiAddFontMemResourceEx = |
708 GetProcAddress(m_GdiModule, "AddFontMemResourceEx"); | 708 GetProcAddress(m_GdiModule, "AddFontMemResourceEx"); |
709 m_pGdiRemoveFontMemResourseEx = | 709 m_pGdiRemoveFontMemResourseEx = |
710 GetProcAddress(m_GdiModule, "RemoveFontMemResourceEx"); | 710 GetProcAddress(m_GdiModule, "RemoveFontMemResourceEx"); |
711 } | 711 } |
712 CGdiplusExt::~CGdiplusExt() {} | 712 CGdiplusExt::~CGdiplusExt() {} |
713 LPVOID CGdiplusExt::LoadMemFont(LPBYTE pData, FX_DWORD size) { | 713 LPVOID CGdiplusExt::LoadMemFont(LPBYTE pData, FX_DWORD size) { |
714 GpFontCollection* pCollection = NULL; | 714 GpFontCollection* pCollection = NULL; |
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
966 } | 966 } |
967 static GpPen* _GdipCreatePen(const CFX_GraphStateData* pGraphState, | 967 static GpPen* _GdipCreatePen(const CFX_GraphStateData* pGraphState, |
968 const CFX_Matrix* pMatrix, | 968 const CFX_Matrix* pMatrix, |
969 DWORD argb, | 969 DWORD argb, |
970 FX_BOOL bTextMode = FALSE) { | 970 FX_BOOL bTextMode = FALSE) { |
971 CGdiplusExt& GdiplusExt = | 971 CGdiplusExt& GdiplusExt = |
972 ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt; | 972 ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt; |
973 FX_FLOAT width = pGraphState ? pGraphState->m_LineWidth : 1.0f; | 973 FX_FLOAT width = pGraphState ? pGraphState->m_LineWidth : 1.0f; |
974 if (!bTextMode) { | 974 if (!bTextMode) { |
975 FX_FLOAT unit = | 975 FX_FLOAT unit = |
976 pMatrix == NULL | 976 pMatrix |
977 ? 1.0f | 977 ? FXSYS_Div(1.0f, (pMatrix->GetXUnit() + pMatrix->GetYUnit()) / 2) |
978 : FXSYS_Div(1.0f, (pMatrix->GetXUnit() + pMatrix->GetYUnit()) / 2); | 978 : 1.0f; |
979 if (width < unit) { | 979 if (width < unit) { |
980 width = unit; | 980 width = unit; |
981 } | 981 } |
982 } | 982 } |
983 GpPen* pPen = NULL; | 983 GpPen* pPen = NULL; |
984 CallFunc(GdipCreatePen1)((ARGB)argb, width, UnitWorld, &pPen); | 984 CallFunc(GdipCreatePen1)((ARGB)argb, width, UnitWorld, &pPen); |
985 LineCap lineCap; | 985 LineCap lineCap; |
986 DashCap dashCap = DashCapFlat; | 986 DashCap dashCap = DashCapFlat; |
987 FX_BOOL bDashExtend = FALSE; | 987 FX_BOOL bDashExtend = FALSE; |
988 switch (pGraphState->m_LineCap) { | 988 switch (pGraphState->m_LineCap) { |
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1191 CallFunc(GdipSetSmoothingMode)(pGraphics, SmoothingModeNone); | 1191 CallFunc(GdipSetSmoothingMode)(pGraphics, SmoothingModeNone); |
1192 } else if (!(fill_mode & FXFILL_FULLCOVER)) { | 1192 } else if (!(fill_mode & FXFILL_FULLCOVER)) { |
1193 if (!bSmooth && (fill_mode & 3)) { | 1193 if (!bSmooth && (fill_mode & 3)) { |
1194 bSmooth = TRUE; | 1194 bSmooth = TRUE; |
1195 } | 1195 } |
1196 if (bSmooth || (pGraphState && pGraphState->m_LineWidth > 2)) { | 1196 if (bSmooth || (pGraphState && pGraphState->m_LineWidth > 2)) { |
1197 CallFunc(GdipSetSmoothingMode)(pGraphics, SmoothingModeAntiAlias); | 1197 CallFunc(GdipSetSmoothingMode)(pGraphics, SmoothingModeAntiAlias); |
1198 } | 1198 } |
1199 } | 1199 } |
1200 int new_fill_mode = fill_mode & 3; | 1200 int new_fill_mode = fill_mode & 3; |
1201 if (nPoints == 4 && pGraphState == NULL) { | 1201 if (nPoints == 4 && !pGraphState) { |
1202 int v1, v2; | 1202 int v1, v2; |
1203 if (IsSmallTriangle(points, pObject2Device, v1, v2)) { | 1203 if (IsSmallTriangle(points, pObject2Device, v1, v2)) { |
1204 GpPen* pPen = NULL; | 1204 GpPen* pPen = NULL; |
1205 CallFunc(GdipCreatePen1)(fill_argb, 1.0f, UnitPixel, &pPen); | 1205 CallFunc(GdipCreatePen1)(fill_argb, 1.0f, UnitPixel, &pPen); |
1206 CallFunc(GdipDrawLineI)( | 1206 CallFunc(GdipDrawLineI)( |
1207 pGraphics, pPen, FXSYS_round(points[v1].X), FXSYS_round(points[v1].Y), | 1207 pGraphics, pPen, FXSYS_round(points[v1].X), FXSYS_round(points[v1].Y), |
1208 FXSYS_round(points[v2].X), FXSYS_round(points[v2].Y)); | 1208 FXSYS_round(points[v2].X), FXSYS_round(points[v2].Y)); |
1209 CallFunc(GdipDeletePen)(pPen); | 1209 CallFunc(GdipDeletePen)(pPen); |
1210 return TRUE; | 1210 return TRUE; |
1211 } | 1211 } |
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1373 new_read_position > m_InterStream.GetLength()) { | 1373 new_read_position > m_InterStream.GetLength()) { |
1374 return STG_E_SEEKERROR; | 1374 return STG_E_SEEKERROR; |
1375 } | 1375 } |
1376 m_ReadPos = new_read_position; | 1376 m_ReadPos = new_read_position; |
1377 if (lpNewFilePointer) { | 1377 if (lpNewFilePointer) { |
1378 lpNewFilePointer->QuadPart = m_ReadPos; | 1378 lpNewFilePointer->QuadPart = m_ReadPos; |
1379 } | 1379 } |
1380 return S_OK; | 1380 return S_OK; |
1381 } | 1381 } |
1382 virtual HRESULT STDMETHODCALLTYPE Stat(STATSTG* pStatstg, DWORD grfStatFlag) { | 1382 virtual HRESULT STDMETHODCALLTYPE Stat(STATSTG* pStatstg, DWORD grfStatFlag) { |
1383 if (pStatstg == NULL) { | 1383 if (!pStatstg) { |
1384 return STG_E_INVALIDFUNCTION; | 1384 return STG_E_INVALIDFUNCTION; |
1385 } | 1385 } |
1386 ZeroMemory(pStatstg, sizeof(STATSTG)); | 1386 ZeroMemory(pStatstg, sizeof(STATSTG)); |
1387 pStatstg->cbSize.QuadPart = m_InterStream.GetLength(); | 1387 pStatstg->cbSize.QuadPart = m_InterStream.GetLength(); |
1388 return S_OK; | 1388 return S_OK; |
1389 } | 1389 } |
1390 }; | 1390 }; |
1391 typedef struct { | 1391 typedef struct { |
1392 BITMAPINFO* pbmi; | 1392 BITMAPINFO* pbmi; |
1393 int Stride; | 1393 int Stride; |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1485 if (pInfo->pStream) { | 1485 if (pInfo->pStream) { |
1486 pInfo->pStream->Release(); | 1486 pInfo->pStream->Release(); |
1487 } | 1487 } |
1488 FX_Free(pInfo); | 1488 FX_Free(pInfo); |
1489 } | 1489 } |
1490 CFX_DIBitmap* _FX_WindowsDIB_LoadFromBuf(BITMAPINFO* pbmi, | 1490 CFX_DIBitmap* _FX_WindowsDIB_LoadFromBuf(BITMAPINFO* pbmi, |
1491 LPVOID pData, | 1491 LPVOID pData, |
1492 FX_BOOL bAlpha); | 1492 FX_BOOL bAlpha); |
1493 CFX_DIBitmap* CGdiplusExt::LoadDIBitmap(WINDIB_Open_Args_ args) { | 1493 CFX_DIBitmap* CGdiplusExt::LoadDIBitmap(WINDIB_Open_Args_ args) { |
1494 PREVIEW3_DIBITMAP* pInfo = ::LoadDIBitmap(args); | 1494 PREVIEW3_DIBITMAP* pInfo = ::LoadDIBitmap(args); |
1495 if (pInfo == NULL) { | 1495 if (!pInfo) { |
1496 return NULL; | 1496 return NULL; |
1497 } | 1497 } |
1498 int height = abs(pInfo->pbmi->bmiHeader.biHeight); | 1498 int height = abs(pInfo->pbmi->bmiHeader.biHeight); |
1499 int width = pInfo->pbmi->bmiHeader.biWidth; | 1499 int width = pInfo->pbmi->bmiHeader.biWidth; |
1500 int dest_pitch = (width * pInfo->pbmi->bmiHeader.biBitCount + 31) / 32 * 4; | 1500 int dest_pitch = (width * pInfo->pbmi->bmiHeader.biBitCount + 31) / 32 * 4; |
1501 LPBYTE pData = FX_Alloc2D(BYTE, dest_pitch, height); | 1501 LPBYTE pData = FX_Alloc2D(BYTE, dest_pitch, height); |
1502 if (dest_pitch == pInfo->Stride) { | 1502 if (dest_pitch == pInfo->Stride) { |
1503 FXSYS_memcpy(pData, pInfo->pScan0, dest_pitch * height); | 1503 FXSYS_memcpy(pData, pInfo->pScan0, dest_pitch * height); |
1504 } else { | 1504 } else { |
1505 for (int i = 0; i < height; i++) { | 1505 for (int i = 0; i < height; i++) { |
1506 FXSYS_memcpy(pData + dest_pitch * i, pInfo->pScan0 + pInfo->Stride * i, | 1506 FXSYS_memcpy(pData + dest_pitch * i, pInfo->pScan0 + pInfo->Stride * i, |
1507 dest_pitch); | 1507 dest_pitch); |
1508 } | 1508 } |
1509 } | 1509 } |
1510 CFX_DIBitmap* pDIBitmap = _FX_WindowsDIB_LoadFromBuf( | 1510 CFX_DIBitmap* pDIBitmap = _FX_WindowsDIB_LoadFromBuf( |
1511 pInfo->pbmi, pData, pInfo->pbmi->bmiHeader.biBitCount == 32); | 1511 pInfo->pbmi, pData, pInfo->pbmi->bmiHeader.biBitCount == 32); |
1512 FX_Free(pData); | 1512 FX_Free(pData); |
1513 FreeDIBitmap(pInfo); | 1513 FreeDIBitmap(pInfo); |
1514 return pDIBitmap; | 1514 return pDIBitmap; |
1515 } | 1515 } |
1516 #endif | 1516 #endif |
OLD | NEW |