5c70d9d85a6f690ae5c591b7d884677efad7fbaa
Stefan Schuermans begin of simulator: window...

Stefan Schuermans authored 7 years ago

1) /*
2)  * EtherPix simulator
3)  *
4)  * Copyright 2017 Stefan Schuermans <stefan schuermans info>
5)  *
6)  * This program is free software: you can redistribute it and/or modify
7)  * it under the terms of the GNU General Public License as published by
8)  * the Free Software Foundation, version 3 of the License.
9)  *
10)  *
11)  * This program is distributed in the hope that it will be useful,
12)  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13)  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14)  * GNU General Public License for more details.
15)  *
16)  * You should have received a copy of the GNU Lesser General Public License
17)  * along with this program. If not, see <http://www.gnu.org/licenses/>.
18)  */
19) 
20) #include <gtkmm.h>
21) 
Stefan Schuermans implement drawing pixels

Stefan Schuermans authored 7 years ago

22) #include "config.h"
Stefan Schuermans begin of simulator: window...

Stefan Schuermans authored 7 years ago

23) #include "draw.h"
Stefan Schuermans implement drawing pixels

Stefan Schuermans authored 7 years ago

24) #include "transform.h"
Stefan Schuermans begin of simulator: window...

Stefan Schuermans authored 7 years ago

25) 
26) /**
27)  * @brief constructor
28)  * @param[in] Gtk Window object (a C object)
29)  * @param[in] builder reference to GTK builder object
30)  */
31) Draw::Draw(BaseObjectType *cobject,
32)            const Glib::RefPtr<Gtk::Builder> &builder):
33)   Gtk::DrawingArea(cobject),
Stefan Schuermans implement drawing pixels

Stefan Schuermans authored 7 years ago

34)   m_builder(builder),
35)   m_config(NULL)
Stefan Schuermans begin of simulator: window...

Stefan Schuermans authored 7 years ago

36) {
Stefan Schuermans implement receiving packets

Stefan Schuermans authored 7 years ago

37)   reqUpdate();
Stefan Schuermans begin of simulator: window...

Stefan Schuermans authored 7 years ago

38) }
39) 
40) /// virtual destructor
41) Draw::~Draw()
42) {
43) }
44) 
Stefan Schuermans implement drawing pixels

Stefan Schuermans authored 7 years ago

45) /// set configuration object
46) void Draw::setConfig(Config const&config)
47) {
48)   m_config = &config;
49) 
Stefan Schuermans implement receiving packets

Stefan Schuermans authored 7 years ago

50)   reqUpdate();
51) }
52) 
53) /// request image update
54) void Draw::reqUpdate()
55) {
Stefan Schuermans implement drawing pixels

Stefan Schuermans authored 7 years ago

56)   updateImage();
57)   queue_draw();
58) }
Stefan Schuermans begin of simulator: window...

Stefan Schuermans authored 7 years ago

59) 
60) /**
61)  * @brief widget is (re)configured
62)  * @param[in] cfg configuration event
63)  * @return if callback was completely handled
64)  */
65) bool Draw::on_configure_event(GdkEventConfigure *cfg)
66) {
Stefan Schuermans implement receiving packets

Stefan Schuermans authored 7 years ago

67)   reqUpdate();
Stefan Schuermans begin of simulator: window...

Stefan Schuermans authored 7 years ago

68) 
69)   return true;
70)   (void)cfg;
71) }
72) 
73) /**
74)  * @brief widget is being drawn
75)  * @param[in] cairo cairo context for drawing
76)  * @return if callback was completely handled
77)  */
78) bool Draw::on_draw(const Cairo::RefPtr<Cairo::Context> &cairo)
79) {
80)   // draw image
81)   if (m_image) {
82)     cairo->set_source(m_image, 0, 0);
83)     cairo->rectangle(0, 0, m_image->get_width(), m_image->get_height());
84)     cairo->fill();
85)   }
86)   return true;
87) }
88) 
89) /// update image
90) void Draw::updateImage()
91) {
92)   // get size of drawing area
93)   Gtk::Allocation allocation = get_allocation();
94)   int width = allocation.get_width();
95)   int height = allocation.get_height();
96) 
97)   // create new image
98)   m_image = Cairo::ImageSurface::create(Cairo::FORMAT_RGB24, width, height);
99) 
100)   // create ciaro context for drawing
101)   Cairo::RefPtr<Cairo::Context> cairo = Cairo::Context::create(m_image);
102) 
103)   // draw background
104)   cairo->set_source_rgb(0.0, 0.0, 0.0);
105)   cairo->rectangle(0, 0, width, height);
106)   cairo->fill();
107) 
Stefan Schuermans implement drawing pixels

Stefan Schuermans authored 7 years ago

108)   // compute coordinate transformation
109)   if (! m_config)
110)     return;
111)   Transform tf(m_config->getBBox(), width, height);
112) 
113)   // draw pixels of all distributors
114)   m_config->draw(cairo, tf);