]> git.vomp.tv Git - vompclient.git/blob - vcolourtuner.cc
Rename TCP class to TCPOld
[vompclient.git] / vcolourtuner.cc
1 /*
2     Copyright 2004-2005 Chris Tallon, Andreas Vogel
3
4     This file is part of VOMP.
5
6     VOMP is free software; you can redistribute it and/or modify
7     it under the terms of the GNU General Public License as published by
8     the Free Software Foundation; either version 2 of the License, or
9     (at your option) any later version.
10
11     VOMP is distributed in the hope that it will be useful,
12     but WITHOUT ANY WARRANTY; without even the implied warranty of
13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14     GNU General Public License for more details.
15
16     You should have received a copy of the GNU General Public License
17     along with VOMP.  If not, see <https://www.gnu.org/licenses/>.
18 */
19
20 #include "vcolourtuner.h"
21
22 #include "wsymbol.h"
23 #include "input.h"
24 #include "colour.h"
25 #include "video.h"
26 #include "vinfo.h"
27 #include "boxstack.h"
28 #include "i18n.h"
29 #include "log.h"
30 #include "mediaoptions.h"
31
32 #define PICTUREFILE "/colourtest.jpg"
33
34 int VColourTuner::rfactor=100;
35 int VColourTuner::gfactor=100;
36 int VColourTuner::bfactor=100;
37
38 VColourTuner::VColourTuner()
39 {
40   int sw= Video::getInstance()->getScreenWidth();
41   int sh= Video::getInstance()->getScreenHeight();
42   setSize(sw-80,sh-40);
43   setPosition((sw-area.w)/2, (sh-area.h)/2);
44   createBuffer();
45   setTitleBarOn(0);
46   picture.setPosition(160,60);
47   add(&picture);
48   drawPicture=true;
49   vrfactor=rfactor;
50   vbfactor=bfactor;
51   vgfactor=gfactor;
52   hasChanged=false;
53   Log::getInstance()->log("VColourTuner",Log::DEBUG,"created %p",this);
54 }
55
56 VColourTuner::~VColourTuner()
57 {
58   Log::getInstance()->log("VColourTuner",Log::DEBUG,"deleted %p",this);
59 }
60
61 void VColourTuner::drawBox(int x, int y, int w, int h, DrawStyle &c) {
62   for (int row=y;row<y+h;row++)
63     for (int col=x;col<x+w;col++) {
64       surface->drawPixel(col,row,c);
65     }
66 }
67
68
69 void VColourTuner::draw()
70 {
71     //do not call base classes draw to avoid drawing the picture...
72     Log::getInstance()->log("VColourTuner::draw",Log::DEBUG,"dp %s, rf=%d, gf=%d, bf=%d",
73         (drawPicture?"true":"false"),vrfactor,vgfactor,vbfactor);
74     char valbuf[20];
75     int x=20;
76     int y=20;
77     int bw=50;
78     int bh=50;
79     int picx=picture.getX();
80     DrawStyle bc=DrawStyle(140,140,140);
81     fillColour(bc);
82     bc=DrawStyle(255,255,255);
83     drawText(tr("Colour Tuning"), x+20, y+5, DrawStyle::LIGHTTEXT);
84     drawBox(x, y+50, bw, bh, DrawStyle::RED);
85     drawBox(x, y+130, bw, bh, DrawStyle::GREEN);
86     drawBox(x, y+190, bw, bh, DrawStyle::BLUE);
87     drawBox(x, y+270, bw, bh, bc);
88     sprintf(valbuf,"%03d%%",vrfactor);
89     drawText(valbuf,x+bw+x,y+50, DrawStyle::LIGHTTEXT);
90     drawText("<1 2>",x+bw+x,y+74, DrawStyle::LIGHTTEXT);
91     sprintf(valbuf,"%03d%%",vgfactor);
92     drawText(valbuf,x+bw+x,y+120, DrawStyle::LIGHTTEXT);
93     drawText("<4 5>",x+bw+x,y+144, DrawStyle::LIGHTTEXT);
94     sprintf(valbuf,"%03d%%",vbfactor);
95     drawText(valbuf,x+bw+x,y+190, DrawStyle::LIGHTTEXT);
96     drawText("<7 8>",x+bw+x,y+214, DrawStyle::LIGHTTEXT);
97     sprintf(valbuf,"%03d%%",(vbfactor+vgfactor+vrfactor)/3);
98     drawText(valbuf,x+bw+x,y+270, DrawStyle::LIGHTTEXT);
99     drawText("<3 6>",x+bw+x,y+294, DrawStyle::LIGHTTEXT);
100     drawText("9 norm",x+bw+x,y+318, DrawStyle::LIGHTTEXT);
101     drawText(tr("OK to save, BACK to cancel"), x+20, area.h - 50, DrawStyle::LIGHTTEXT);
102     if (drawPicture) {
103       hasChanged=false;
104       picture.init(PICTUREFILE);
105       picture.draw();
106       drawPicture=false;
107     }
108     int picy=picture.getY();
109     int pich=picture.getHeight();
110     if (hasChanged) drawText(tr("0 to draw picture"), picx+30, picy+pich+10, DrawStyle::LIGHTTEXT);
111 }
112
113 int VColourTuner::handleCommand(int command)
114 {
115   int rt=0;
116   switch(command) {
117       case Input::ONE:
118       updateFactor(1,-1);
119       rt=2;
120       hasChanged=true;
121       break;
122     case Input::TWO:
123       updateFactor(1,1);
124       rt=2;
125       hasChanged=true;
126       break;
127     case Input::FOUR:
128       updateFactor(2,-1);
129       rt=2;
130       hasChanged=true;
131       break;
132     case Input::FIVE:
133       updateFactor(2,1);
134       rt=2;
135       hasChanged=true;
136       break;
137     case Input::SEVEN:
138       updateFactor(3,-1);
139       rt=2;
140       hasChanged=true;
141       break;
142     case Input::EIGHT:
143       updateFactor(3,1);
144       hasChanged=true;
145       rt=2;
146       break;
147     case Input::THREE:
148       updateFactor(4,-1);
149       hasChanged=true;
150       rt=2;
151       break;
152     case Input::SIX:
153       updateFactor(4,1);
154       hasChanged=true;
155       rt=2;
156       break;
157     case Input::NINE:
158       updateFactor(5,0);
159       hasChanged=true;
160       rt=2;
161       break;
162     case Input::ZERO:
163       drawPicture=true;
164       rt=2;
165       break;
166     case Input::BACK:
167       vrfactor=rfactor;
168       vgfactor=gfactor;
169       vbfactor=bfactor;
170 #ifndef WIN32
171 #ifndef _MIPS_ARCH
172 #ifndef __ANDROID__
173     ((Surface_TYPE *)surface)->initConversionTables(vrfactor,vgfactor,vbfactor);
174 #endif
175 #endif
176 #endif
177       rt=4;
178       break;
179     case Input::OK:
180       rfactor=vrfactor;
181       gfactor=vgfactor;
182       bfactor=vbfactor;
183       MediaOptions::getInstance()->setIntOption("FactorRed",rfactor);
184       MediaOptions::getInstance()->setIntOption("FactorGreen",gfactor);
185       MediaOptions::getInstance()->setIntOption("FactorBlue",bfactor);
186       rt=4;
187       break;
188   }
189   if (rt == 2) {
190 #ifndef WIN32
191 #ifndef _MIPS_ARCH
192 #ifndef __ANDROID__
193     ((Surface_TYPE *)surface)->initConversionTables(vrfactor,vgfactor,vbfactor);
194 #endif
195 #endif
196 #endif
197     bool updateAll=drawPicture;
198     draw();
199     if (updateAll) {
200       BoxStack::getInstance()->update(this);
201     }
202     else {
203       Region r;
204       r.x=0;
205       r.w=picture.getX()-1;
206       r.y=0;
207       r.h=area.h;
208       BoxStack::getInstance()->update(this,&r);
209       r.x=picture.getX();
210       r.y=picture.getY();
211       r.h=area.h-r.y;
212       r.w=area.w-picture.getX();
213       BoxStack::getInstance()->update(this,&r);
214     }
215   }
216   return rt;
217 }
218
219
220
221 void VColourTuner::processMessage(Message* m)
222 {
223   if (m->message == Message::MOUSE_MOVE)
224   {
225     
226   }
227   else if (m->message == Message::MOUSE_LBDOWN)
228   {
229     if (coordsOutsideBox(m))
230     {
231       BoxStack::getInstance()->handleCommand(Input::BACK); //simulate cancel press
232     }
233     else if (y>=(int)area.h-24 && y<=(int)area.h-6)
234     {
235       ;
236     }
237   }
238 }
239
240 void VColourTuner::updateFactor(int color, int amount) {
241   switch (color) {
242     case 1:
243       vrfactor+=amount;
244       if (vrfactor < 20 ) vrfactor=20;
245       if (vrfactor > 200) vrfactor=200;
246       break;
247     case 2:
248       vgfactor+=amount;
249       if (vgfactor < 20 ) vgfactor=20;
250       if (vgfactor > 200) vgfactor=200;
251       break;
252     case 3:
253       vbfactor+=amount;
254       if (vbfactor < 20 ) vbfactor=20;
255       if (vbfactor > 200) vbfactor=200;
256       break;
257     case 4:
258       updateFactor(1,amount);
259       updateFactor(2,amount);
260       updateFactor(3,amount);
261       break;
262     case 5:
263       while ((vrfactor+vbfactor+vgfactor) > 300) updateFactor(4,-1);
264       while ((vrfactor+vbfactor+vgfactor) < 300) updateFactor(4,1);
265   }
266 }
267
268 void VColourTuner::initFactors(){
269   MediaOptions * options=MediaOptions::getInstance();
270   int rf=options->getIntOption("FactorRed");
271   int gf=options->getIntOption("FactorGreen");
272   int bf=options->getIntOption("FactorBlue");
273   if (rf >= 20 && bf >= 20 && gf >= 20)
274   rfactor=rf;
275   gfactor=gf;
276   bfactor=bf;
277   Log::getInstance()->log("VColourTuner",Log::DEBUG,"setting initial factors r=%d,g=%d,b=%d",rf,gf,bf);
278 #ifndef __ANDROID__
279 #ifndef WIN32
280 #ifndef _MIPS_ARCH
281   Surface_TYPE::initConversionTables(rfactor,gfactor,bfactor);
282 #endif
283 #endif
284 #endif
285 }