gecko-dev/widget/nsIDeviceContextSpec.cpp

51 строка
1.9 KiB
C++

/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "nsIDeviceContextSpec.h"
#include "gfxPoint.h"
#include "nsIPrintSettings.h"
// We have some platform specific code here rather than in the appropriate
// nsIDeviceContextSpec subclass. We structure the code this way so that
// nsIDeviceContextSpecProxy gets the correct behavior without us having to
// instantiate a platform specific nsIDeviceContextSpec subclass in content
// processes. That is necessary for sandboxing.
float nsIDeviceContextSpec::GetPrintingScale() {
#ifdef XP_WIN
if (mPrintSettings->GetOutputFormat() != nsIPrintSettings::kOutputFormatPDF
# ifdef MOZ_ENABLE_SKIA_PDF
&& !mPrintViaSkPDF
# endif
) {
// The print settings will have the resolution stored from the real device.
int32_t resolution;
mPrintSettings->GetResolution(&resolution);
return float(resolution) / GetDPI();
}
#endif
return 72.0f / GetDPI();
}
gfxPoint nsIDeviceContextSpec::GetPrintingTranslate() {
#ifdef XP_WIN
// The underlying surface on windows is the size of the printable region. When
// the region is smaller than the actual paper size the (0, 0) coordinate
// refers top-left of that unwritable region. To instead have (0, 0) become
// the top-left of the actual paper, translate it's coordinate system by the
// unprintable region's width.
double marginTop, marginLeft;
mPrintSettings->GetUnwriteableMarginTop(&marginTop);
mPrintSettings->GetUnwriteableMarginLeft(&marginLeft);
int32_t resolution;
mPrintSettings->GetResolution(&resolution);
return gfxPoint(-marginLeft * resolution, -marginTop * resolution);
#else
return gfxPoint(0, 0);
#endif
}