You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

86 lines
2.5 KiB

/*
SPDX-FileCopyrightText: 2020-2020 Gustavo Carneiro <gcarneiroa@hotmail.com>
SPDX-FileCopyrightText: 2012-2020 Kurt Hindenburg <kurt.hindenburg@gmail.com>
SPDX-FileCopyrightText: 2020-2020 Tomaz Canabrava <tcanabrava@kde.org>
SPDX-License-Identifier: GPL-2.0-or-later
*/
// Own
#include "KonsolePrintManager.h"
// Konsole
#include "PrintOptions.h"
// Qt
#include <QFont>
#include <QPainter>
#include <QPoint>
#include <QPointer>
#include <QPrintDialog>
#include <QPrinter>
#include <QRect>
#include <QWidget>
// KDE
#include <KConfigGroup>
#include <KSharedConfig>
using namespace Konsole;
KonsolePrintManager::KonsolePrintManager(pDrawBackground drawBackground, pDrawContents drawContents, pColorGet colorGet)
{
_drawBackground = drawBackground;
_drawContents = drawContents;
_backgroundColor = colorGet;
}
void KonsolePrintManager::printRequest(pPrintContent pContent, QWidget *parent)
{
if (!pContent) {
return;
}
QPrinter printer;
QPointer<QPrintDialog> dialog = new QPrintDialog(&printer, parent);
auto options = new PrintOptions();
dialog->setOptionTabs({options});
dialog->setWindowTitle(i18n("Print Shell"));
QObject::connect(dialog, QOverload<>::of(&QPrintDialog::accepted), options, &Konsole::PrintOptions::saveSettings);
if (dialog->exec() != QDialog::Accepted) {
return;
}
QPainter painter;
painter.begin(&printer);
KConfigGroup configGroup(KSharedConfig::openConfig(), "PrintOptions");
if (configGroup.readEntry("ScaleOutput", true)) {
QRect page_rect = printer.pageLayout().paintRectPixels(printer.resolution());
double scale = qMin(page_rect.width() / static_cast<double>(parent->width()), page_rect.height() / static_cast<double>(parent->height()));
painter.scale(scale, scale);
}
pContent(painter, configGroup.readEntry("PrinterFriendly", true));
}
void KonsolePrintManager::printContent(QPainter &painter, bool friendly, QPoint columnsLines, pVTFontGet vtFontGet, pVTFontSet vtFontSet)
{
// Reinitialize the font with the printers paint device so the font
// measurement calculations will be done correctly
QFont savedFont = vtFontGet();
QFont font(savedFont, painter.device());
painter.setFont(font);
vtFontSet(font);
QRect rect(0, 0, columnsLines.y(), columnsLines.x());
if (!friendly) {
_drawBackground(painter, rect, _backgroundColor(), true);
}
_drawContents(painter, rect, friendly);
vtFontSet(savedFont);
}