Index: printing/page_setup.cc |
diff --git a/printing/page_setup.cc b/printing/page_setup.cc |
index b870323e04cc3c7180faaf1e798de0d251818ddb..ad0156eda455dc7e56be1988a5e54d79b22bcdaf 100644 |
--- a/printing/page_setup.cc |
+++ b/printing/page_setup.cc |
@@ -19,6 +19,14 @@ PageMargins::PageMargins() |
bottom(0) { |
} |
+void PageMargins::Rotate() { |
+ int temp_right = right; |
+ right = bottom; |
+ bottom = left; |
+ left = top; |
+ top = temp_right; |
+} |
+ |
void PageMargins::Clear() { |
header = 0; |
footer = 0; |
@@ -50,6 +58,7 @@ void PageSetup::Clear() { |
content_area_.SetRect(0, 0, 0, 0); |
effective_margins_.Clear(); |
text_height_ = 0; |
+ forced_margins_ = false; |
} |
bool PageSetup::Equals(const PageSetup& rhs) const { |
@@ -76,19 +85,17 @@ void PageSetup::Init(const gfx::Size& physical_size, |
printable_area_ = printable_area; |
text_height_ = text_height; |
- CalculateSizesWithinRect(printable_area_, text_height_); |
+ SetRequestedMarginsAndCalculateSizes(requested_margins_); |
} |
void PageSetup::SetRequestedMargins(const PageMargins& requested_margins) { |
- requested_margins_ = requested_margins; |
- if (printable_area_.width() && printable_area_.height()) |
- CalculateSizesWithinRect(printable_area_, text_height_); |
+ forced_margins_ = false; |
+ SetRequestedMarginsAndCalculateSizes(requested_margins); |
} |
void PageSetup::ForceRequestedMargins(const PageMargins& requested_margins) { |
- requested_margins_ = requested_margins; |
- if (physical_size_.width() && physical_size_.height()) |
- CalculateSizesWithinRect(gfx::Rect(physical_size_), 0); |
+ forced_margins_ = true; |
+ SetRequestedMarginsAndCalculateSizes(requested_margins); |
} |
void PageSetup::FlipOrientation() { |
@@ -100,10 +107,22 @@ void PageSetup::FlipOrientation() { |
new_y, |
printable_area_.height(), |
printable_area_.width()); |
+ requested_margins_.Rotate(); |
Init(new_size, new_printable_area, text_height_); |
} |
} |
+void PageSetup::SetRequestedMarginsAndCalculateSizes( |
+ const PageMargins& requested_margins) { |
+ requested_margins_ = requested_margins; |
+ if (physical_size_.width() && physical_size_.height()) { |
+ if (forced_margins_) |
+ CalculateSizesWithinRect(gfx::Rect(physical_size_), 0); |
+ else |
+ CalculateSizesWithinRect(printable_area_, text_height_); |
+ } |
+} |
+ |
void PageSetup::CalculateSizesWithinRect(const gfx::Rect& bounds, |
int text_height) { |
// Calculate the effective margins. The tricky part. |