e3c00efb84473df3049cd97102b4e3b41740bdaa
Stefan Schuermans first version of canvas mod...

Stefan Schuermans authored 12 years ago

1) /* Blinker
2)    Copyright 2011 Stefan Schuermans <stefan@blinkenarea.org>
3)    Copyleft GNU public license - http://www.gnu.org/copyleft/gpl.html
4)    a blinkenarea.org project */
5) 
6) #include <list>
7) #include <string>
8) 
9) #include <BlinkenLib/BlinkenFrame.h>
10) 
11) #include "CallMgr.h"
12) #include "Canvas.h"
13) #include "CanvasInput.h"
14) #include "Directory.h"
15) #include "File.h"
16) #include "Format.h"
Stefan Schuermans implemented specialized set...

Stefan Schuermans authored 12 years ago

17) #include "FormatFile.h"
Stefan Schuermans first version of canvas mod...

Stefan Schuermans authored 12 years ago

18) #include "Module.h"
Stefan Schuermans converted canvas module to...

Stefan Schuermans authored 12 years ago

19) #include "ListTracker.h"
20) #include "ListTracker_impl.h"
Stefan Schuermans implemented specialized set...

Stefan Schuermans authored 12 years ago

21) #include "OutStreamFile.h"
Stefan Schuermans first version of canvas mod...

Stefan Schuermans authored 12 years ago

22) #include "StreamMgr.h"
23) #include "StreamRecv.h"
24) 
25) namespace Blinker {
26) 
27) /**
28)  * @brief constructor
29)  * @param[in] callMgr callback manager
30)  * @param[in] streamMgr stream manager
31)  * @param[in] dirBase base directory
32)  */
Stefan Schuermans 80 char reformatting

Stefan Schuermans authored 12 years ago

33) Canvas::Canvas(CallMgr &callMgr, StreamMgr &streamMgr,
34)                const Directory &dirBase):
Stefan Schuermans first version of canvas mod...

Stefan Schuermans authored 12 years ago

35)   Module(callMgr, streamMgr, dirBase),
36)   m_fileFormat(dirBase.getFile("format")),
Stefan Schuermans implemented specialized set...

Stefan Schuermans authored 12 years ago

37)   m_fileOutStream(dirBase.getFile("outstream"), streamMgr),
Stefan Schuermans first version of canvas mod...

Stefan Schuermans authored 12 years ago

38)   m_pCanvas(NULL),
Stefan Schuermans converted canvas module to...

Stefan Schuermans authored 12 years ago

39)   m_canvasHasFrame(false),
40)   m_inListTracker(*this, dirBase.getSubdir("inputs"))
Stefan Schuermans first version of canvas mod...

Stefan Schuermans authored 12 years ago

41) {
42)   // set up
43)   createCanvas();
Stefan Schuermans converted canvas module to...

Stefan Schuermans authored 12 years ago

44)   m_inListTracker.init();
Stefan Schuermans first version of canvas mod...

Stefan Schuermans authored 12 years ago

45) }
46) 
47) /// virtual destructor
48) Canvas::~Canvas()
49) {
50)   // clean up
Stefan Schuermans converted canvas module to...

Stefan Schuermans authored 12 years ago

51)   m_inListTracker.clear();
Stefan Schuermans first version of canvas mod...

Stefan Schuermans authored 12 years ago

52)   destroyCanvas();
53) }
54) 
55) /// check for update of configuration
56) void Canvas::updateConfig()
57) {
58)   // format file was modified -> re-create canvas
59)   if (m_fileFormat.checkModified()) {
60)     createCanvas();
61)   }
62) 
Stefan Schuermans converted canvas module to...

Stefan Schuermans authored 12 years ago

63)   // input list update
64)   m_inListTracker.updateConfig();
Stefan Schuermans first version of canvas mod...

Stefan Schuermans authored 12 years ago

65) 
66)   // output stream name file was modified -> re-get output stream
Stefan Schuermans implemented specialized set...

Stefan Schuermans authored 12 years ago

67)   if (m_fileOutStream.checkModified())
68)     m_fileOutStream.update();
Stefan Schuermans first version of canvas mod...

Stefan Schuermans authored 12 years ago

69) }
70) 
71) /// (re-)create canvas
72) void Canvas::createCanvas()
73) {
74)   // get rid of old canvas
75)   destroyCanvas();
76) 
77)   // read format from format file
Stefan Schuermans implemented specialized set...

Stefan Schuermans authored 12 years ago

78)   m_fileFormat.update();
79)   if (!m_fileFormat.m_valid)
Stefan Schuermans first version of canvas mod...

Stefan Schuermans authored 12 years ago

80)     return;
81) 
82)   // create frame
Stefan Schuermans implemented specialized set...

Stefan Schuermans authored 12 years ago

83)   m_pCanvas = BlinkenFrameNew(m_fileFormat.m_obj.m_height,
84)                               m_fileFormat.m_obj.m_width,
85)                               m_fileFormat.m_obj.m_channels,
86)                               m_fileFormat.m_obj.m_maxval, 1);
Stefan Schuermans merged frame processing wit...

Stefan Schuermans authored 12 years ago

87)   m_canvasHasFrame = false;
Stefan Schuermans first version of canvas mod...

Stefan Schuermans authored 12 years ago

88) }
89) 
90) /// tear down canvas
91) void Canvas::destroyCanvas()
92) {
93)   if (m_pCanvas) {
94)     BlinkenFrameFree(m_pCanvas);
95)     m_pCanvas = NULL;
Stefan Schuermans merged frame processing wit...

Stefan Schuermans authored 12 years ago

96)     m_canvasHasFrame = false;
Stefan Schuermans first version of canvas mod...

Stefan Schuermans authored 12 years ago

97)   }
98) }
99) 
100) /// notfication to redraw (called by inputs)
101) void Canvas::redraw()
102) {
103)   // do nothing if there is no canvas
104)   if (!m_pCanvas)
105)     return;
106) 
107)   // black background
108)   BlinkenFrameClear(m_pCanvas);
109)   m_canvasHasFrame = false; // no frame on canvas yet
110) 
111)   // tell all inputs to draw on canvas
Stefan Schuermans converted canvas module to...

Stefan Schuermans authored 12 years ago

112)   InListTracker::ListIt itIn;
113)   for (itIn = m_inListTracker.m_list.begin();
114)        itIn != m_inListTracker.m_list.end(); ++itIn)
115)     if (itIn->m_pObj->draw())
Stefan Schuermans first version of canvas mod...

Stefan Schuermans authored 12 years ago

116)       m_canvasHasFrame = true; // drawing successful -> there is a frame now
117) 
118)   // send current frame to stream
119)   sendFrame();
120) }
121) 
122) /// send current frame to output stream
123) void Canvas::sendFrame()
124) {
Stefan Schuermans implemented specialized set...

Stefan Schuermans authored 12 years ago

125)   // frame available -> send it
126)   if (m_canvasHasFrame)
127)     m_fileOutStream.setFrame(m_pCanvas);
128)   // no frame available -> send this information
129)   else
130)     m_fileOutStream.setFrame(NULL);