Coverage Report

Created: 2026-08-14 10:22

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/libreoffice/editeng/source/items/paperinf.cxx
Line
Count
Source
1
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2
/*
3
 * This file is part of the LibreOffice project.
4
 *
5
 * This Source Code Form is subject to the terms of the Mozilla Public
6
 * License, v. 2.0. If a copy of the MPL was not distributed with this
7
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8
 *
9
 * This file incorporates work covered by the following license notice:
10
 *
11
 *   Licensed to the Apache Software Foundation (ASF) under one or more
12
 *   contributor license agreements. See the NOTICE file distributed
13
 *   with this work for additional information regarding copyright
14
 *   ownership. The ASF licenses this file to you under the Apache
15
 *   License, Version 2.0 (the "License"); you may not use this file
16
 *   except in compliance with the License. You may obtain a copy of
17
 *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
18
 */
19
20
#include <vcl/print.hxx>
21
#include <editeng/paperinf.hxx>
22
23
/*--------------------------------------------------------------------
24
    Description:    Is the printer valid
25
 --------------------------------------------------------------------*/
26
27
static bool IsValidPrinter( const Printer* pPtr )
28
917
{
29
917
    return !pPtr->GetName().isEmpty();
30
917
}
31
32
33
Size SvxPaperInfo::GetPaperSize( Paper ePaper, MapUnit eUnit )
34
101k
{
35
101k
    PaperInfo aInfo(ePaper);
36
101k
    Size aRet(aInfo.getWidth(), aInfo.getHeight()); // in 100thMM
37
101k
    return eUnit == MapUnit::Map100thMM
38
101k
        ? aRet
39
101k
        : OutputDevice::LogicToLogic(aRet, MapMode(MapUnit::Map100thMM), MapMode(eUnit));
40
101k
}
41
42
/*------------------------------------------------------------------------
43
 Description:   Return the paper size of the printer, aligned to our
44
                own sizes. If no Printer is set in the system, A4 portrait
45
                will be delivered as the default paper size.
46
------------------------------------------------------------------------*/
47
48
//Is this method may be confused about the units it returns ?
49
//Always returns TWIPS for known paper sizes or on failure.
50
//But in the case of PAPER_USER paper and with a Printer with a mapmode set
51
//will return in those printer units ?
52
Size SvxPaperInfo::GetPaperSize( const Printer* pPrinter )
53
917
{
54
917
    if ( !IsValidPrinter(pPrinter) )
55
917
        return GetPaperSize( PAPER_A4 );
56
0
    const Paper ePaper = pPrinter->GetPaper();
57
58
0
    if ( ePaper == PAPER_USER )
59
0
    {
60
        // Orientation not take into account, as the right size has
61
        // been already set by SV
62
0
        Size aPaperSize = pPrinter->GetPaperSize();
63
0
        const Size aInvalidSize;
64
65
0
        if ( aPaperSize == aInvalidSize )
66
0
            return GetPaperSize(PAPER_A4);
67
0
        const MapMode& aMap1 = pPrinter->GetMapMode();
68
0
        MapMode aMap2;
69
70
0
        if ( aMap1 == aMap2 )
71
0
            aPaperSize =
72
0
                pPrinter->PixelToLogic( aPaperSize, MapMode( MapUnit::MapTwip ) );
73
0
        return aPaperSize;
74
0
    }
75
76
0
    const Orientation eOrient = pPrinter->GetOrientation();
77
0
    Size aSize( GetPaperSize( ePaper ) );
78
        // for Landscape exchange the pages, has already been done by SV
79
0
    if ( eOrient == Orientation::Landscape )
80
0
        Swap( aSize );
81
0
    return aSize;
82
0
}
83
84
85
Paper SvxPaperInfo::GetSvxPaper( const Size &rSize, MapUnit eUnit )
86
0
{
87
0
    Size aSize(eUnit == MapUnit::Map100thMM ? rSize : OutputDevice::LogicToLogic(rSize, MapMode(eUnit), MapMode(MapUnit::Map100thMM)));
88
0
    PaperInfo aInfo(aSize.Width(), aSize.Height());
89
0
    aInfo.doSloppyFit();
90
0
    return aInfo.getPaper();
91
0
}
92
93
94
tools::Long SvxPaperInfo::GetSloppyPaperDimension( tools::Long nSize )
95
74.8k
{
96
74.8k
    nSize = o3tl::convert(nSize, o3tl::Length::twip, o3tl::Length::mm100);
97
74.8k
    nSize = PaperInfo::sloppyFitPageDimension(nSize);
98
74.8k
    return o3tl::convert(nSize, o3tl::Length::mm100, o3tl::Length::twip);
99
74.8k
}
100
101
102
Size SvxPaperInfo::GetDefaultPaperSize( MapUnit eUnit )
103
209k
{
104
209k
    PaperInfo aInfo(PaperInfo::getSystemDefaultPaper());
105
209k
    Size aRet(aInfo.getWidth(), aInfo.getHeight());
106
209k
    return eUnit == MapUnit::Map100thMM
107
209k
        ? aRet
108
209k
        : OutputDevice::LogicToLogic(aRet, MapMode(MapUnit::Map100thMM), MapMode(eUnit));
109
209k
}
110
111
/*------------------------------------------------------------------------
112
 Description:   String representation for the SV-defines of paper size
113
------------------------------------------------------------------------*/
114
115
OUString SvxPaperInfo::GetName( Paper ePaper )
116
0
{
117
0
    return Printer::GetPaperName( ePaper );
118
0
}
119
120
121
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */