OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2013 Google Inc. | 2 * Copyright 2013 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 "GrBitmapTextContext.h" | 8 #include "GrBitmapTextContext.h" |
9 #include "GrAtlas.h" | 9 #include "GrAtlas.h" |
10 #include "GrDrawTarget.h" | 10 #include "GrDrawTarget.h" |
(...skipping 436 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
447 if (true || NULL == glyph->fPlot) { | 447 if (true || NULL == glyph->fPlot) { |
448 int x = vx >> 16; | 448 int x = vx >> 16; |
449 int y = vy >> 16; | 449 int y = vy >> 16; |
450 if (fClipRect.quickReject(x, y, x + width, y + height)) { | 450 if (fClipRect.quickReject(x, y, x + width, y + height)) { |
451 // SkCLZ(3); // so we can set a break-point in the debugger | 451 // SkCLZ(3); // so we can set a break-point in the debugger |
452 return; | 452 return; |
453 } | 453 } |
454 } | 454 } |
455 | 455 |
456 if (NULL == glyph->fPlot) { | 456 if (NULL == glyph->fPlot) { |
457 if (fStrike->addGlyphToAtlas(glyph, scaler)) { | 457 if (!fStrike->glyphTooLargeForAtlas(glyph)) { |
458 goto HAS_ATLAS; | 458 if (fStrike->addGlyphToAtlas(glyph, scaler)) { |
459 } | 459 goto HAS_ATLAS; |
| 460 } |
460 | 461 |
461 // try to clear out an unused plot before we flush | 462 // try to clear out an unused plot before we flush |
462 if (fContext->getFontCache()->freeUnusedPlot(fStrike) && | 463 if (fContext->getFontCache()->freeUnusedPlot(fStrike) && |
463 fStrike->addGlyphToAtlas(glyph, scaler)) { | 464 fStrike->addGlyphToAtlas(glyph, scaler)) { |
464 goto HAS_ATLAS; | 465 goto HAS_ATLAS; |
465 } | 466 } |
466 | 467 |
467 if (c_DumpFontCache) { | 468 if (c_DumpFontCache) { |
468 #ifdef SK_DEVELOPER | 469 #ifdef SK_DEVELOPER |
469 fContext->getFontCache()->dump(); | 470 fContext->getFontCache()->dump(); |
470 #endif | 471 #endif |
471 } | 472 } |
472 | 473 |
473 // flush any accumulated draws to allow us to free up a plot | 474 // flush any accumulated draws to allow us to free up a plot |
474 this->flushGlyphs(); | 475 this->flushGlyphs(); |
475 fContext->flush(); | 476 fContext->flush(); |
476 | 477 |
477 // we should have an unused plot now | 478 // we should have an unused plot now |
478 if (fContext->getFontCache()->freeUnusedPlot(fStrike) && | 479 if (fContext->getFontCache()->freeUnusedPlot(fStrike) && |
479 fStrike->addGlyphToAtlas(glyph, scaler)) { | 480 fStrike->addGlyphToAtlas(glyph, scaler)) { |
480 goto HAS_ATLAS; | 481 goto HAS_ATLAS; |
| 482 } |
481 } | 483 } |
482 | 484 |
483 if (NULL == glyph->fPath) { | 485 if (NULL == glyph->fPath) { |
484 SkPath* path = SkNEW(SkPath); | 486 SkPath* path = SkNEW(SkPath); |
485 if (!scaler->getGlyphPath(glyph->glyphID(), path)) { | 487 if (!scaler->getGlyphPath(glyph->glyphID(), path)) { |
486 // flag the glyph as being dead? | 488 // flag the glyph as being dead? |
487 delete path; | 489 delete path; |
488 return; | 490 return; |
489 } | 491 } |
490 glyph->fPath = path; | 492 glyph->fPath = path; |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
596 } | 598 } |
597 // color comes after position. | 599 // color comes after position. |
598 GrColor* colors = reinterpret_cast<GrColor*>(positions + 1); | 600 GrColor* colors = reinterpret_cast<GrColor*>(positions + 1); |
599 for (int i = 0; i < 4; ++i) { | 601 for (int i = 0; i < 4; ++i) { |
600 *colors = fPaint.getColor(); | 602 *colors = fPaint.getColor(); |
601 colors = reinterpret_cast<GrColor*>(reinterpret_cast<intptr_t>(colors
) + vertSize); | 603 colors = reinterpret_cast<GrColor*>(reinterpret_cast<intptr_t>(colors
) + vertSize); |
602 } | 604 } |
603 } | 605 } |
604 fCurrVertex += 4; | 606 fCurrVertex += 4; |
605 } | 607 } |
OLD | NEW |