Blob Blame Raw


// TnzCore includes
#include "timage_io.h"

// TnzLib includes
#include "toonz/tscenehandle.h"
#include "toonz/tframehandle.h"
#include "toonz/tcamera.h"
#include "toonz/toonzscene.h"
#include "toonz/txsheethandle.h"
#include "toonz/sceneproperties.h"

// TnzQt includes
#include "toonzqt/menubarcommand.h"
#include "toonzqt/gutil.h"

// Tnz6 includes
#include "menubarcommandids.h"
#include "tapp.h"

// Qt includes
#include <QPrinter>
#include <QPrintDialog>
#include <QPainter>
#include <QApplication>

void printCurrentFrame()
{
	QPrinter printer;
	QPrintDialog dialog(&printer, 0);
	if (!dialog.exec())
		return;

	ToonzScene *scene = TApp::instance()->getCurrentScene()->getScene();
	int frame = TApp::instance()->getCurrentFrame()->getFrame();
	int lx = TApp::instance()->getCurrentScene()->getScene()->getCurrentCamera()->getRes().lx;
	int ly = TApp::instance()->getCurrentScene()->getScene()->getCurrentCamera()->getRes().ly;
	TRaster32P raster(lx, ly);
	if (scene->getFrameCount() <= 0) {
		// Ricordarsi di usare DvMsgBox !! (se si decommenta questo codice :) )
		// QMessageBox::warning(0,"Print",tr("It is not possible to generate an animation\nbecause the scene is empty.", "WARNING"));
		return;
	}
	raster->fill(scene->getProperties()->getBgColor());
	scene->renderFrame(raster, frame, TApp::instance()->getCurrentXsheet()->getXsheet());
	QImage img = rasterToQImage(raster);
	QPainter painter(&printer);
	QRect rect = painter.viewport();
	QSize size = img.size();
	size.scale(rect.size(), Qt::KeepAspectRatio);
	painter.setViewport(rect.x(), rect.y(), size.width(), size.height());
	painter.setWindow(img.rect());
	painter.drawImage(0, 0, img);
}

//=============================================================================

class PrintCommand : public MenuItemHandler
{
public:
	PrintCommand() : MenuItemHandler(MI_Print) {}
	void execute()
	{
		qApp->setOverrideCursor(QCursor(Qt::WaitCursor));
		qApp->processEvents();
		printCurrentFrame();
		qApp->restoreOverrideCursor();
	}
} printCommand;