Printing: Remove unused PageOverlay since header/footers are drawn in PrintWebViewHelper.
BUG=none TEST=none Review URL: http://codereview.chromium.org/7585015 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@95951 0039d316-1c4b-4281-b951-d872f2087c98
This commit is contained in:
@ -1,209 +0,0 @@
|
|||||||
// Copyright (c) 2010 The Chromium Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style license that can be
|
|
||||||
// found in the LICENSE file.
|
|
||||||
|
|
||||||
#include "printing/page_overlays.h"
|
|
||||||
|
|
||||||
#include "base/logging.h"
|
|
||||||
#include "base/string_number_conversions.h"
|
|
||||||
#include "base/string_util.h"
|
|
||||||
#include "base/utf_string_conversions.h"
|
|
||||||
#include "printing/printed_document.h"
|
|
||||||
#include "printing/printed_page.h"
|
|
||||||
|
|
||||||
namespace {
|
|
||||||
|
|
||||||
// Replaces a subpart of a string by other value, and returns the position right
|
|
||||||
// after the new value.
|
|
||||||
size_t ReplaceKey(std::wstring* string,
|
|
||||||
size_t offset,
|
|
||||||
size_t old_string_len,
|
|
||||||
const std::wstring& new_string) {
|
|
||||||
string->replace(offset, old_string_len, new_string);
|
|
||||||
return offset + new_string.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace
|
|
||||||
|
|
||||||
namespace printing {
|
|
||||||
|
|
||||||
const wchar_t* const PageOverlays::kTitle = L"{title}";
|
|
||||||
const wchar_t* const PageOverlays::kTime = L"{time}";
|
|
||||||
const wchar_t* const PageOverlays::kDate = L"{date}";
|
|
||||||
const wchar_t* const PageOverlays::kPage = L"{page}";
|
|
||||||
const wchar_t* const PageOverlays::kPageCount = L"{pagecount}";
|
|
||||||
const wchar_t* const PageOverlays::kPageOnTotal = L"{pageontotal}";
|
|
||||||
const wchar_t* const PageOverlays::kUrl = L"{url}";
|
|
||||||
|
|
||||||
PageOverlays::PageOverlays()
|
|
||||||
: top_left(kDate),
|
|
||||||
top_center(kTitle),
|
|
||||||
top_right(),
|
|
||||||
bottom_left(kUrl),
|
|
||||||
bottom_center(),
|
|
||||||
bottom_right(kPageOnTotal) {
|
|
||||||
}
|
|
||||||
|
|
||||||
PageOverlays::~PageOverlays() {}
|
|
||||||
|
|
||||||
bool PageOverlays::Equals(const PageOverlays& rhs) const {
|
|
||||||
return top_left == rhs.top_left &&
|
|
||||||
top_center == rhs.top_center &&
|
|
||||||
top_right == rhs.top_right &&
|
|
||||||
bottom_left == rhs.bottom_left &&
|
|
||||||
bottom_center == rhs.bottom_center &&
|
|
||||||
bottom_right == rhs.bottom_right;
|
|
||||||
}
|
|
||||||
|
|
||||||
const std::wstring& PageOverlays::GetOverlay(HorizontalPosition x,
|
|
||||||
VerticalPosition y) const {
|
|
||||||
switch (x) {
|
|
||||||
case LEFT:
|
|
||||||
switch (y) {
|
|
||||||
case TOP:
|
|
||||||
return top_left;
|
|
||||||
case BOTTOM:
|
|
||||||
return bottom_left;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case CENTER:
|
|
||||||
switch (y) {
|
|
||||||
case TOP:
|
|
||||||
return top_center;
|
|
||||||
case BOTTOM:
|
|
||||||
return bottom_center;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case RIGHT:
|
|
||||||
switch (y) {
|
|
||||||
case TOP:
|
|
||||||
return top_right;
|
|
||||||
case BOTTOM:
|
|
||||||
return bottom_right;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
NOTREACHED();
|
|
||||||
return EmptyWString();
|
|
||||||
}
|
|
||||||
|
|
||||||
void PageOverlays::SetOverlay(HorizontalPosition x,
|
|
||||||
VerticalPosition y,
|
|
||||||
const std::wstring& input) {
|
|
||||||
switch (x) {
|
|
||||||
case LEFT:
|
|
||||||
switch (y) {
|
|
||||||
case TOP:
|
|
||||||
top_left = input;
|
|
||||||
break;
|
|
||||||
case BOTTOM:
|
|
||||||
bottom_left = input;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
NOTREACHED();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case CENTER:
|
|
||||||
switch (y) {
|
|
||||||
case TOP:
|
|
||||||
top_center = input;
|
|
||||||
break;
|
|
||||||
case BOTTOM:
|
|
||||||
bottom_center = input;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
NOTREACHED();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case RIGHT:
|
|
||||||
switch (y) {
|
|
||||||
case TOP:
|
|
||||||
top_right = input;
|
|
||||||
break;
|
|
||||||
case BOTTOM:
|
|
||||||
bottom_right = input;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
NOTREACHED();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
NOTREACHED();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// static
|
|
||||||
std::wstring PageOverlays::ReplaceVariables(const std::wstring& input,
|
|
||||||
const PrintedDocument& document,
|
|
||||||
const PrintedPage& page) {
|
|
||||||
std::wstring output(input);
|
|
||||||
for (size_t offset = output.find(L'{', 0);
|
|
||||||
offset != std::wstring::npos;
|
|
||||||
offset = output.find(L'{', offset)) {
|
|
||||||
if (0 == output.compare(offset,
|
|
||||||
wcslen(kTitle),
|
|
||||||
kTitle)) {
|
|
||||||
offset = ReplaceKey(&output,
|
|
||||||
offset,
|
|
||||||
wcslen(kTitle),
|
|
||||||
UTF16ToWideHack(document.name()));
|
|
||||||
} else if (0 == output.compare(offset,
|
|
||||||
wcslen(kTime),
|
|
||||||
kTime)) {
|
|
||||||
offset = ReplaceKey(&output,
|
|
||||||
offset,
|
|
||||||
wcslen(kTime),
|
|
||||||
UTF16ToWideHack(document.time()));
|
|
||||||
} else if (0 == output.compare(offset,
|
|
||||||
wcslen(kDate),
|
|
||||||
kDate)) {
|
|
||||||
offset = ReplaceKey(&output,
|
|
||||||
offset,
|
|
||||||
wcslen(kDate),
|
|
||||||
UTF16ToWideHack(document.date()));
|
|
||||||
} else if (0 == output.compare(offset,
|
|
||||||
wcslen(kPage),
|
|
||||||
kPage)) {
|
|
||||||
offset = ReplaceKey(&output,
|
|
||||||
offset,
|
|
||||||
wcslen(kPage),
|
|
||||||
UTF8ToWide(base::IntToString(page.page_number())));
|
|
||||||
} else if (0 == output.compare(offset,
|
|
||||||
wcslen(kPageCount),
|
|
||||||
kPageCount)) {
|
|
||||||
offset = ReplaceKey(&output,
|
|
||||||
offset,
|
|
||||||
wcslen(kPageCount),
|
|
||||||
UTF8ToWide(base::IntToString(document.page_count())));
|
|
||||||
} else if (0 == output.compare(offset,
|
|
||||||
wcslen(kPageOnTotal),
|
|
||||||
kPageOnTotal)) {
|
|
||||||
std::wstring replacement;
|
|
||||||
replacement = UTF8ToWide(base::IntToString(page.page_number()));
|
|
||||||
replacement += L"/";
|
|
||||||
replacement += UTF8ToWide(base::IntToString(document.page_count()));
|
|
||||||
offset = ReplaceKey(&output,
|
|
||||||
offset,
|
|
||||||
wcslen(kPageOnTotal),
|
|
||||||
replacement);
|
|
||||||
} else if (0 == output.compare(offset,
|
|
||||||
wcslen(kUrl),
|
|
||||||
kUrl)) {
|
|
||||||
// TODO(maruel): http://b/1126373 ui::ElideUrl(document.url(), ...)
|
|
||||||
offset = ReplaceKey(&output,
|
|
||||||
offset,
|
|
||||||
wcslen(kUrl),
|
|
||||||
UTF8ToWide(document.url().spec()));
|
|
||||||
} else {
|
|
||||||
// There is just a { in the string.
|
|
||||||
++offset;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return output;
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace printing
|
|
@ -1,82 +0,0 @@
|
|||||||
// Copyright (c) 2006-2009 The Chromium Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style license that can be
|
|
||||||
// found in the LICENSE file.
|
|
||||||
|
|
||||||
#ifndef PRINTING_PAGE_OVERLAYS_H_
|
|
||||||
#define PRINTING_PAGE_OVERLAYS_H_
|
|
||||||
|
|
||||||
#include <string>
|
|
||||||
|
|
||||||
namespace printing {
|
|
||||||
|
|
||||||
class PrintedDocument;
|
|
||||||
class PrintedPage;
|
|
||||||
|
|
||||||
// Page's overlays, i.e. headers and footers. Contains the strings that will be
|
|
||||||
// printed in the overlays, with actual values as variables. The variables are
|
|
||||||
// replaced by their actual values with ReplaceVariables().
|
|
||||||
class PageOverlays {
|
|
||||||
public:
|
|
||||||
// Position of the header/footer.
|
|
||||||
enum HorizontalPosition {
|
|
||||||
LEFT,
|
|
||||||
CENTER,
|
|
||||||
RIGHT,
|
|
||||||
};
|
|
||||||
|
|
||||||
// Position of the header/footer.
|
|
||||||
enum VerticalPosition {
|
|
||||||
TOP,
|
|
||||||
BOTTOM,
|
|
||||||
};
|
|
||||||
|
|
||||||
PageOverlays();
|
|
||||||
~PageOverlays();
|
|
||||||
|
|
||||||
// Equality operator.
|
|
||||||
bool Equals(const PageOverlays& rhs) const;
|
|
||||||
|
|
||||||
// Returns the string of an overlay according to its x,y position.
|
|
||||||
const std::wstring& GetOverlay(HorizontalPosition x,
|
|
||||||
VerticalPosition y) const;
|
|
||||||
|
|
||||||
// Sets the string of an overlay according to its x,y position.
|
|
||||||
void SetOverlay(HorizontalPosition x,
|
|
||||||
VerticalPosition y,
|
|
||||||
const std::wstring& input);
|
|
||||||
|
|
||||||
// Replaces the variables in |input| with their actual values according to the
|
|
||||||
// properties of the current printed document and the current printed page.
|
|
||||||
static std::wstring ReplaceVariables(const std::wstring& input,
|
|
||||||
const PrintedDocument& document,
|
|
||||||
const PrintedPage& page);
|
|
||||||
|
|
||||||
// Keys that are dynamically replaced in the header and footer by their actual
|
|
||||||
// values.
|
|
||||||
// Web page's title.
|
|
||||||
static const wchar_t* const kTitle;
|
|
||||||
// Print job's start time.
|
|
||||||
static const wchar_t* const kTime;
|
|
||||||
// Print job's start date.
|
|
||||||
static const wchar_t* const kDate;
|
|
||||||
// Printed page's number.
|
|
||||||
static const wchar_t* const kPage;
|
|
||||||
// Print job's total page count.
|
|
||||||
static const wchar_t* const kPageCount;
|
|
||||||
// Printed page's number on total page count.
|
|
||||||
static const wchar_t* const kPageOnTotal;
|
|
||||||
// Web page's displayed url.
|
|
||||||
static const wchar_t* const kUrl;
|
|
||||||
|
|
||||||
// Actual headers and footers.
|
|
||||||
std::wstring top_left;
|
|
||||||
std::wstring top_center;
|
|
||||||
std::wstring top_right;
|
|
||||||
std::wstring bottom_left;
|
|
||||||
std::wstring bottom_center;
|
|
||||||
std::wstring bottom_right;
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace printing
|
|
||||||
|
|
||||||
#endif // PRINTING_PAGE_OVERLAYS_H_
|
|
@ -1,92 +0,0 @@
|
|||||||
// Copyright (c) 2006-2009 The Chromium Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style license that can be
|
|
||||||
// found in the LICENSE file.
|
|
||||||
|
|
||||||
#include "base/message_loop.h"
|
|
||||||
#include "base/string16.h"
|
|
||||||
#include "base/stringprintf.h"
|
|
||||||
#include "base/utf_string_conversions.h"
|
|
||||||
#include "printing/page_overlays.h"
|
|
||||||
#include "printing/print_settings.h"
|
|
||||||
#include "printing/printed_document.h"
|
|
||||||
#include "printing/printed_page.h"
|
|
||||||
#include "printing/printed_pages_source.h"
|
|
||||||
#include "testing/gtest/include/gtest/gtest.h"
|
|
||||||
|
|
||||||
namespace {
|
|
||||||
|
|
||||||
struct Keys {
|
|
||||||
const wchar_t* key;
|
|
||||||
const wchar_t* expected;
|
|
||||||
};
|
|
||||||
|
|
||||||
const Keys kOverlayKeys[] = {
|
|
||||||
{ printing::PageOverlays::kTitle, L"Foobar Document" },
|
|
||||||
{ printing::PageOverlays::kTime, L"" },
|
|
||||||
{ printing::PageOverlays::kDate, L"" },
|
|
||||||
{ printing::PageOverlays::kPage, L"1" },
|
|
||||||
{ printing::PageOverlays::kPageCount, L"2" },
|
|
||||||
{ printing::PageOverlays::kPageOnTotal, L"1/2" },
|
|
||||||
{ printing::PageOverlays::kUrl, L"http://www.perdu.com/" },
|
|
||||||
};
|
|
||||||
|
|
||||||
class PagesSource : public printing::PrintedPagesSource {
|
|
||||||
public:
|
|
||||||
virtual string16 RenderSourceName() {
|
|
||||||
return ASCIIToUTF16("Foobar Document");
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual GURL RenderSourceUrl() {
|
|
||||||
return GURL("http://www.perdu.com");
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace
|
|
||||||
|
|
||||||
class PageOverlaysTest : public testing::Test {
|
|
||||||
private:
|
|
||||||
MessageLoop message_loop_;
|
|
||||||
};
|
|
||||||
|
|
||||||
TEST_F(PageOverlaysTest, StringConversion) {
|
|
||||||
printing::PageOverlays overlays;
|
|
||||||
overlays.GetOverlay(printing::PageOverlays::LEFT,
|
|
||||||
printing::PageOverlays::BOTTOM);
|
|
||||||
printing::PrintSettings settings;
|
|
||||||
PagesSource source;
|
|
||||||
int cookie = 1;
|
|
||||||
scoped_refptr<printing::PrintedDocument> doc(
|
|
||||||
new printing::PrintedDocument(settings, &source, cookie));
|
|
||||||
doc->set_page_count(2);
|
|
||||||
gfx::Size page_size(100, 100);
|
|
||||||
gfx::Rect page_content_area(5, 5, 90, 90);
|
|
||||||
scoped_refptr<printing::PrintedPage> page(
|
|
||||||
new printing::PrintedPage(1, NULL, page_size, page_content_area, true));
|
|
||||||
|
|
||||||
std::wstring input;
|
|
||||||
std::wstring out;
|
|
||||||
for (size_t i = 0; i < arraysize(kOverlayKeys); ++i) {
|
|
||||||
input = base::StringPrintf(L"foo%lsbar", kOverlayKeys[i].key);
|
|
||||||
out = printing::PageOverlays::ReplaceVariables(input, *doc.get(),
|
|
||||||
*page.get());
|
|
||||||
EXPECT_FALSE(out.empty());
|
|
||||||
if (wcslen(kOverlayKeys[i].expected) == 0)
|
|
||||||
continue;
|
|
||||||
std::wstring expected =
|
|
||||||
base::StringPrintf(L"foo%lsbar", kOverlayKeys[i].expected);
|
|
||||||
EXPECT_EQ(expected, out) << kOverlayKeys[i].key;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if SetOverlay really sets the page overlay.
|
|
||||||
overlays.SetOverlay(printing::PageOverlays::LEFT,
|
|
||||||
printing::PageOverlays::TOP,
|
|
||||||
L"Page {page}");
|
|
||||||
input = overlays.GetOverlay(printing::PageOverlays::LEFT,
|
|
||||||
printing::PageOverlays::TOP);
|
|
||||||
EXPECT_EQ(input, L"Page {page}");
|
|
||||||
|
|
||||||
// Replace the variables to see if the page number is correct.
|
|
||||||
out = printing::PageOverlays::ReplaceVariables(input, *doc.get(),
|
|
||||||
*page.get());
|
|
||||||
EXPECT_EQ(out, L"Page 1");
|
|
||||||
}
|
|
@ -82,7 +82,6 @@ bool PrintSettings::Equals(const PrintSettings& rhs) const {
|
|||||||
min_shrink == rhs.min_shrink &&
|
min_shrink == rhs.min_shrink &&
|
||||||
max_shrink == rhs.max_shrink &&
|
max_shrink == rhs.max_shrink &&
|
||||||
desired_dpi == rhs.desired_dpi &&
|
desired_dpi == rhs.desired_dpi &&
|
||||||
overlays.Equals(rhs.overlays) &&
|
|
||||||
device_name_ == rhs.device_name_ &&
|
device_name_ == rhs.device_name_ &&
|
||||||
page_setup_device_units_.Equals(rhs.page_setup_device_units_) &&
|
page_setup_device_units_.Equals(rhs.page_setup_device_units_) &&
|
||||||
dpi_ == rhs.dpi_ &&
|
dpi_ == rhs.dpi_ &&
|
||||||
|
@ -5,7 +5,8 @@
|
|||||||
#ifndef PRINTING_PRINT_SETTINGS_H_
|
#ifndef PRINTING_PRINT_SETTINGS_H_
|
||||||
#define PRINTING_PRINT_SETTINGS_H_
|
#define PRINTING_PRINT_SETTINGS_H_
|
||||||
|
|
||||||
#include "printing/page_overlays.h"
|
#include <string>
|
||||||
|
|
||||||
#include "printing/page_range.h"
|
#include "printing/page_range.h"
|
||||||
#include "printing/page_setup.h"
|
#include "printing/page_setup.h"
|
||||||
#include "ui/gfx/rect.h"
|
#include "ui/gfx/rect.h"
|
||||||
@ -78,9 +79,6 @@ class PrintSettings {
|
|||||||
// scaled to ScreenDpi/dpix*desired_dpi.
|
// scaled to ScreenDpi/dpix*desired_dpi.
|
||||||
int desired_dpi;
|
int desired_dpi;
|
||||||
|
|
||||||
// The various overlays (headers and footers).
|
|
||||||
PageOverlays overlays;
|
|
||||||
|
|
||||||
// Indicates if the user only wants to print the current selection.
|
// Indicates if the user only wants to print the current selection.
|
||||||
bool selection_only;
|
bool selection_only;
|
||||||
|
|
||||||
|
@ -19,7 +19,6 @@
|
|||||||
#include "base/utf_string_conversions.h"
|
#include "base/utf_string_conversions.h"
|
||||||
#include "base/i18n/time_formatting.h"
|
#include "base/i18n/time_formatting.h"
|
||||||
#include "printing/page_number.h"
|
#include "printing/page_number.h"
|
||||||
#include "printing/page_overlays.h"
|
|
||||||
#include "printing/printed_pages_source.h"
|
#include "printing/printed_pages_source.h"
|
||||||
#include "printing/printed_page.h"
|
#include "printing/printed_page.h"
|
||||||
#include "printing/units.h"
|
#include "printing/units.h"
|
||||||
@ -180,85 +179,11 @@ int PrintedDocument::expected_page_count() const {
|
|||||||
return mutable_.expected_page_count_;
|
return mutable_.expected_page_count_;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PrintedDocument::PrintHeaderFooter(gfx::NativeDrawingContext context,
|
|
||||||
const PrintedPage& page,
|
|
||||||
PageOverlays::HorizontalPosition x,
|
|
||||||
PageOverlays::VerticalPosition y,
|
|
||||||
const gfx::Font& font) const {
|
|
||||||
const PrintSettings& settings = immutable_.settings_;
|
|
||||||
if (!settings.use_overlays || !page.has_visible_overlays()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const std::wstring& line = settings.overlays.GetOverlay(x, y);
|
|
||||||
if (line.empty()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
std::wstring output(PageOverlays::ReplaceVariables(line, *this, page));
|
|
||||||
if (output.empty()) {
|
|
||||||
// May happen if document name or url is empty.
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const gfx::Size string_size(font.GetStringWidth(WideToUTF16Hack(output)),
|
|
||||||
font.GetHeight());
|
|
||||||
gfx::Rect bounding;
|
|
||||||
bounding.set_height(string_size.height());
|
|
||||||
const gfx::Rect& overlay_area(
|
|
||||||
settings.page_setup_device_units().overlay_area());
|
|
||||||
// Hard code .25 cm interstice between overlays. Make sure that some space is
|
|
||||||
// kept between each headers.
|
|
||||||
const int interstice = ConvertUnit(250, kHundrethsMMPerInch,
|
|
||||||
settings.device_units_per_inch());
|
|
||||||
const int max_width = overlay_area.width() / 3 - interstice;
|
|
||||||
const int actual_width = std::min(string_size.width(), max_width);
|
|
||||||
switch (x) {
|
|
||||||
case PageOverlays::LEFT:
|
|
||||||
bounding.set_x(overlay_area.x());
|
|
||||||
bounding.set_width(max_width);
|
|
||||||
break;
|
|
||||||
case PageOverlays::CENTER:
|
|
||||||
bounding.set_x(overlay_area.x() +
|
|
||||||
(overlay_area.width() - actual_width) / 2);
|
|
||||||
bounding.set_width(actual_width);
|
|
||||||
break;
|
|
||||||
case PageOverlays::RIGHT:
|
|
||||||
bounding.set_x(overlay_area.right() - actual_width);
|
|
||||||
bounding.set_width(actual_width);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
DCHECK_LE(bounding.right(), overlay_area.right());
|
|
||||||
|
|
||||||
switch (y) {
|
|
||||||
case PageOverlays::BOTTOM:
|
|
||||||
bounding.set_y(overlay_area.bottom() - string_size.height());
|
|
||||||
break;
|
|
||||||
case PageOverlays::TOP:
|
|
||||||
bounding.set_y(overlay_area.y());
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (string_size.width() > bounding.width()) {
|
|
||||||
if (line == PageOverlays::kUrl) {
|
|
||||||
output = UTF16ToWideHack(ui::ElideUrl(url(), font, bounding.width(),
|
|
||||||
std::string()));
|
|
||||||
} else {
|
|
||||||
output = UTF16ToWideHack(ui::ElideText(WideToUTF16Hack(output),
|
|
||||||
font, bounding.width(), false));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
DrawHeaderFooter(context, output, bounding);
|
|
||||||
}
|
|
||||||
|
|
||||||
void PrintedDocument::DebugDump(const PrintedPage& page) {
|
void PrintedDocument::DebugDump(const PrintedPage& page) {
|
||||||
if (!g_debug_dump_info.Get().enabled)
|
if (!g_debug_dump_info.Get().enabled)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
string16 filename;
|
string16 filename;
|
||||||
filename += date();
|
|
||||||
filename += ASCIIToUTF16("_");
|
|
||||||
filename += time();
|
|
||||||
filename += ASCIIToUTF16("_");
|
|
||||||
filename += name();
|
filename += name();
|
||||||
filename += ASCIIToUTF16("_");
|
filename += ASCIIToUTF16("_");
|
||||||
filename += ASCIIToUTF16(StringPrintf("%02d", page.page_number()));
|
filename += ASCIIToUTF16(StringPrintf("%02d", page.page_number()));
|
||||||
@ -303,7 +228,6 @@ PrintedDocument::Immutable::Immutable(const PrintSettings& settings,
|
|||||||
name_(source->RenderSourceName()),
|
name_(source->RenderSourceName()),
|
||||||
url_(source->RenderSourceUrl()),
|
url_(source->RenderSourceUrl()),
|
||||||
cookie_(cookie) {
|
cookie_(cookie) {
|
||||||
SetDocumentDate();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
PrintedDocument::Immutable::~Immutable() {
|
PrintedDocument::Immutable::~Immutable() {
|
||||||
|
@ -98,8 +98,6 @@ class PrintedDocument : public base::RefCountedThreadSafe<PrintedDocument> {
|
|||||||
return immutable_.name_;
|
return immutable_.name_;
|
||||||
}
|
}
|
||||||
const GURL& url() const { return immutable_.url_; }
|
const GURL& url() const { return immutable_.url_; }
|
||||||
const string16& date() const { return immutable_.date_; }
|
|
||||||
const string16& time() const { return immutable_.time_; }
|
|
||||||
int cookie() const { return immutable_.cookie_; }
|
int cookie() const { return immutable_.cookie_; }
|
||||||
|
|
||||||
// Sets a path where to dump printing output files for debugging. If never set
|
// Sets a path where to dump printing output files for debugging. If never set
|
||||||
@ -154,9 +152,6 @@ class PrintedDocument : public base::RefCountedThreadSafe<PrintedDocument> {
|
|||||||
int cookie);
|
int cookie);
|
||||||
~Immutable();
|
~Immutable();
|
||||||
|
|
||||||
// Sets the document's |date_| and |time_|.
|
|
||||||
void SetDocumentDate();
|
|
||||||
|
|
||||||
// Print settings used to generate this document. Immutable.
|
// Print settings used to generate this document. Immutable.
|
||||||
PrintSettings settings_;
|
PrintSettings settings_;
|
||||||
|
|
||||||
@ -169,12 +164,6 @@ class PrintedDocument : public base::RefCountedThreadSafe<PrintedDocument> {
|
|||||||
// URL that generated this document. Immutable.
|
// URL that generated this document. Immutable.
|
||||||
GURL url_;
|
GURL url_;
|
||||||
|
|
||||||
// The date on which this job started. Immutable.
|
|
||||||
string16 date_;
|
|
||||||
|
|
||||||
// The time at which this job started. Immutable.
|
|
||||||
string16 time_;
|
|
||||||
|
|
||||||
// Cookie to uniquely identify this document. It is used to make sure that a
|
// Cookie to uniquely identify this document. It is used to make sure that a
|
||||||
// PrintedPage is correctly belonging to the PrintedDocument. Since
|
// PrintedPage is correctly belonging to the PrintedDocument. Since
|
||||||
// PrintedPage generation is completely asynchronous, it could be easy to
|
// PrintedPage generation is completely asynchronous, it could be easy to
|
||||||
@ -184,23 +173,6 @@ class PrintedDocument : public base::RefCountedThreadSafe<PrintedDocument> {
|
|||||||
int cookie_;
|
int cookie_;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Prints the headers and footers for one page in the specified context
|
|
||||||
// according to the current settings.
|
|
||||||
void PrintHeaderFooter(gfx::NativeDrawingContext context,
|
|
||||||
const PrintedPage& page,
|
|
||||||
PageOverlays::HorizontalPosition x,
|
|
||||||
PageOverlays::VerticalPosition y,
|
|
||||||
const gfx::Font& font) const;
|
|
||||||
|
|
||||||
// Draws the computed |text| into |context| taking into account the bounding
|
|
||||||
// region |bounds|. |bounds| is the position in which to draw |text| and
|
|
||||||
// the minimum area needed to contain |text| which may not be larger than the
|
|
||||||
// header or footer itself.
|
|
||||||
// TODO(jhawkins): string16.
|
|
||||||
void DrawHeaderFooter(gfx::NativeDrawingContext context,
|
|
||||||
std::wstring text,
|
|
||||||
gfx::Rect bounds) const;
|
|
||||||
|
|
||||||
void DebugDump(const PrintedPage& page);
|
void DebugDump(const PrintedPage& page);
|
||||||
|
|
||||||
// All writable data member access must be guarded by this lock. Needs to be
|
// All writable data member access must be guarded by this lock. Needs to be
|
||||||
|
@ -34,10 +34,4 @@ void PrintedDocument::RenderPrintedPage(
|
|||||||
#endif // !defined(OS_CHROMEOS)
|
#endif // !defined(OS_CHROMEOS)
|
||||||
}
|
}
|
||||||
|
|
||||||
void PrintedDocument::DrawHeaderFooter(gfx::NativeDrawingContext context,
|
|
||||||
std::wstring text,
|
|
||||||
gfx::Rect bounds) const {
|
|
||||||
NOTIMPLEMENTED();
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace printing
|
} // namespace printing
|
||||||
|
@ -35,14 +35,6 @@ void PrintedDocument::RenderPrintedPage(
|
|||||||
const int page_number = 1;
|
const int page_number = 1;
|
||||||
metafile->RenderPage(page_number, context, content_area.ToCGRect(),
|
metafile->RenderPage(page_number, context, content_area.ToCGRect(),
|
||||||
false, false, false, false);
|
false, false, false, false);
|
||||||
|
|
||||||
// TODO(stuartmorgan): Print the header and footer.
|
|
||||||
}
|
|
||||||
|
|
||||||
void PrintedDocument::DrawHeaderFooter(gfx::NativeDrawingContext context,
|
|
||||||
std::wstring text,
|
|
||||||
gfx::Rect bounds) const {
|
|
||||||
NOTIMPLEMENTED();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace printing
|
} // namespace printing
|
||||||
|
@ -1,21 +0,0 @@
|
|||||||
// Copyright (c) 2009 The Chromium Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style license that can be
|
|
||||||
// found in the LICENSE file.
|
|
||||||
|
|
||||||
#include "printing/printed_document.h"
|
|
||||||
|
|
||||||
#include "base/i18n/time_formatting.h"
|
|
||||||
#include "base/time.h"
|
|
||||||
#include "base/utf_string_conversions.h"
|
|
||||||
|
|
||||||
using base::Time;
|
|
||||||
|
|
||||||
namespace printing {
|
|
||||||
|
|
||||||
void PrintedDocument::Immutable::SetDocumentDate() {
|
|
||||||
Time now = Time::Now();
|
|
||||||
date_ = base::TimeFormatShortDateNumeric(now);
|
|
||||||
time_ = base::TimeFormatTimeOfDay(now);
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace printing
|
|
@ -5,15 +5,11 @@
|
|||||||
#include "printing/printed_document.h"
|
#include "printing/printed_document.h"
|
||||||
|
|
||||||
#include "base/logging.h"
|
#include "base/logging.h"
|
||||||
#include "base/string_util.h"
|
|
||||||
#include "base/utf_string_conversions.h"
|
|
||||||
#include "printing/page_number.h"
|
#include "printing/page_number.h"
|
||||||
#include "printing/page_overlays.h"
|
|
||||||
#include "printing/printed_pages_source.h"
|
#include "printing/printed_pages_source.h"
|
||||||
#include "printing/printed_page.h"
|
#include "printing/printed_page.h"
|
||||||
#include "printing/units.h"
|
#include "printing/units.h"
|
||||||
#include "skia/ext/platform_device.h"
|
#include "skia/ext/platform_device.h"
|
||||||
#include "ui/gfx/font.h"
|
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
@ -33,46 +29,6 @@ void DrawRect(HDC context, gfx::Rect rect) {
|
|||||||
Rectangle(context, rect.x(), rect.y(), rect.right(), rect.bottom());
|
Rectangle(context, rect.x(), rect.y(), rect.right(), rect.bottom());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Creates a string interpretation of the time of day represented by the given
|
|
||||||
// SYSTEMTIME that's appropriate for the user's default locale.
|
|
||||||
// Format can be an empty string (for the default format), or a "format picture"
|
|
||||||
// as specified in the Windows documentation for GetTimeFormat().
|
|
||||||
string16 FormatSystemTime(const SYSTEMTIME& time, const string16& format) {
|
|
||||||
// If the format string is empty, just use the default format.
|
|
||||||
LPCTSTR format_ptr = NULL;
|
|
||||||
if (!format.empty())
|
|
||||||
format_ptr = format.c_str();
|
|
||||||
|
|
||||||
int buffer_size = GetTimeFormat(LOCALE_USER_DEFAULT, NULL, &time, format_ptr,
|
|
||||||
NULL, 0);
|
|
||||||
|
|
||||||
string16 output;
|
|
||||||
GetTimeFormat(LOCALE_USER_DEFAULT, NULL, &time, format_ptr,
|
|
||||||
WriteInto(&output, buffer_size), buffer_size);
|
|
||||||
|
|
||||||
return output;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Creates a string interpretation of the date represented by the given
|
|
||||||
// SYSTEMTIME that's appropriate for the user's default locale.
|
|
||||||
// Format can be an empty string (for the default format), or a "format picture"
|
|
||||||
// as specified in the Windows documentation for GetDateFormat().
|
|
||||||
string16 FormatSystemDate(const SYSTEMTIME& date, const string16& format) {
|
|
||||||
// If the format string is empty, just use the default format.
|
|
||||||
LPCTSTR format_ptr = NULL;
|
|
||||||
if (!format.empty())
|
|
||||||
format_ptr = format.c_str();
|
|
||||||
|
|
||||||
int buffer_size = GetDateFormat(LOCALE_USER_DEFAULT, NULL, &date, format_ptr,
|
|
||||||
NULL, 0);
|
|
||||||
|
|
||||||
string16 output;
|
|
||||||
GetDateFormat(LOCALE_USER_DEFAULT, NULL, &date, format_ptr,
|
|
||||||
WriteInto(&output, buffer_size), buffer_size);
|
|
||||||
|
|
||||||
return output;
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
namespace printing {
|
namespace printing {
|
||||||
@ -122,68 +78,6 @@ void PrintedDocument::RenderPrintedPage(
|
|||||||
DCHECK_NE(res, 0);
|
DCHECK_NE(res, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Print the header and footer. Offset by printable area offset (see comment
|
|
||||||
// above).
|
|
||||||
SimpleModifyWorldTransform(
|
|
||||||
context,
|
|
||||||
-page_setup.printable_area().x(),
|
|
||||||
-page_setup.printable_area().y(),
|
|
||||||
1);
|
|
||||||
int base_font_size = gfx::Font().GetHeight();
|
|
||||||
int new_font_size = ConvertUnit(10,
|
|
||||||
immutable_.settings_.desired_dpi,
|
|
||||||
immutable_.settings_.device_units_per_inch());
|
|
||||||
DCHECK_GT(new_font_size, base_font_size);
|
|
||||||
gfx::Font font(gfx::Font().DeriveFont(new_font_size - base_font_size));
|
|
||||||
HGDIOBJ old_font = SelectObject(context, font.GetNativeFont());
|
|
||||||
DCHECK(old_font != NULL);
|
|
||||||
// We don't want a white square around the text ever if overflowing.
|
|
||||||
SetBkMode(context, TRANSPARENT);
|
|
||||||
// Disabling printing the header/footer on Windows for now to make the
|
|
||||||
// behavior consistent with Mac/Linux.
|
|
||||||
// TODO(thestig) re-enable this for print preview.
|
|
||||||
#if 0
|
|
||||||
PrintHeaderFooter(context, page, PageOverlays::LEFT, PageOverlays::TOP,
|
|
||||||
font);
|
|
||||||
PrintHeaderFooter(context, page, PageOverlays::CENTER, PageOverlays::TOP,
|
|
||||||
font);
|
|
||||||
PrintHeaderFooter(context, page, PageOverlays::RIGHT, PageOverlays::TOP,
|
|
||||||
font);
|
|
||||||
PrintHeaderFooter(context, page, PageOverlays::LEFT, PageOverlays::BOTTOM,
|
|
||||||
font);
|
|
||||||
PrintHeaderFooter(context, page, PageOverlays::CENTER, PageOverlays::BOTTOM,
|
|
||||||
font);
|
|
||||||
PrintHeaderFooter(context, page, PageOverlays::RIGHT, PageOverlays::BOTTOM,
|
|
||||||
font);
|
|
||||||
#endif
|
|
||||||
int res = RestoreDC(context, saved_state);
|
|
||||||
DCHECK_NE(res, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
void PrintedDocument::Immutable::SetDocumentDate() {
|
|
||||||
// Use the native time formatting for printing on Windows.
|
|
||||||
SYSTEMTIME systemtime;
|
|
||||||
GetLocalTime(&systemtime);
|
|
||||||
date_ =
|
|
||||||
WideToUTF16Hack(FormatSystemDate(systemtime, std::wstring()));
|
|
||||||
time_ =
|
|
||||||
WideToUTF16Hack(FormatSystemTime(systemtime, std::wstring()));
|
|
||||||
}
|
|
||||||
|
|
||||||
void PrintedDocument::DrawHeaderFooter(gfx::NativeDrawingContext context,
|
|
||||||
std::wstring text,
|
|
||||||
gfx::Rect bounds) const {
|
|
||||||
// Save the state for the clipping region.
|
|
||||||
int saved_state = SaveDC(context);
|
|
||||||
DCHECK_NE(saved_state, 0);
|
|
||||||
|
|
||||||
int result = IntersectClipRect(context, bounds.x(), bounds.y(),
|
|
||||||
bounds.right() + 1, bounds.bottom() + 1);
|
|
||||||
DCHECK(result == SIMPLEREGION || result == COMPLEXREGION);
|
|
||||||
TextOut(context,
|
|
||||||
bounds.x(), bounds.y(),
|
|
||||||
text.c_str(),
|
|
||||||
static_cast<int>(text.size()));
|
|
||||||
int res = RestoreDC(context, saved_state);
|
int res = RestoreDC(context, saved_state);
|
||||||
DCHECK_NE(res, 0);
|
DCHECK_NE(res, 0);
|
||||||
}
|
}
|
||||||
|
@ -42,8 +42,6 @@
|
|||||||
'metafile_skia_wrapper.cc',
|
'metafile_skia_wrapper.cc',
|
||||||
'page_number.cc',
|
'page_number.cc',
|
||||||
'page_number.h',
|
'page_number.h',
|
||||||
'page_overlays.cc',
|
|
||||||
'page_overlays.h',
|
|
||||||
'page_range.cc',
|
'page_range.cc',
|
||||||
'page_range.h',
|
'page_range.h',
|
||||||
'page_setup.cc',
|
'page_setup.cc',
|
||||||
@ -58,7 +56,6 @@
|
|||||||
'printed_document.cc',
|
'printed_document.cc',
|
||||||
'printed_document.h',
|
'printed_document.h',
|
||||||
'printed_document_mac.cc',
|
'printed_document_mac.cc',
|
||||||
'printed_document_posix.cc',
|
|
||||||
'printed_document_win.cc',
|
'printed_document_win.cc',
|
||||||
'printed_page.cc',
|
'printed_page.cc',
|
||||||
'printed_page.h',
|
'printed_page.h',
|
||||||
@ -171,7 +168,6 @@
|
|||||||
'emf_win_unittest.cc',
|
'emf_win_unittest.cc',
|
||||||
'printing_test.h',
|
'printing_test.h',
|
||||||
'page_number_unittest.cc',
|
'page_number_unittest.cc',
|
||||||
'page_overlays_unittest.cc',
|
|
||||||
'page_range_unittest.cc',
|
'page_range_unittest.cc',
|
||||||
'page_setup_unittest.cc',
|
'page_setup_unittest.cc',
|
||||||
'pdf_metafile_cairo_linux_unittest.cc',
|
'pdf_metafile_cairo_linux_unittest.cc',
|
||||||
|
Reference in New Issue
Block a user