2 Copyright 2004-2005 Chris Tallon, Andreas Vogel
\r
4 This file is part of VOMP.
\r
6 VOMP is free software; you can redistribute it and/or modify
\r
7 it under the terms of the GNU General Public License as published by
\r
8 the Free Software Foundation; either version 2 of the License, or
\r
9 (at your option) any later version.
\r
11 VOMP is distributed in the hope that it will be useful,
\r
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
\r
14 GNU General Public License for more details.
\r
16 You should have received a copy of the GNU General Public License
\r
17 along with VOMP; if not, write to the Free Software
\r
18 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
\r
21 #include "vcolourtuner.h"
\r
23 #include "wsymbol.h"
\r
28 #include "boxstack.h"
\r
31 #include "mediaoptions.h"
\r
33 #define PICTUREFILE "/colourtest.jpg"
\r
35 int VColourTuner::rfactor=100;
\r
36 int VColourTuner::gfactor=100;
\r
37 int VColourTuner::bfactor=100;
\r
39 VColourTuner::VColourTuner()
\r
41 int sw= Video::getInstance()->getScreenWidth();
\r
42 int sh= Video::getInstance()->getScreenHeight();
\r
43 setSize(sw-80,sh-40);
\r
44 setPosition((sw-area.w)/2, (sh-area.h)/2);
\r
47 picture.setPosition(160,60);
\r
54 Log::getInstance()->log("VColourTuner",Log::DEBUG,"created %p",this);
\r
57 VColourTuner::~VColourTuner()
\r
59 Log::getInstance()->log("VColourTuner",Log::DEBUG,"deleted %p",this);
\r
62 void VColourTuner::drawBox(int x, int y, int w, int h, Colour &c) {
\r
63 for (int row=y;row<y+h;row++)
\r
64 for (int col=x;col<x+w;col++) {
\r
65 surface->drawPixel(col,row,c);
\r
70 void VColourTuner::draw()
\r
72 //do not call base classes draw to avoid drawing the picture...
\r
73 Log::getInstance()->log("VColourTuner::draw",Log::DEBUG,"dp %s, rf=%d, gf=%d, bf=%d",
\r
74 (drawPicture?"true":"false"),vrfactor,vgfactor,vbfactor);
\r
80 int picx=picture.getX();
\r
81 Colour bc=Colour(140,140,140);
\r
83 bc=Colour(255,255,255);
\r
84 drawText(tr("Colour Tuning"), x+20, y+5, Colour::LIGHTTEXT);
\r
85 drawBox(x, y+50, bw, bh, Colour::RED);
\r
86 drawBox(x, y+130, bw, bh, Colour::GREEN);
\r
87 drawBox(x, y+190, bw, bh, Colour::BLUE);
\r
88 drawBox(x, y+270, bw, bh, bc);
\r
89 sprintf(valbuf,"%03d%%",vrfactor);
\r
90 drawText(valbuf,x+bw+x,y+50, Colour::LIGHTTEXT);
\r
91 drawText("<1 2>",x+bw+x,y+74, Colour::LIGHTTEXT);
\r
92 sprintf(valbuf,"%03d%%",vgfactor);
\r
93 drawText(valbuf,x+bw+x,y+120, Colour::LIGHTTEXT);
\r
94 drawText("<4 5>",x+bw+x,y+144, Colour::LIGHTTEXT);
\r
95 sprintf(valbuf,"%03d%%",vbfactor);
\r
96 drawText(valbuf,x+bw+x,y+190, Colour::LIGHTTEXT);
\r
97 drawText("<7 8>",x+bw+x,y+214, Colour::LIGHTTEXT);
\r
98 sprintf(valbuf,"%03d%%",(vbfactor+vgfactor+vrfactor)/3);
\r
99 drawText(valbuf,x+bw+x,y+270, Colour::LIGHTTEXT);
\r
100 drawText("<3 6>",x+bw+x,y+294, Colour::LIGHTTEXT);
\r
101 drawText("9 norm",x+bw+x,y+318, Colour::LIGHTTEXT);
\r
102 drawText(tr("OK to save, BACK to cancel"), x+20, area.h - 50, Colour::LIGHTTEXT);
\r
105 picture.init(PICTUREFILE);
\r
109 int picy=picture.getY();
\r
110 int pich=picture.getHeight();
\r
111 if (hasChanged) drawText(tr("0 to draw picture"), picx+30, picy+pich+10, Colour::LIGHTTEXT);
\r
114 int VColourTuner::handleCommand(int command)
\r
119 updateFactor(1,-1);
\r
129 updateFactor(2,-1);
\r
138 case Remote::SEVEN:
\r
139 updateFactor(3,-1);
\r
143 case Remote::EIGHT:
\r
148 case Remote::THREE:
\r
149 updateFactor(4,-1);
\r
173 #ifndef __ANDROID__
\r
174 ((Surface_TYPE *)surface)->initConversionTables(vrfactor,vgfactor,vbfactor);
\r
184 MediaOptions::getInstance()->setIntOption("FactorRed",rfactor);
\r
185 MediaOptions::getInstance()->setIntOption("FactorGreen",gfactor);
\r
186 MediaOptions::getInstance()->setIntOption("FactorBlue",bfactor);
\r
193 #ifndef __ANDROID__
\r
194 ((Surface_TYPE *)surface)->initConversionTables(vrfactor,vgfactor,vbfactor);
\r
198 bool updateAll=drawPicture;
\r
201 BoxStack::getInstance()->update(this);
\r
206 r.w=picture.getX()-1;
\r
209 BoxStack::getInstance()->update(this,&r);
\r
210 r.x=picture.getX();
\r
211 r.y=picture.getY();
\r
213 r.w=area.w-picture.getX();
\r
214 BoxStack::getInstance()->update(this,&r);
\r
222 void VColourTuner::processMessage(Message* m)
\r
224 if (m->message == Message::MOUSE_MOVE)
\r
228 else if (m->message == Message::MOUSE_LBDOWN)
\r
230 //check if press is outside this view! then simulate cancel
\r
231 int x=(m->parameter>>16)-getScreenX();
\r
232 int y=(m->parameter&0xFFFF)-getScreenY();
\r
233 if (x<0 || y <0 || x>(int)getWidth() || y>(int)getHeight())
\r
235 BoxStack::getInstance()->handleCommand(Remote::BACK); //simulate cancel press
\r
237 else if (y>=(int)area.h-24 && y<=(int)area.h-6)
\r
244 void VColourTuner::updateFactor(int color, int amount) {
\r
248 if (vrfactor < 20 ) vrfactor=20;
\r
249 if (vrfactor > 200) vrfactor=200;
\r
253 if (vgfactor < 20 ) vgfactor=20;
\r
254 if (vgfactor > 200) vgfactor=200;
\r
258 if (vbfactor < 20 ) vbfactor=20;
\r
259 if (vbfactor > 200) vbfactor=200;
\r
262 updateFactor(1,amount);
\r
263 updateFactor(2,amount);
\r
264 updateFactor(3,amount);
\r
267 while ((vrfactor+vbfactor+vgfactor) > 300) updateFactor(4,-1);
\r
268 while ((vrfactor+vbfactor+vgfactor) < 300) updateFactor(4,1);
\r
272 void VColourTuner::initFactors(){
\r
273 MediaOptions * options=MediaOptions::getInstance();
\r
274 int rf=options->getIntOption("FactorRed");
\r
275 int gf=options->getIntOption("FactorGreen");
\r
276 int bf=options->getIntOption("FactorBlue");
\r
277 if (rf >= 20 && bf >= 20 && gf >= 20)
\r
281 Log::getInstance()->log("VColourTuner",Log::DEBUG,"setting initial factors r=%d,g=%d,b=%d",rf,gf,bf);
\r
282 #ifndef __ANDROID__
\r
285 Surface_TYPE::initConversionTables(rfactor,gfactor,bfactor);
\r