~lubuntu-software-center-team/lubuntu-software-center/vala-port

« back to all changes in this revision

Viewing changes to src/Widgets/RoundBox.vala

  • Committer: Stephen Smally
  • Date: 2012-05-16 15:04:53 UTC
  • Revision ID: eco.stefi@fastwebent.it-20120516150453-ldidynmwbc1qfq41
Working on

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
 
2
 
using Gtk;
3
 
using Cairo;
4
 
 
5
 
namespace Lsc.Widgets {
6
 
    public class RoundBox : EventBox {
7
 
        private Cairo.Context cr;
8
 
        private Box container;
9
 
        
10
 
        private enum Colors {
11
 
            BACKGROUND,
12
 
            BORDER
13
 
        }
14
 
        
15
 
        public RoundBox (Orientation or, int spacing) {
16
 
            set_has_window(false);
17
 
            
18
 
            container = new Box(or, spacing);
19
 
            
20
 
            add(container);
21
 
        }
22
 
        
23
 
        public void pack_start (Widget widget, bool expand, bool fill, int space) {
24
 
            container.pack_start(widget, expand, fill, space);
25
 
        }
26
 
        
27
 
        private void draw_rounded_rectangle (Colors rgb, uint x, uint y, int width, int height, double radius) {
28
 
            Gdk.RGBA color;
29
 
            bool res;
30
 
            if (rgb == Colors.BACKGROUND)
31
 
                res = get_style_context().lookup_color("base_color", out color);
32
 
            else
33
 
                color = { 0.8, 0.8, 0.8, 1 };
34
 
                res = true;
35
 
            
36
 
            if (res == false) {
37
 
                color = { 0, 0, 0, 0 };
38
 
            }
39
 
            
40
 
            Gdk.cairo_set_source_rgba (cr, color);
41
 
            
42
 
            cr.new_path();
43
 
            cr.move_to (x + radius, y);
44
 
            cr.arc (width - x - radius, y + radius, radius, Math.PI * 1.5, Math.PI * 2);
45
 
            cr.arc (width - x - radius, height - y - radius, radius, 0, Math.PI * 0.5);
46
 
            cr.arc (x + radius, height - y - radius, radius, Math.PI * 0.5, Math.PI);
47
 
            cr.arc (x + radius, y + radius, radius, Math.PI, Math.PI * 1.5);
48
 
            cr.close_path ();
49
 
            
50
 
            cr.fill();
51
 
        }
52
 
        
53
 
        public override bool draw (Cairo.Context cr) {
54
 
            this.cr = cr;
55
 
            
56
 
            int width = get_allocated_width ();
57
 
            int height = get_allocated_height ();
58
 
            double arc_radius = 10.0;
59
 
            
60
 
            draw_rounded_rectangle(Colors.BORDER, 0, 0, width, height, arc_radius);
61
 
            draw_rounded_rectangle(Colors.BACKGROUND, 1, 1, width, height, arc_radius-1);
62
 
            
63
 
            return base.draw(cr);
64
 
        }
65
 
    
66
 
        public override void size_allocate (Allocation allocation) {
67
 
            base.size_allocate (allocation);
68
 
        }
69
 
    }
70
 
}