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

Side by Side Diff: src/gpu/GrStencilAndCoverTextContext.cpp

Issue 1015173002: Let text contexts fall back directly to paths (Closed) Base URL: https://skia.googlesource.com/skia.git@text-blob-to-context
Patch Set: tidying Created 5 years, 9 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
OLDNEW
1 /* 1 /*
2 * Copyright 2014 Google Inc. 2 * Copyright 2014 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 "GrStencilAndCoverTextContext.h" 8 #include "GrStencilAndCoverTextContext.h"
9 #include "GrBitmapTextContext.h" 9 #include "GrBitmapTextContext.h"
10 #include "GrDrawTarget.h" 10 #include "GrDrawTarget.h"
11 #include "GrGpu.h" 11 #include "GrGpu.h"
12 #include "GrPath.h" 12 #include "GrPath.h"
13 #include "GrPathRange.h" 13 #include "GrPathRange.h"
14 #include "SkAutoKern.h" 14 #include "SkAutoKern.h"
15 #include "SkDraw.h" 15 #include "SkDraw.h"
16 #include "SkDrawProcs.h" 16 #include "SkDrawProcs.h"
17 #include "SkGlyphCache.h" 17 #include "SkGlyphCache.h"
18 #include "SkGpuDevice.h" 18 #include "SkGpuDevice.h"
19 #include "SkPath.h" 19 #include "SkPath.h"
20 #include "SkTextMapStateProc.h" 20 #include "SkTextMapStateProc.h"
21 #include "SkTextFormatParams.h" 21 #include "SkTextFormatParams.h"
22 22
23 GrStencilAndCoverTextContext::GrStencilAndCoverTextContext( 23 GrStencilAndCoverTextContext::GrStencilAndCoverTextContext(GrContext* context,
24 GrContext* context, const SkDeviceProperties& properties) 24 SkGpuDevice* gpuDevic e,
25 : GrTextContext(context, properties) 25 const SkDevicePropert ies& properties)
26 : GrTextContext(context, gpuDevice, properties)
26 , fStroke(SkStrokeRec::kFill_InitStyle) 27 , fStroke(SkStrokeRec::kFill_InitStyle)
27 , fQueuedGlyphCount(0) 28 , fQueuedGlyphCount(0)
28 , fFallbackGlyphsIdx(kGlyphBufferSize) { 29 , fFallbackGlyphsIdx(kGlyphBufferSize) {
29 } 30 }
30 31
31 GrStencilAndCoverTextContext* GrStencilAndCoverTextContext::Create(GrContext* co ntext, 32 GrStencilAndCoverTextContext*
32 const SkDeviceP roperties& props) { 33 GrStencilAndCoverTextContext::Create(GrContext* context, SkGpuDevice* gpuDevice,
34 const SkDeviceProperties& props) {
33 GrStencilAndCoverTextContext* textContext = SkNEW_ARGS(GrStencilAndCoverText Context, 35 GrStencilAndCoverTextContext* textContext = SkNEW_ARGS(GrStencilAndCoverText Context,
34 (context, props)); 36 (context, gpuDevice, props));
35 textContext->fFallbackTextContext = GrBitmapTextContext::Create(context, pro ps); 37 textContext->fFallbackTextContext = GrBitmapTextContext::Create(context, gpu Device, props);
36 38
37 return textContext; 39 return textContext;
38 } 40 }
39 41
40 GrStencilAndCoverTextContext::~GrStencilAndCoverTextContext() { 42 GrStencilAndCoverTextContext::~GrStencilAndCoverTextContext() {
41 } 43 }
42 44
43 bool GrStencilAndCoverTextContext::canDraw(const SkPaint& paint, const SkMatrix& viewMatrix) { 45 bool GrStencilAndCoverTextContext::canDraw(const SkPaint& paint, const SkMatrix& viewMatrix) {
44 if (paint.getRasterizer()) { 46 if (paint.getRasterizer()) {
45 return false; 47 return false;
(...skipping 392 matching lines...) Expand 10 before | Expand all | Expand 10 after
438 fStroke.applyToPaint(&skPaintFallback); 440 fStroke.applyToPaint(&skPaintFallback);
439 } 441 }
440 skPaintFallback.setTextAlign(SkPaint::kLeft_Align); // Align has already been accounted for. 442 skPaintFallback.setTextAlign(SkPaint::kLeft_Align); // Align has already been accounted for.
441 skPaintFallback.setTextEncoding(SkPaint::kGlyphID_TextEncoding); 443 skPaintFallback.setTextEncoding(SkPaint::kGlyphID_TextEncoding);
442 444
443 SkMatrix inverse; 445 SkMatrix inverse;
444 if (this->mapToFallbackContext(&inverse)) { 446 if (this->mapToFallbackContext(&inverse)) {
445 inverse.mapPoints(&fGlyphPositions[fFallbackGlyphsIdx], fallbackGlyp hCount); 447 inverse.mapPoints(&fGlyphPositions[fFallbackGlyphsIdx], fallbackGlyp hCount);
446 } 448 }
447 449
448 fFallbackTextContext->drawPosText(fRenderTarget, fClip, paintFallback, s kPaintFallback, 450 fFallbackTextContext->onDrawPosText(
449 fViewMatrix, (char*)&fGlyphIndices[fFa llbackGlyphsIdx], 451 fRenderTarget, fClip, paintFallback, skPaintFallback,
450 2 * fallbackGlyphCount, 452 fViewMatrix, (char*)&fGlyphIndices[fFallbackGlyphsIdx],
451 get_xy_scalar_array(&fGlyphPositions[f FallbackGlyphsIdx]), 453 2 * fallbackGlyphCount,
452 2, SkPoint::Make(0, 0)); 454 get_xy_scalar_array(&fGlyphPositions[fFallbackGlyphsIdx]),
455 2, SkPoint::Make(0, 0));
453 456
454 fFallbackGlyphsIdx = kGlyphBufferSize; 457 fFallbackGlyphsIdx = kGlyphBufferSize;
455 } 458 }
456 } 459 }
457 460
458 void GrStencilAndCoverTextContext::finish() { 461 void GrStencilAndCoverTextContext::finish() {
459 this->flush(); 462 this->flush();
460 463
461 fGlyphs->unref(); 464 fGlyphs->unref();
462 fGlyphs = NULL; 465 fGlyphs = NULL;
463 466
464 SkGlyphCache::AttachCache(fGlyphCache); 467 SkGlyphCache::AttachCache(fGlyphCache);
465 fGlyphCache = NULL; 468 fGlyphCache = NULL;
466 469
467 fPipelineBuilder.stencil()->setDisabled(); 470 fPipelineBuilder.stencil()->setDisabled();
468 fStateRestore.set(NULL); 471 fStateRestore.set(NULL);
469 fViewMatrix = fContextInitialMatrix; 472 fViewMatrix = fContextInitialMatrix;
470 GrTextContext::finish(); 473 GrTextContext::finish();
471 } 474 }
472 475
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698