source: lliurex-apt/trunk/fuentes/src/Graphics.cpp @ 923

Last change on this file since 923 was 923, checked in by mabarracus, 4 years ago

Imported trusty code

File size: 4.4 KB
Line 
1
2#include "Graphics.hpp"
3
4#include <iostream>
5
6#include <gtkmm.h>
7
8
9using namespace std;
10using namespace net::lliurex::apt;
11using namespace net::lliurex::apt::graphics;
12
13
14
15SourceLineBubble::SourceLineBubble(SourceLine line, float width,float height)
16{
17        this->width=width;
18        this->height=height;
19        this->line=line;
20       
21        /* creating a surface */
22        surface = Cairo::ImageSurface::create(Cairo::Format::FORMAT_ARGB32,width,height);
23       
24        /* creating a cairo context */
25        context = Cairo::Context::create(surface);
26       
27        Update();
28}
29
30
31SourceLineBubble::~SourceLineBubble()
32{
33
34}
35
36
37
38void SourceLineBubble::DrawRoundSquare(float x,float y,float width,float height)
39{
40        float w=3.0f;
41        float v=5.0f;
42        float rwidth = width - (w*2.0f) - (v*2.0f);
43        float rheight = height - (w*2.0f) - (v*2.0f);
44       
45        if(width<6.0)return;
46       
47        //top
48        context->move_to(x,y+w+v);
49        context->curve_to(x,y+w,x+w,y,x+w+v,y);
50        context->line_to(x+w+v+rwidth,y);
51        context->curve_to(x+w+v+rwidth+v,y,x+width,y+w,x+width,y+w+v);
52       
53        //right side
54        context->line_to(x+width,y+w+v+rheight);
55       
56        //bottom
57        context->curve_to(x+width,y+w+v+rheight+v,x+w+v+rwidth+w,y+height,x+w+v+rwidth,y+height);
58        context->line_to(x+w+v,y+height);
59        context->curve_to(x+w,y+height,x,y+w+v+rheight+v,x,y+w+v+rheight);
60       
61        //left side
62        context->line_to(x,y+w+v);
63       
64}
65
66
67void SourceLineBubble::Update()
68{
69
70        double width;
71        double height;
72        double x=5.0;
73        double y=5.0;
74       
75        double f=1.0/256.0;
76       
77        Cairo::TextExtents te;
78        Cairo::FontExtents fe;
79       
80        string source_type;
81       
82        if(line.source_type==SourceType::Deb)
83                source_type="deb";
84        else
85                source_type="deb-src";
86               
87        string uri = line.uri;
88        bool special_uri=false;
89               
90        switch(line.uri_type)
91        {
92                case UriType::Http:
93                        uri="http://"+uri;
94                break;
95               
96                case UriType::Https:
97                        uri="https://"+uri;
98                break;
99               
100                case UriType::Ftp:
101                        uri="ftp://"+uri;
102                break;
103               
104                case UriType::Cdrom:
105                        uri="cdrom://"+uri;
106                        special_uri=true;
107                break;
108               
109                case UriType::File:
110                        uri="file://"+uri;
111                        special_uri=true;
112                break;
113        }
114       
115        string dist = line.dist;       
116
117       
118
119        //white background
120        context->set_source_rgb(1.0,1.0,1.0);
121        context->paint();
122
123
124        //black square
125        /*
126        context->set_source_rgb(0.0,0.0,0.0);
127        context->rectangle(1,1,this->width-1,this->height-1);
128        context->stroke();
129        */
130       
131       
132        //deb type quare       
133       
134        context->select_font_face("Ubuntu", Cairo::FontSlant::FONT_SLANT_NORMAL, Cairo::FontWeight::FONT_WEIGHT_NORMAL);
135        context->set_font_size(12.0);
136        context->get_text_extents(source_type,te);
137        context->get_font_extents(fe);
138       
139        width=te.width;
140        height=(fe.height);
141        width+=20.0f; // 10+10 margins
142        height+=(height*0.8f);
143       
144       
145        y=(this->height/2.0)-(height/2.0);
146        context->set_source_rgb(173*f,255*f,153*f);
147        DrawRoundSquare(x,y,width,height);
148        context->fill();
149       
150       
151        context->set_source_rgb(0.0,0.0,0.0);
152        context->move_to (x+((width-te.width)/2.0),y+(height)-((height-fe.height)/2.0)-fe.descent);
153        context->show_text(source_type);
154       
155       
156       
157        //uri square
158        x=x+width+5.0;
159       
160        context->get_text_extents(uri,te);
161        context->get_font_extents(fe);
162       
163        width=te.width;
164        height=(fe.height);
165        width+=20.0f; // 10+10 margins
166        height+=(height*0.8f);
167       
168        y=(this->height/2.0)-(height/2.0);
169        if(special_uri)
170                context->set_source_rgb(102*f,153*f,255*f);
171        else
172                context->set_source_rgb(153*f,207*f,255*f);
173        DrawRoundSquare(x,y,width,height);
174        context->fill();
175       
176       
177        context->set_source_rgb(0.0,0.0,0.0);
178        context->move_to (x+((width-te.width)/2.0),y+(height)-((height-fe.height)/2.0)-fe.descent);
179        context->show_text(uri);
180       
181       
182       
183       
184        //dist
185       
186        x=x+width+5.0;
187       
188        context->get_text_extents(dist,te);
189        context->get_font_extents(fe);
190       
191        width=te.width;
192        height=(fe.height);
193        width+=20.0f; // 10+10 margins
194        height+=(height*0.8f);
195       
196        y=(this->height/2.0)-(height/2.0);
197        context->set_source_rgb(255*f,153*f,180*f);
198        DrawRoundSquare(x,y,width,height);
199        context->fill();
200       
201       
202        context->set_source_rgb(0.0,0.0,0.0);
203        context->move_to (x+((width-te.width)/2.0),y+(height)-((height-fe.height)/2.0)-fe.descent);
204        context->show_text(dist);
205       
206       
207        //components
208       
209        for(int n=0;n<line.components.size();n++)
210        {
211                x=x+width+5.0;
212       
213                context->get_text_extents(line.components[n],te);
214                context->get_font_extents(fe);
215       
216                width=te.width;
217                height=(fe.height);
218                width+=20.0f; // 10+10 margins
219                height+=(height*0.8f);
220       
221                y=(this->height/2.0)-(height/2.0);
222                context->set_source_rgb(255*f,214*f,153*f);
223                DrawRoundSquare(x,y,width,height);
224                context->fill();
225       
226       
227                context->set_source_rgb(0.0,0.0,0.0);
228                context->move_to (x+((width-te.width)/2.0),y+(height)-((height-fe.height)/2.0)-fe.descent);
229                context->show_text(line.components[n]); 
230        }
231       
232}
Note: See TracBrowser for help on using the repository browser.