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

Unified Diff: third_party/WebKit/Source/platform/fonts/Font.cpp

Issue 2869433002: [LayoutNG] Add Font::GetTextIntercepts for LayoutNG (Closed)
Patch Set: Fix compiler warning Created 3 years, 7 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 | « third_party/WebKit/Source/platform/fonts/Font.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/platform/fonts/Font.cpp
diff --git a/third_party/WebKit/Source/platform/fonts/Font.cpp b/third_party/WebKit/Source/platform/fonts/Font.cpp
index a4f48e8642184ebe9d2e771a7ec4b3b115c2d8d2..f3356b823088308a1b749e29c727ae9c86aa8ed8 100644
--- a/third_party/WebKit/Source/platform/fonts/Font.cpp
+++ b/third_party/WebKit/Source/platform/fonts/Font.cpp
@@ -272,14 +272,15 @@ float Font::Width(const TextRun& run,
return shaper.Width(run, fallback_fonts, glyph_bounds);
}
-static int GetInterceptsFromBlobs(
- const ShapeResultBloberizer::BlobBuffer& blobs,
- const SkPaint& paint,
- const std::tuple<float, float>& bounds,
- SkScalar* intercepts_buffer) {
+namespace { // anonymous namespace
+
+unsigned InterceptsFromBlobs(const ShapeResultBloberizer::BlobBuffer& blobs,
+ const SkPaint& paint,
+ const std::tuple<float, float>& bounds,
+ SkScalar* intercepts_buffer) {
SkScalar bounds_array[2] = {std::get<0>(bounds), std::get<1>(bounds)};
- int num_intervals = 0;
+ unsigned num_intervals = 0;
for (const auto& blob_info : blobs) {
DCHECK(blob_info.blob);
@@ -299,6 +300,26 @@ static int GetInterceptsFromBlobs(
return num_intervals;
}
+void GetTextInterceptsInternal(const ShapeResultBloberizer::BlobBuffer& blobs,
+ const PaintFlags& flags,
+ const std::tuple<float, float>& bounds,
+ Vector<Font::TextIntercept>& intercepts) {
+ // Get the number of intervals, without copying the actual values by
+ // specifying nullptr for the buffer, following the Skia allocation model for
+ // retrieving text intercepts.
+ SkPaint paint(ToSkPaint(flags));
+ unsigned num_intervals = InterceptsFromBlobs(blobs, paint, bounds, nullptr);
+ if (!num_intervals)
+ return;
+ DCHECK_EQ(num_intervals % 2, 0u);
+ intercepts.resize(num_intervals / 2u);
+
+ InterceptsFromBlobs(blobs, paint, bounds,
+ reinterpret_cast<SkScalar*>(intercepts.data()));
+}
+
+} // anonymous namespace
+
void Font::GetTextIntercepts(const TextRunPaintInfo& run_info,
float device_scale_factor,
const PaintFlags& flags,
@@ -309,26 +330,28 @@ void Font::GetTextIntercepts(const TextRunPaintInfo& run_info,
ShapeResultBloberizer bloberizer(
*this, device_scale_factor, ShapeResultBloberizer::Type::kTextIntercepts);
-
CachingWordShaper word_shaper(*this);
ShapeResultBuffer buffer;
word_shaper.FillResultBuffer(run_info, &buffer);
bloberizer.FillGlyphs(run_info, buffer);
- const auto& blobs = bloberizer.Blobs();
+ GetTextInterceptsInternal(bloberizer.Blobs(), flags, bounds, intercepts);
+}
- // Get the number of intervals, without copying the actual values by
- // specifying nullptr for the buffer, following the Skia allocation model for
- // retrieving text intercepts.
- SkPaint paint(ToSkPaint(flags));
- int num_intervals = GetInterceptsFromBlobs(blobs, paint, bounds, nullptr);
- if (!num_intervals)
+void Font::GetTextIntercepts(const TextFragmentPaintInfo& text_info,
+ float device_scale_factor,
+ const PaintFlags& flags,
+ const std::tuple<float, float>& bounds,
+ Vector<TextIntercept>& intercepts) const {
+ if (ShouldSkipDrawing())
return;
- DCHECK_EQ(num_intervals % 2, 0);
- intercepts.resize(num_intervals / 2);
- GetInterceptsFromBlobs(blobs, paint, bounds,
- reinterpret_cast<SkScalar*>(intercepts.data()));
+ ShapeResultBloberizer bloberizer(
+ *this, device_scale_factor, ShapeResultBloberizer::Type::kTextIntercepts);
+ bloberizer.FillGlyphs(text_info.text, text_info.from, text_info.to,
+ text_info.shape_result);
+
+ GetTextInterceptsInternal(bloberizer.Blobs(), flags, bounds, intercepts);
}
static inline FloatRect PixelSnappedSelectionRect(FloatRect rect) {
« no previous file with comments | « third_party/WebKit/Source/platform/fonts/Font.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698