Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(536)

Side by Side Diff: core/fxge/win32/fx_win32_dib.cpp

Issue 2032613003: Get rid of NULLs in core/ (Closed) Base URL: https://pdfium.googlesource.com/pdfium@master
Patch Set: Fix a bad merge Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « core/fxge/win32/dwrite_int.h ('k') | core/fxge/win32/fx_win32_dwrite.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/fxge/include/fx_ge.h" 7 #include "core/fxge/include/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 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 bBottomUp = FALSE; 62 bBottomUp = FALSE;
63 } 63 }
64 int pitch = (width * pbmi->bmiHeader.biBitCount + 31) / 32 * 4; 64 int pitch = (width * pbmi->bmiHeader.biBitCount + 31) / 32 * 4;
65 CFX_DIBitmap* pBitmap = new CFX_DIBitmap; 65 CFX_DIBitmap* pBitmap = new CFX_DIBitmap;
66 FXDIB_Format format = bAlpha 66 FXDIB_Format format = bAlpha
67 ? (FXDIB_Format)(pbmi->bmiHeader.biBitCount + 0x200) 67 ? (FXDIB_Format)(pbmi->bmiHeader.biBitCount + 0x200)
68 : (FXDIB_Format)pbmi->bmiHeader.biBitCount; 68 : (FXDIB_Format)pbmi->bmiHeader.biBitCount;
69 FX_BOOL ret = pBitmap->Create(width, height, format); 69 FX_BOOL ret = pBitmap->Create(width, height, format);
70 if (!ret) { 70 if (!ret) {
71 delete pBitmap; 71 delete pBitmap;
72 return NULL; 72 return nullptr;
73 } 73 }
74 FXSYS_memcpy(pBitmap->GetBuffer(), pData, pitch * height); 74 FXSYS_memcpy(pBitmap->GetBuffer(), pData, pitch * height);
75 if (bBottomUp) { 75 if (bBottomUp) {
76 uint8_t* temp_buf = FX_Alloc(uint8_t, pitch); 76 uint8_t* temp_buf = FX_Alloc(uint8_t, pitch);
77 int top = 0, bottom = height - 1; 77 int top = 0, bottom = height - 1;
78 while (top < bottom) { 78 while (top < bottom) {
79 FXSYS_memcpy(temp_buf, pBitmap->GetBuffer() + top * pitch, pitch); 79 FXSYS_memcpy(temp_buf, pBitmap->GetBuffer() + top * pitch, pitch);
80 FXSYS_memcpy(pBitmap->GetBuffer() + top * pitch, 80 FXSYS_memcpy(pBitmap->GetBuffer() + top * pitch,
81 pBitmap->GetBuffer() + bottom * pitch, pitch); 81 pBitmap->GetBuffer() + bottom * pitch, pitch);
82 FXSYS_memcpy(pBitmap->GetBuffer() + bottom * pitch, temp_buf, pitch); 82 FXSYS_memcpy(pBitmap->GetBuffer() + bottom * pitch, temp_buf, pitch);
83 top++; 83 top++;
84 bottom--; 84 bottom--;
85 } 85 }
86 FX_Free(temp_buf); 86 FX_Free(temp_buf);
87 temp_buf = NULL; 87 temp_buf = nullptr;
88 } 88 }
89 if (pbmi->bmiHeader.biBitCount == 1) { 89 if (pbmi->bmiHeader.biBitCount == 1) {
90 for (int i = 0; i < 2; i++) { 90 for (int i = 0; i < 2; i++) {
91 pBitmap->SetPaletteEntry(i, ((uint32_t*)pbmi->bmiColors)[i] | 0xff000000); 91 pBitmap->SetPaletteEntry(i, ((uint32_t*)pbmi->bmiColors)[i] | 0xff000000);
92 } 92 }
93 } else if (pbmi->bmiHeader.biBitCount == 8) { 93 } else if (pbmi->bmiHeader.biBitCount == 8) {
94 for (int i = 0; i < 256; i++) { 94 for (int i = 0; i < 256; i++) {
95 pBitmap->SetPaletteEntry(i, ((uint32_t*)pbmi->bmiColors)[i] | 0xff000000); 95 pBitmap->SetPaletteEntry(i, ((uint32_t*)pbmi->bmiColors)[i] | 0xff000000);
96 } 96 }
97 } 97 }
98 return pBitmap; 98 return pBitmap;
99 } 99 }
100 CFX_DIBitmap* CFX_WindowsDIB::LoadFromBuf(BITMAPINFO* pbmi, LPVOID pData) { 100 CFX_DIBitmap* CFX_WindowsDIB::LoadFromBuf(BITMAPINFO* pbmi, LPVOID pData) {
101 return _FX_WindowsDIB_LoadFromBuf(pbmi, pData, FALSE); 101 return _FX_WindowsDIB_LoadFromBuf(pbmi, pData, FALSE);
102 } 102 }
103 HBITMAP CFX_WindowsDIB::GetDDBitmap(const CFX_DIBitmap* pBitmap, HDC hDC) { 103 HBITMAP CFX_WindowsDIB::GetDDBitmap(const CFX_DIBitmap* pBitmap, HDC hDC) {
104 CFX_ByteString info = GetBitmapInfo(pBitmap); 104 CFX_ByteString info = GetBitmapInfo(pBitmap);
105 HBITMAP hBitmap = NULL; 105 return CreateDIBitmap(hDC, (BITMAPINFOHEADER*)info.c_str(), CBM_INIT,
106 hBitmap = CreateDIBitmap(hDC, (BITMAPINFOHEADER*)info.c_str(), CBM_INIT, 106 pBitmap->GetBuffer(), (BITMAPINFO*)info.c_str(),
107 pBitmap->GetBuffer(), (BITMAPINFO*)info.c_str(), 107 DIB_RGB_COLORS);
108 DIB_RGB_COLORS);
109 return hBitmap;
110 } 108 }
111 void GetBitmapSize(HBITMAP hBitmap, int& w, int& h) { 109 void GetBitmapSize(HBITMAP hBitmap, int& w, int& h) {
112 BITMAP bmp; 110 BITMAP bmp;
113 GetObject(hBitmap, sizeof bmp, &bmp); 111 GetObject(hBitmap, sizeof bmp, &bmp);
114 w = bmp.bmWidth; 112 w = bmp.bmWidth;
115 h = bmp.bmHeight; 113 h = bmp.bmHeight;
116 } 114 }
117 CFX_DIBitmap* CFX_WindowsDIB::LoadFromFile(const FX_WCHAR* filename) { 115 CFX_DIBitmap* CFX_WindowsDIB::LoadFromFile(const FX_WCHAR* filename) {
118 CWin32Platform* pPlatform = 116 CWin32Platform* pPlatform =
119 (CWin32Platform*)CFX_GEModule::Get()->GetPlatformData(); 117 (CWin32Platform*)CFX_GEModule::Get()->GetPlatformData();
120 if (pPlatform->m_GdiplusExt.IsAvailable()) { 118 if (pPlatform->m_GdiplusExt.IsAvailable()) {
121 WINDIB_Open_Args_ args; 119 WINDIB_Open_Args_ args;
122 args.flags = WINDIB_OPEN_PATHNAME; 120 args.flags = WINDIB_OPEN_PATHNAME;
123 args.path_name = filename; 121 args.path_name = filename;
124 return pPlatform->m_GdiplusExt.LoadDIBitmap(args); 122 return pPlatform->m_GdiplusExt.LoadDIBitmap(args);
125 } 123 }
126 HBITMAP hBitmap = (HBITMAP)LoadImageW(NULL, (wchar_t*)filename, IMAGE_BITMAP, 124 HBITMAP hBitmap = (HBITMAP)LoadImageW(nullptr, (wchar_t*)filename,
127 0, 0, LR_LOADFROMFILE); 125 IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
128 if (!hBitmap) { 126 if (!hBitmap) {
129 return NULL; 127 return nullptr;
130 } 128 }
131 HDC hDC = CreateCompatibleDC(NULL); 129 HDC hDC = CreateCompatibleDC(nullptr);
132 int width, height; 130 int width, height;
133 GetBitmapSize(hBitmap, width, height); 131 GetBitmapSize(hBitmap, width, height);
134 CFX_DIBitmap* pDIBitmap = new CFX_DIBitmap; 132 CFX_DIBitmap* pDIBitmap = new CFX_DIBitmap;
135 if (!pDIBitmap->Create(width, height, FXDIB_Rgb)) { 133 if (!pDIBitmap->Create(width, height, FXDIB_Rgb)) {
136 delete pDIBitmap; 134 delete pDIBitmap;
137 DeleteDC(hDC); 135 DeleteDC(hDC);
138 return NULL; 136 return nullptr;
139 } 137 }
140 CFX_ByteString info = GetBitmapInfo(pDIBitmap); 138 CFX_ByteString info = GetBitmapInfo(pDIBitmap);
141 int ret = GetDIBits(hDC, hBitmap, 0, height, pDIBitmap->GetBuffer(), 139 int ret = GetDIBits(hDC, hBitmap, 0, height, pDIBitmap->GetBuffer(),
142 (BITMAPINFO*)info.c_str(), DIB_RGB_COLORS); 140 (BITMAPINFO*)info.c_str(), DIB_RGB_COLORS);
143 if (!ret) { 141 if (!ret) {
144 delete pDIBitmap; 142 delete pDIBitmap;
145 pDIBitmap = NULL; 143 pDIBitmap = nullptr;
146 } 144 }
147 DeleteDC(hDC); 145 DeleteDC(hDC);
148 return pDIBitmap; 146 return pDIBitmap;
149 } 147 }
150 CFX_DIBitmap* CFX_WindowsDIB::LoadDIBitmap(WINDIB_Open_Args_ args) { 148 CFX_DIBitmap* CFX_WindowsDIB::LoadDIBitmap(WINDIB_Open_Args_ args) {
151 CWin32Platform* pPlatform = 149 CWin32Platform* pPlatform =
152 (CWin32Platform*)CFX_GEModule::Get()->GetPlatformData(); 150 (CWin32Platform*)CFX_GEModule::Get()->GetPlatformData();
153 if (pPlatform->m_GdiplusExt.IsAvailable()) { 151 if (pPlatform->m_GdiplusExt.IsAvailable()) {
154 return pPlatform->m_GdiplusExt.LoadDIBitmap(args); 152 return pPlatform->m_GdiplusExt.LoadDIBitmap(args);
155 } 153 }
156 if (args.flags == WINDIB_OPEN_MEMORY) { 154 if (args.flags == WINDIB_OPEN_MEMORY) {
157 return NULL; 155 return nullptr;
158 } 156 }
159 HBITMAP hBitmap = (HBITMAP)LoadImageW(NULL, (wchar_t*)args.path_name, 157 HBITMAP hBitmap = (HBITMAP)LoadImageW(nullptr, (wchar_t*)args.path_name,
160 IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); 158 IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
161 if (!hBitmap) { 159 if (!hBitmap) {
162 return NULL; 160 return nullptr;
163 } 161 }
164 HDC hDC = CreateCompatibleDC(NULL); 162 HDC hDC = CreateCompatibleDC(nullptr);
165 int width, height; 163 int width, height;
166 GetBitmapSize(hBitmap, width, height); 164 GetBitmapSize(hBitmap, width, height);
167 CFX_DIBitmap* pDIBitmap = new CFX_DIBitmap; 165 CFX_DIBitmap* pDIBitmap = new CFX_DIBitmap;
168 if (!pDIBitmap->Create(width, height, FXDIB_Rgb)) { 166 if (!pDIBitmap->Create(width, height, FXDIB_Rgb)) {
169 delete pDIBitmap; 167 delete pDIBitmap;
170 DeleteDC(hDC); 168 DeleteDC(hDC);
171 return NULL; 169 return nullptr;
172 } 170 }
173 CFX_ByteString info = GetBitmapInfo(pDIBitmap); 171 CFX_ByteString info = GetBitmapInfo(pDIBitmap);
174 int ret = GetDIBits(hDC, hBitmap, 0, height, pDIBitmap->GetBuffer(), 172 int ret = GetDIBits(hDC, hBitmap, 0, height, pDIBitmap->GetBuffer(),
175 (BITMAPINFO*)info.c_str(), DIB_RGB_COLORS); 173 (BITMAPINFO*)info.c_str(), DIB_RGB_COLORS);
176 if (!ret) { 174 if (!ret) {
177 delete pDIBitmap; 175 delete pDIBitmap;
178 pDIBitmap = NULL; 176 pDIBitmap = nullptr;
179 } 177 }
180 DeleteDC(hDC); 178 DeleteDC(hDC);
181 return pDIBitmap; 179 return pDIBitmap;
182 } 180 }
183 CFX_DIBitmap* CFX_WindowsDIB::LoadFromDDB(HDC hDC, 181 CFX_DIBitmap* CFX_WindowsDIB::LoadFromDDB(HDC hDC,
184 HBITMAP hBitmap, 182 HBITMAP hBitmap,
185 uint32_t* pPalette, 183 uint32_t* pPalette,
186 uint32_t palsize) { 184 uint32_t palsize) {
187 FX_BOOL bCreatedDC = !hDC; 185 FX_BOOL bCreatedDC = !hDC;
188 if (bCreatedDC) { 186 if (bCreatedDC) {
189 hDC = CreateCompatibleDC(NULL); 187 hDC = CreateCompatibleDC(nullptr);
190 } 188 }
191 BITMAPINFOHEADER bmih; 189 BITMAPINFOHEADER bmih;
192 FXSYS_memset(&bmih, 0, sizeof bmih); 190 FXSYS_memset(&bmih, 0, sizeof bmih);
193 bmih.biSize = sizeof bmih; 191 bmih.biSize = sizeof bmih;
194 GetDIBits(hDC, hBitmap, 0, 0, NULL, (BITMAPINFO*)&bmih, DIB_RGB_COLORS); 192 GetDIBits(hDC, hBitmap, 0, 0, nullptr, (BITMAPINFO*)&bmih, DIB_RGB_COLORS);
195 int width = bmih.biWidth; 193 int width = bmih.biWidth;
196 int height = abs(bmih.biHeight); 194 int height = abs(bmih.biHeight);
197 bmih.biHeight = -height; 195 bmih.biHeight = -height;
198 bmih.biCompression = BI_RGB; 196 bmih.biCompression = BI_RGB;
199 CFX_DIBitmap* pDIBitmap = new CFX_DIBitmap; 197 CFX_DIBitmap* pDIBitmap = new CFX_DIBitmap;
200 int ret = 0; 198 int ret = 0;
201 if (bmih.biBitCount == 1 || bmih.biBitCount == 8) { 199 if (bmih.biBitCount == 1 || bmih.biBitCount == 8) {
202 int size = sizeof(BITMAPINFOHEADER) + 8; 200 int size = sizeof(BITMAPINFOHEADER) + 8;
203 if (bmih.biBitCount == 8) { 201 if (bmih.biBitCount == 8) {
204 size += sizeof(uint32_t) * 254; 202 size += sizeof(uint32_t) * 254;
205 } 203 }
206 BITMAPINFO* pbmih = (BITMAPINFO*)FX_Alloc(uint8_t, size); 204 BITMAPINFO* pbmih = (BITMAPINFO*)FX_Alloc(uint8_t, size);
207 pbmih->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); 205 pbmih->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
208 pbmih->bmiHeader.biBitCount = bmih.biBitCount; 206 pbmih->bmiHeader.biBitCount = bmih.biBitCount;
209 pbmih->bmiHeader.biCompression = BI_RGB; 207 pbmih->bmiHeader.biCompression = BI_RGB;
210 pbmih->bmiHeader.biHeight = -height; 208 pbmih->bmiHeader.biHeight = -height;
211 pbmih->bmiHeader.biPlanes = 1; 209 pbmih->bmiHeader.biPlanes = 1;
212 pbmih->bmiHeader.biWidth = bmih.biWidth; 210 pbmih->bmiHeader.biWidth = bmih.biWidth;
213 if (!pDIBitmap->Create(bmih.biWidth, height, bmih.biBitCount == 1 211 if (!pDIBitmap->Create(bmih.biWidth, height, bmih.biBitCount == 1
214 ? FXDIB_1bppRgb 212 ? FXDIB_1bppRgb
215 : FXDIB_8bppRgb)) { 213 : FXDIB_8bppRgb)) {
216 delete pDIBitmap; 214 delete pDIBitmap;
217 FX_Free(pbmih); 215 FX_Free(pbmih);
218 if (bCreatedDC) { 216 if (bCreatedDC) {
219 DeleteDC(hDC); 217 DeleteDC(hDC);
220 } 218 }
221 return NULL; 219 return nullptr;
222 } 220 }
223 ret = GetDIBits(hDC, hBitmap, 0, height, pDIBitmap->GetBuffer(), 221 ret = GetDIBits(hDC, hBitmap, 0, height, pDIBitmap->GetBuffer(),
224 (BITMAPINFO*)pbmih, DIB_RGB_COLORS); 222 (BITMAPINFO*)pbmih, DIB_RGB_COLORS);
225 FX_Free(pbmih); 223 FX_Free(pbmih);
226 pbmih = NULL; 224 pbmih = nullptr;
227 pDIBitmap->CopyPalette(pPalette, palsize); 225 pDIBitmap->CopyPalette(pPalette, palsize);
228 } else { 226 } else {
229 if (bmih.biBitCount <= 24) { 227 if (bmih.biBitCount <= 24) {
230 bmih.biBitCount = 24; 228 bmih.biBitCount = 24;
231 } else { 229 } else {
232 bmih.biBitCount = 32; 230 bmih.biBitCount = 32;
233 } 231 }
234 if (!pDIBitmap->Create(bmih.biWidth, height, 232 if (!pDIBitmap->Create(bmih.biWidth, height,
235 bmih.biBitCount == 24 ? FXDIB_Rgb : FXDIB_Rgb32)) { 233 bmih.biBitCount == 24 ? FXDIB_Rgb : FXDIB_Rgb32)) {
236 delete pDIBitmap; 234 delete pDIBitmap;
237 if (bCreatedDC) { 235 if (bCreatedDC) {
238 DeleteDC(hDC); 236 DeleteDC(hDC);
239 } 237 }
240 return NULL; 238 return nullptr;
241 } 239 }
242 ret = GetDIBits(hDC, hBitmap, 0, height, pDIBitmap->GetBuffer(), 240 ret = GetDIBits(hDC, hBitmap, 0, height, pDIBitmap->GetBuffer(),
243 (BITMAPINFO*)&bmih, DIB_RGB_COLORS); 241 (BITMAPINFO*)&bmih, DIB_RGB_COLORS);
244 if (ret != 0 && bmih.biBitCount == 32) { 242 if (ret != 0 && bmih.biBitCount == 32) {
245 int pitch = pDIBitmap->GetPitch(); 243 int pitch = pDIBitmap->GetPitch();
246 for (int row = 0; row < height; row++) { 244 for (int row = 0; row < height; row++) {
247 uint8_t* dest_scan = (uint8_t*)(pDIBitmap->GetBuffer() + row * pitch); 245 uint8_t* dest_scan = (uint8_t*)(pDIBitmap->GetBuffer() + row * pitch);
248 for (int col = 0; col < width; col++) { 246 for (int col = 0; col < width; col++) {
249 dest_scan[3] = 255; 247 dest_scan[3] = 255;
250 dest_scan += 4; 248 dest_scan += 4;
251 } 249 }
252 } 250 }
253 } 251 }
254 } 252 }
255 if (ret == 0) { 253 if (ret == 0) {
256 delete pDIBitmap; 254 delete pDIBitmap;
257 pDIBitmap = NULL; 255 pDIBitmap = nullptr;
258 } 256 }
259 if (bCreatedDC) { 257 if (bCreatedDC) {
260 DeleteDC(hDC); 258 DeleteDC(hDC);
261 } 259 }
262 return pDIBitmap; 260 return pDIBitmap;
263 } 261 }
264 CFX_WindowsDIB::CFX_WindowsDIB(HDC hDC, int width, int height) { 262 CFX_WindowsDIB::CFX_WindowsDIB(HDC hDC, int width, int height) {
265 Create(width, height, FXDIB_Rgb, (uint8_t*)1); 263 Create(width, height, FXDIB_Rgb, (uint8_t*)1);
266 BITMAPINFOHEADER bmih; 264 BITMAPINFOHEADER bmih;
267 FXSYS_memset(&bmih, 0, sizeof bmih); 265 FXSYS_memset(&bmih, 0, sizeof bmih);
268 bmih.biSize = sizeof bmih; 266 bmih.biSize = sizeof bmih;
269 bmih.biBitCount = 24; 267 bmih.biBitCount = 24;
270 bmih.biHeight = -height; 268 bmih.biHeight = -height;
271 bmih.biPlanes = 1; 269 bmih.biPlanes = 1;
272 bmih.biWidth = width; 270 bmih.biWidth = width;
273 m_hBitmap = CreateDIBSection(hDC, (BITMAPINFO*)&bmih, DIB_RGB_COLORS, 271 m_hBitmap = CreateDIBSection(hDC, (BITMAPINFO*)&bmih, DIB_RGB_COLORS,
274 (LPVOID*)&m_pBuffer, NULL, 0); 272 (LPVOID*)&m_pBuffer, nullptr, 0);
275 m_hMemDC = CreateCompatibleDC(hDC); 273 m_hMemDC = CreateCompatibleDC(hDC);
276 m_hOldBitmap = (HBITMAP)SelectObject(m_hMemDC, m_hBitmap); 274 m_hOldBitmap = (HBITMAP)SelectObject(m_hMemDC, m_hBitmap);
277 } 275 }
278 CFX_WindowsDIB::~CFX_WindowsDIB() { 276 CFX_WindowsDIB::~CFX_WindowsDIB() {
279 SelectObject(m_hMemDC, m_hOldBitmap); 277 SelectObject(m_hMemDC, m_hOldBitmap);
280 DeleteDC(m_hMemDC); 278 DeleteDC(m_hMemDC);
281 DeleteObject(m_hBitmap); 279 DeleteObject(m_hBitmap);
282 } 280 }
283 void CFX_WindowsDIB::LoadFromDevice(HDC hDC, int left, int top) { 281 void CFX_WindowsDIB::LoadFromDevice(HDC hDC, int left, int top) {
284 ::BitBlt(m_hMemDC, 0, 0, m_Width, m_Height, hDC, left, top, SRCCOPY); 282 ::BitBlt(m_hMemDC, 0, 0, m_Width, m_Height, hDC, left, top, SRCCOPY);
285 } 283 }
286 void CFX_WindowsDIB::SetToDevice(HDC hDC, int left, int top) { 284 void CFX_WindowsDIB::SetToDevice(HDC hDC, int left, int top) {
287 ::BitBlt(hDC, left, top, m_Width, m_Height, m_hMemDC, 0, 0, SRCCOPY); 285 ::BitBlt(hDC, left, top, m_Width, m_Height, m_hMemDC, 0, 0, SRCCOPY);
288 } 286 }
289 #endif 287 #endif
OLDNEW
« no previous file with comments | « core/fxge/win32/dwrite_int.h ('k') | core/fxge/win32/fx_win32_dwrite.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698