Skip to content

Commit

Permalink
PrintPreview: [LINUX] Update the margin values after flipping the pap…
Browse files Browse the repository at this point in the history
…er orientation.

BUG=101419
TEST=Please refer to bug description.


Review URL: http://codereview.chromium.org/8351063

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@108598 0039d316-1c4b-4281-b951-d872f2087c98
  • Loading branch information
kmadhusu@chromium.org committed Nov 4, 2011
1 parent e1444cb commit b89615d
Show file tree
Hide file tree
Showing 4 changed files with 124 additions and 10 deletions.
33 changes: 26 additions & 7 deletions printing/page_setup.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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 {
Expand All @@ -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() {
Expand All @@ -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.
Expand Down
10 changes: 10 additions & 0 deletions printing/page_setup.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ class PRINTING_EXPORT PageMargins {
public:
PageMargins();

// Rotates the margin values in anti-clockwise direction.
void Rotate();

void Clear();

// Equality operator.
Expand Down Expand Up @@ -64,6 +67,10 @@ class PRINTING_EXPORT PageSetup {
}

private:
// Store |requested_margins_| and update page setup values.
void SetRequestedMarginsAndCalculateSizes(
const PageMargins& requested_margins);

// Calculate overlay_area_, effective_margins_, and content_area_, based on
// a constraint of |bounds| and |text_height|.
void CalculateSizesWithinRect(const gfx::Rect& bounds, int text_height);
Expand All @@ -87,6 +94,9 @@ class PRINTING_EXPORT PageSetup {
// Requested margins.
PageMargins requested_margins_;

// True when |effective_margins_| respects |printable_area_| else false.
bool forced_margins_;

// Space that must be kept free for the overlays.
int text_height_;
};
Expand Down
84 changes: 84 additions & 0 deletions printing/page_setup_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -190,3 +190,87 @@ TEST(PageSetupTest, OutOfRangeMargins) {
EXPECT_EQ(setup.effective_margins().right, 0);
EXPECT_EQ(setup.effective_margins().bottom, 0);
}

TEST(PageSetupTest, FlipOrientation) {
// Margins.
printing::PageMargins margins;
margins.header = 2;
margins.footer = 3;
margins.left = 4;
margins.top = 14;
margins.right = 6;
margins.bottom = 7;
int kTextHeight = 5;

// Page description.
gfx::Size page_size(100, 70);
gfx::Rect printable_area(8, 9, 92, 50);

// Make the calculations.
printing::PageSetup setup;
setup.SetRequestedMargins(margins);
setup.Init(page_size, printable_area, kTextHeight);

gfx::Rect overlay_area(8, 9, 86, 50);
gfx::Rect content_area(8, 14, 86, 40);

EXPECT_EQ(page_size, setup.physical_size());
EXPECT_EQ(overlay_area, setup.overlay_area());
EXPECT_EQ(content_area, setup.content_area());

EXPECT_EQ(setup.effective_margins().left, 8);
EXPECT_EQ(setup.effective_margins().top, 14);
EXPECT_EQ(setup.effective_margins().right, 6);
EXPECT_EQ(setup.effective_margins().bottom, 16);

// Flip the orientation
setup.FlipOrientation();

// Expected values.
gfx::Size flipped_page_size(70, 100);
gfx::Rect flipped_printable_area(9, 0, 50, 92);
gfx::Rect flipped_overlay_area(14, 2, 45, 90);
gfx::Rect flipped_content_area(14, 7, 45, 80);

// Test values.
EXPECT_EQ(flipped_page_size, setup.physical_size());
EXPECT_EQ(flipped_overlay_area, setup.overlay_area()) << " " <<
flipped_page_size.ToString() << " " << flipped_printable_area.ToString();
EXPECT_EQ(flipped_content_area, setup.content_area()) << " " <<
flipped_page_size.ToString() << " " << flipped_printable_area.ToString();
EXPECT_EQ(flipped_printable_area, setup.printable_area());

// Margin values are updated as per the flipped values.
EXPECT_EQ(setup.effective_margins().left, 14);
EXPECT_EQ(setup.effective_margins().top, 7);
EXPECT_EQ(setup.effective_margins().right, 11);
EXPECT_EQ(setup.effective_margins().bottom, 13);

// Force requested margins and flip the orientation.
setup.Init(page_size, printable_area, kTextHeight);
setup.ForceRequestedMargins(margins);
EXPECT_EQ(setup.effective_margins().left, 4);
EXPECT_EQ(setup.effective_margins().top, 14);
EXPECT_EQ(setup.effective_margins().right, 6);
EXPECT_EQ(setup.effective_margins().bottom, 7);

// Flip the orientation
setup.FlipOrientation();

// Expected values.
gfx::Rect new_printable_area(9, 0, 50, 92);
gfx::Rect new_overlay_area(14, 2, 49, 95);
gfx::Rect new_content_area(14, 6, 49, 90);

// Test values.
EXPECT_EQ(flipped_page_size, setup.physical_size());
EXPECT_EQ(new_overlay_area, setup.overlay_area());
EXPECT_EQ(new_content_area, setup.content_area());
EXPECT_EQ(new_printable_area, setup.printable_area());

// Margins values are changed respectively.
EXPECT_EQ(setup.effective_margins().left,14);
EXPECT_EQ(setup.effective_margins().top, 6);
EXPECT_EQ(setup.effective_margins().right, 7);
EXPECT_EQ(setup.effective_margins().bottom, 4);
}
7 changes: 4 additions & 3 deletions printing/print_settings.cc
Original file line number Diff line number Diff line change
Expand Up @@ -153,9 +153,6 @@ void PrintSettings::SetPrinterPrintableArea(
header_footer_text_height = ConvertUnit(kSettingHeaderFooterInterstice,
kPointsPerInch, units_per_inch);
}
page_setup_device_units_.Init(physical_size_device_units,
printable_area_device_units,
header_footer_text_height);

PageMargins margins;
switch (margin_type) {
Expand Down Expand Up @@ -211,6 +208,10 @@ void PrintSettings::SetPrinterPrintableArea(
page_setup_device_units_.SetRequestedMargins(margins);
else
page_setup_device_units_.ForceRequestedMargins(margins);

page_setup_device_units_.Init(physical_size_device_units,
printable_area_device_units,
header_footer_text_height);
}

void PrintSettings::SetCustomMargins(
Expand Down

0 comments on commit b89615d

Please sign in to comment.