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