74ce1684985e2460228fb7b5c91ea43a393fb832
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)  */
33) Canvas::Canvas(CallMgr &callMgr, StreamMgr &streamMgr, const Directory &dirBase):
34)   Module(callMgr, streamMgr, dirBase),
35)   m_fileFormat(dirBase.getFile("format")),
Stefan Schuermans implemented specialized set...

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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