framework2
64 строки · 2.1 Кб
1#include "ofGraphicsCairo.h"
2#include "ofRendererCollection.h"
3#include "ofCairoRenderer.h"
4
5static std::shared_ptr<ofCairoRenderer> cairoScreenshot;
6static std::shared_ptr<ofBaseRenderer> storedRenderer;
7static std::shared_ptr<ofRendererCollection> rendererCollection;
8static bool bScreenShotStarted = false;
9
10
11static void ofEndSaveScreen(){
12if( bScreenShotStarted ){
13
14if( cairoScreenshot ){
15cairoScreenshot->close();
16rendererCollection.reset();
17cairoScreenshot.reset();
18}
19if( storedRenderer ){
20ofSetCurrentRenderer(storedRenderer,true);
21storedRenderer.reset();
22}
23
24bScreenShotStarted = false;
25}
26
27}
28
29static void ofBeginSaveScreen(std::string filename, ofCairoRenderer::Type type, bool bMultipage, bool b3D, ofRectangle outputsize){
30if( bScreenShotStarted ) ofEndSaveScreen();
31
32storedRenderer = ofGetCurrentRenderer();
33
34cairoScreenshot = std::make_unique<ofCairoRenderer>();
35cairoScreenshot->setup(filename, type, bMultipage, b3D, outputsize);
36
37rendererCollection = std::make_shared<ofRendererCollection>();
38rendererCollection->renderers.push_back(storedRenderer);
39rendererCollection->renderers.push_back(cairoScreenshot);
40
41ofSetCurrentRenderer(rendererCollection, true);
42cairoScreenshot->background(cairoScreenshot->getStyle().bgColor);
43bScreenShotStarted = true;
44}
45
46//-----------------------------------------------------------------------------------
47void ofBeginSaveScreenAsPDF(std::string filename, bool bMultipage, bool b3D, ofRectangle outputsize){
48ofBeginSaveScreen(filename, ofCairoRenderer::PDF, bMultipage, b3D, outputsize);
49}
50
51//-----------------------------------------------------------------------------------
52void ofEndSaveScreenAsPDF(){
53ofEndSaveScreen();
54}
55
56//-----------------------------------------------------------------------------------
57void ofBeginSaveScreenAsSVG(std::string filename, bool bMultipage, bool b3D, ofRectangle outputsize){
58ofBeginSaveScreen(filename, ofCairoRenderer::SVG, bMultipage, b3D, outputsize);
59}
60
61//-----------------------------------------------------------------------------------
62void ofEndSaveScreenAsSVG(){
63ofEndSaveScreen();
64}