Index: printing/page_setup.cc |
diff --git a/printing/page_setup.cc b/printing/page_setup.cc |
index 9ac3e5203166832ed3f17a0b4652e1f56ef8f64b..2411f6fb98954107b1a8e48453ec31ab1718edca 100644 |
--- a/printing/page_setup.cc |
+++ b/printing/page_setup.cc |
@@ -37,7 +37,8 @@ bool PageMargins::Equals(const PageMargins& rhs) const { |
bottom == rhs.bottom; |
} |
-PageSetup::PageSetup() : text_height_(0) { |
+PageSetup::PageSetup() { |
+ Clear(); |
} |
PageSetup::~PageSetup() {} |
@@ -75,35 +76,64 @@ void PageSetup::Init(const gfx::Size& physical_size, |
printable_area_ = printable_area; |
text_height_ = text_height; |
+ CalculateSizesWithinRect(printable_area_); |
+} |
+ |
+void PageSetup::SetRequestedMargins(const PageMargins& requested_margins) { |
+ requested_margins_ = requested_margins; |
+ if (printable_area_.width() && printable_area_.height()) |
+ CalculateSizesWithinRect(printable_area_); |
+} |
+ |
+void PageSetup::ForceRequestedMargins(const PageMargins& requested_margins) { |
+ requested_margins_ = requested_margins; |
+ if (physical_size_.width() && physical_size_.height()) |
+ CalculateSizesWithinRect(gfx::Rect(physical_size_)); |
+} |
+ |
+void PageSetup::FlipOrientation() { |
+ if (physical_size_.width() && physical_size_.height()) { |
+ gfx::Size new_size(physical_size_.height(), physical_size_.width()); |
+ int new_y = physical_size_.width() - |
+ (printable_area_.width() + printable_area_.x()); |
+ gfx::Rect new_printable_area(printable_area_.y(), |
+ new_y, |
+ printable_area_.height(), |
+ printable_area_.width()); |
+ Init(new_size, new_printable_area, text_height_); |
+ } |
+} |
+ |
+void PageSetup::CalculateSizesWithinRect(const gfx::Rect& bounds) { |
// Calculate the effective margins. The tricky part. |
effective_margins_.header = std::max(requested_margins_.header, |
- printable_area_.y()); |
+ bounds.y()); |
effective_margins_.footer = std::max(requested_margins_.footer, |
- physical_size.height() - |
- printable_area_.bottom()); |
+ physical_size_.height() - |
+ bounds.bottom()); |
effective_margins_.left = std::max(requested_margins_.left, |
- printable_area_.x()); |
+ bounds.x()); |
effective_margins_.top = std::max(std::max(requested_margins_.top, |
- printable_area_.y()), |
- effective_margins_.header + text_height); |
+ bounds.y()), |
+ effective_margins_.header + text_height_); |
effective_margins_.right = std::max(requested_margins_.right, |
- physical_size.width() - |
- printable_area_.right()); |
- effective_margins_.bottom = std::max(std::max(requested_margins_.bottom, |
- physical_size.height() - |
- printable_area_.bottom()), |
- effective_margins_.footer + text_height); |
+ physical_size_.width() - |
+ bounds.right()); |
+ effective_margins_.bottom = |
+ std::max(std::max(requested_margins_.bottom, |
+ physical_size_.height() - bounds.bottom()), |
+ effective_margins_.footer + text_height_); |
// Calculate the overlay area. If the margins are excessive, the overlay_area |
// size will be (0, 0). |
overlay_area_.set_x(effective_margins_.left); |
overlay_area_.set_y(effective_margins_.header); |
overlay_area_.set_width(std::max(0, |
- physical_size.width() - |
+ physical_size_.width() - |
effective_margins_.right - |
overlay_area_.x())); |
overlay_area_.set_height(std::max(0, |
- physical_size.height() - |
+ physical_size_.height() - |
effective_margins_.footer - |
overlay_area_.y())); |
@@ -112,32 +142,13 @@ void PageSetup::Init(const gfx::Size& physical_size, |
content_area_.set_x(effective_margins_.left); |
content_area_.set_y(effective_margins_.top); |
content_area_.set_width(std::max(0, |
- physical_size.width() - |
+ physical_size_.width() - |
effective_margins_.right - |
content_area_.x())); |
content_area_.set_height(std::max(0, |
- physical_size.height() - |
+ physical_size_.height() - |
effective_margins_.bottom - |
content_area_.y())); |
} |
-void PageSetup::SetRequestedMargins(const PageMargins& requested_margins) { |
- requested_margins_ = requested_margins; |
- if (physical_size_.width() && physical_size_.height()) |
- Init(physical_size_, printable_area_, text_height_); |
-} |
- |
-void PageSetup::FlipOrientation() { |
- if (physical_size_.width() && physical_size_.height()) { |
- gfx::Size new_size(physical_size_.height(), physical_size_.width()); |
- int new_y = physical_size_.width() - |
- (printable_area_.width() + printable_area_.x()); |
- gfx::Rect new_printable_area(printable_area_.y(), |
- new_y, |
- printable_area_.height(), |
- printable_area_.width()); |
- Init(new_size, new_printable_area, text_height_); |
- } |
-} |
- |
} // namespace printing |