Rune - Content-locking work 1/2
[rune.git] / tests / gfxslider3.d
1 #!/usr/local/bin/rune -x
2 #
3 #       Graphical test
4
5 limport "sys";
6 import "stdio";
7 import "gfx";
8 import "gadgets";
9
10 alias stdio.File *stdout = stdio.stdout;
11
12 typedef gfx.Event       Event;
13 typedef gfx.Frame       Frame;
14
15 subclass gadgets.SliderFrame as MySlider
16 {
17 }
18
19 subclass Frame as MyFrame
20 {
21         refine method 
22         bool
23         refreshFrame(int x, int y, int w, int h) {
24                 super.refreshFrame(x, y, w, h);
25                 this.drawLine(5, 5, this.bounds.w - 5, this.bounds.h -5);
26                 this.drawLine(this.bounds.w - 5, 5, 5, this.bounds.h -5);
27                 this.drawRect(0, 0, this.bounds.w - 1, this.bounds.h -1);
28         }
29 }
30
31 int
32 main(int ac, char **av)
33 {
34         Frame *frame0;
35         Frame *frame1;
36         MyFrame *frame2;
37         MySlider *sliderH;
38         MySlider *sliderV;
39         int i;
40         int j;
41         int k;
42         int l;
43
44         frame0.createFrame("OUTER", &gfx.root, 512, 512, BODY);
45         frame0->setBGColor(255, 129, 0);
46         stdio.stdout->format("FRAME0 %p\n", frame0);
47         sliderH.createSlider(frame0, 0, 0, sliderH.NULL, BELOW|FILLX);
48         sliderV.createSlider(frame0, 0, 0, sliderH, RIGHT|FILLY);
49         frame1.createFrame("WINDOW", frame0,
50                            0, 0, BODY|FILLX|FILLY|WINDOW);
51         frame2.createFrame("INNER", frame1,
52                            2000, 1000, BODY|WINDOW|CLIP);
53 #    frame2.createFrame(frame1, 1000, 1000, BODY);
54         sliderH->setBody(frame1, frame2);
55         sliderV->setBody(frame1, frame2);
56
57         # Create 6400 buttons
58         #
59         for (i = 0; i < 4; ++i) {
60                 Frame *frame3;
61
62                 frame3.createFrame("LEFT", frame2, 0, 0, LEFT);
63                 for (j = 0; j < 4; ++j) {
64                         Frame *frame4;
65
66                         frame4.createFrame("SUB-ABOVE", frame3, 0, 0, ABOVE);
67                         for (k = 0; k < 20; ++k) {
68                                 Frame *frame5;
69
70                                 frame5.createFrame("SUB-SUB-ABOVE",
71                                                    frame4, 0, 0, ABOVE);
72                                 for (l = 0; l < 20; ++l) {
73                                         gadgets.ButtonFrame *button;
74
75                                         button.createButton(frame5,
76                                                             0, 0, LEFT, "LEFT");
77                                 }
78                         }
79                 }
80         }
81         stdout->show("Number of buttons:", i * j * k * l);
82         frame0->recalc();
83         frame0->flush();
84
85         # Slowly destroy the buttons
86         #
87         destroyStuff(frame0);
88         frame0->recalc();
89         frame0->flush();
90         Thread.waitThreads();           # wait until all threads have exited
91         return(0);
92 }
93
94 void
95 destroyStuff(Frame @parent)
96 {
97         Frame @scan;
98
99         if ((scan = parent->firstFrame()) == NULL) {
100                 return;
101         }
102         while ((scan = parent->firstFrame()) != NULL) {
103                 destroyStuff(scan);
104                 scan->unlinkFrame();
105                 parent->flush();
106                 Thread.sleep(10);
107         }
108 }