]> de.git.xonotic.org Git - voretournament/voretournament.git/blob - data/qcsrc/menu/voret/slider_resolution.c
Tweak the Effects menu, and add iris adaptation to it as well.
[voretournament/voretournament.git] / data / qcsrc / menu / voret / slider_resolution.c
1 #ifdef INTERFACE\r
2 CLASS(VoretResolutionSlider) EXTENDS(VoretTextSlider)\r
3         METHOD(VoretResolutionSlider, configureVoretResolutionSlider, void(entity))\r
4         METHOD(VoretResolutionSlider, addResolution, void(entity, float, float, float))\r
5         METHOD(VoretResolutionSlider, loadCvars, void(entity))\r
6         METHOD(VoretResolutionSlider, saveCvars, void(entity))\r
7 ENDCLASS(VoretResolutionSlider)\r
8 entity makeVoretResolutionSlider();\r
9 void updateConwidths();\r
10 #endif\r
11 \r
12 #ifdef IMPLEMENTATION\r
13 void updateConwidths()\r
14 {\r
15         vector r, c;\r
16         float minfactor, maxfactor;\r
17         float sz, f;\r
18         r_x = cvar("menu_vid_width");\r
19         r_y = cvar("menu_vid_height");\r
20         r_z = cvar("menu_vid_pixelheight");\r
21         sz = cvar("menu_vid_scale");\r
22 \r
23         // calculate the base resolution\r
24         c_z = 0;\r
25         c_x = 800;\r
26         c_y = c_x * r_y * r_z / r_x;\r
27         if(c_y < 600)\r
28         {\r
29                 c_y = 600;\r
30                 c_x = c_y * r_x / (r_y * r_z);\r
31         }\r
32 \r
33         f = min(r_x / c_x, r_y / c_y);\r
34         if(f < 1)\r
35                 c = c * f; // ensures that c_x <= r_x and c_y <= r_y\r
36 \r
37         minfactor = min(1, 640 / c_x);             // can be > 1 only if c_x is <640\r
38         maxfactor = max3(1, r_x / c_x, r_y / c_y); // can be < 1 only if r_x < c_x and r_y < c_y\r
39         dprint("min factor: ", ftos(minfactor), "\n");\r
40         dprint("max factor: ", ftos(maxfactor), "\n");\r
41 \r
42         if(sz < 0)\r
43                 f = 1 - (maxfactor - 1) * sz;\r
44         else if(sz > 0)\r
45                 f = 1 + (minfactor - 1) * sz;\r
46         else\r
47                 f = 1;\r
48         c = c * f; // fteqcc fail\r
49 \r
50         cvar_set("vid_width", ftos(rint(r_x)));\r
51         cvar_set("vid_height", ftos(rint(r_y)));\r
52         cvar_set("vid_pixelheight", ftos(rint(r_z)));\r
53         cvar_set("vid_conwidth", ftos(rint(c_x)));\r
54         cvar_set("vid_conheight", ftos(rint(c_y)));\r
55 }\r
56 entity makeVoretResolutionSlider()\r
57 {\r
58         entity me;\r
59         me = spawnVoretResolutionSlider();\r
60         me.configureVoretResolutionSlider(me);\r
61         return me;\r
62 }\r
63 void addResolutionVoretResolutionSlider(entity me, float w, float h, float pixelheight)\r
64 {\r
65         me.addValue(me, strzone(strcat(ftos(w), "x", ftos(h))), strzone(strcat(ftos(w), " ", ftos(h), " ", ftos(pixelheight))));\r
66         // FIXME (in case you ever want to dynamically instantiate this): THIS IS NEVER FREED\r
67 }\r
68 void configureVoretResolutionSliderVoretResolutionSlider(entity me)\r
69 {\r
70         float i;\r
71         vector r0, r;\r
72 \r
73         me.configureVoretTextSlider(me, "menu_vid_width");\r
74 \r
75         r0 = '0 0 0';\r
76         for(i = 0;; ++i)\r
77         {\r
78                 r = getresolution(i);\r
79                 if(r_x == 0 && r_y == 0)\r
80                         break;\r
81                 if(r_z == 0)\r
82                         r_z = 1; // compat\r
83                 if(r == r0)\r
84                         continue;\r
85                 r0 = r;\r
86                 if(r_x < 640 || r_y < 400)\r
87                         continue;\r
88                 me.addResolution(me, r_x, r_y, r_z);\r
89         }\r
90 \r
91         me.configureVoretTextSliderValues(me);\r
92 }\r
93 void loadCvarsVoretResolutionSlider(entity me)\r
94 {\r
95         me.setValueFromIdentifier(me, strcat(cvar_string("menu_vid_width"), " ", cvar_string("menu_vid_height"), " ", cvar_string("menu_vid_pixelheight")));\r
96 }\r
97 void saveCvarsVoretResolutionSlider(entity me)\r
98 {\r
99         if(me.value >= 0 || me.value < me.nValues)\r
100         {\r
101                 tokenize_console(me.getIdentifier(me));\r
102                 cvar_set("menu_vid_width", argv(0));\r
103                 cvar_set("menu_vid_height", argv(1));\r
104                 cvar_set("menu_vid_pixelheight", argv(2));\r
105         }\r
106 }\r
107 #endif\r