OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
4 * (C) 2000 Dirk Mueller (mueller@kde.org) | 4 * (C) 2000 Dirk Mueller (mueller@kde.org) |
5 * Copyright (C) 2003, 2006, 2010, 2011 Apple Inc. All rights reserved. | 5 * Copyright (C) 2003, 2006, 2010, 2011 Apple Inc. All rights reserved. |
6 * Copyright (c) 2007, 2008, 2010 Google Inc. All rights reserved. | 6 * Copyright (c) 2007, 2008, 2010 Google Inc. All rights reserved. |
7 * | 7 * |
8 * This library is free software; you can redistribute it and/or | 8 * This library is free software; you can redistribute it and/or |
9 * modify it under the terms of the GNU Library General Public | 9 * modify it under the terms of the GNU Library General Public |
10 * License as published by the Free Software Foundation; either | 10 * License as published by the Free Software Foundation; either |
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
256 | 256 |
257 if (glyphOverflow) | 257 if (glyphOverflow) |
258 updateGlyphOverflowFromBounds(glyphBounds, fontMetrics(), glyphOverflow)
; | 258 updateGlyphOverflowFromBounds(glyphBounds, fontMetrics(), glyphOverflow)
; |
259 return result; | 259 return result; |
260 } | 260 } |
261 | 261 |
262 namespace { | 262 namespace { |
263 | 263 |
264 template <bool hasOffsets> | 264 template <bool hasOffsets> |
265 bool buildTextBlobInternal(const GlyphBuffer& glyphBuffer, SkScalar initialAdvan
ce, | 265 bool buildTextBlobInternal(const GlyphBuffer& glyphBuffer, SkScalar initialAdvan
ce, |
266 const SkRect* bounds, bool couldUseLCD, SkTextBlobBuilder& builder) | 266 const SkRect* bounds, bool couldUseLCD, SkTextBlobBuilder& builder, const Fo
nt& font) |
267 { | 267 { |
268 SkScalar x = initialAdvance; | 268 SkScalar x = initialAdvance; |
269 unsigned i = 0; | 269 unsigned i = 0; |
270 while (i < glyphBuffer.size()) { | 270 while (i < glyphBuffer.size()) { |
271 const SimpleFontData* fontData = glyphBuffer.fontDataAt(i); | 271 const SimpleFontData* fontData = glyphBuffer.fontDataAt(i); |
272 | 272 |
273 // FIXME: Handle vertical text. | 273 // FIXME: Handle vertical text. |
274 if (fontData->platformData().orientation() == Vertical) | 274 if (fontData->platformData().orientation() == Vertical) |
275 return false; | 275 return false; |
276 | 276 |
277 // FIXME: FontPlatformData makes some decisions on the device scale | 277 // FIXME: FontPlatformData makes some decisions on the device scale |
278 // factor, which is found via the GraphicsContext. This should be fixed | 278 // factor, which is found via the GraphicsContext. This should be fixed |
279 // to avoid correctness problems here. | 279 // to avoid correctness problems here. |
280 SkPaint paint; | 280 SkPaint paint; |
281 fontData->platformData().setupPaint(&paint); | 281 fontData->platformData().setupPaint(&paint, 0, &font); |
282 paint.setTextEncoding(SkPaint::kGlyphID_TextEncoding); | 282 paint.setTextEncoding(SkPaint::kGlyphID_TextEncoding); |
283 | 283 |
284 // FIXME: this should go away after the big LCD cleanup. | 284 // FIXME: this should go away after the big LCD cleanup. |
285 paint.setLCDRenderText(paint.isLCDRenderText() && couldUseLCD); | 285 paint.setLCDRenderText(paint.isLCDRenderText() && couldUseLCD); |
286 | 286 |
287 unsigned start = i++; | 287 unsigned start = i++; |
288 while (i < glyphBuffer.size() && glyphBuffer.fontDataAt(i) == fontData) | 288 while (i < glyphBuffer.size() && glyphBuffer.fontDataAt(i) == fontData) |
289 i++; | 289 i++; |
290 unsigned count = i - start; | 290 unsigned count = i - start; |
291 | 291 |
(...skipping 25 matching lines...) Expand all Loading... |
317 PassTextBlobPtr Font::buildTextBlob(const GlyphBuffer& glyphBuffer, float initia
lAdvance, | 317 PassTextBlobPtr Font::buildTextBlob(const GlyphBuffer& glyphBuffer, float initia
lAdvance, |
318 const FloatRect& bounds, bool couldUseLCD) const | 318 const FloatRect& bounds, bool couldUseLCD) const |
319 { | 319 { |
320 ASSERT(RuntimeEnabledFeatures::textBlobEnabled()); | 320 ASSERT(RuntimeEnabledFeatures::textBlobEnabled()); |
321 | 321 |
322 SkTextBlobBuilder builder; | 322 SkTextBlobBuilder builder; |
323 SkScalar advance = SkFloatToScalar(initialAdvance); | 323 SkScalar advance = SkFloatToScalar(initialAdvance); |
324 SkRect skBounds = bounds; | 324 SkRect skBounds = bounds; |
325 | 325 |
326 bool success = glyphBuffer.hasOffsets() ? | 326 bool success = glyphBuffer.hasOffsets() ? |
327 buildTextBlobInternal<true>(glyphBuffer, advance, &skBounds, couldUseLCD
, builder) : | 327 buildTextBlobInternal<true>(glyphBuffer, advance, &skBounds, couldUseLCD
, builder, *this) : |
328 buildTextBlobInternal<false>(glyphBuffer, advance, &skBounds, couldUseLC
D, builder); | 328 buildTextBlobInternal<false>(glyphBuffer, advance, &skBounds, couldUseLC
D, builder, *this); |
329 return success ? adoptRef(builder.build()) : nullptr; | 329 return success ? adoptRef(builder.build()) : nullptr; |
330 } | 330 } |
331 | 331 |
332 static inline FloatRect pixelSnappedSelectionRect(FloatRect rect) | 332 static inline FloatRect pixelSnappedSelectionRect(FloatRect rect) |
333 { | 333 { |
334 // Using roundf() rather than ceilf() for the right edge as a compromise to | 334 // Using roundf() rather than ceilf() for the right edge as a compromise to |
335 // ensure correct caret positioning. | 335 // ensure correct caret positioning. |
336 float roundedX = roundf(rect.x()); | 336 float roundedX = roundf(rect.x()); |
337 return FloatRect(roundedX, rect.y(), roundf(rect.maxX() - roundedX), rect.he
ight()); | 337 return FloatRect(roundedX, rect.y(), roundf(rect.maxX() - roundedX), rect.he
ight()); |
338 } | 338 } |
(...skipping 757 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1096 if (delta <= 0) | 1096 if (delta <= 0) |
1097 break; | 1097 break; |
1098 } | 1098 } |
1099 } | 1099 } |
1100 } | 1100 } |
1101 | 1101 |
1102 return offset; | 1102 return offset; |
1103 } | 1103 } |
1104 | 1104 |
1105 } // namespace blink | 1105 } // namespace blink |
OLD | NEW |