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

Unified Diff: chrome/renderer/print_web_view_helper.cc

Issue 9111042: Fix RTL and complex script title in print preview header/footer. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 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 side-by-side diff with in-line comments
Download patch
Index: chrome/renderer/print_web_view_helper.cc
diff --git a/chrome/renderer/print_web_view_helper.cc b/chrome/renderer/print_web_view_helper.cc
index 499b1fd09270125e78d39fe1e8117b9f0dd49485..199ffce81ee4905f8892220e7040a6aacca7478b 100644
--- a/chrome/renderer/print_web_view_helper.cc
+++ b/chrome/renderer/print_web_view_helper.cc
@@ -44,7 +44,6 @@
#if defined(USE_SKIA)
#include "skia/ext/vector_canvas.h"
#include "skia/ext/vector_platform_device_skia.h"
-#include "third_party/skia/include/core/SkTypeface.h"
#elif defined(OS_MACOSX)
#include <CoreGraphics/CGContext.h>
@@ -224,17 +223,38 @@ void PrintHeaderFooterText(
printing::VerticalHeaderFooterPosition vertical_position,
double offset_to_baseline) {
#if defined(USE_SKIA)
- size_t text_byte_length = text.length() * sizeof(char16);
- double text_width_in_points = SkScalarToDouble(paint.measureText(
- text.c_str(), text_byte_length));
- SkPoint point = GetHeaderFooterPosition(webkit_scale_factor, page_layout,
- horizontal_position,
- vertical_position, offset_to_baseline,
- text_width_in_points);
- paint.setTextSize(SkDoubleToScalar(
- paint.getTextSize() / webkit_scale_factor));
- canvas->drawText(text.c_str(), text_byte_length, point.x(), point.y(),
- paint);
+ // Convert text to glyphs first.
+ std::vector<uint16_t> glyphs;
jungshik at Google 2012/01/06 22:38:45 Just using an array of glyphs does not work well b
+ if (!PrintWebViewHelper::ConvertTextToGlyphs(paint.getTypeface(),
+ text, &glyphs)) {
+ // Conversion failed, fall back to draw text.
+ size_t text_byte_length = text.length() * sizeof(char16);
+ double text_width_in_points = SkScalarToDouble(paint.measureText(
+ text.c_str(), text_byte_length));
+ SkPoint point = GetHeaderFooterPosition(webkit_scale_factor, page_layout,
+ horizontal_position,
+ vertical_position,
+ offset_to_baseline,
+ text_width_in_points);
+ paint.setTextSize(SkDoubleToScalar(
+ paint.getTextSize() / webkit_scale_factor));
+ canvas->drawText(text.c_str(), text_byte_length, point.x(), point.y(),
+ paint);
+ } else {
+ paint.setTextEncoding(SkPaint::kGlyphID_TextEncoding);
+ size_t glyphs_byte_length = glyphs.size() * sizeof(uint16_t);
+ double text_width_in_points = SkScalarToDouble(paint.measureText(
+ &glyphs[0], glyphs_byte_length));
+ SkPoint point = GetHeaderFooterPosition(webkit_scale_factor, page_layout,
+ horizontal_position,
+ vertical_position,
+ offset_to_baseline,
+ text_width_in_points);
+ paint.setTextSize(SkDoubleToScalar(
+ paint.getTextSize() / webkit_scale_factor));
+ canvas->drawText(&glyphs[0], glyphs_byte_length, point.x(), point.y(),
+ paint);
+ }
#elif defined(OS_MACOSX)
ScopedCFTypeRef<CFStringRef> cf_text(base::SysUTF16ToCFStringRef(text));
ScopedCFTypeRef<CFAttributedStringRef> cf_attr_text(

Powered by Google App Engine
This is Rietveld 408576698