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

Side by Side 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: Use RenderText instead Created 8 years, 10 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | ui/gfx/platform_font_pango.cc » ('j') | ui/gfx/render_text_win.cc » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "chrome/renderer/print_web_view_helper.h" 5 #include "chrome/renderer/print_web_view_helper.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 27 matching lines...) Expand all
38 #include "webkit/glue/webpreferences.h" 38 #include "webkit/glue/webpreferences.h"
39 39
40 #if defined(OS_POSIX) 40 #if defined(OS_POSIX)
41 #include "base/process_util.h" 41 #include "base/process_util.h"
42 #endif 42 #endif
43 43
44 #if defined(USE_SKIA) 44 #if defined(USE_SKIA)
45 #include "skia/ext/vector_canvas.h" 45 #include "skia/ext/vector_canvas.h"
46 #include "skia/ext/vector_platform_device_skia.h" 46 #include "skia/ext/vector_platform_device_skia.h"
47 #include "third_party/skia/include/core/SkTypeface.h" 47 #include "third_party/skia/include/core/SkTypeface.h"
48 #if !defined(OS_MACOSX) // USE_SKIA && !OS_MACOSX
49 #include "ui/gfx/canvas_skia.h"
50 #include "ui/gfx/render_text.h"
51 #endif // USE_SKIA && !defined(OS_MACOSX)
48 #elif defined(OS_MACOSX) 52 #elif defined(OS_MACOSX)
49 #include <CoreGraphics/CGContext.h> 53 #include <CoreGraphics/CGContext.h>
50 54
51 #include "base/mac/scoped_cftyperef.h" 55 #include "base/mac/scoped_cftyperef.h"
52 #include "base/sys_string_conversions.h" 56 #include "base/sys_string_conversions.h"
53 #include "ui/gfx/scoped_cg_context_save_gstate_mac.h" 57 #include "ui/gfx/scoped_cg_context_save_gstate_mac.h"
54 #endif 58 #endif
55 59
56 #if defined(OS_MACOSX) 60 #if defined(OS_MACOSX)
57 using base::mac::ScopedCFTypeRef; 61 using base::mac::ScopedCFTypeRef;
(...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after
383 void PrintHeaderFooterText( 387 void PrintHeaderFooterText(
384 string16 text, 388 string16 text,
385 WebKit::WebCanvas* canvas, 389 WebKit::WebCanvas* canvas,
386 HeaderFooterPaint paint, 390 HeaderFooterPaint paint,
387 float webkit_scale_factor, 391 float webkit_scale_factor,
388 const PageSizeMargins& page_layout, 392 const PageSizeMargins& page_layout,
389 printing::HorizontalHeaderFooterPosition horizontal_position, 393 printing::HorizontalHeaderFooterPosition horizontal_position,
390 printing::VerticalHeaderFooterPosition vertical_position, 394 printing::VerticalHeaderFooterPosition vertical_position,
391 double offset_to_baseline) { 395 double offset_to_baseline) {
392 #if defined(USE_SKIA) 396 #if defined(USE_SKIA)
397 #if !defined(OS_MACOSX) // RenderText does not support Mac yet.
398 scoped_ptr<gfx::RenderText> render_text(gfx::RenderText::CreateRenderText());
399 DCHECK(render_text.get());
400 render_text->SetText(text);
401 render_text->SetFontSize(printing::kSettingHeaderFooterFontSize);
402 gfx::CanvasSkia gfx_canvas(canvas);
403 SkISize device_size = gfx_canvas.GetSkCanvas()->getDeviceSize();
404 int height = render_text->GetFont().GetHeight() +
405 printing::kSettingHeaderFooterInterstice + 1;
406 int y = (vertical_position == printing::TOP) ? 1 - height :
407 device_size.height() - 1;
408 gfx::Rect rect(0, y, device_size.width(), height);
vandebo (ex-Chrome) 2012/02/03 18:36:45 As far as I can tell, this moves where the headers
409 render_text->SetDisplayRect(rect);
410 switch (horizontal_position) {
411 case printing::LEFT:
412 render_text->SetHorizontalAlignment(gfx::ALIGN_LEFT);
413 break;
414 case printing::RIGHT:
415 render_text->SetHorizontalAlignment(gfx::ALIGN_RIGHT);
416 break;
417 case printing::CENTER:
418 render_text->SetHorizontalAlignment(gfx::ALIGN_CENTER);
419 break;
420 default:
421 NOTREACHED();
422 break;
423 }
424 render_text->Draw(&gfx_canvas);
425 #else
426 // TODO(arthurhsu): following code has issues with i18n BiDi, see
427 // crbug.com/108599. Need to remove it and use RenderText
428 // code above once RenderText supports Mac.
393 size_t text_byte_length = text.length() * sizeof(char16); 429 size_t text_byte_length = text.length() * sizeof(char16);
394 double text_width_in_points = SkScalarToDouble(paint.measureText( 430 double text_width_in_points = SkScalarToDouble(paint.measureText(
395 text.c_str(), text_byte_length)); 431 text.c_str(), text_byte_length));
396 SkPoint point = GetHeaderFooterPosition(webkit_scale_factor, page_layout, 432 SkPoint point = GetHeaderFooterPosition(webkit_scale_factor, page_layout,
397 horizontal_position, 433 horizontal_position,
398 vertical_position, offset_to_baseline, 434 vertical_position, offset_to_baseline,
399 text_width_in_points); 435 text_width_in_points);
400 paint.setTextSize(SkDoubleToScalar( 436 paint.setTextSize(SkDoubleToScalar(
401 paint.getTextSize() / webkit_scale_factor)); 437 paint.getTextSize() / webkit_scale_factor));
402 canvas->drawText(text.c_str(), text_byte_length, point.x(), point.y(), 438 canvas->drawText(text.c_str(), text_byte_length, point.x(), point.y(),
403 paint); 439 paint);
440 #endif // USE_SKIA && !OS_MACOSX
404 #elif defined(OS_MACOSX) 441 #elif defined(OS_MACOSX)
405 ScopedCFTypeRef<CFStringRef> cf_text(base::SysUTF16ToCFStringRef(text)); 442 ScopedCFTypeRef<CFStringRef> cf_text(base::SysUTF16ToCFStringRef(text));
406 ScopedCFTypeRef<CFAttributedStringRef> cf_attr_text( 443 ScopedCFTypeRef<CFAttributedStringRef> cf_attr_text(
407 CFAttributedStringCreate(NULL, cf_text, paint)); 444 CFAttributedStringCreate(NULL, cf_text, paint));
408 ScopedCFTypeRef<CTLineRef> line(CTLineCreateWithAttributedString( 445 ScopedCFTypeRef<CTLineRef> line(CTLineCreateWithAttributedString(
409 cf_attr_text)); 446 cf_attr_text));
410 double text_width_in_points = 447 double text_width_in_points =
411 CTLineGetTypographicBounds(line, NULL, NULL, NULL) * webkit_scale_factor; 448 CTLineGetTypographicBounds(line, NULL, NULL, NULL) * webkit_scale_factor;
412 SkPoint point = GetHeaderFooterPosition(webkit_scale_factor, 449 SkPoint point = GetHeaderFooterPosition(webkit_scale_factor,
413 page_layout, horizontal_position, 450 page_layout, horizontal_position,
(...skipping 1360 matching lines...) Expand 10 before | Expand all | Expand 10 after
1774 DCHECK(IsRendering()); 1811 DCHECK(IsRendering());
1775 return prep_frame_view_->GetPrintCanvasSize(); 1812 return prep_frame_view_->GetPrintCanvasSize();
1776 } 1813 }
1777 1814
1778 void PrintWebViewHelper::PrintPreviewContext::ClearContext() { 1815 void PrintWebViewHelper::PrintPreviewContext::ClearContext() {
1779 prep_frame_view_.reset(); 1816 prep_frame_view_.reset();
1780 metafile_.reset(); 1817 metafile_.reset();
1781 pages_to_render_.clear(); 1818 pages_to_render_.clear();
1782 error_ = PREVIEW_ERROR_NONE; 1819 error_ = PREVIEW_ERROR_NONE;
1783 } 1820 }
OLDNEW
« no previous file with comments | « no previous file | ui/gfx/platform_font_pango.cc » ('j') | ui/gfx/render_text_win.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698