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 #ifdef VOMP_PLATTFORM_MVP
34 #include "surfacemvp.h"
38 #define PICTUREFILE "/colourtest.jpg"
\r
40 int VColourTuner::rfactor=100;
\r
41 int VColourTuner::gfactor=100;
\r
42 int VColourTuner::bfactor=100;
\r
44 VColourTuner::VColourTuner()
\r
46 int sw= Video::getInstance()->getScreenWidth();
\r
47 int sh= Video::getInstance()->getScreenHeight();
\r
48 setSize(sw-80,sh-40);
\r
49 setPosition((sw-area.w)/2, (sh-area.h)/2);
\r
52 picture.setPosition(160,60);
\r
59 Log::getInstance()->log("VColourTuner",Log::DEBUG,"created %p",this);
\r
62 VColourTuner::~VColourTuner()
\r
64 Log::getInstance()->log("VColourTuner",Log::DEBUG,"deleted %p",this);
\r
67 void VColourTuner::drawBox(int x, int y, int w, int h, DrawStyle &c) {
\r
68 for (int row=y;row<y+h;row++)
\r
69 for (int col=x;col<x+w;col++) {
\r
70 surface->drawPixel(col,row,c);
\r
75 void VColourTuner::draw()
\r
77 //do not call base classes draw to avoid drawing the picture...
\r
78 Log::getInstance()->log("VColourTuner::draw",Log::DEBUG,"dp %s, rf=%d, gf=%d, bf=%d",
\r
79 (drawPicture?"true":"false"),vrfactor,vgfactor,vbfactor);
\r
85 int picx=picture.getX();
\r
86 DrawStyle bc=DrawStyle(140,140,140);
\r
88 bc=DrawStyle(255,255,255);
\r
89 drawText(tr("Colour Tuning"), x+20, y+5, DrawStyle::LIGHTTEXT);
\r
90 drawBox(x, y+50, bw, bh, DrawStyle::RED);
\r
91 drawBox(x, y+130, bw, bh, DrawStyle::GREEN);
\r
92 drawBox(x, y+190, bw, bh, DrawStyle::BLUE);
\r
93 drawBox(x, y+270, bw, bh, bc);
\r
94 sprintf(valbuf,"%03d%%",vrfactor);
\r
95 drawText(valbuf,x+bw+x,y+50, DrawStyle::LIGHTTEXT);
\r
96 drawText("<1 2>",x+bw+x,y+74, DrawStyle::LIGHTTEXT);
\r
97 sprintf(valbuf,"%03d%%",vgfactor);
\r
98 drawText(valbuf,x+bw+x,y+120, DrawStyle::LIGHTTEXT);
\r
99 drawText("<4 5>",x+bw+x,y+144, DrawStyle::LIGHTTEXT);
\r
100 sprintf(valbuf,"%03d%%",vbfactor);
\r
101 drawText(valbuf,x+bw+x,y+190, DrawStyle::LIGHTTEXT);
\r
102 drawText("<7 8>",x+bw+x,y+214, DrawStyle::LIGHTTEXT);
\r
103 sprintf(valbuf,"%03d%%",(vbfactor+vgfactor+vrfactor)/3);
\r
104 drawText(valbuf,x+bw+x,y+270, DrawStyle::LIGHTTEXT);
\r
105 drawText("<3 6>",x+bw+x,y+294, DrawStyle::LIGHTTEXT);
\r
106 drawText("9 norm",x+bw+x,y+318, DrawStyle::LIGHTTEXT);
\r
107 drawText(tr("OK to save, BACK to cancel"), x+20, area.h - 50, DrawStyle::LIGHTTEXT);
\r
110 picture.init(PICTUREFILE);
\r
114 int picy=picture.getY();
\r
115 int pich=picture.getHeight();
\r
116 if (hasChanged) drawText(tr("0 to draw picture"), picx+30, picy+pich+10, DrawStyle::LIGHTTEXT);
\r
119 int VColourTuner::handleCommand(int command)
\r
124 updateFactor(1,-1);
\r
134 updateFactor(2,-1);
\r
143 case Remote::SEVEN:
\r
144 updateFactor(3,-1);
\r
148 case Remote::EIGHT:
\r
153 case Remote::THREE:
\r
154 updateFactor(4,-1);
\r
178 #ifndef __ANDROID__
\r
179 ((Surface_TYPE *)surface)->initConversionTables(vrfactor,vgfactor,vbfactor);
\r
189 MediaOptions::getInstance()->setIntOption("FactorRed",rfactor);
\r
190 MediaOptions::getInstance()->setIntOption("FactorGreen",gfactor);
\r
191 MediaOptions::getInstance()->setIntOption("FactorBlue",bfactor);
\r
198 #ifndef __ANDROID__
\r
199 ((Surface_TYPE *)surface)->initConversionTables(vrfactor,vgfactor,vbfactor);
\r
203 bool updateAll=drawPicture;
\r
206 BoxStack::getInstance()->update(this);
\r
211 r.w=picture.getX()-1;
\r
214 BoxStack::getInstance()->update(this,&r);
\r
215 r.x=picture.getX();
\r
216 r.y=picture.getY();
\r
218 r.w=area.w-picture.getX();
\r
219 BoxStack::getInstance()->update(this,&r);
\r
227 void VColourTuner::processMessage(Message* m)
\r
229 if (m->message == Message::MOUSE_MOVE)
\r
233 else if (m->message == Message::MOUSE_LBDOWN)
\r
235 //check if press is outside this view! then simulate cancel
\r
236 int x=(m->parameter>>16)-getScreenX();
\r
237 int y=(m->parameter&0xFFFF)-getScreenY();
\r
238 if (x<0 || y <0 || x>(int)getWidth() || y>(int)getHeight())
\r
240 BoxStack::getInstance()->handleCommand(Remote::BACK); //simulate cancel press
\r
242 else if (y>=(int)area.h-24 && y<=(int)area.h-6)
\r
249 void VColourTuner::updateFactor(int color, int amount) {
\r
253 if (vrfactor < 20 ) vrfactor=20;
\r
254 if (vrfactor > 200) vrfactor=200;
\r
258 if (vgfactor < 20 ) vgfactor=20;
\r
259 if (vgfactor > 200) vgfactor=200;
\r
263 if (vbfactor < 20 ) vbfactor=20;
\r
264 if (vbfactor > 200) vbfactor=200;
\r
267 updateFactor(1,amount);
\r
268 updateFactor(2,amount);
\r
269 updateFactor(3,amount);
\r
272 while ((vrfactor+vbfactor+vgfactor) > 300) updateFactor(4,-1);
\r
273 while ((vrfactor+vbfactor+vgfactor) < 300) updateFactor(4,1);
\r
277 void VColourTuner::initFactors(){
\r
278 MediaOptions * options=MediaOptions::getInstance();
\r
279 int rf=options->getIntOption("FactorRed");
\r
280 int gf=options->getIntOption("FactorGreen");
\r
281 int bf=options->getIntOption("FactorBlue");
\r
282 if (rf >= 20 && bf >= 20 && gf >= 20)
\r
286 Log::getInstance()->log("VColourTuner",Log::DEBUG,"setting initial factors r=%d,g=%d,b=%d",rf,gf,bf);
\r
287 #ifndef __ANDROID__
\r
290 Surface_TYPE::initConversionTables(rfactor,gfactor,bfactor);
\r