Arquivos
sverrir@google.com ae14df6577 Move printing related stuff to the root printing project from the browser project. This simplifies further refactoring and eases understanding of the printing part of Chrome.
Also renamed win_printing_context to printing_context_win (correct naming convention) and added stub implementations for _linux and mac.
Now all but one file is compiling on all platforms.

TEST=none (no functional change).
BUG=none

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

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20086 0039d316-1c4b-4281-b951-d872f2087c98
2009-07-07 21:31:39 +00:00

84 linhas
2.2 KiB
C++

// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "printing/page_number.h"
#include <limits>
#include "base/logging.h"
#include "printing/print_settings.h"
namespace printing {
PageNumber::PageNumber(const PrintSettings& settings, int document_page_count) {
Init(settings, document_page_count);
}
PageNumber::PageNumber()
: ranges_(NULL),
page_number_(-1),
page_range_index_(-1),
document_page_count_(0) {
}
void PageNumber::operator=(const PageNumber& other) {
ranges_ = other.ranges_;
page_number_ = other.page_number_;
page_range_index_ = other.page_range_index_;
document_page_count_ = other.document_page_count_;
}
void PageNumber::Init(const PrintSettings& settings, int document_page_count) {
DCHECK(document_page_count);
ranges_ = settings.ranges.empty() ? NULL : &settings.ranges;
document_page_count_ = document_page_count;
if (ranges_) {
page_range_index_ = 0;
page_number_ = (*ranges_)[0].from;
} else {
if (document_page_count) {
page_number_ = 0;
} else {
page_number_ = -1;
}
page_range_index_ = -1;
}
}
int PageNumber::operator++() {
if (!ranges_) {
// Switch to next page.
if (++page_number_ == document_page_count_) {
// Finished.
*this = npos();
}
} else {
// Switch to next page.
++page_number_;
// Page ranges are inclusive.
if (page_number_ > (*ranges_)[page_range_index_].to) {
DCHECK(ranges_->size() <= static_cast<size_t>(
std::numeric_limits<int>::max()));
if (++page_range_index_ == static_cast<int>(ranges_->size())) {
// Finished.
*this = npos();
} else {
page_number_ = (*ranges_)[page_range_index_].from;
}
}
}
return ToInt();
}
bool PageNumber::operator==(const PageNumber& other) const {
return page_number_ == other.page_number_ &&
page_range_index_ == other.page_range_index_;
}
bool PageNumber::operator!=(const PageNumber& other) const {
return page_number_ != other.page_number_ ||
page_range_index_ != other.page_range_index_;
}
} // namespace printing