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

Side by Side Diff: Source/platform/fonts/shaping/HarfBuzzShaper.cpp

Issue 860163004: Using FloatRect in SimpleShaper and remove GlyphBounds (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Comment fixes Created 5 years, 11 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 352 matching lines...) Expand 10 before | Expand all | Expand 10 after
363 else if (Character::treatAsSpace(character) && character != characterTab ulation) 363 else if (Character::treatAsSpace(character) && character != characterTab ulation)
364 character = space; 364 character = space;
365 else if (Character::treatAsZeroWidthSpaceInComplexScript(character)) 365 else if (Character::treatAsZeroWidthSpaceInComplexScript(character))
366 character = zeroWidthSpace; 366 character = zeroWidthSpace;
367 367
368 U16_APPEND(destination, *destinationLength, length, character, error); 368 U16_APPEND(destination, *destinationLength, length, character, error);
369 ASSERT_UNUSED(error, !error); 369 ASSERT_UNUSED(error, !error);
370 } 370 }
371 } 371 }
372 372
373 HarfBuzzShaper::HarfBuzzShaper(const Font* font, const TextRun& run, ForTextEmph asisOrNot forTextEmphasis, HashSet<const SimpleFontData*>* fallbackFonts) 373 HarfBuzzShaper::HarfBuzzShaper(const Font* font, const TextRun& run, ForTextEmph asisOrNot forTextEmphasis, HashSet<const SimpleFontData*>* fallbackFonts, FloatR ect* bounds)
374 : m_font(font) 374 : m_font(font)
375 , m_normalizedBufferLength(0) 375 , m_normalizedBufferLength(0)
376 , m_run(run) 376 , m_run(run)
377 , m_wordSpacingAdjustment(font->fontDescription().wordSpacing()) 377 , m_wordSpacingAdjustment(font->fontDescription().wordSpacing())
378 , m_padding(0) 378 , m_padding(0)
379 , m_padPerWordBreak(0) 379 , m_padPerWordBreak(0)
380 , m_padError(0) 380 , m_padError(0)
381 , m_letterSpacing(font->fontDescription().letterSpacing()) 381 , m_letterSpacing(font->fontDescription().letterSpacing())
382 , m_fromIndex(0) 382 , m_fromIndex(0)
383 , m_toIndex(m_run.length()) 383 , m_toIndex(m_run.length())
384 , m_forTextEmphasis(forTextEmphasis) 384 , m_forTextEmphasis(forTextEmphasis)
385 , m_glyphBoundingBox(bounds)
385 , m_fallbackFonts(fallbackFonts) 386 , m_fallbackFonts(fallbackFonts)
386 { 387 {
387 m_normalizedBuffer = adoptArrayPtr(new UChar[m_run.length() + 1]); 388 m_normalizedBuffer = adoptArrayPtr(new UChar[m_run.length() + 1]);
388 normalizeCharacters(m_run, m_run.length(), m_normalizedBuffer.get(), &m_norm alizedBufferLength); 389 normalizeCharacters(m_run, m_run.length(), m_normalizedBuffer.get(), &m_norm alizedBufferLength);
389 setPadding(m_run.expansion()); 390 setPadding(m_run.expansion());
390 setFontFeatures(); 391 setFontFeatures();
391 } 392 }
392 393
393 // In complex text word-spacing affects each line-break, space (U+0020) and non- breaking space (U+00A0). 394 // In complex text word-spacing affects each line-break, space (U+0020) and non- breaking space (U+00A0).
394 static inline bool isCodepointSpace(UChar c) 395 static inline bool isCodepointSpace(UChar c)
(...skipping 527 matching lines...) Expand 10 before | Expand all | Expand 10 after
922 advance += spacing; 923 advance += spacing;
923 if (m_run.rtl()) { 924 if (m_run.rtl()) {
924 // In RTL, spacing should be added to left side of glyphs. 925 // In RTL, spacing should be added to left side of glyphs.
925 offsetX += spacing; 926 offsetX += spacing;
926 if (!isClusterEnd) 927 if (!isClusterEnd)
927 offsetX += m_letterSpacing; 928 offsetX += m_letterSpacing;
928 } 929 }
929 930
930 currentRun->setGlyphAndPositions(i, glyph, advance, offsetX, offsetY); 931 currentRun->setGlyphAndPositions(i, glyph, advance, offsetX, offsetY);
931 932
932 FloatRect glyphBounds = currentFontData->boundsForGlyph(glyph); 933 if (m_glyphBoundingBox) {
933 glyphBounds.move(glyphOrigin.x(), glyphOrigin.y()); 934 FloatRect glyphBounds = currentFontData->boundsForGlyph(glyph);
934 m_glyphBoundingBox.unite(glyphBounds); 935 glyphBounds.move(glyphOrigin.x(), glyphOrigin.y());
935 glyphOrigin += FloatSize(advance + offsetX, offsetY); 936 m_glyphBoundingBox->unite(glyphBounds);
937 glyphOrigin += FloatSize(advance + offsetX, offsetY);
938 }
936 939
937 totalAdvance += advance; 940 totalAdvance += advance;
938 } 941 }
939 currentRun->setWidth(totalAdvance > 0.0 ? totalAdvance : 0.0); 942 currentRun->setWidth(totalAdvance > 0.0 ? totalAdvance : 0.0);
940 m_totalWidth += currentRun->width(); 943 m_totalWidth += currentRun->width();
941 } 944 }
942 945
943 float HarfBuzzShaper::fillGlyphBufferFromHarfBuzzRun(GlyphBuffer* glyphBuffer, 946 float HarfBuzzShaper::fillGlyphBufferFromHarfBuzzRun(GlyphBuffer* glyphBuffer,
944 HarfBuzzRun* currentRun, float initialAdvance) 947 HarfBuzzRun* currentRun, float initialAdvance)
945 { 948 {
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
1139 // possibly invalid from, to arguments. 1142 // possibly invalid from, to arguments.
1140 if (!foundToX && !foundFromX) 1143 if (!foundToX && !foundFromX)
1141 fromX = toX = 0; 1144 fromX = toX = 0;
1142 1145
1143 if (fromX < toX) 1146 if (fromX < toX)
1144 return FloatRect(point.x() + fromX, point.y(), toX - fromX, height); 1147 return FloatRect(point.x() + fromX, point.y(), toX - fromX, height);
1145 return FloatRect(point.x() + toX, point.y(), fromX - toX, height); 1148 return FloatRect(point.x() + toX, point.y(), fromX - toX, height);
1146 } 1149 }
1147 1150
1148 } // namespace blink 1151 } // namespace blink
OLDNEW
« no previous file with comments | « Source/platform/fonts/shaping/HarfBuzzShaper.h ('k') | Source/platform/fonts/shaping/SimpleShaper.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698