// fp_PageSize.cpp #include "fp_PageSize.h" #include "ut_units.h" #include "ut_assert.h" // This class stores the pagesize in mm. The resoning behind // that is that mm is at least a derived unit from an ISO standard. // If anyone think it's more apropriate to express it in meters, // you're free to change the implementation. struct private_pagesize_sizes { double w; double h; fp_PageSize::Unit u; }; const private_pagesize_sizes pagesizes[fp_PageSize::_last_predefined_pagesize_dont_use_] = { { 841.0, 1189.0, fp_PageSize::mm }, // A0 { 594.0, 841.0, fp_PageSize::mm }, // A1 { 420.0, 594.0, fp_PageSize::mm }, // A2 { 297.0, 420.0, fp_PageSize::mm }, // A3 { 210.0, 297.0, fp_PageSize::mm }, // A4 { 148.0, 210.0, fp_PageSize::mm }, // A5 { 105.0, 148.0, fp_PageSize::mm }, // A6 {1000.0, 1414.0, fp_PageSize::mm }, // B0 { 707.0, 1000.0, fp_PageSize::mm }, // B1 { 500.0, 707.0, fp_PageSize::mm }, // B2 { 353.0, 500.0, fp_PageSize::mm }, // B3 { 250.0, 353.0, fp_PageSize::mm }, // B4 { 176.0, 250.0, fp_PageSize::mm }, // B5 { 125.0, 176.0, fp_PageSize::mm }, // B6 { 8.5, 14.0, fp_PageSize::inch }, // Legal { 8.5, 13.0, fp_PageSize::inch }, // Folio { 8.5, 11.0, fp_PageSize::inch } // Letter }; const double ScaleFactors[fp_PageSize::_last_predefined_unit_dont_use_] = { { 1.0 }, // mm { 10.0 }, // cm { 25.4 }, // inch { 25.4 / UT_PAPER_UNITS_PER_INCH }, // PaperUnit { 25.4 / UT_LAYOUT_UNITS } // LayoutUnit }; fp_PageSize::fp_PageSize(Predefined preDef) { Set(preDef); } fp_PageSize::fp_PageSize(double w, double h, Unit u) { UT_ASSERT(u >= 0 && u < _last_predefined_unit_dont_use_); Set(w, h, u); } void fp_PageSize::Set(double w, double h, Unit u) { UT_ASSERT(u >= 0 && u < _last_predefined_unit_dont_use_); m_iWidth = w * ScaleFactors[u]; m_iHeight = h * ScaleFactors[u]; } void fp_PageSize::Set(Predefined preDef) { const private_pagesize_sizes& size = pagesizes[preDef]; Set(size.w, size.h, size.u); } double fp_PageSize::Width(Unit u) const { UT_ASSERT(u >= 0 && u < _last_predefined_unit_dont_use_); return m_iWidth / ScaleFactors[u]; } double fp_PageSize::Height(Unit u) const { UT_ASSERT(u >= 0 && u < _last_predefined_unit_dont_use_); return m_iHeight / ScaleFactors[u]; }