69ac12fcb8ee5ac55fadc04d3a96a3a7c2d0038a
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 "Canvas.h"
12) #include "CanvasInput.h"
13) #include "Directory.h"
14) #include "File.h"
15) #include "Format.h"
Stefan Schuermans implemented specialized set...

Stefan Schuermans authored 12 years ago

16) #include "FormatFile.h"
Stefan Schuermans put all managers in one str...

Stefan Schuermans authored 12 years ago

17) #include "Mgrs.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 "StreamRecv.h"
23) 
24) namespace Blinker {
25) 
26) /**
27)  * @brief constructor
Stefan Schuermans make modules know their name

Stefan Schuermans authored 12 years ago

28)  * @param[in] name module name
Stefan Schuermans put all managers in one str...

Stefan Schuermans authored 12 years ago

29)  * @param[in] mgrs managers
Stefan Schuermans first version of canvas mod...

Stefan Schuermans authored 12 years ago

30)  * @param[in] dirBase base directory
31)  */
Stefan Schuermans make modules know their name

Stefan Schuermans authored 12 years ago

32) Canvas::Canvas(const std::string &name, Mgrs &mgrs, const Directory &dirBase):
33)   Module(name, mgrs, dirBase),
Stefan Schuermans first version of canvas mod...

Stefan Schuermans authored 12 years ago

34)   m_fileFormat(dirBase.getFile("format")),
Stefan Schuermans put all managers in one str...

Stefan Schuermans authored 12 years ago

35)   m_fileOutStream(dirBase.getFile("outstream"), mgrs.m_streamMgr),
Stefan Schuermans first version of canvas mod...

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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