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

Side by Side Diff: printing/page_setup.cc

Issue 8328001: For no margins, or printable area margins, don't factor in the header/footer size. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: address comment 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_settings.cc » ('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 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
69 // 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.
70 // 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.
71 // DCHECK_LE(printable_area.bottom(), physical_size.height()); 71 // DCHECK_LE(printable_area.bottom(), physical_size.height());
72 DCHECK_GE(printable_area.x(), 0); 72 DCHECK_GE(printable_area.x(), 0);
73 DCHECK_GE(printable_area.y(), 0); 73 DCHECK_GE(printable_area.y(), 0);
74 DCHECK_GE(text_height, 0); 74 DCHECK_GE(text_height, 0);
75 physical_size_ = physical_size; 75 physical_size_ = physical_size;
76 printable_area_ = printable_area; 76 printable_area_ = printable_area;
77 text_height_ = text_height; 77 text_height_ = text_height;
78 78
79 CalculateSizesWithinRect(printable_area_); 79 CalculateSizesWithinRect(printable_area_, text_height_);
80 } 80 }
81 81
82 void PageSetup::SetRequestedMargins(const PageMargins& requested_margins) { 82 void PageSetup::SetRequestedMargins(const PageMargins& requested_margins) {
83 requested_margins_ = requested_margins; 83 requested_margins_ = requested_margins;
84 if (printable_area_.width() && printable_area_.height()) 84 if (printable_area_.width() && printable_area_.height())
85 CalculateSizesWithinRect(printable_area_); 85 CalculateSizesWithinRect(printable_area_, text_height_);
86 } 86 }
87 87
88 void PageSetup::ForceRequestedMargins(const PageMargins& requested_margins) { 88 void PageSetup::ForceRequestedMargins(const PageMargins& requested_margins) {
89 requested_margins_ = requested_margins; 89 requested_margins_ = requested_margins;
90 if (physical_size_.width() && physical_size_.height()) 90 if (physical_size_.width() && physical_size_.height())
91 CalculateSizesWithinRect(gfx::Rect(physical_size_)); 91 CalculateSizesWithinRect(gfx::Rect(physical_size_), 0);
92 } 92 }
93 93
94 void PageSetup::FlipOrientation() { 94 void PageSetup::FlipOrientation() {
95 if (physical_size_.width() && physical_size_.height()) { 95 if (physical_size_.width() && physical_size_.height()) {
96 gfx::Size new_size(physical_size_.height(), physical_size_.width()); 96 gfx::Size new_size(physical_size_.height(), physical_size_.width());
97 int new_y = physical_size_.width() - 97 int new_y = physical_size_.width() -
98 (printable_area_.width() + printable_area_.x()); 98 (printable_area_.width() + printable_area_.x());
99 gfx::Rect new_printable_area(printable_area_.y(), 99 gfx::Rect new_printable_area(printable_area_.y(),
100 new_y, 100 new_y,
101 printable_area_.height(), 101 printable_area_.height(),
102 printable_area_.width()); 102 printable_area_.width());
103 Init(new_size, new_printable_area, text_height_); 103 Init(new_size, new_printable_area, text_height_);
104 } 104 }
105 } 105 }
106 106
107 void PageSetup::CalculateSizesWithinRect(const gfx::Rect& bounds) { 107 void PageSetup::CalculateSizesWithinRect(const gfx::Rect& bounds,
108 int text_height) {
108 // Calculate the effective margins. The tricky part. 109 // Calculate the effective margins. The tricky part.
109 effective_margins_.header = std::max(requested_margins_.header, 110 effective_margins_.header = std::max(requested_margins_.header,
110 bounds.y()); 111 bounds.y());
111 effective_margins_.footer = std::max(requested_margins_.footer, 112 effective_margins_.footer = std::max(requested_margins_.footer,
112 physical_size_.height() - 113 physical_size_.height() -
113 bounds.bottom()); 114 bounds.bottom());
114 effective_margins_.left = std::max(requested_margins_.left, 115 effective_margins_.left = std::max(requested_margins_.left,
115 bounds.x()); 116 bounds.x());
116 effective_margins_.top = std::max(std::max(requested_margins_.top, 117 effective_margins_.top = std::max(std::max(requested_margins_.top,
117 bounds.y()), 118 bounds.y()),
118 effective_margins_.header + text_height_); 119 effective_margins_.header + text_height);
119 effective_margins_.right = std::max(requested_margins_.right, 120 effective_margins_.right = std::max(requested_margins_.right,
120 physical_size_.width() - 121 physical_size_.width() -
121 bounds.right()); 122 bounds.right());
122 effective_margins_.bottom = 123 effective_margins_.bottom =
123 std::max(std::max(requested_margins_.bottom, 124 std::max(std::max(requested_margins_.bottom,
124 physical_size_.height() - bounds.bottom()), 125 physical_size_.height() - bounds.bottom()),
125 effective_margins_.footer + text_height_); 126 effective_margins_.footer + text_height);
126 127
127 // Calculate the overlay area. If the margins are excessive, the overlay_area 128 // Calculate the overlay area. If the margins are excessive, the overlay_area
128 // size will be (0, 0). 129 // size will be (0, 0).
129 overlay_area_.set_x(effective_margins_.left); 130 overlay_area_.set_x(effective_margins_.left);
130 overlay_area_.set_y(effective_margins_.header); 131 overlay_area_.set_y(effective_margins_.header);
131 overlay_area_.set_width(std::max(0, 132 overlay_area_.set_width(std::max(0,
132 physical_size_.width() - 133 physical_size_.width() -
133 effective_margins_.right - 134 effective_margins_.right -
134 overlay_area_.x())); 135 overlay_area_.x()));
135 overlay_area_.set_height(std::max(0, 136 overlay_area_.set_height(std::max(0,
136 physical_size_.height() - 137 physical_size_.height() -
137 effective_margins_.footer - 138 effective_margins_.footer -
138 overlay_area_.y())); 139 overlay_area_.y()));
139 140
140 // Calculate the content area. If the margins are excessive, the content_area 141 // Calculate the content area. If the margins are excessive, the content_area
141 // size will be (0, 0). 142 // size will be (0, 0).
142 content_area_.set_x(effective_margins_.left); 143 content_area_.set_x(effective_margins_.left);
143 content_area_.set_y(effective_margins_.top); 144 content_area_.set_y(effective_margins_.top);
144 content_area_.set_width(std::max(0, 145 content_area_.set_width(std::max(0,
145 physical_size_.width() - 146 physical_size_.width() -
146 effective_margins_.right - 147 effective_margins_.right -
147 content_area_.x())); 148 content_area_.x()));
148 content_area_.set_height(std::max(0, 149 content_area_.set_height(std::max(0,
149 physical_size_.height() - 150 physical_size_.height() -
150 effective_margins_.bottom - 151 effective_margins_.bottom -
151 content_area_.y())); 152 content_area_.y()));
152 } 153 }
153 154
154 } // namespace printing 155 } // namespace printing
OLDNEW
« no previous file with comments | « printing/page_setup.h ('k') | printing/print_settings.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698