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

Unified Diff: src/pdf/SkPDFDevice.cpp

Issue 2300393002: SkPDF: implement drawTextBlob() (Closed)
Patch Set: 2016-09-02 (Friday) 10:00:45 EDT Created 4 years, 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/pdf/SkPDFDevice.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/pdf/SkPDFDevice.cpp
diff --git a/src/pdf/SkPDFDevice.cpp b/src/pdf/SkPDFDevice.cpp
index 24df879a9d1b27b6318feb96ece87ace73aa3563..226e96ba5e84260d83048cf34dcdc20780f7e0c7 100644
--- a/src/pdf/SkPDFDevice.cpp
+++ b/src/pdf/SkPDFDevice.cpp
@@ -6,12 +6,14 @@
*/
#include "SkPDFDevice.h"
+
#include "SkAnnotationKeys.h"
#include "SkBitmapDevice.h"
#include "SkBitmapKey.h"
#include "SkColor.h"
#include "SkColorFilter.h"
#include "SkDraw.h"
+#include "SkDrawFilter.h"
#include "SkGlyphCache.h"
#include "SkPath.h"
#include "SkPathEffect.h"
@@ -31,8 +33,9 @@
#include "SkScopeExit.h"
#include "SkString.h"
#include "SkSurface.h"
-#include "SkTextFormatParams.h"
#include "SkTemplates.h"
+#include "SkTextBlobRunIterator.h"
+#include "SkTextFormatParams.h"
#include "SkXfermodeInterpretation.h"
#define DPI_FOR_RASTER_SCALE_ONE 72
@@ -1063,7 +1066,8 @@ static void draw_transparent_text(SkPDFDevice* device,
void SkPDFDevice::internalDrawText(
const SkDraw& d, const void* sourceText, size_t sourceByteCount,
const SkScalar pos[], SkTextBlob::GlyphPositioning positioning,
- SkPoint offset, const SkPaint& srcPaint) {
+ SkPoint offset, const SkPaint& srcPaint, const uint32_t* clusters,
+ uint32_t textByteLength, const char* utf8Text) {
NOT_IMPLEMENTED(srcPaint.getMaskFilter() != nullptr, false);
if (srcPaint.getMaskFilter() != nullptr) {
// Don't pretend we support drawing MaskFilters, it makes for artifacts
@@ -1078,6 +1082,19 @@ void SkPDFDevice::internalDrawText(
// https://bug.skia.org/5665
return;
}
+ // TODO(halcanary): implement /ActualText with these values.
+ (void)clusters;
+ (void)textByteLength;
+ (void)utf8Text;
+ if (textByteLength > 0) {
+ SkASSERT(clusters);
+ SkASSERT(utf8Text);
+ SkASSERT(srcPaint.getTextEncoding() == SkPaint::kGlyphID_TextEncoding);
+ } else {
+ SkASSERT(nullptr == clusters);
+ SkASSERT(nullptr == utf8Text);
+ }
+
SkPaint paint = calculate_text_paint(srcPaint);
replace_srcmode_on_opaque_paint(&paint);
if (!paint.getTypeface()) {
@@ -1218,14 +1235,30 @@ void SkPDFDevice::internalDrawText(
void SkPDFDevice::drawText(const SkDraw& d, const void* text, size_t len,
SkScalar x, SkScalar y, const SkPaint& paint) {
this->internalDrawText(d, text, len, nullptr, SkTextBlob::kDefault_Positioning,
- SkPoint{x, y}, paint);
+ SkPoint{x, y}, paint, nullptr, 0, nullptr);
}
void SkPDFDevice::drawPosText(const SkDraw& d, const void* text, size_t len,
const SkScalar pos[], int scalarsPerPos,
const SkPoint& offset, const SkPaint& paint) {
this->internalDrawText(d, text, len, pos, (SkTextBlob::GlyphPositioning)scalarsPerPos,
- offset, paint);
+ offset, paint, nullptr, 0, nullptr);
+}
+
+void SkPDFDevice::drawTextBlob(const SkDraw& draw, const SkTextBlob* blob, SkScalar x, SkScalar y,
+ const SkPaint &paint, SkDrawFilter* drawFilter) {
+ for (SkTextBlobRunIterator it(blob); !it.done(); it.next()) {
+ SkPaint runPaint(paint);
+ it.applyFontToPaint(&runPaint);
+ if (drawFilter && !drawFilter->filter(&runPaint, SkDrawFilter::kText_Type)) {
+ continue;
+ }
+ runPaint.setFlags(this->filterTextFlags(runPaint));
+ SkPoint offset = it.offset() + SkPoint{x, y};
+ this->internalDrawText(draw, it.glyphs(), sizeof(SkGlyphID) * it.glyphCount(),
+ it.pos(), it.positioning(), offset, runPaint,
+ it.clusters(), it.textSize(), it.text());
+ }
}
void SkPDFDevice::drawVertices(const SkDraw& d, SkCanvas::VertexMode,
« no previous file with comments | « src/pdf/SkPDFDevice.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698