From af4a6534ef0c60341eb0476c90b48dde83dea8c0 Mon Sep 17 00:00:00 2001 From: Emil Martinec Date: Mon, 18 Oct 2010 13:39:23 -0500 Subject: [PATCH] Restored color boost tool; fixed bug in simpleprocess.cc for saving output. --- rtengine/curves.h | 2 +- rtengine/dcrop.cc | 2 +- rtengine/improccoordinator.cc | 2 +- rtengine/simpleprocess.cc | 4 +- rtgui/filepanel.cc | 489 +++++++++++++++++----------------- 5 files changed, 250 insertions(+), 249 deletions(-) diff --git a/rtengine/curves.h b/rtengine/curves.h index 827f997e2..e566383f6 100644 --- a/rtengine/curves.h +++ b/rtengine/curves.h @@ -129,7 +129,7 @@ class CurveFactory { public: // static void updateCurve3 (int* curve, int* ohistogram, const std::vector& cpoints, double defmul, double ecomp, int black, double hlcompr, double shcompr, double br, double contr, double gamma_, bool igamma, int skip=1); static void complexCurve (double ecomp, double black, double hlcompr, double shcompr, double br, double contr, double defmul, double gamma_, bool igamma, const std::vector& curvePoints, unsigned int* histogram, int* outCurve, unsigned int* outBeforeCCurveHistogram, int skip=1); - static void complexsgnCurve (double satclip, double satcompr, double saturation, double colormult, const std::vector& curvePoints, int* outCurve, int skip); + static void complexsgnCurve (double satclip, double satcompr, double saturation, double colormult, const std::vector& curvePoints, int* outCurve, int skip=1); }; diff --git a/rtengine/dcrop.cc b/rtengine/dcrop.cc index 3d873c396..41a5d929f 100644 --- a/rtengine/dcrop.cc +++ b/rtengine/dcrop.cc @@ -167,7 +167,7 @@ void Crop::update (int todo, bool internal) { parent->ipf.chrominanceCurve (laboCrop, labnCrop, 0, parent->chroma_acurve, 0, croph); parent->ipf.chrominanceCurve (laboCrop, labnCrop, 1, parent->chroma_bcurve, 0, croph); - //parent->ipf.colorCurve (laboCrop, labnCrop); + parent->ipf.colorCurve (laboCrop, labnCrop); if (skip==1) { parent->ipf.impulsedenoise (labnCrop); diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index c3f3fe67d..2577a455e 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -216,9 +216,9 @@ void ImProcCoordinator::updatePreviewImage (int todo) { readyphase++; progress ("Applying Color Boost...",100*readyphase/numofphases); - //ipf.colorCurve (oprevl, nprevl); ipf.chrominanceCurve (oprevl, nprevl, 0, chroma_acurve, 0, pH); ipf.chrominanceCurve (oprevl, nprevl, 1, chroma_bcurve, 0, pH); + ipf.colorCurve (nprevl, nprevl); readyphase++; if (scale==1) { diff --git a/rtengine/simpleprocess.cc b/rtengine/simpleprocess.cc index 3c78081a9..ac1c9818b 100644 --- a/rtengine/simpleprocess.cc +++ b/rtengine/simpleprocess.cc @@ -152,9 +152,9 @@ IImage16* processImage (ProcessingJob* pjob, int& errorCode, ProgressListener* p // luminance processing CurveFactory::complexCurve (0.0, 0.0, 0.0, 0.0, params.labCurve.brightness, params.labCurve.contrast, 0.0, 0.0, false, params.labCurve.lcurve, hist16, curve, NULL); ipf.luminanceCurve (labView, labView, curve, 0, fh); - CurveFactory::complexsgnCurve (0.0, 100.0, params.labCurve.saturation, 1.0, params.labCurve.acurve, curve, NULL); + CurveFactory::complexsgnCurve (0.0, 100.0, params.labCurve.saturation, 1.0, params.labCurve.acurve, curve, 1); ipf.chrominanceCurve (labView, labView, 0, curve, 0, fh); - CurveFactory::complexsgnCurve (0.0, 100.0, params.labCurve.saturation, 1.0, params.labCurve.bcurve, curve, NULL); + CurveFactory::complexsgnCurve (0.0, 100.0, params.labCurve.saturation, 1.0, params.labCurve.bcurve, curve, 1); ipf.chrominanceCurve (labView, labView, 1, curve, 0, fh); ipf.impulsedenoise (labView); diff --git a/rtgui/filepanel.cc b/rtgui/filepanel.cc index c3d0edd9b..c59e6c716 100644 --- a/rtgui/filepanel.cc +++ b/rtgui/filepanel.cc @@ -1,244 +1,245 @@ -/* - * This file is part of RawTherapee. - * - * Copyright (c) 2004-2010 Gabor Horvath - * - * RawTherapee is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * RawTherapee is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with RawTherapee. If not, see . - */ -#include -#include - -int fbinit (void* data) { - - gdk_threads_enter (); - ((FilePanel*)data)->init (); - gdk_threads_leave (); - - return 0; -} - -FilePanel::FilePanel () : parent(NULL) { - - isloading = false; - dirpaned = new Gtk::HPaned (); - dirpaned->set_position (options.dirBrowserWidth); - - dirBrowser = new DirBrowser (); - placesBrowser = new PlacesBrowser (); - recentBrowser = new RecentBrowser (); - - placespaned = new Gtk::VPaned (); - placespaned->set_size_request(50,100); - placespaned->set_position (options.dirBrowserHeight); - - Gtk::VBox* obox = Gtk::manage (new Gtk::VBox ()); - obox->pack_start (*recentBrowser, Gtk::PACK_SHRINK, 4); - obox->pack_start (*dirBrowser); - - placespaned->pack1 (*placesBrowser, false, true); - placespaned->pack2 (*obox, true, true); - - dirpaned->pack1 (*placespaned, false, true); - - tpc = new BatchToolPanelCoordinator (this); - fileCatalog = new FileCatalog (tpc->coarse, tpc->getToolBar()); - ribbonPane = new Gtk::Paned(); - ribbonPane->add(*fileCatalog); - ribbonPane->set_size_request(50,150); - dirpaned->pack2 (*ribbonPane, true, true); - - placesBrowser->setDirBrowserRemoteInterface (dirBrowser); - recentBrowser->setDirBrowserRemoteInterface (dirBrowser); - dirBrowser->addDirSelectionListener (fileCatalog); - dirBrowser->addDirSelectionListener (recentBrowser); - dirBrowser->addDirSelectionListener (placesBrowser); - fileCatalog->setFileSelectionListener (this); - - rightBox = new Gtk::HBox (); - rightBox->set_size_request(50,100); - rightNotebook = new Gtk::Notebook (); - Gtk::VBox* taggingBox = new Gtk::VBox (); - - history = new History (false); - - tpc->addPParamsChangeListener (history); - history->setProfileChangeListener (tpc); - - Gtk::ScrolledWindow* sFilterPanel = new Gtk::ScrolledWindow(); - filterPanel = new FilterPanel (); - sFilterPanel->add (*filterPanel); - sFilterPanel->set_policy(Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC); - - fileCatalog->setFilterPanel (filterPanel); - fileCatalog->setImageAreaToolListener (tpc); - - //------------------ - - rightNotebook->set_tab_pos (Gtk::POS_LEFT); - - Gtk::Label* devLab = new Gtk::Label (M("MAIN_TAB_DEVELOP")); - devLab->set_angle (90); - Gtk::Label* filtLab = new Gtk::Label (M("MAIN_TAB_FILTER")); - filtLab->set_angle (90); - Gtk::Label* tagLab = new Gtk::Label (M("MAIN_TAB_TAGGING")); - tagLab->set_angle (90); - - tpcPaned = new Gtk::VPaned (); - tpcPaned->pack1 (*tpc->toolPanelNotebook, false, true); - tpcPaned->pack2 (*history, true, true); - - rightNotebook->append_page (*tpcPaned, *devLab); - rightNotebook->append_page (*sFilterPanel, *filtLab); - rightNotebook->append_page (*taggingBox, *tagLab); - - rightBox->pack_start (*rightNotebook); - - pack1(*dirpaned, true, true); - pack2(*rightBox, false, true); - - fileCatalog->setFileSelectionChangeListener (tpc); - - fileCatalog->setFileSelectionListener (this); - g_idle_add (fbinit, this); - - show_all (); -} - -void FilePanel::setAspect () { - int winW, winH; - parent->get_size(winW, winH); - placespaned->set_position(options.dirBrowserHeight); - dirpaned->set_position(options.dirBrowserWidth); - tpcPaned->set_position(options.browserToolPanelHeight); - set_position(winW - options.browserToolPanelWidth); -} - -void FilePanel::init () { - - dirBrowser->fillDirTree (); - placesBrowser->refreshPlacesList (); - - if (argv1!="") - dirBrowser->open (argv1); - else { - if (options.startupDir==STARTUPDIR_HOME) - dirBrowser->open (Glib::get_home_dir()); - else if (options.startupDir==STARTUPDIR_CURRENT) - dirBrowser->open (argv0); - else if (options.startupDir==STARTUPDIR_CUSTOM || options.startupDir==STARTUPDIR_LAST) - dirBrowser->open (options.startupPath); - } -} - -bool FilePanel::fileSelected (Thumbnail* thm) { - - if (!parent) - return false; - - // try to open the file - // fileCatalog->setEnabled (false); - if (isloading) - return false; - - isloading = true; - ProgressConnector *ld = new ProgressConnector(); - ld->startFunc (sigc::bind(sigc::ptr_fun(&rtengine::InitialImage::load), thm->getFileName (), thm->getType()==FT_Raw, &error, parent->getProgressListener()), - sigc::bind(sigc::mem_fun(*this,&FilePanel::imageLoaded), thm, ld) ); - return true; -} -bool FilePanel::imageLoaded( Thumbnail* thm, ProgressConnector *pc ){ - - if (pc->returnValue() && thm) { - - if (options.tabbedUI){ - EditorPanel* epanel = Gtk::manage (new EditorPanel ()); - parent->addEditorPanel (epanel,Glib::path_get_basename (thm->getFileName())); - epanel->open(thm, pc->returnValue() ); - } - else{ - parent->SetEditorCurrent(); - parent->epanel->open(thm, pc->returnValue() ); - } - - - }else { - Glib::ustring msg_ = Glib::ustring("") + M("MAIN_MSG_CANNOTLOAD") + " \"" + thm->getFileName() + "\" .\n"; - Gtk::MessageDialog msgd (msg_, true, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); - msgd.run (); - } - delete pc; - - parent->setProgress(0.); - parent->setProgressStr(""); - isloading = false; - - return false; // MUST return false from idle function -} - -void FilePanel::saveOptions () { - - int winW, winH; - parent->get_size(winW, winH); - options.dirBrowserWidth = dirpaned->get_position (); - options.dirBrowserHeight = placespaned->get_position (); - options.browserToolPanelWidth = winW - get_position(); - options.browserToolPanelHeight = tpcPaned->get_position (); - if (options.startupDir==STARTUPDIR_LAST && fileCatalog->lastSelectedDir ()!="") - options.startupPath = fileCatalog->lastSelectedDir (); - fileCatalog->closeDir (); -} - -void FilePanel::open (const Glib::ustring& d) { - - if (Glib::file_test (d, Glib::FILE_TEST_IS_DIR)) - dirBrowser->open (d.c_str()); - else if (Glib::file_test (d, Glib::FILE_TEST_EXISTS)) - dirBrowser->open (Glib::path_get_dirname(d), Glib::path_get_basename(d)); -} - -bool FilePanel::addBatchQueueJob (BatchQueueEntry* bqe) { - - if (parent) - parent->addBatchQueueJob (bqe); - return true; -} - -void FilePanel::optionsChanged () { - - tpc->optionsChanged (); - fileCatalog->refreshAll (); -} - -bool FilePanel::handleShortcutKey (GdkEventKey* event) { - - bool ctrl = event->state & GDK_CONTROL_MASK; - bool shift = event->state & GDK_SHIFT_MASK; - - if (!ctrl) { - switch(event->keyval) { - } - } - else { - switch (event->keyval) { - } - } - - if(tpc->getToolBar()->handleShortcutKey(event)) - return true; - - if(fileCatalog->handleShortcutKey(event)) - return true; - - return false; -} \ No newline at end of file + +/* + * This file is part of RawTherapee. + * + * Copyright (c) 2004-2010 Gabor Horvath + * + * RawTherapee is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * RawTherapee is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with RawTherapee. If not, see . + */ +#include +#include + +int fbinit (void* data) { + + gdk_threads_enter (); + ((FilePanel*)data)->init (); + gdk_threads_leave (); + + return 0; +} + +FilePanel::FilePanel () : parent(NULL) { + + isloading = false; + dirpaned = new Gtk::HPaned (); + dirpaned->set_position (options.dirBrowserWidth); + + dirBrowser = new DirBrowser (); + placesBrowser = new PlacesBrowser (); + recentBrowser = new RecentBrowser (); + + placespaned = new Gtk::VPaned (); + placespaned->set_size_request(50,100); + placespaned->set_position (options.dirBrowserHeight); + + Gtk::VBox* obox = Gtk::manage (new Gtk::VBox ()); + obox->pack_start (*recentBrowser, Gtk::PACK_SHRINK, 4); + obox->pack_start (*dirBrowser); + + placespaned->pack1 (*placesBrowser, false, true); + placespaned->pack2 (*obox, true, true); + + dirpaned->pack1 (*placespaned, false, true); + + tpc = new BatchToolPanelCoordinator (this); + fileCatalog = new FileCatalog (tpc->coarse, tpc->getToolBar()); + ribbonPane = new Gtk::Paned(); + ribbonPane->add(*fileCatalog); + ribbonPane->set_size_request(50,150); + dirpaned->pack2 (*ribbonPane, true, true); + + placesBrowser->setDirBrowserRemoteInterface (dirBrowser); + recentBrowser->setDirBrowserRemoteInterface (dirBrowser); + dirBrowser->addDirSelectionListener (fileCatalog); + dirBrowser->addDirSelectionListener (recentBrowser); + dirBrowser->addDirSelectionListener (placesBrowser); + fileCatalog->setFileSelectionListener (this); + + rightBox = new Gtk::HBox (); + rightBox->set_size_request(50,100); + rightNotebook = new Gtk::Notebook (); + Gtk::VBox* taggingBox = new Gtk::VBox (); + + history = new History (false); + + tpc->addPParamsChangeListener (history); + history->setProfileChangeListener (tpc); + + Gtk::ScrolledWindow* sFilterPanel = new Gtk::ScrolledWindow(); + filterPanel = new FilterPanel (); + sFilterPanel->add (*filterPanel); + sFilterPanel->set_policy(Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC); + + fileCatalog->setFilterPanel (filterPanel); + fileCatalog->setImageAreaToolListener (tpc); + + //------------------ + + rightNotebook->set_tab_pos (Gtk::POS_LEFT); + + Gtk::Label* devLab = new Gtk::Label (M("MAIN_TAB_DEVELOP")); + devLab->set_angle (90); + Gtk::Label* filtLab = new Gtk::Label (M("MAIN_TAB_FILTER")); + filtLab->set_angle (90); + Gtk::Label* tagLab = new Gtk::Label (M("MAIN_TAB_TAGGING")); + tagLab->set_angle (90); + + tpcPaned = new Gtk::VPaned (); + tpcPaned->pack1 (*tpc->toolPanelNotebook, false, true); + tpcPaned->pack2 (*history, true, true); + + rightNotebook->append_page (*tpcPaned, *devLab); + rightNotebook->append_page (*sFilterPanel, *filtLab); + rightNotebook->append_page (*taggingBox, *tagLab); + + rightBox->pack_start (*rightNotebook); + + pack1(*dirpaned, true, true); + pack2(*rightBox, false, true); + + fileCatalog->setFileSelectionChangeListener (tpc); + + fileCatalog->setFileSelectionListener (this); + g_idle_add (fbinit, this); + + show_all (); +} + +void FilePanel::setAspect () { + int winW, winH; + parent->get_size(winW, winH); + placespaned->set_position(options.dirBrowserHeight); + dirpaned->set_position(options.dirBrowserWidth); + tpcPaned->set_position(options.browserToolPanelHeight); + set_position(winW - options.browserToolPanelWidth); +} + +void FilePanel::init () { + + dirBrowser->fillDirTree (); + placesBrowser->refreshPlacesList (); + + if (argv1!="") + dirBrowser->open (argv1); + else { + if (options.startupDir==STARTUPDIR_HOME) + dirBrowser->open (Glib::get_home_dir()); + else if (options.startupDir==STARTUPDIR_CURRENT) + dirBrowser->open (argv0); + else if (options.startupDir==STARTUPDIR_CUSTOM || options.startupDir==STARTUPDIR_LAST) + dirBrowser->open (options.startupPath); + } +} + +bool FilePanel::fileSelected (Thumbnail* thm) { + + if (!parent) + return false; + + // try to open the file + // fileCatalog->setEnabled (false); + if (isloading) + return false; + + isloading = true; + ProgressConnector *ld = new ProgressConnector(); + ld->startFunc (sigc::bind(sigc::ptr_fun(&rtengine::InitialImage::load), thm->getFileName (), thm->getType()==FT_Raw, &error, parent->getProgressListener()), + sigc::bind(sigc::mem_fun(*this,&FilePanel::imageLoaded), thm, ld) ); + return true; +} +bool FilePanel::imageLoaded( Thumbnail* thm, ProgressConnector *pc ){ + + if (pc->returnValue() && thm) { + + if (options.tabbedUI){ + EditorPanel* epanel = Gtk::manage (new EditorPanel ()); + parent->addEditorPanel (epanel,Glib::path_get_basename (thm->getFileName())); + epanel->open(thm, pc->returnValue() ); + } + else{ + parent->SetEditorCurrent(); + parent->epanel->open(thm, pc->returnValue() ); + } + + + }else { + Glib::ustring msg_ = Glib::ustring("") + M("MAIN_MSG_CANNOTLOAD") + " \"" + thm->getFileName() + "\" .\n"; + Gtk::MessageDialog msgd (msg_, true, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); + msgd.run (); + } + delete pc; + + parent->setProgress(0.); + parent->setProgressStr(""); + isloading = false; + + return false; // MUST return false from idle function +} + +void FilePanel::saveOptions () { + + int winW, winH; + parent->get_size(winW, winH); + options.dirBrowserWidth = dirpaned->get_position (); + options.dirBrowserHeight = placespaned->get_position (); + options.browserToolPanelWidth = winW - get_position(); + options.browserToolPanelHeight = tpcPaned->get_position (); + if (options.startupDir==STARTUPDIR_LAST && fileCatalog->lastSelectedDir ()!="") + options.startupPath = fileCatalog->lastSelectedDir (); + fileCatalog->closeDir (); +} + +void FilePanel::open (const Glib::ustring& d) { + + if (Glib::file_test (d, Glib::FILE_TEST_IS_DIR)) + dirBrowser->open (d.c_str()); + else if (Glib::file_test (d, Glib::FILE_TEST_EXISTS)) + dirBrowser->open (Glib::path_get_dirname(d), Glib::path_get_basename(d)); +} + +bool FilePanel::addBatchQueueJob (BatchQueueEntry* bqe) { + + if (parent) + parent->addBatchQueueJob (bqe); + return true; +} + +void FilePanel::optionsChanged () { + + tpc->optionsChanged (); + fileCatalog->refreshAll (); +} + +bool FilePanel::handleShortcutKey (GdkEventKey* event) { + + bool ctrl = event->state & GDK_CONTROL_MASK; + bool shift = event->state & GDK_SHIFT_MASK; + + if (!ctrl) { + switch(event->keyval) { + } + } + else { + switch (event->keyval) { + } + } + + if(tpc->getToolBar()->handleShortcutKey(event)) + return true; + + if(fileCatalog->handleShortcutKey(event)) + return true; + + return false; +}