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

Side by Side Diff: third_party/WebKit/Source/platform/fonts/shaping/ShapeResult.cpp

Issue 2807913002: Replace ASSERT, ASSERT_NOT_REACHED, and RELEASE_ASSERT in platform/fonts (Closed)
Patch Set: Replace ASSERT, ASSERT_NOT_REACHED, and RELEASE_ASSERT in platform/fonts Created 3 years, 8 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 (c) 2012 Google Inc. All rights reserved. 2 * Copyright (c) 2012 Google Inc. All rights reserved.
3 * Copyright (C) 2013 BlackBerry Limited. All rights reserved. 3 * Copyright (C) 2013 BlackBerry Limited. All rights reserved.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are 6 * modification, are permitted provided that the following conditions are
7 * met: 7 * met:
8 * 8 *
9 * * Redistributions of source code must retain the above copyright 9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
(...skipping 25 matching lines...) Expand all
36 #include "platform/fonts/Font.h" 36 #include "platform/fonts/Font.h"
37 #include "platform/fonts/shaping/ShapeResultInlineHeaders.h" 37 #include "platform/fonts/shaping/ShapeResultInlineHeaders.h"
38 #include "platform/fonts/shaping/ShapeResultSpacing.h" 38 #include "platform/fonts/shaping/ShapeResultSpacing.h"
39 #include "platform/wtf/PtrUtil.h" 39 #include "platform/wtf/PtrUtil.h"
40 40
41 namespace blink { 41 namespace blink {
42 42
43 float ShapeResult::RunInfo::xPositionForVisualOffset( 43 float ShapeResult::RunInfo::xPositionForVisualOffset(
44 unsigned offset, 44 unsigned offset,
45 AdjustMidCluster adjustMidCluster) const { 45 AdjustMidCluster adjustMidCluster) const {
46 ASSERT(offset < m_numCharacters); 46 DCHECK_LT(offset, m_numCharacters);
47 if (rtl()) 47 if (rtl())
48 offset = m_numCharacters - offset - 1; 48 offset = m_numCharacters - offset - 1;
49 return xPositionForOffset(offset, adjustMidCluster); 49 return xPositionForOffset(offset, adjustMidCluster);
50 } 50 }
51 51
52 float ShapeResult::RunInfo::xPositionForOffset( 52 float ShapeResult::RunInfo::xPositionForOffset(
53 unsigned offset, 53 unsigned offset,
54 AdjustMidCluster adjustMidCluster) const { 54 AdjustMidCluster adjustMidCluster) const {
55 ASSERT(offset <= m_numCharacters); 55 DCHECK_LE(offset, m_numCharacters);
56 const unsigned numGlyphs = m_glyphData.size(); 56 const unsigned numGlyphs = m_glyphData.size();
57 unsigned glyphIndex = 0; 57 unsigned glyphIndex = 0;
58 float position = 0; 58 float position = 0;
59 if (rtl()) { 59 if (rtl()) {
60 while (glyphIndex < numGlyphs && 60 while (glyphIndex < numGlyphs &&
61 m_glyphData[glyphIndex].characterIndex > offset) { 61 m_glyphData[glyphIndex].characterIndex > offset) {
62 position += m_glyphData[glyphIndex].advance; 62 position += m_glyphData[glyphIndex].advance;
63 ++glyphIndex; 63 ++glyphIndex;
64 } 64 }
65 // Adjust offset if it's not on the cluster boundary. In RTL, this means 65 // Adjust offset if it's not on the cluster boundary. In RTL, this means
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
259 259
260 // The position in question might be just after the text. 260 // The position in question might be just after the text.
261 if (!offsetX && absoluteOffset == numCharacters()) 261 if (!offsetX && absoluteOffset == numCharacters())
262 return rtl() ? 0 : m_width; 262 return rtl() ? 0 : m_width;
263 263
264 return offsetX; 264 return offsetX;
265 } 265 }
266 266
267 void ShapeResult::fallbackFonts( 267 void ShapeResult::fallbackFonts(
268 HashSet<const SimpleFontData*>* fallback) const { 268 HashSet<const SimpleFontData*>* fallback) const {
269 ASSERT(fallback); 269 DCHECK(fallback);
270 ASSERT(m_primaryFont); 270 DCHECK(m_primaryFont);
271 for (unsigned i = 0; i < m_runs.size(); ++i) { 271 for (unsigned i = 0; i < m_runs.size(); ++i) {
272 if (m_runs[i] && m_runs[i]->m_fontData && 272 if (m_runs[i] && m_runs[i]->m_fontData &&
273 m_runs[i]->m_fontData != m_primaryFont && 273 m_runs[i]->m_fontData != m_primaryFont &&
274 !m_runs[i]->m_fontData->isTextOrientationFallbackOf( 274 !m_runs[i]->m_fontData->isTextOrientationFallbackOf(
275 m_primaryFont.get())) { 275 m_primaryFont.get())) {
276 fallback->insert(m_runs[i]->m_fontData.get()); 276 fallback->insert(m_runs[i]->m_fontData.get());
277 } 277 }
278 } 278 }
279 } 279 }
280 280
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
332 } 332 }
333 333
334 static inline float harfBuzzPositionToFloat(hb_position_t value) { 334 static inline float harfBuzzPositionToFloat(hb_position_t value) {
335 return static_cast<float>(value) / (1 << 16); 335 return static_cast<float>(value) / (1 << 16);
336 } 336 }
337 337
338 void ShapeResult::insertRun(std::unique_ptr<ShapeResult::RunInfo> runToInsert, 338 void ShapeResult::insertRun(std::unique_ptr<ShapeResult::RunInfo> runToInsert,
339 unsigned startGlyph, 339 unsigned startGlyph,
340 unsigned numGlyphs, 340 unsigned numGlyphs,
341 hb_buffer_t* harfBuzzBuffer) { 341 hb_buffer_t* harfBuzzBuffer) {
342 ASSERT(numGlyphs > 0); 342 DCHECK_GT(numGlyphs, 0u);
343 std::unique_ptr<ShapeResult::RunInfo> run(std::move(runToInsert)); 343 std::unique_ptr<ShapeResult::RunInfo> run(std::move(runToInsert));
344 ASSERT(numGlyphs == run->m_glyphData.size()); 344 DCHECK_EQ(numGlyphs, run->m_glyphData.size());
345 345
346 const SimpleFontData* currentFontData = run->m_fontData.get(); 346 const SimpleFontData* currentFontData = run->m_fontData.get();
347 const hb_glyph_info_t* glyphInfos = 347 const hb_glyph_info_t* glyphInfos =
348 hb_buffer_get_glyph_infos(harfBuzzBuffer, 0); 348 hb_buffer_get_glyph_infos(harfBuzzBuffer, 0);
349 const hb_glyph_position_t* glyphPositions = 349 const hb_glyph_position_t* glyphPositions =
350 hb_buffer_get_glyph_positions(harfBuzzBuffer, 0); 350 hb_buffer_get_glyph_positions(harfBuzzBuffer, 0);
351 const unsigned startCluster = 351 const unsigned startCluster =
352 HB_DIRECTION_IS_FORWARD(hb_buffer_get_direction(harfBuzzBuffer)) 352 HB_DIRECTION_IS_FORWARD(hb_buffer_get_direction(harfBuzzBuffer))
353 ? glyphInfos[startGlyph].cluster 353 ? glyphInfos[startGlyph].cluster
354 : glyphInfos[startGlyph + numGlyphs - 1].cluster; 354 : glyphInfos[startGlyph + numGlyphs - 1].cluster;
(...skipping 28 matching lines...) Expand all
383 383
384 FloatRect glyphBounds = currentFontData->boundsForGlyph(glyph); 384 FloatRect glyphBounds = currentFontData->boundsForGlyph(glyph);
385 glyphBounds.move(glyphOrigin.x(), glyphOrigin.y()); 385 glyphBounds.move(glyphOrigin.x(), glyphOrigin.y());
386 m_glyphBoundingBox.unite(glyphBounds); 386 m_glyphBoundingBox.unite(glyphBounds);
387 glyphOrigin += FloatSize(advance + offsetX, offsetY); 387 glyphOrigin += FloatSize(advance + offsetX, offsetY);
388 } 388 }
389 389
390 run->m_width = std::max(0.0f, totalAdvance); 390 run->m_width = std::max(0.0f, totalAdvance);
391 m_width += run->m_width; 391 m_width += run->m_width;
392 m_numGlyphs += numGlyphs; 392 m_numGlyphs += numGlyphs;
393 ASSERT(m_numGlyphs >= numGlyphs); 393 DCHECK_GE(m_numGlyphs, numGlyphs);
394 m_hasVerticalOffsets |= hasVerticalOffsets; 394 m_hasVerticalOffsets |= hasVerticalOffsets;
395 395
396 // The runs are stored in result->m_runs in visual order. For LTR, we place 396 // The runs are stored in result->m_runs in visual order. For LTR, we place
397 // the run to be inserted before the next run with a bigger character 397 // the run to be inserted before the next run with a bigger character
398 // start index. For RTL, we place the run before the next run with a lower 398 // start index. For RTL, we place the run before the next run with a lower
399 // character index. Otherwise, for both directions, at the end. 399 // character index. Otherwise, for both directions, at the end.
400 if (HB_DIRECTION_IS_FORWARD(run->m_direction)) { 400 if (HB_DIRECTION_IS_FORWARD(run->m_direction)) {
401 for (size_t pos = 0; pos < m_runs.size(); ++pos) { 401 for (size_t pos = 0; pos < m_runs.size(); ++pos) {
402 if (m_runs.at(pos)->m_startIndex > run->m_startIndex) { 402 if (m_runs.at(pos)->m_startIndex > run->m_startIndex) {
403 m_runs.insert(pos, std::move(run)); 403 m_runs.insert(pos, std::move(run));
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
468 result->m_width = run->m_width; 468 result->m_width = run->m_width;
469 result->m_numGlyphs = count; 469 result->m_numGlyphs = count;
470 DCHECK_EQ(result->m_numGlyphs, count); // no overflow 470 DCHECK_EQ(result->m_numGlyphs, count); // no overflow
471 result->m_hasVerticalOffsets = 471 result->m_hasVerticalOffsets =
472 fontData->platformData().isVerticalAnyUpright(); 472 fontData->platformData().isVerticalAnyUpright();
473 result->m_runs.push_back(std::move(run)); 473 result->m_runs.push_back(std::move(run));
474 return result.release(); 474 return result.release();
475 } 475 }
476 476
477 } // namespace blink 477 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698