]> icculus.org git repositories - divverent/nexuiz.git/blob - data/qcsrc/menu/item/image.c
menu-div0test -> menu
[divverent/nexuiz.git] / data / qcsrc / menu / item / image.c
1 #ifdef INTERFACE
2 CLASS(Image) EXTENDS(Item)
3         METHOD(Image, configureImage, void(entity, string))
4         METHOD(Image, draw, void(entity))
5         METHOD(Image, toString, string(entity))
6         METHOD(Image, resizeNotify, void(entity, vector, vector, vector, vector))
7         ATTRIB(Image, src, string, string_null)
8         ATTRIB(Image, color, vector, '1 1 1')
9         ATTRIB(Image, forcedAspect, float, 0)
10         ATTRIB(Image, imgOrigin, vector, '0 0 0')
11         ATTRIB(Image, imgSize, vector, '0 0 0')
12 ENDCLASS(Image)
13 #endif
14
15 #ifdef IMPLEMENTATION
16 string toStringImage(entity me)
17 {
18         return me.src;
19 }
20 void configureImageImage(entity me, string path)
21 {
22         me.src = path;
23 }
24 void drawImage(entity me)
25 {
26         draw_Picture(me.imgOrigin, me.src, me.imgSize, me.color, 1);
27 }
28 void resizeNotifyImage(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize)
29 {
30         if(me.forcedAspect == 0)
31         {
32                 me.imgOrigin = '0 0 0';
33                 me.imgSize = '1 1 0';
34         }
35         else
36         {
37                 if(absSize_x > me.forcedAspect * absSize_y)
38                 {
39                         // x too large, so center x-wise
40                         me.imgSize = eY + eX * (absSize_y * me.forcedAspect / absSize_x);
41                 }
42                 else
43                 {
44                         // y too large, so center y-wise
45                         me.imgSize = eX + eY * (absSize_x / (me.forcedAspect * absSize_y));
46                 }
47                 me.imgOrigin = '0.5 0.5 0' - 0.5 * me.imgSize;
48         }
49 }
50 #endif