baf52dacd8003c3ac6d43bfef7073aae9e871e3b
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 put all managers in one str...

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

29)  * @param[in] dirBase base directory
30)  */
Stefan Schuermans put all managers in one str...

Stefan Schuermans authored 12 years ago

31) Canvas::Canvas(Mgrs &mgrs,
Stefan Schuermans 80 char reformatting

Stefan Schuermans authored 12 years ago

32)                const Directory &dirBase):
Stefan Schuermans put all managers in one str...

Stefan Schuermans authored 12 years ago

33)   Module(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);