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, see <https://www.gnu.org/licenses/>.
20 #include "vcolourtuner.h"
30 #include "mediaoptions.h"
32 #define PICTUREFILE "/colourtest.jpg"
34 int VColourTuner::rfactor=100;
35 int VColourTuner::gfactor=100;
36 int VColourTuner::bfactor=100;
38 VColourTuner::VColourTuner()
40 int sw= Video::getInstance()->getScreenWidth();
41 int sh= Video::getInstance()->getScreenHeight();
43 setPosition((sw-area.w)/2, (sh-area.h)/2);
46 picture.setPosition(160,60);
53 Log::getInstance()->log("VColourTuner",Log::DEBUG,"created %p",this);
54 MessageQueue::getInstance()->addReceiver(this);
57 VColourTuner::~VColourTuner()
59 MessageQueue::getInstance()->removeReceiver(this);
60 Log::getInstance()->log("VColourTuner",Log::DEBUG,"deleted %p",this);
63 void VColourTuner::drawBox(int x, int y, int w, int h, const DrawStyle& c) {
64 for (int row=y;row<y+h;row++)
65 for (int col=x;col<x+w;col++) {
66 surface->drawPixel(col,row,c);
71 void VColourTuner::draw()
73 //do not call base classes draw to avoid drawing the picture...
74 Log::getInstance()->log("VColourTuner::draw",Log::DEBUG,"dp %s, rf=%d, gf=%d, bf=%d",
75 (drawPicture?"true":"false"),vrfactor,vgfactor,vbfactor);
81 int picx=picture.getX();
82 DrawStyle bc=DrawStyle(140,140,140);
85 drawText(tr("Colour Tuning"), x+20, y+5, DrawStyle::LIGHTTEXT);
86 drawBox(x, y+50, bw, bh, DrawStyle::RED);
87 drawBox(x, y+130, bw, bh, DrawStyle::GREEN);
88 drawBox(x, y+190, bw, bh, DrawStyle::BLUE);
89 drawBox(x, y+270, bw, bh, bc);
90 sprintf(valbuf,"%03d%%",vrfactor);
91 drawText(valbuf,x+bw+x,y+50, DrawStyle::LIGHTTEXT);
92 drawText("<1 2>",x+bw+x,y+74, DrawStyle::LIGHTTEXT);
93 sprintf(valbuf,"%03d%%",vgfactor);
94 drawText(valbuf,x+bw+x,y+120, DrawStyle::LIGHTTEXT);
95 drawText("<4 5>",x+bw+x,y+144, DrawStyle::LIGHTTEXT);
96 sprintf(valbuf,"%03d%%",vbfactor);
97 drawText(valbuf,x+bw+x,y+190, DrawStyle::LIGHTTEXT);
98 drawText("<7 8>",x+bw+x,y+214, DrawStyle::LIGHTTEXT);
99 sprintf(valbuf,"%03d%%",(vbfactor+vgfactor+vrfactor)/3);
100 drawText(valbuf,x+bw+x,y+270, DrawStyle::LIGHTTEXT);
101 drawText("<3 6>",x+bw+x,y+294, DrawStyle::LIGHTTEXT);
102 drawText("9 norm",x+bw+x,y+318, DrawStyle::LIGHTTEXT);
103 drawText(tr("OK to save, BACK to cancel"), x+20, area.h - 50, DrawStyle::LIGHTTEXT);
106 picture.init(PICTUREFILE);
110 int picy=picture.getY();
111 int pich=picture.getHeight();
112 if (hasChanged) drawText(tr("0 to draw picture"), picx+30, picy+pich+10, DrawStyle::LIGHTTEXT);
115 int VColourTuner::handleCommand(int command)
117 int rt = BoxStack::COMMAND_HANDLED; // Assume BoxStack::COMMAND_HANDLED
119 default: // Unless no case matches, then set to BoxStack::DROP_THROUGH
120 rt = BoxStack::DROP_THROUGH;
168 ((Surface_TYPE *)surface)->initConversionTables(vrfactor,vgfactor,vbfactor);
172 rt=BoxStack::DELETE_ME;
178 MediaOptions::getInstance()->setIntOption("FactorRed",rfactor);
179 MediaOptions::getInstance()->setIntOption("FactorGreen",gfactor);
180 MediaOptions::getInstance()->setIntOption("FactorBlue",bfactor);
181 rt=BoxStack::DELETE_ME;
184 if (rt == BoxStack::COMMAND_HANDLED) {
188 ((Surface_TYPE *)surface)->initConversionTables(vrfactor,vgfactor,vbfactor);
192 bool updateAll=drawPicture;
195 BoxStack::getInstance()->update(this);
200 r.w=picture.getX()-1;
203 BoxStack::getInstance()->update(this,&r);
207 r.w=area.w-picture.getX();
208 BoxStack::getInstance()->update(this,&r);
216 void VColourTuner::processMessage(Message* m)
218 if (m->message == Message::MOUSE_MOVE)
222 else if (m->message == Message::MOUSE_LBDOWN)
224 if (coordsOutsideBox(m))
226 Input::sendInputKey(Input::BACK);
228 else if (y>=(int)area.h-24 && y<=(int)area.h-6)
235 void VColourTuner::updateFactor(int color, int amount) {
239 if (vrfactor < 20 ) vrfactor=20;
240 if (vrfactor > 200) vrfactor=200;
244 if (vgfactor < 20 ) vgfactor=20;
245 if (vgfactor > 200) vgfactor=200;
249 if (vbfactor < 20 ) vbfactor=20;
250 if (vbfactor > 200) vbfactor=200;
253 updateFactor(1,amount);
254 updateFactor(2,amount);
255 updateFactor(3,amount);
258 while ((vrfactor+vbfactor+vgfactor) > 300) updateFactor(4,-1);
259 while ((vrfactor+vbfactor+vgfactor) < 300) updateFactor(4,1);
263 void VColourTuner::initFactors(){
264 MediaOptions * options=MediaOptions::getInstance();
265 int rf=options->getIntOption("FactorRed");
266 int gf=options->getIntOption("FactorGreen");
267 int bf=options->getIntOption("FactorBlue");
268 if (rf >= 20 && bf >= 20 && gf >= 20)
272 Log::getInstance()->log("VColourTuner",Log::DEBUG,"setting initial factors r=%d,g=%d,b=%d",rf,gf,bf);
276 Surface_TYPE::initConversionTables(rfactor,gfactor,bfactor);