Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/canvas_skia.h" | 5 #include "ui/gfx/canvas_skia.h" |
| 6 | 6 |
| 7 #include <limits> | 7 #include <limits> |
| 8 | 8 |
| 9 #include "base/i18n/rtl.h" | 9 #include "base/i18n/rtl.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 451 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 462 const gfx::Font& font, | 462 const gfx::Font& font, |
| 463 const SkColor& color, | 463 const SkColor& color, |
| 464 const gfx::Rect& display_rect) { | 464 const gfx::Rect& display_rect) { |
| 465 int flags = NO_ELLIPSIS; | 465 int flags = NO_ELLIPSIS; |
| 466 | 466 |
| 467 // If the whole string fits in the destination then just draw it directly. | 467 // If the whole string fits in the destination then just draw it directly. |
| 468 int total_string_width; | 468 int total_string_width; |
| 469 int total_string_height; | 469 int total_string_height; |
| 470 SizeStringInt(text, font, &total_string_width, &total_string_height, | 470 SizeStringInt(text, font, &total_string_width, &total_string_height, |
| 471 flags | TEXT_VALIGN_TOP); | 471 flags | TEXT_VALIGN_TOP); |
| 472 if (total_string_width <= display_rect.width()) { | 472 bool should_draw_directly = total_string_width <= display_rect.width(); |
| 473 | |
| 474 // Create a temporary bitmap to draw the gradient to. | |
|
Peter Kasting
2011/04/09 00:56:44
If this is really just a temporary hack, you shoul
| |
| 475 scoped_ptr<skia::BitmapPlatformDevice> gradient_bitmap; | |
| 476 if (!should_draw_directly) { | |
| 477 gradient_bitmap.reset(skia::BitmapPlatformDevice::create( | |
| 478 NULL, display_rect.width(), display_rect.height(), false, NULL)); | |
| 479 should_draw_directly = gradient_bitmap.get() != NULL; | |
| 480 } | |
| 481 | |
| 482 if (should_draw_directly) { | |
| 473 DrawStringInt(text, font, color, display_rect.x(), display_rect.y(), | 483 DrawStringInt(text, font, color, display_rect.x(), display_rect.y(), |
| 474 display_rect.width(), display_rect.height(), flags); | 484 display_rect.width(), display_rect.height(), 0); |
| 475 return; | 485 return; |
| 476 } | 486 } |
| 477 | 487 |
| 478 int average_character_width = font.GetAverageCharacterWidth(); | 488 int average_character_width = font.GetAverageCharacterWidth(); |
| 479 int clipped_string_width = total_string_width - display_rect.width(); | 489 int clipped_string_width = total_string_width - display_rect.width(); |
| 480 | 490 |
| 481 // Clip the string by drawing it to the left by |offset_x|. | 491 // Clip the string by drawing it to the left by |offset_x|. |
| 482 int offset_x = 0; | 492 int offset_x = 0; |
| 483 switch (truncate_mode) { | 493 switch (truncate_mode) { |
| 484 case TruncateFadeHead: | 494 case TruncateFadeHead: |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 549 text_rect.set_width(text_rect.width() + offset_x); | 559 text_rect.set_width(text_rect.width() + offset_x); |
| 550 | 560 |
| 551 // Disable clear type. This makes the text render in gray scale which | 561 // Disable clear type. This makes the text render in gray scale which |
| 552 // makes it easier to compute the alpha value. | 562 // makes it easier to compute the alpha value. |
| 553 LOGFONT font_info; | 563 LOGFONT font_info; |
| 554 GetObject(font.GetNativeFont(), sizeof(font_info), &font_info); | 564 GetObject(font.GetNativeFont(), sizeof(font_info), &font_info); |
| 555 font_info.lfQuality = ANTIALIASED_QUALITY; | 565 font_info.lfQuality = ANTIALIASED_QUALITY; |
| 556 HFONT gray_scale_font = CreateFontIndirect(&font_info); | 566 HFONT gray_scale_font = CreateFontIndirect(&font_info); |
| 557 | 567 |
| 558 HDC hdc = beginPlatformPaint(); | 568 HDC hdc = beginPlatformPaint(); |
| 559 scoped_ptr<skia::BitmapPlatformDevice> gradient_bitmap( | |
| 560 skia::BitmapPlatformDevice::create(NULL, display_rect.width(), | |
| 561 display_rect.height(), false, NULL)); | |
| 562 if (is_truncating_head) | 569 if (is_truncating_head) |
| 563 DrawTextGradientPart(hdc, *gradient_bitmap, text, color, gray_scale_font, | 570 DrawTextGradientPart(hdc, *gradient_bitmap, text, color, gray_scale_font, |
| 564 text_rect, head_part, is_rtl, flags); | 571 text_rect, head_part, is_rtl, flags); |
| 565 if (is_truncating_tail) | 572 if (is_truncating_tail) |
| 566 DrawTextGradientPart(hdc, *gradient_bitmap, text, color, gray_scale_font, | 573 DrawTextGradientPart(hdc, *gradient_bitmap, text, color, gray_scale_font, |
| 567 text_rect, tail_part, !is_rtl, flags); | 574 text_rect, tail_part, !is_rtl, flags); |
| 568 endPlatformPaint(); | 575 endPlatformPaint(); |
| 569 | 576 |
| 570 // Draw the solid part. | 577 // Draw the solid part. |
| 571 save(kClip_SaveFlag); | 578 save(kClip_SaveFlag); |
| 572 ClipRectInt(solid_part.x(), solid_part.y(), | 579 ClipRectInt(solid_part.x(), solid_part.y(), |
| 573 solid_part.width(), solid_part.height()); | 580 solid_part.width(), solid_part.height()); |
| 574 DrawStringInt(text, font, color, | 581 DrawStringInt(text, font, color, |
| 575 text_rect.x(), text_rect.y(), | 582 text_rect.x(), text_rect.y(), |
| 576 text_rect.width(), text_rect.height(), | 583 text_rect.width(), text_rect.height(), |
| 577 flags); | 584 flags); |
| 578 restore(); | 585 restore(); |
| 579 restore(); | 586 restore(); |
| 580 } | 587 } |
| 581 | 588 |
| 582 } // namespace gfx | 589 } // namespace gfx |
| OLD | NEW |