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

Side by Side Diff: printing/page_setup.cc

Issue 8201027: Move margin processing code to the browser process. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address nits Created 9 years, 2 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 | « printing/page_setup.h ('k') | printing/print_dialog_gtk_interface.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "printing/page_setup.h" 5 #include "printing/page_setup.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 10
(...skipping 19 matching lines...) Expand all
30 30
31 bool PageMargins::Equals(const PageMargins& rhs) const { 31 bool PageMargins::Equals(const PageMargins& rhs) const {
32 return header == rhs.header && 32 return header == rhs.header &&
33 footer == rhs.footer && 33 footer == rhs.footer &&
34 left == rhs.left && 34 left == rhs.left &&
35 top == rhs.top && 35 top == rhs.top &&
36 right == rhs.right && 36 right == rhs.right &&
37 bottom == rhs.bottom; 37 bottom == rhs.bottom;
38 } 38 }
39 39
40 PageSetup::PageSetup() : text_height_(0) { 40 PageSetup::PageSetup() {
41 Clear();
41 } 42 }
42 43
43 PageSetup::~PageSetup() {} 44 PageSetup::~PageSetup() {}
44 45
45 void PageSetup::Clear() { 46 void PageSetup::Clear() {
46 physical_size_.SetSize(0, 0); 47 physical_size_.SetSize(0, 0);
47 printable_area_.SetRect(0, 0, 0, 0); 48 printable_area_.SetRect(0, 0, 0, 0);
48 overlay_area_.SetRect(0, 0, 0, 0); 49 overlay_area_.SetRect(0, 0, 0, 0);
49 content_area_.SetRect(0, 0, 0, 0); 50 content_area_.SetRect(0, 0, 0, 0);
50 effective_margins_.Clear(); 51 effective_margins_.Clear();
(...skipping 17 matching lines...) Expand all
68 // I've seen this assert triggers on Canon GP160PF PCL 5e and HP LaserJet 5. 69 // I've seen this assert triggers on Canon GP160PF PCL 5e and HP LaserJet 5.
69 // Since we don't know the dpi here, just disable the check. 70 // Since we don't know the dpi here, just disable the check.
70 // DCHECK_LE(printable_area.bottom(), physical_size.height()); 71 // DCHECK_LE(printable_area.bottom(), physical_size.height());
71 DCHECK_GE(printable_area.x(), 0); 72 DCHECK_GE(printable_area.x(), 0);
72 DCHECK_GE(printable_area.y(), 0); 73 DCHECK_GE(printable_area.y(), 0);
73 DCHECK_GE(text_height, 0); 74 DCHECK_GE(text_height, 0);
74 physical_size_ = physical_size; 75 physical_size_ = physical_size;
75 printable_area_ = printable_area; 76 printable_area_ = printable_area;
76 text_height_ = text_height; 77 text_height_ = text_height;
77 78
79 CalculateSizesWithinRect(printable_area_);
80 }
81
82 void PageSetup::SetRequestedMargins(const PageMargins& requested_margins) {
83 requested_margins_ = requested_margins;
84 if (printable_area_.width() && printable_area_.height())
85 CalculateSizesWithinRect(printable_area_);
86 }
87
88 void PageSetup::ForceRequestedMargins(const PageMargins& requested_margins) {
89 requested_margins_ = requested_margins;
90 if (physical_size_.width() && physical_size_.height())
91 CalculateSizesWithinRect(gfx::Rect(physical_size_));
92 }
93
94 void PageSetup::FlipOrientation() {
95 if (physical_size_.width() && physical_size_.height()) {
96 gfx::Size new_size(physical_size_.height(), physical_size_.width());
97 int new_y = physical_size_.width() -
98 (printable_area_.width() + printable_area_.x());
99 gfx::Rect new_printable_area(printable_area_.y(),
100 new_y,
101 printable_area_.height(),
102 printable_area_.width());
103 Init(new_size, new_printable_area, text_height_);
104 }
105 }
106
107 void PageSetup::CalculateSizesWithinRect(const gfx::Rect& bounds) {
78 // Calculate the effective margins. The tricky part. 108 // Calculate the effective margins. The tricky part.
79 effective_margins_.header = std::max(requested_margins_.header, 109 effective_margins_.header = std::max(requested_margins_.header,
80 printable_area_.y()); 110 bounds.y());
81 effective_margins_.footer = std::max(requested_margins_.footer, 111 effective_margins_.footer = std::max(requested_margins_.footer,
82 physical_size.height() - 112 physical_size_.height() -
83 printable_area_.bottom()); 113 bounds.bottom());
84 effective_margins_.left = std::max(requested_margins_.left, 114 effective_margins_.left = std::max(requested_margins_.left,
85 printable_area_.x()); 115 bounds.x());
86 effective_margins_.top = std::max(std::max(requested_margins_.top, 116 effective_margins_.top = std::max(std::max(requested_margins_.top,
87 printable_area_.y()), 117 bounds.y()),
88 effective_margins_.header + text_height); 118 effective_margins_.header + text_height_);
89 effective_margins_.right = std::max(requested_margins_.right, 119 effective_margins_.right = std::max(requested_margins_.right,
90 physical_size.width() - 120 physical_size_.width() -
91 printable_area_.right()); 121 bounds.right());
92 effective_margins_.bottom = std::max(std::max(requested_margins_.bottom, 122 effective_margins_.bottom =
93 physical_size.height() - 123 std::max(std::max(requested_margins_.bottom,
94 printable_area_.bottom()), 124 physical_size_.height() - bounds.bottom()),
95 effective_margins_.footer + text_height); 125 effective_margins_.footer + text_height_);
96 126
97 // Calculate the overlay area. If the margins are excessive, the overlay_area 127 // Calculate the overlay area. If the margins are excessive, the overlay_area
98 // size will be (0, 0). 128 // size will be (0, 0).
99 overlay_area_.set_x(effective_margins_.left); 129 overlay_area_.set_x(effective_margins_.left);
100 overlay_area_.set_y(effective_margins_.header); 130 overlay_area_.set_y(effective_margins_.header);
101 overlay_area_.set_width(std::max(0, 131 overlay_area_.set_width(std::max(0,
102 physical_size.width() - 132 physical_size_.width() -
103 effective_margins_.right - 133 effective_margins_.right -
104 overlay_area_.x())); 134 overlay_area_.x()));
105 overlay_area_.set_height(std::max(0, 135 overlay_area_.set_height(std::max(0,
106 physical_size.height() - 136 physical_size_.height() -
107 effective_margins_.footer - 137 effective_margins_.footer -
108 overlay_area_.y())); 138 overlay_area_.y()));
109 139
110 // Calculate the content area. If the margins are excessive, the content_area 140 // Calculate the content area. If the margins are excessive, the content_area
111 // size will be (0, 0). 141 // size will be (0, 0).
112 content_area_.set_x(effective_margins_.left); 142 content_area_.set_x(effective_margins_.left);
113 content_area_.set_y(effective_margins_.top); 143 content_area_.set_y(effective_margins_.top);
114 content_area_.set_width(std::max(0, 144 content_area_.set_width(std::max(0,
115 physical_size.width() - 145 physical_size_.width() -
116 effective_margins_.right - 146 effective_margins_.right -
117 content_area_.x())); 147 content_area_.x()));
118 content_area_.set_height(std::max(0, 148 content_area_.set_height(std::max(0,
119 physical_size.height() - 149 physical_size_.height() -
120 effective_margins_.bottom - 150 effective_margins_.bottom -
121 content_area_.y())); 151 content_area_.y()));
122 } 152 }
123 153
124 void PageSetup::SetRequestedMargins(const PageMargins& requested_margins) {
125 requested_margins_ = requested_margins;
126 if (physical_size_.width() && physical_size_.height())
127 Init(physical_size_, printable_area_, text_height_);
128 }
129
130 void PageSetup::FlipOrientation() {
131 if (physical_size_.width() && physical_size_.height()) {
132 gfx::Size new_size(physical_size_.height(), physical_size_.width());
133 int new_y = physical_size_.width() -
134 (printable_area_.width() + printable_area_.x());
135 gfx::Rect new_printable_area(printable_area_.y(),
136 new_y,
137 printable_area_.height(),
138 printable_area_.width());
139 Init(new_size, new_printable_area, text_height_);
140 }
141 }
142
143 } // namespace printing 154 } // namespace printing
OLDNEW
« no previous file with comments | « printing/page_setup.h ('k') | printing/print_dialog_gtk_interface.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698