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

Side by Side Diff: src/xps/SkXPSDevice.cpp

Issue 2000853003: SkXPS: clean up SkConstexprMath (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: 2016-05-30 (Monday) 10:22:51 EDT 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 | « src/xps/SkConstexprMath.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2011 Google Inc. 2 * Copyright 2011 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "SkTypes.h" 8 #include "SkTypes.h"
9 #if defined(SK_BUILD_FOR_WIN32) 9 #if defined(SK_BUILD_FOR_WIN32)
10 10
11 #ifndef UNICODE 11 #ifndef UNICODE
12 #define UNICODE 12 #define UNICODE
13 #endif 13 #endif
14 #ifndef _UNICODE 14 #ifndef _UNICODE
15 #define _UNICODE 15 #define _UNICODE
16 #endif 16 #endif
17 #include <ObjBase.h> 17 #include <ObjBase.h>
18 #include <XpsObjectModel.h> 18 #include <XpsObjectModel.h>
19 #include <T2EmbApi.h> 19 #include <T2EmbApi.h>
20 #include <FontSub.h> 20 #include <FontSub.h>
21 #include <limits>
21 22
22 #include "SkColor.h" 23 #include "SkColor.h"
23 #include "SkConstexprMath.h"
24 #include "SkData.h" 24 #include "SkData.h"
25 #include "SkDraw.h" 25 #include "SkDraw.h"
26 #include "SkEndian.h" 26 #include "SkEndian.h"
27 #include "SkFindAndPlaceGlyph.h" 27 #include "SkFindAndPlaceGlyph.h"
28 #include "SkGeometry.h" 28 #include "SkGeometry.h"
29 #include "SkGlyphCache.h" 29 #include "SkGlyphCache.h"
30 #include "SkHRESULT.h" 30 #include "SkHRESULT.h"
31 #include "SkImageEncoder.h" 31 #include "SkImageEncoder.h"
32 #include "SkIStream.h" 32 #include "SkIStream.h"
33 #include "SkMaskFilter.h" 33 #include "SkMaskFilter.h"
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
183 this->fCurrentUnitsPerMeter = unitsPerMeter; 183 this->fCurrentUnitsPerMeter = unitsPerMeter;
184 this->fCurrentPixelsPerMeter = pixelsPerMeter; 184 this->fCurrentPixelsPerMeter = pixelsPerMeter;
185 185
186 this->fCurrentXpsCanvas.reset(); 186 this->fCurrentXpsCanvas.reset();
187 HRBM(this->fXpsFactory->CreateCanvas(&this->fCurrentXpsCanvas), 187 HRBM(this->fXpsFactory->CreateCanvas(&this->fCurrentXpsCanvas),
188 "Could not create base canvas."); 188 "Could not create base canvas.");
189 189
190 return true; 190 return true;
191 } 191 }
192 192
193 template <typename T> static constexpr size_t sk_digits_in() {
194 return static_cast<size_t>(std::numeric_limits<T>::digits10 + 1);
195 }
196
193 HRESULT SkXPSDevice::createXpsThumbnail(IXpsOMPage* page, 197 HRESULT SkXPSDevice::createXpsThumbnail(IXpsOMPage* page,
194 const unsigned int pageNum, 198 const unsigned int pageNum,
195 IXpsOMImageResource** image) { 199 IXpsOMImageResource** image) {
196 SkTScopedComPtr<IXpsOMThumbnailGenerator> thumbnailGenerator; 200 SkTScopedComPtr<IXpsOMThumbnailGenerator> thumbnailGenerator;
197 HRM(CoCreateInstance( 201 HRM(CoCreateInstance(
198 CLSID_XpsOMThumbnailGenerator, 202 CLSID_XpsOMThumbnailGenerator,
199 nullptr, 203 nullptr,
200 CLSCTX_INPROC_SERVER, 204 CLSCTX_INPROC_SERVER,
201 IID_PPV_ARGS(&thumbnailGenerator)), 205 IID_PPV_ARGS(&thumbnailGenerator)),
202 "Could not create thumbnail generator."); 206 "Could not create thumbnail generator.");
203 207
204 SkTScopedComPtr<IOpcPartUri> partUri; 208 SkTScopedComPtr<IOpcPartUri> partUri;
205 static const size_t size = SkTUMax< 209 constexpr size_t size = SkTMax(
bungeman-skia 2016/05/31 18:07:17 I've gone back and forth now trying to figure out
206 SK_ARRAY_COUNT(L"/Documents/1/Metadata/.png") + SK_DIGITS_IN(pageNum), 210 SK_ARRAY_COUNT(L"/Documents/1/Metadata/.png") + sk_digits_in<decltyp e(pageNum)>(),
207 SK_ARRAY_COUNT(L"/Metadata/" L_GUID_ID L".png") 211 SK_ARRAY_COUNT(L"/Metadata/" L_GUID_ID L".png"));
208 >::value;
209 wchar_t buffer[size]; 212 wchar_t buffer[size];
210 if (pageNum > 0) { 213 if (pageNum > 0) {
211 swprintf_s(buffer, size, L"/Documents/1/Metadata/%u.png", pageNum); 214 swprintf_s(buffer, size, L"/Documents/1/Metadata/%u.png", pageNum);
212 } else { 215 } else {
213 wchar_t id[GUID_ID_LEN]; 216 wchar_t id[GUID_ID_LEN];
214 HR(this->createId(id, GUID_ID_LEN)); 217 HR(this->createId(id, GUID_ID_LEN));
215 swprintf_s(buffer, size, L"/Metadata/%s.png", id); 218 swprintf_s(buffer, size, L"/Metadata/%s.png", id);
216 } 219 }
217 HRM(this->fXpsFactory->CreatePartUri(buffer, &partUri), 220 HRM(this->fXpsFactory->CreatePartUri(buffer, &partUri),
218 "Could not create thumbnail part uri."); 221 "Could not create thumbnail part uri.");
219 222
220 HRM(thumbnailGenerator->GenerateThumbnail(page, 223 HRM(thumbnailGenerator->GenerateThumbnail(page,
221 XPS_IMAGE_TYPE_PNG, 224 XPS_IMAGE_TYPE_PNG,
222 XPS_THUMBNAIL_SIZE_LARGE, 225 XPS_THUMBNAIL_SIZE_LARGE,
223 partUri.get(), 226 partUri.get(),
224 image), 227 image),
225 "Could not generate thumbnail."); 228 "Could not generate thumbnail.");
226 229
227 return S_OK; 230 return S_OK;
228 } 231 }
229 232
230 HRESULT SkXPSDevice::createXpsPage(const XPS_SIZE& pageSize, 233 HRESULT SkXPSDevice::createXpsPage(const XPS_SIZE& pageSize,
231 IXpsOMPage** page) { 234 IXpsOMPage** page) {
232 static const size_t size = SK_ARRAY_COUNT(L"/Documents/1/Pages/.fpage") 235 constexpr size_t size =
233 + SK_DIGITS_IN(fCurrentPage); 236 SK_ARRAY_COUNT(L"/Documents/1/Pages/.fpage")
237 + sk_digits_in<decltype(fCurrentPage)>();
234 wchar_t buffer[size]; 238 wchar_t buffer[size];
235 swprintf_s(buffer, size, L"/Documents/1/Pages/%u.fpage", 239 swprintf_s(buffer, size, L"/Documents/1/Pages/%u.fpage",
236 this->fCurrentPage); 240 this->fCurrentPage);
237 SkTScopedComPtr<IOpcPartUri> partUri; 241 SkTScopedComPtr<IOpcPartUri> partUri;
238 HRM(this->fXpsFactory->CreatePartUri(buffer, &partUri), 242 HRM(this->fXpsFactory->CreatePartUri(buffer, &partUri),
239 "Could not create page part uri."); 243 "Could not create page part uri.");
240 244
241 //If the language is unknown, use "und" (XPS Spec 2.3.5.1). 245 //If the language is unknown, use "und" (XPS Spec 2.3.5.1).
242 HRM(this->fXpsFactory->CreatePage(&pageSize, 246 HRM(this->fXpsFactory->CreatePage(&pageSize,
243 L"und", 247 L"und",
(...skipping 2027 matching lines...) Expand 10 before | Expand all | Expand 10 after
2271 //SkXPSDevice* dev = new SkXPSDevice(this); 2275 //SkXPSDevice* dev = new SkXPSDevice(this);
2272 //SkSize s = SkSize::Make(width, height); 2276 //SkSize s = SkSize::Make(width, height);
2273 //dev->BeginCanvas(s, s, SkMatrix::I()); 2277 //dev->BeginCanvas(s, s, SkMatrix::I());
2274 //return dev; 2278 //return dev;
2275 } 2279 }
2276 #endif 2280 #endif
2277 return new SkXPSDevice(this->fXpsFactory.get()); 2281 return new SkXPSDevice(this->fXpsFactory.get());
2278 } 2282 }
2279 2283
2280 #endif//defined(SK_BUILD_FOR_WIN32) 2284 #endif//defined(SK_BUILD_FOR_WIN32)
OLDNEW
« no previous file with comments | « src/xps/SkConstexprMath.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698