OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ui/gfx/render_text_mac.h" | 5 #include "ui/gfx/render_text_mac.h" |
6 | 6 |
7 #include <ApplicationServices/ApplicationServices.h> | 7 #include <ApplicationServices/ApplicationServices.h> |
8 #import <AppKit/AppKit.h> | 8 #import <AppKit/AppKit.h> |
9 #include <CoreText/CoreText.h> | 9 #include <CoreText/CoreText.h> |
10 | 10 |
(...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
306 base::ScopedCFTypeRef<CFMutableArrayRef> attributes( | 306 base::ScopedCFTypeRef<CFMutableArrayRef> attributes( |
307 CFArrayCreateMutable(NULL, 0, &kCFTypeArrayCallBacks)); | 307 CFArrayCreateMutable(NULL, 0, &kCFTypeArrayCallBacks)); |
308 | 308 |
309 // https://developer.apple.com/library/mac/#documentation/Carbon/Reference/Cor
eText_StringAttributes_Ref/Reference/reference.html | 309 // https://developer.apple.com/library/mac/#documentation/Carbon/Reference/Cor
eText_StringAttributes_Ref/Reference/reference.html |
310 internal::StyleIterator style(colors(), baselines(), styles()); | 310 internal::StyleIterator style(colors(), baselines(), styles()); |
311 const size_t layout_text_length = CFAttributedStringGetLength(attr_string); | 311 const size_t layout_text_length = CFAttributedStringGetLength(attr_string); |
312 for (size_t i = 0, end = 0; i < layout_text_length; i = end) { | 312 for (size_t i = 0, end = 0; i < layout_text_length; i = end) { |
313 end = TextIndexToGivenTextIndex(text, style.GetRange().end()); | 313 end = TextIndexToGivenTextIndex(text, style.GetRange().end()); |
314 const CFRange range = CFRangeMake(i, end - i); | 314 const CFRange range = CFRangeMake(i, end - i); |
315 base::ScopedCFTypeRef<CGColorRef> foreground( | 315 base::ScopedCFTypeRef<CGColorRef> foreground( |
316 CGColorCreateFromSkColor(style.color())); | 316 skia::CGColorCreateFromSkColor(style.color())); |
317 CFAttributedStringSetAttribute(attr_string, range, | 317 CFAttributedStringSetAttribute(attr_string, range, |
318 kCTForegroundColorAttributeName, foreground); | 318 kCTForegroundColorAttributeName, foreground); |
319 CFArrayAppendValue(attributes, foreground); | 319 CFArrayAppendValue(attributes, foreground); |
320 | 320 |
321 if (style.style(UNDERLINE)) { | 321 if (style.style(UNDERLINE)) { |
322 CTUnderlineStyle value = kCTUnderlineStyleSingle; | 322 CTUnderlineStyle value = kCTUnderlineStyleSingle; |
323 base::ScopedCFTypeRef<CFNumberRef> underline_value( | 323 base::ScopedCFTypeRef<CFNumberRef> underline_value( |
324 CFNumberCreate(NULL, kCFNumberSInt32Type, &value)); | 324 CFNumberCreate(NULL, kCFNumberSInt32Type, &value)); |
325 CFAttributedStringSetAttribute( | 325 CFAttributedStringSetAttribute( |
326 attr_string, range, kCTUnderlineStyleAttributeName, underline_value); | 326 attr_string, range, kCTUnderlineStyleAttributeName, underline_value); |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
410 // TODO(asvitkine): Style boundaries are not necessarily per-run. Handle | 410 // TODO(asvitkine): Style boundaries are not necessarily per-run. Handle |
411 // this better. Also, support strike and diagonal_strike. | 411 // this better. Also, support strike and diagonal_strike. |
412 CFDictionaryRef attributes = CTRunGetAttributes(ct_run); | 412 CFDictionaryRef attributes = CTRunGetAttributes(ct_run); |
413 CTFontRef ct_font = base::mac::GetValueFromDictionary<CTFontRef>( | 413 CTFontRef ct_font = base::mac::GetValueFromDictionary<CTFontRef>( |
414 attributes, kCTFontAttributeName); | 414 attributes, kCTFontAttributeName); |
415 run->font = Font(static_cast<NSFont*>(ct_font)); | 415 run->font = Font(static_cast<NSFont*>(ct_font)); |
416 | 416 |
417 const CGColorRef foreground = base::mac::GetValueFromDictionary<CGColorRef>( | 417 const CGColorRef foreground = base::mac::GetValueFromDictionary<CGColorRef>( |
418 attributes, kCTForegroundColorAttributeName); | 418 attributes, kCTForegroundColorAttributeName); |
419 if (foreground) | 419 if (foreground) |
420 run->foreground = CGColorRefToSkColor(foreground); | 420 run->foreground = skia::CGColorRefToSkColor(foreground); |
421 | 421 |
422 const CFNumberRef underline = | 422 const CFNumberRef underline = |
423 base::mac::GetValueFromDictionary<CFNumberRef>( | 423 base::mac::GetValueFromDictionary<CFNumberRef>( |
424 attributes, kCTUnderlineStyleAttributeName); | 424 attributes, kCTUnderlineStyleAttributeName); |
425 CTUnderlineStyle value = kCTUnderlineStyleNone; | 425 CTUnderlineStyle value = kCTUnderlineStyleNone; |
426 if (underline && CFNumberGetValue(underline, kCFNumberSInt32Type, &value)) | 426 if (underline && CFNumberGetValue(underline, kCFNumberSInt32Type, &value)) |
427 run->underline = (value == kCTUnderlineStyleSingle); | 427 run->underline = (value == kCTUnderlineStyleSingle); |
428 | 428 |
429 run_origin.offset(run_width, 0); | 429 run_origin.offset(run_width, 0); |
430 } | 430 } |
431 runs_valid_ = true; | 431 runs_valid_ = true; |
432 } | 432 } |
433 | 433 |
434 void RenderTextMac::InvalidateStyle() { | 434 void RenderTextMac::InvalidateStyle() { |
435 line_.reset(); | 435 line_.reset(); |
436 attributes_.reset(); | 436 attributes_.reset(); |
437 runs_.clear(); | 437 runs_.clear(); |
438 runs_valid_ = false; | 438 runs_valid_ = false; |
439 } | 439 } |
440 | 440 |
441 } // namespace gfx | 441 } // namespace gfx |
OLD | NEW |