add (option) Bezier spot delimiters

This commit is contained in:
Desmis
2017-02-21 17:13:49 +01:00
parent 2fd4f58345
commit f9b592dfd5
8 changed files with 846 additions and 100 deletions

View File

@@ -1061,6 +1061,8 @@ PREFERENCES_LANGAUTODETECT;Use system language
PREFERENCES_LEVAUTDN;Denoising level
PREFERENCES_LEVDN;Cell size
PREFERENCES_LISS;Auto multi-zone smoothing
PREFERENCES_LOCAL;Local adjustements
PREFERENCES_LOCALSHOWDELIMSPOT;Show spot delimiters
PREFERENCES_MAX;Maxi (Tile)
PREFERENCES_MAXRECENTFOLDERS;Maximum number of recent folders
PREFERENCES_MED;Medium (Tile/2)
@@ -1131,8 +1133,8 @@ PREFERENCES_SERIALIZE_TIFF_READ_TOOLTIP;When working with folders full of uncomp
PREFERENCES_SET;Set
PREFERENCES_SHOWBASICEXIF;Show basic Exif info
PREFERENCES_SHOWDATETIME;Show date and time
PREFERENCES_SHOWEXPOSURECOMPENSATION;Append exposure compensation
PREFERENCES_SHOWFILMSTRIPTOOLBAR;Show filmstrip toolbar
PREFERENCES_SHOWEXPOSURECOMPENSATION;Append exposure compensation
PREFERENCES_SHTHRESHOLD;Threshold for clipped shadows
PREFERENCES_SIMPLAUT;Tool mode
PREFERENCES_SINGLETAB;Single Editor Tab Mode

View File

@@ -295,6 +295,327 @@ void Circle::drawToMOChannel (Cairo::RefPtr<Cairo::Context> &cr, unsigned short
}
}
void Arcellipse::drawOuterGeometry (Cairo::RefPtr<Cairo::Context> &cr, ObjectMOBuffer *objectBuffer, EditCoordSystem &coordSystem)
{
if ((flags & F_VISIBLE) && state != INSENSITIVE) {
RGBColor color;
if (flags & F_AUTO_COLOR) {
color = getOuterLineColor();
} else {
color = outerLineColor;
}
cr->set_source_rgb (color.getR(), color.getG(), color.getB());
cr->set_line_width ( getOuterLineWidth() );
rtengine::Coord center_ = center;
double radius_ = radiusInImageSpace ? coordSystem.scaleValueToCanvas (double (radius)) : double (radius);
double radius2_ = radiusInImageSpace ? coordSystem.scaleValueToCanvas (double (radius2)) : double (radius2);
double scalx_ = scalx; //radius2_ / radius_;
double scaly_ = scaly;
double begang_ = begang;
double endang_ = endang;
double translax_ = translax;
double translay_ = translay;
if (datum == IMAGE) {
coordSystem.imageCoordToScreen (center.x, center.y, center_.x, center_.y);
} else if (datum == CLICKED_POINT) {
center_ += objectBuffer->getDataProvider()->posScreen;
} else if (datum == CURSOR) {
center_ += objectBuffer->getDataProvider()->posScreen + objectBuffer->getDataProvider()->deltaScreen;
}
cr->save();
cr->move_to (center_.x , center_.y);
cr->translate (translax_, translay_);
cr->scale (scalx_, scaly_);
cr->translate (- translax_ , - translay_);
cr->arc (center_.x + 0.5, center_.y + 0.5, radius_, begang_, endang_);
cr->restore();
cr->stroke();
}
}
void Arcellipse::drawInnerGeometry (Cairo::RefPtr<Cairo::Context> &cr, ObjectMOBuffer *objectBuffer, EditCoordSystem &coordSystem)
{
if (flags & F_VISIBLE) {
if (state != INSENSITIVE) {
RGBColor color;
if (flags & F_AUTO_COLOR) {
color = getInnerLineColor();
} else {
color = innerLineColor;
}
cr->set_source_rgb (color.getR(), color.getG(), color.getB());
}
cr->set_line_width ( innerLineWidth );
rtengine::Coord center_ = center;
double radius_ = radiusInImageSpace ? coordSystem.scaleValueToCanvas (double (radius)) : double (radius);
double radius2_ = radiusInImageSpace ? coordSystem.scaleValueToCanvas (double (radius2)) : double (radius2);
double scalx_ = scalx; //radius2_ / radius_;
double scaly_ = scaly;
double begang_ = begang;
double endang_ = endang;
double translax_ = translax;
double translay_ = translay;
if (datum == IMAGE) {
coordSystem.imageCoordToScreen (center.x, center.y, center_.x, center_.y);
} else if (datum == CLICKED_POINT) {
center_ += objectBuffer->getDataProvider()->posScreen;
} else if (datum == CURSOR) {
center_ += objectBuffer->getDataProvider()->posScreen + objectBuffer->getDataProvider()->deltaScreen;
}
if (filled && state != INSENSITIVE) {
cr->save();
cr->move_to (center_.x , center_.y);
cr->translate (translax_, translay_);
cr->scale (scalx_, scaly_);
cr->translate (- translax_ , - translay_);
cr->arc (center_.x + 0.5, center_.y + 0.5, radius_, begang_, endang_);
cr->restore();
if (innerLineWidth > 0.) {
cr->fill_preserve();
cr->stroke();
} else {
cr->fill();
}
} else if (innerLineWidth > 0.) {
cr->save();
cr->move_to (center_.x , center_.y);
cr->translate (translax_ , translay_);
cr->scale (scalx_, scaly_);
cr->translate (- translax_ , - translay_);
cr->arc (center_.x + 0.5, center_.y + 0.5, radius_, begang_, endang_);
cr->restore();
if (state == INSENSITIVE) {
std::valarray<double> ds (1);
ds[0] = 4;
cr->set_source_rgba (1.0, 1.0, 1.0, 0.618);
cr->stroke_preserve();
cr->set_source_rgba (0.0, 0.0, 0.0, 0.618);
cr->set_dash (ds, 0);
cr->stroke();
ds.resize (0);
cr->set_dash (ds, 0);
} else {
cr->stroke();
}
}
}
}
void Arcellipse::drawToMOChannel (Cairo::RefPtr<Cairo::Context> &cr, unsigned short id, ObjectMOBuffer *objectBuffer, EditCoordSystem &coordSystem)
{
if (flags & F_HOVERABLE) {
cr->set_line_width ( getMouseOverLineWidth() );
rtengine::Coord center_ = center;
double radius_ = radiusInImageSpace ? coordSystem.scaleValueToCanvas (double (radius)) : double (radius);
double radius2_ = radiusInImageSpace ? coordSystem.scaleValueToCanvas (double (radius2)) : double (radius2);
double scalx_ = scalx ; //radius2_ / radius_;
double scaly_ = scaly;
double begang_ = begang;
double endang_ = endang;
double translax_ = translax;
double translay_ = translay;
if (datum == IMAGE) {
coordSystem.imageCoordToCropCanvas (center.x, center.y, center_.x, center_.y);
} else if (datum == CLICKED_POINT) {
center_ += objectBuffer->getDataProvider()->posScreen;
} else if (datum == CURSOR) {
center_ += objectBuffer->getDataProvider()->posScreen + objectBuffer->getDataProvider()->deltaScreen;
}
cr->save();
cr->move_to (center_.x , center_.y);
cr->translate (translax_ , translay_);
cr->scale (scalx_, scaly_);
cr->translate (- translax_ , - translay_);
cr->arc (center_.x + 0.5, center_.y + 0.5, radius_, begang_, endang_);
cr->restore();
if (filled) {
if (innerLineWidth > 0.) {
cr->fill_preserve();
cr->stroke();
} else {
cr->fill();
}
} else {
cr->stroke();
}
}
}
void Beziers::drawOuterGeometry (Cairo::RefPtr<Cairo::Context> &cr, ObjectMOBuffer *objectBuffer, EditCoordSystem &coordSystem)
{
if ((flags & F_VISIBLE) && state != INSENSITIVE) {
RGBColor color;
if (flags & F_AUTO_COLOR) {
color = getOuterLineColor();
} else {
color = outerLineColor;
}
cr->set_source_rgb (color.getR(), color.getG(), color.getB());
cr->set_line_width ( getOuterLineWidth() );
rtengine::Coord begin_ = begin;
rtengine::Coord inter_ = inter;
rtengine::Coord end_ = end;
if (datum == IMAGE) {
coordSystem.imageCoordToScreen (begin.x, begin.y, begin_.x, begin_.y);
coordSystem.imageCoordToScreen (inter.x, inter.y, inter_.x, inter_.y);
coordSystem.imageCoordToScreen (end.x, end.y, end_.x, end_.y);
} else if (datum == CLICKED_POINT) {
begin_ += objectBuffer->getDataProvider()->posScreen;
inter_ += objectBuffer->getDataProvider()->posScreen;
end_ += objectBuffer->getDataProvider()->posScreen;
} else if (datum == CURSOR) {
begin_ += objectBuffer->getDataProvider()->posScreen + objectBuffer->getDataProvider()->deltaScreen;
inter_ += objectBuffer->getDataProvider()->posScreen + objectBuffer->getDataProvider()->deltaScreen;
end_ += objectBuffer->getDataProvider()->posScreen + objectBuffer->getDataProvider()->deltaScreen;
}
cr->save();
cr->move_to (begin_.x + 0.5, begin_.y + 0.5);
cr->curve_to (begin_.x + 0.5, begin_.y + 0.5, inter_.x + 0.5, inter_.y + 0.5, end_.x + 0.5, end_.y + 0.5);
cr->restore();
cr->stroke();
}
}
void Beziers::drawInnerGeometry (Cairo::RefPtr<Cairo::Context> &cr, ObjectMOBuffer *objectBuffer, EditCoordSystem &coordSystem)
{
if ((flags & F_VISIBLE) && innerLineWidth > 0.) {
if (state != INSENSITIVE) {
RGBColor color;
if (flags & F_AUTO_COLOR) {
color = getInnerLineColor();
} else {
color = innerLineColor;
}
cr->set_source_rgb (color.getR(), color.getG(), color.getB());
}
cr->set_line_width (innerLineWidth);
rtengine::Coord begin_ = begin;
rtengine::Coord inter_ = inter;
rtengine::Coord end_ = end;
if (datum == IMAGE) {
coordSystem.imageCoordToScreen (begin.x, begin.y, begin_.x, begin_.y);
coordSystem.imageCoordToScreen (inter.x, inter.y, inter_.x, inter_.y);
coordSystem.imageCoordToScreen (end.x, end.y, end_.x, end_.y);
} else if (datum == CLICKED_POINT) {
begin_ += objectBuffer->getDataProvider()->posScreen;
inter_ += objectBuffer->getDataProvider()->posScreen;
end_ += objectBuffer->getDataProvider()->posScreen;
} else if (datum == CURSOR) {
begin_ += objectBuffer->getDataProvider()->posScreen + objectBuffer->getDataProvider()->deltaScreen;
inter_ += objectBuffer->getDataProvider()->posScreen + objectBuffer->getDataProvider()->deltaScreen;
end_ += objectBuffer->getDataProvider()->posScreen + objectBuffer->getDataProvider()->deltaScreen;
}
cr->save();
cr->move_to (begin_.x + 0.5, begin_.y + 0.5);
cr->curve_to (begin_.x + 0.5, begin_.y + 0.5, inter_.x + 0.5, inter_.y + 0.5, end_.x + 0.5, end_.y + 0.5);
cr->restore();
if (state == INSENSITIVE) {
std::valarray<double> ds (1);
ds[0] = 4;
cr->set_source_rgba (1.0, 1.0, 1.0, 0.618);
cr->stroke_preserve();
cr->set_source_rgba (0.0, 0.0, 0.0, 0.618);
cr->set_dash (ds, 0);
cr->stroke();
ds.resize (0);
cr->set_dash (ds, 0);
} else {
cr->stroke();
}
}
}
void Beziers::drawToMOChannel (Cairo::RefPtr<Cairo::Context> &cr, unsigned short id, ObjectMOBuffer *objectBuffer, EditCoordSystem &coordSystem)
{
if (flags & F_HOVERABLE) {
cr->set_line_width ( getMouseOverLineWidth() );
rtengine::Coord begin_ = begin;
rtengine::Coord inter_ = inter;
rtengine::Coord end_ = end;
if (datum == IMAGE) {
coordSystem.imageCoordToCropCanvas (begin.x, begin.y, begin_.x, begin_.y);
coordSystem.imageCoordToCropCanvas (inter.x, inter.y, inter_.x, inter_.y);
coordSystem.imageCoordToCropCanvas (end.x, end.y, end_.x, end_.y);
} else if (datum == CLICKED_POINT) {
begin_ += objectBuffer->getDataProvider()->posScreen;
inter_ += objectBuffer->getDataProvider()->posScreen;
end_ += objectBuffer->getDataProvider()->posScreen;
} else if (datum == CURSOR) {
begin_ += objectBuffer->getDataProvider()->posScreen + objectBuffer->getDataProvider()->deltaScreen;
inter_ += objectBuffer->getDataProvider()->posScreen + objectBuffer->getDataProvider()->deltaScreen;
end_ += objectBuffer->getDataProvider()->posScreen + objectBuffer->getDataProvider()->deltaScreen;
}
// setting the color to the objet's ID
if (objectBuffer->getObjectMode() == OM_255) {
cr->set_source_rgba (0., 0., 0., ((id + 1) & 0xFF) / 255.);
} else {
cr->set_source_rgba (0., 0., 0., (id + 1) / 65535.);
}
cr->save();
cr->move_to (begin_.x + 0.5, begin_.y + 0.5);
cr->curve_to (begin_.x + 0.5, begin_.y + 0.5, inter_.x + 0.5, inter_.y + 0.5, end_.x + 0.5, end_.y + 0.5);
cr->restore();
cr->stroke();
}
}
void Line::drawOuterGeometry (Cairo::RefPtr<Cairo::Context> &cr, ObjectMOBuffer *objectBuffer, EditCoordSystem &coordSystem)
{
if ((flags & F_VISIBLE) && state != INSENSITIVE) {

View File

@@ -171,8 +171,8 @@ protected:
// instead of pointing to the EditSubscriber directly
EditDataProvider* dataProvider;
void createBuffer(int width, int height);
void resize(int newWidth, int newHeight);
void createBuffer (int width, int height);
void resize (int newWidth, int newHeight);
void flush();
EditSubscriber *getEditSubscriber ();
@@ -189,7 +189,7 @@ public:
// return true if the buffer has been allocated
bool bufferCreated();
int getObjectID(const rtengine::Coord& location);
int getObjectID (const rtengine::Coord& location);
};
@@ -353,6 +353,50 @@ public:
void drawToMOChannel (Cairo::RefPtr<Cairo::Context> &cr, unsigned short id, ObjectMOBuffer *objectBuffer, EditCoordSystem &coordSystem);
};
class Arcellipse : public Geometry
{
public:
rtengine::Coord center;
// rtengine::Coord scalx;
// rtengine::Coord scaly;
double radius;
double radius2;
double translax;
double translay;
bool filled;
bool radiusInImageSpace; /// If true, the radius depend on the image scale; if false, it is a fixed 'screen' size
double scalx;
double scaly;
double begang;
double endang;
Arcellipse ();
Arcellipse (rtengine::Coord& center, double radius, double radius2, double translax, double translay, double scalx, double scaly, double begang, double endang, bool filled = false, bool radiusInImageSpace = false);
Arcellipse (int centerX, int centerY, double radius, double radius2, double translax, double translay, double scalx, double scaly, double begang, double endang, bool filled = false, bool radiusInImageSpace = false);
void drawOuterGeometry (Cairo::RefPtr<Cairo::Context> &cr, ObjectMOBuffer *objectBuffer, EditCoordSystem &coordSystem);
void drawInnerGeometry (Cairo::RefPtr<Cairo::Context> &cr, ObjectMOBuffer *objectBuffer, EditCoordSystem &coordSystem);
void drawToMOChannel (Cairo::RefPtr<Cairo::Context> &cr, unsigned short id, ObjectMOBuffer *objectBuffer, EditCoordSystem &coordSystem);
};
class Beziers : public Geometry
{
public:
rtengine::Coord begin;
rtengine::Coord inter;
rtengine::Coord end;
Beziers ();
Beziers (rtengine::Coord& begin, rtengine::Coord& inter, rtengine::Coord& end);
Beziers (float beginX, float beginY, float interX, float interY, float endX, float endY);
void drawOuterGeometry (Cairo::RefPtr<Cairo::Context> &cr, ObjectMOBuffer *objectBuffer, EditCoordSystem &coordSystem);
void drawInnerGeometry (Cairo::RefPtr<Cairo::Context> &cr, ObjectMOBuffer *objectBuffer, EditCoordSystem &coordSystem);
void drawToMOChannel (Cairo::RefPtr<Cairo::Context> &cr, unsigned short id, ObjectMOBuffer *objectBuffer, EditCoordSystem &coordSystem);
};
class Line : public Geometry
{
public:
@@ -390,10 +434,10 @@ public:
Rectangle ();
void setXYWH(int left, int top, int width, int height);
void setXYXY(int left, int top, int right, int bottom);
void setXYWH(rtengine::Coord topLeft, rtengine::Coord widthHeight);
void setXYXY(rtengine::Coord topLeft, rtengine::Coord bottomRight);
void setXYWH (int left, int top, int width, int height);
void setXYXY (int left, int top, int right, int bottom);
void setXYWH (rtengine::Coord topLeft, rtengine::Coord widthHeight);
void setXYXY (rtengine::Coord topLeft, rtengine::Coord bottomRight);
void drawOuterGeometry (Cairo::RefPtr<Cairo::Context> &cr, ObjectMOBuffer *objectBuffer, EditCoordSystem &coordSystem);
void drawInnerGeometry (Cairo::RefPtr<Cairo::Context> &cr, ObjectMOBuffer *objectBuffer, EditCoordSystem &coordSystem);
void drawToMOChannel (Cairo::RefPtr<Cairo::Context> &cr, unsigned short id, ObjectMOBuffer *objectBuffer, EditCoordSystem &coordSystem);
@@ -409,13 +453,13 @@ private:
Cairo::RefPtr<Cairo::ImageSurface> draggedImg;
Cairo::RefPtr<Cairo::ImageSurface> insensitiveImg;
static void setPaths(Options &opt);
static void setPaths (Options &opt);
static void updateImages();
void changeImage(Glib::ustring &newImage);
static Glib::ustring findIconAbsolutePath(const Glib::ustring &iconFName);
void changeImage (Glib::ustring &newImage);
static Glib::ustring findIconAbsolutePath (const Glib::ustring &iconFName);
void drawImage (const Cairo::RefPtr<Cairo::ImageSurface> &img, Cairo::RefPtr<Cairo::Context> &cr, ObjectMOBuffer *objectBuffer, EditCoordSystem &coordSystem);
void drawMOImage (const Cairo::RefPtr<Cairo::ImageSurface> &img, Cairo::RefPtr<Cairo::Context> &cr, unsigned short id, ObjectMOBuffer *objectBuffer, EditCoordSystem &coordSystem);
void drivenPointToRectangle(const rtengine::Coord &pos, rtengine::Coord &topLeft, rtengine::Coord &bottomRight, int W, int H);
void drivenPointToRectangle (const rtengine::Coord &pos, rtengine::Coord &topLeft, rtengine::Coord &bottomRight, int W, int H);
public:
DrivenPoint drivenPoint;
@@ -468,9 +512,9 @@ public:
explicit EditSubscriber (EditType editType);
virtual ~EditSubscriber () {}
void setEditProvider(EditDataProvider *provider);
void setEditProvider (EditDataProvider *provider);
EditDataProvider* getEditProvider ();
void setEditID(EditUniqueID ID, BufferType buffType);
void setEditID (EditUniqueID ID, BufferType buffType);
bool isCurrentSubscriber();
virtual void subscribe();
virtual void unsubscribe();
@@ -587,94 +631,112 @@ public:
EditDataProvider();
virtual ~EditDataProvider() {}
virtual void subscribe(EditSubscriber *subscriber);
virtual void subscribe (EditSubscriber *subscriber);
virtual void unsubscribe(); /// Occurs when the subscriber has been switched off first
virtual void switchOffEditMode (); /// Occurs when the user want to stop the editing mode
virtual CursorShape getCursor(int objectID);
virtual CursorShape getCursor (int objectID);
int getPipetteRectSize ();
EditSubscriber* getCurrSubscriber();
virtual void getImageSize (int &w, int&h) = 0;
};
inline EditDataProvider* ObjectMOBuffer::getDataProvider () {
inline EditDataProvider* ObjectMOBuffer::getDataProvider ()
{
return dataProvider;
}
inline ObjectMode ObjectMOBuffer::getObjectMode () {
inline ObjectMode ObjectMOBuffer::getObjectMode ()
{
return objectMode;
}
inline Cairo::RefPtr<Cairo::ImageSurface>& ObjectMOBuffer::getObjectMap () {
inline Cairo::RefPtr<Cairo::ImageSurface>& ObjectMOBuffer::getObjectMap ()
{
return objectMap;
}
inline void RGBColor::setColor (double r, double g, double b) {
inline void RGBColor::setColor (double r, double g, double b)
{
this->r = r;
this->g = g;
this->b = b;
}
inline void RGBColor::setColor (char r, char g, char b) {
inline void RGBColor::setColor (char r, char g, char b)
{
this->r = double (r) / 255.;
this->g = double (g) / 255.;
this->b = double (b) / 255.;
}
inline double RGBColor::getR () {
inline double RGBColor::getR ()
{
return r;
}
inline double RGBColor::getG () {
inline double RGBColor::getG ()
{
return g;
}
inline double RGBColor::getB () {
inline double RGBColor::getB ()
{
return b;
}
inline void RGBAColor::setColor (double r, double g, double b, double a) {
inline void RGBAColor::setColor (double r, double g, double b, double a)
{
RGBColor::setColor (r, g, b);
this->a = a;
}
inline void RGBAColor::setColor (char r, char g, char b, char a) {
inline void RGBAColor::setColor (char r, char g, char b, char a)
{
RGBColor::setColor (r, g, b);
this->a = double (a) / 255.;
}
inline double RGBAColor::getA () {
inline double RGBAColor::getA ()
{
return a;
}
inline void Geometry::setInnerLineColor (double r, double g, double b) {
inline void Geometry::setInnerLineColor (double r, double g, double b)
{
innerLineColor.setColor (r, g, b);
flags &= ~F_AUTO_COLOR;
}
inline void Geometry::setInnerLineColor (char r, char g, char b) {
inline void Geometry::setInnerLineColor (char r, char g, char b)
{
innerLineColor.setColor (r, g, b);
flags &= ~F_AUTO_COLOR;
}
inline void Geometry::setOuterLineColor (double r, double g, double b) {
inline void Geometry::setOuterLineColor (double r, double g, double b)
{
outerLineColor.setColor (r, g, b);
flags &= ~F_AUTO_COLOR;
}
inline double Geometry::getOuterLineWidth () {
inline double Geometry::getOuterLineWidth ()
{
return double (innerLineWidth) + 2.;
}
inline void Geometry::setOuterLineColor (char r, char g, char b) {
inline void Geometry::setOuterLineColor (char r, char g, char b)
{
outerLineColor.setColor (r, g, b);
flags &= ~F_AUTO_COLOR;
}
inline double Geometry::getMouseOverLineWidth () {
inline double Geometry::getMouseOverLineWidth ()
{
return getOuterLineWidth () + 2.;
}
inline void Geometry::setAutoColor (bool aColor) {
inline void Geometry::setAutoColor (bool aColor)
{
if (aColor) {
flags |= F_AUTO_COLOR;
} else {
@@ -682,11 +744,13 @@ inline void Geometry::setAutoColor (bool aColor) {
}
}
inline bool Geometry::isVisible () {
inline bool Geometry::isVisible ()
{
return flags & F_VISIBLE;
}
inline void Geometry::setVisible (bool visible) {
inline void Geometry::setVisible (bool visible)
{
if (visible) {
flags |= F_VISIBLE;
} else {
@@ -694,11 +758,13 @@ inline void Geometry::setVisible (bool visible) {
}
}
inline bool Geometry::isHoverable () {
inline bool Geometry::isHoverable ()
{
return flags & F_HOVERABLE;
}
inline void Geometry::setHoverable (bool hoverable) {
inline void Geometry::setHoverable (bool hoverable)
{
if (hoverable) {
flags |= F_HOVERABLE;
} else {
@@ -706,152 +772,220 @@ inline void Geometry::setHoverable (bool hoverable) {
}
}
inline void Geometry::setActive (bool active) {
inline void Geometry::setActive (bool active)
{
if (active) {
flags |= (F_VISIBLE | F_HOVERABLE);
} else {
flags &= ~(F_VISIBLE | F_HOVERABLE);
flags &= ~ (F_VISIBLE | F_HOVERABLE);
}
}
inline EditDataProvider* EditSubscriber::getEditProvider () {
inline EditDataProvider* EditSubscriber::getEditProvider ()
{
return provider;
}
inline CursorShape EditSubscriber::getCursor (const int objectID) {
inline CursorShape EditSubscriber::getCursor (const int objectID)
{
return CSOpenHand;
}
inline bool EditSubscriber::mouseOver (const int modifierKey) {
inline bool EditSubscriber::mouseOver (const int modifierKey)
{
return false;
}
inline bool EditSubscriber::button1Pressed (const int modifierKey) {
inline bool EditSubscriber::button1Pressed (const int modifierKey)
{
return false;
}
inline bool EditSubscriber::button1Released () {
inline bool EditSubscriber::button1Released ()
{
return false;
}
inline bool EditSubscriber::button2Pressed (const int modifierKey) {
inline bool EditSubscriber::button2Pressed (const int modifierKey)
{
return false;
}
inline bool EditSubscriber::button2Released () {
inline bool EditSubscriber::button2Released ()
{
return false;
}
inline bool EditSubscriber::button3Pressed (const int modifierKey) {
inline bool EditSubscriber::button3Pressed (const int modifierKey)
{
return false;
}
inline bool EditSubscriber::button3Released () {
inline bool EditSubscriber::button3Released ()
{
return false;
}
inline bool EditSubscriber::drag1 (const int modifierKey) {
inline bool EditSubscriber::drag1 (const int modifierKey)
{
return false;
}
inline bool EditSubscriber::drag2 (const int modifierKey) {
inline bool EditSubscriber::drag2 (const int modifierKey)
{
return false;
}
inline bool EditSubscriber::drag3 (const int modifierKey) {
inline bool EditSubscriber::drag3 (const int modifierKey)
{
return false;
}
inline bool EditSubscriber::pick1 (const bool picked) {
inline bool EditSubscriber::pick1 (const bool picked)
{
return false;
}
inline bool EditSubscriber::pick2 (const bool picked) {
inline bool EditSubscriber::pick2 (const bool picked)
{
return false;
}
inline bool EditSubscriber::pick3 (const bool picked) {
inline bool EditSubscriber::pick3 (const bool picked)
{
return false;
}
inline const std::vector<Geometry*>& EditSubscriber::getVisibleGeometry () {
inline const std::vector<Geometry*>& EditSubscriber::getVisibleGeometry ()
{
return visibleGeometry;
}
inline const std::vector<Geometry*>& EditSubscriber::getMouseOverGeometry () {
inline const std::vector<Geometry*>& EditSubscriber::getMouseOverGeometry ()
{
return mouseOverGeometry;
}
inline int EditDataProvider::getPipetteRectSize () {
inline int EditDataProvider::getPipetteRectSize ()
{
return 8; // TODO: make a GUI
}
inline Geometry::Geometry () :
innerLineColor (char (255), char (255), char (255)), outerLineColor (
char (0), char (0), char (0)), flags (
F_VISIBLE | F_HOVERABLE | F_AUTO_COLOR), innerLineWidth (1.5f), datum (
IMAGE), state (NORMAL) {
innerLineColor (char (255), char (255), char (255)), outerLineColor (
char (0), char (0), char (0)), flags (
F_VISIBLE | F_HOVERABLE | F_AUTO_COLOR), innerLineWidth (1.5f), datum (
IMAGE), state (NORMAL)
{
}
inline Circle::Circle () :
center (100, 100), radius (10), filled (false), radiusInImageSpace (
false) {
center (100, 100), radius (10), filled (false), radiusInImageSpace (
false)
{
}
inline Arcellipse::Arcellipse () :
center (100, 100), radius (10), radius2 (10), translax (0), translay (0), filled (false), radiusInImageSpace (
false)
{
}
inline Rectangle::Rectangle () :
topLeft (0, 0), bottomRight (10, 10), filled (false) {
topLeft (0, 0), bottomRight (10, 10), filled (false)
{
}
inline Polyline::Polyline () :
filled (false) {
filled (false)
{
}
inline Line::Line () :
begin (10, 10), end (100, 100) {
begin (10, 10), end (100, 100)
{
}
inline Beziers::Beziers () :
begin (10, 10), inter (50, 50), end (100, 100)
{
}
inline RGBAColor::RGBAColor () :
RGBColor (0., 0., 0.), a (0.) {
RGBColor (0., 0., 0.), a (0.)
{
}
inline RGBColor::RGBColor () :
r (0.), g (0.), b (0.) {
r (0.), g (0.), b (0.)
{
}
inline RGBColor::RGBColor (double r, double g, double b) :
r (r), g (g), b (b) {
r (r), g (g), b (b)
{
}
inline RGBColor::RGBColor (char r, char g, char b) :
r (double (r) / 255.), g (double (g) / 255.), b (double (b) / 255.) {
r (double (r) / 255.), g (double (g) / 255.), b (double (b) / 255.)
{
}
inline RGBAColor::RGBAColor (double r, double g, double b, double a) :
RGBColor (r, g, b), a (a) {
RGBColor (r, g, b), a (a)
{
}
inline RGBAColor::RGBAColor (char r, char g, char b, char a) :
RGBColor (r, g, b), a (double (a) / 255.) {
RGBColor (r, g, b), a (double (a) / 255.)
{
}
inline Circle::Circle (rtengine::Coord& center, int radius, bool filled,
bool radiusInImageSpace) :
center (center), radius (radius), filled (filled), radiusInImageSpace (
radiusInImageSpace) {
bool radiusInImageSpace) :
center (center), radius (radius), filled (filled), radiusInImageSpace (
radiusInImageSpace)
{
}
inline Circle::Circle (int centerX, int centerY, int radius, bool filled,
bool radiusInImageSpace) :
center (centerX, centerY), radius (radius), filled (filled), radiusInImageSpace (
radiusInImageSpace) {
bool radiusInImageSpace) :
center (centerX, centerY), radius (radius), filled (filled), radiusInImageSpace (
radiusInImageSpace)
{
}
inline Arcellipse::Arcellipse (rtengine::Coord& center, double radius, double radius2, double translax, double translay, double scalx, double scaly, double begang, double endang, bool filled,
bool radiusInImageSpace) :
center (center), radius (radius), radius2 (radius2), translax (translax), translay (translay), scalx (scalx), scaly (scaly), begang (begang), endang (endang), filled (filled), radiusInImageSpace (
radiusInImageSpace)
{
}
inline Arcellipse::Arcellipse (int centerX, int centerY, double radius, double radius2, double translax, double translay, double scalx, double scaly, double begang, double endang, bool filled,
bool radiusInImageSpace) :
center (centerX, centerY), radius (radius), radius2 (radius2), translax (translax), translay (translay), scalx (scalx), scaly (scaly), begang (begang), endang (endang), filled (filled), radiusInImageSpace (
radiusInImageSpace)
{
}
inline Beziers::Beziers (rtengine::Coord& begin, rtengine::Coord& inter, rtengine::Coord& end) :
begin (begin), inter (inter), end (end)
{
}
inline Beziers::Beziers (float beginX, float beginY, float interX, float interY, float endX, float endY) :
begin (beginX, beginY), inter (interX, interY), end (endX, endY)
{
}
inline Line::Line (rtengine::Coord& begin, rtengine::Coord& end) :
begin (begin), end (end) {
begin (begin), end (end)
{
}
inline Line::Line (int beginX, int beginY, int endX, int endY) :
begin (beginX, beginY), end (endX, endY) {
begin (beginX, beginY), end (endX, endY)
{
}
#endif

View File

@@ -651,6 +651,12 @@ Locallab::Locallab ():
// Instantiating the Editing geometry; positions will be initialized later
Line *hLine, *vLine, *locYLine[2], *locXLine[2];
Circle *centerCircle;
// Arcellipse *oneellipse;
Beziers *onebeziers[3];
Beziers *twobeziers[3];
Beziers *thrbeziers[3];
Beziers *foubeziers[3];
// Visible geometry
locXLine[0] = new Line();
@@ -671,12 +677,81 @@ Locallab::Locallab ():
centerCircle->radius = circrad->getValue(); //19;
centerCircle->filled = false;
if (options.showdelimspot) {
onebeziers[0] = new Beziers();
onebeziers[0]->datum = Geometry::IMAGE;
onebeziers[0]->innerLineWidth = 1;
onebeziers[1] = new Beziers();
onebeziers[1]->datum = Geometry::IMAGE;
onebeziers[1]->innerLineWidth = 1;
onebeziers[2] = new Beziers();
onebeziers[2]->datum = Geometry::IMAGE;
onebeziers[2]->innerLineWidth = 1;
twobeziers[0] = new Beziers();
twobeziers[0]->datum = Geometry::IMAGE;
twobeziers[0]->innerLineWidth = 1;
twobeziers[1] = new Beziers();
twobeziers[1]->datum = Geometry::IMAGE;
twobeziers[1]->innerLineWidth = 1;
twobeziers[2] = new Beziers();
twobeziers[2]->datum = Geometry::IMAGE;
twobeziers[2]->innerLineWidth = 1;
thrbeziers[0] = new Beziers();
thrbeziers[0]->datum = Geometry::IMAGE;
thrbeziers[0]->innerLineWidth = 1;
thrbeziers[1] = new Beziers();
thrbeziers[1]->datum = Geometry::IMAGE;
thrbeziers[1]->innerLineWidth = 1;
thrbeziers[2] = new Beziers();
thrbeziers[2]->datum = Geometry::IMAGE;
thrbeziers[2]->innerLineWidth = 1;
foubeziers[0] = new Beziers();
foubeziers[0]->datum = Geometry::IMAGE;
foubeziers[0]->innerLineWidth = 1;
foubeziers[1] = new Beziers();
foubeziers[1]->datum = Geometry::IMAGE;
foubeziers[1]->innerLineWidth = 1;
foubeziers[2] = new Beziers();
foubeziers[2]->datum = Geometry::IMAGE;
foubeziers[2]->innerLineWidth = 1;
}
// oneellipse->radiusInImageSpace = true;
// oneellipse->radius = locX->getValue();
// oneellipse->filled = false;
EditSubscriber::visibleGeometry.push_back ( locXLine[0] );
EditSubscriber::visibleGeometry.push_back ( locXLine[1] );
EditSubscriber::visibleGeometry.push_back ( locYLine[0] );
EditSubscriber::visibleGeometry.push_back ( locYLine[1] );
EditSubscriber::visibleGeometry.push_back ( centerCircle );
if (options.showdelimspot) {
EditSubscriber::visibleGeometry.push_back ( onebeziers[0] );
EditSubscriber::visibleGeometry.push_back ( onebeziers[1] );
EditSubscriber::visibleGeometry.push_back ( onebeziers[2] );
EditSubscriber::visibleGeometry.push_back ( twobeziers[0] );
EditSubscriber::visibleGeometry.push_back ( twobeziers[1] );
EditSubscriber::visibleGeometry.push_back ( twobeziers[2] );
EditSubscriber::visibleGeometry.push_back ( thrbeziers[0] );
EditSubscriber::visibleGeometry.push_back ( thrbeziers[1] );
EditSubscriber::visibleGeometry.push_back ( thrbeziers[2] );
EditSubscriber::visibleGeometry.push_back ( foubeziers[0] );
EditSubscriber::visibleGeometry.push_back ( foubeziers[1] );
EditSubscriber::visibleGeometry.push_back ( foubeziers[2] );
}
// MouseOver geometry
locXLine[0] = new Line();
locXLine[0]->innerLineWidth = 2;
@@ -696,6 +771,60 @@ Locallab::Locallab ():
centerCircle->radius = circrad->getValue();//19;
centerCircle->filled = true;
if (options.showdelimspot) {
onebeziers[0] = new Beziers();
onebeziers[0]->datum = Geometry::IMAGE;
onebeziers[0]->innerLineWidth = 1;
onebeziers[1] = new Beziers();
onebeziers[1]->datum = Geometry::IMAGE;
onebeziers[1]->innerLineWidth = 1;
onebeziers[2] = new Beziers();
onebeziers[2]->datum = Geometry::IMAGE;
onebeziers[2]->innerLineWidth = 1;
twobeziers[0] = new Beziers();
twobeziers[0]->datum = Geometry::IMAGE;
twobeziers[0]->innerLineWidth = 1;
twobeziers[1] = new Beziers();
twobeziers[1]->datum = Geometry::IMAGE;
twobeziers[1]->innerLineWidth = 1;
twobeziers[2] = new Beziers();
twobeziers[2]->datum = Geometry::IMAGE;
twobeziers[2]->innerLineWidth = 1;
thrbeziers[0] = new Beziers();
thrbeziers[0]->datum = Geometry::IMAGE;
thrbeziers[0]->innerLineWidth = 1;
thrbeziers[1] = new Beziers();
thrbeziers[1]->datum = Geometry::IMAGE;
thrbeziers[1]->innerLineWidth = 1;
thrbeziers[2] = new Beziers();
thrbeziers[2]->datum = Geometry::IMAGE;
thrbeziers[2]->innerLineWidth = 1;
foubeziers[0] = new Beziers();
foubeziers[0]->datum = Geometry::IMAGE;
foubeziers[0]->innerLineWidth = 1;
foubeziers[1] = new Beziers();
foubeziers[1]->datum = Geometry::IMAGE;
foubeziers[1]->innerLineWidth = 1;
foubeziers[2] = new Beziers();
foubeziers[2]->datum = Geometry::IMAGE;
foubeziers[2]->innerLineWidth = 1;
}
// oneellipse->radiusInImageSpace = true;
// oneellipse->radius = 10;//locX->getValue();
// oneellipse->filled = false;
EditSubscriber::mouseOverGeometry.push_back ( locXLine[0] );
EditSubscriber::mouseOverGeometry.push_back ( locXLine[1] );
@@ -704,6 +833,21 @@ Locallab::Locallab ():
EditSubscriber::mouseOverGeometry.push_back ( centerCircle );
if (options.showdelimspot) {
EditSubscriber::mouseOverGeometry.push_back ( onebeziers[0] );
EditSubscriber::mouseOverGeometry.push_back ( onebeziers[1] );
EditSubscriber::mouseOverGeometry.push_back ( onebeziers[2] );
EditSubscriber::mouseOverGeometry.push_back ( twobeziers[0] );
EditSubscriber::mouseOverGeometry.push_back ( twobeziers[1] );
EditSubscriber::mouseOverGeometry.push_back ( twobeziers[2] );
EditSubscriber::mouseOverGeometry.push_back ( thrbeziers[0] );
EditSubscriber::mouseOverGeometry.push_back ( thrbeziers[1] );
EditSubscriber::mouseOverGeometry.push_back ( thrbeziers[2] );
EditSubscriber::mouseOverGeometry.push_back ( foubeziers[0] );
EditSubscriber::mouseOverGeometry.push_back ( foubeziers[1] );
EditSubscriber::mouseOverGeometry.push_back ( foubeziers[2] );
}
show_all();
}
@@ -1733,7 +1877,7 @@ void Locallab::updateGeometry (const int centerX_, const int centerY_, const int
double decayX = (locX_) * (double (imW)) / 2000.;
double decayXL = (locXL_) * (double (imW)) / 2000.;
rtengine::Coord origin (imW / 2 + centerX_ * imW / 2000.f, imH / 2 + centerY_ * imH / 2000.f);
// printf("deX=%f dexL=%f deY=%f deyT=%f\n", decayX, decayXL, decayY, decayYT);
// printf("deX=%f dexL=%f deY=%f deyT=%f locX=%i locY=%i\n", decayX, decayXL, decayY, decayYT, locX_, locY_);
if (Smethod->get_active_row_number() == 1 || Smethod->get_active_row_number() == 3) {
decayYT = decayY;
@@ -1742,6 +1886,8 @@ void Locallab::updateGeometry (const int centerX_, const int centerY_, const int
Line *currLine;
Circle *currCircle;
// Arcellipse *currArcellipse;
Beziers *currBeziers;
double decay;
const auto updateLine = [&] (Geometry * geometry, const float radius, const float begin, const float end) {
const auto line = static_cast<Line*> (geometry);
@@ -1763,31 +1909,134 @@ void Locallab::updateGeometry (const int centerX_, const int centerY_, const int
const auto circle = static_cast<Circle*> (geometry);
circle->center = origin;
circle->radius = circrad_;
};
const auto updateBeziers = [&] (Geometry * geometry, const double dX_, const double dI_, const double dY_, const float begi, const float inte, const float en) {
const auto beziers = static_cast<Beziers*> (geometry);
beziers->begin = PolarCoord (dX_, begi);
beziers->begin += origin;//0
beziers->inter = PolarCoord (dI_, inte);
beziers->inter += origin;//0
beziers->end = PolarCoord (dY_, en);
beziers->end += origin;
// printf("dX=%f dI=%f dY=%f begx=%i begy=%i intx=%i inty=%i endx=%i endy=%i\n", dX_, dI_, dY_, beziers->begin.x, beziers->begin.y, beziers->inter.x, beziers->inter.y, beziers->end.x, beziers->end.y);
};
/*
const auto updateArcellipse = [&] (Geometry * geometry, const double dX_, const double dY_, const float kbegang, const float kendang) {
const auto arcellipse = static_cast<Arcellipse*> (geometry);
arcellipse->center = origin;
arcellipse->radius = dY_;
arcellipse->radius2 = dX_;
arcellipse->translax = (double) imW /2.; //dX_ - dY_;
arcellipse->translay = (double) imH /2.;
arcellipse->scalx = dX_ / dY_; // double(locX_) / double (locY_); //arcellipse->radius2 / arcellipse->radius ; // dX_ / dY_;
arcellipse->scaly = 1.; //dX_ / dY_; //locY_/locX_;
arcellipse->begang = kbegang * M_PI;
arcellipse->endang = kendang * M_PI;
};
*/
double dimline = 100.;
if (options.showdelimspot) {
dimline = 500.;
}
decay = decayX;
updateLineWithDecay (visibleGeometry.at (0), 100., 90., 0.);
updateLineWithDecay (mouseOverGeometry.at (0), 100., 90., 0.);
updateLineWithDecay (visibleGeometry.at (0), dimline, 90., 0.);
updateLineWithDecay (mouseOverGeometry.at (0), dimline, 90., 0.);
decay = decayXL;
updateLineWithDecay (visibleGeometry.at (1), 100., 90., 180.);
updateLineWithDecay (mouseOverGeometry.at (1), 100., 90., 180.);
updateLineWithDecay (visibleGeometry.at (1), dimline, 90., 180.);
updateLineWithDecay (mouseOverGeometry.at (1), dimline, 90., 180.);
decay = decayYT;
updateLineWithDecay (visibleGeometry.at (2), 100., 180., 270.);
updateLineWithDecay (mouseOverGeometry.at (2), 100., 180., 270.);
updateLineWithDecay (visibleGeometry.at (2), dimline, 180., 270.);
updateLineWithDecay (mouseOverGeometry.at (2), dimline, 180., 270.);
decay = decayY;
updateLineWithDecay (visibleGeometry.at (3), 100., 180, 90.);
updateLineWithDecay (mouseOverGeometry.at (3), 100., 180., 90.);
updateLineWithDecay (visibleGeometry.at (3), dimline, 180, 90.);
updateLineWithDecay (mouseOverGeometry.at (3), dimline, 180., 90.);
updateCircle (visibleGeometry.at (4));
updateCircle (mouseOverGeometry.at (4));
//double decay10 = ((decayX * decayY)/ sqrt(0.03107 * SQR(decayX) + SQR(decayY)))/0.9848;
//double decay5 = ((decayX * decayY)/ sqrt(0.007655 * SQR(decayX) + SQR(decayY)))/0.9659;
if (options.showdelimspot) {
//this decayww evaluate approximation of a point in the ellipse for an angle alpha
double decay15 = 1.07854 * ((decayX * decayY) / sqrt (0.07179 * SQR (decayX) + SQR (decayY))); //0.07179 = SQR(sin(15)/cos(15)) 1.07854 = 1 / cos(15)
double decay30 = 1.15473 * ((decayX * decayY) / sqrt (0.33335 * SQR (decayX) + SQR (decayY)));
double decay60 = 2. * ((decayX * decayY) / sqrt (3.0 * SQR (decayX) + SQR (decayY)));
double decay75 = 3.86398 * ((decayX * decayY) / sqrt (13.929 * SQR (decayX) + SQR (decayY)));
double decay15L = 1.07854 * ((decayXL * decayY) / sqrt (0.07179 * SQR (decayXL) + SQR (decayY)));
double decay30L = 1.15473 * ((decayXL * decayY) / sqrt (0.33335 * SQR (decayXL) + SQR (decayY)));
double decay60L = 2. * ((decayXL * decayY) / sqrt (3.0 * SQR (decayXL) + SQR (decayY)));
double decay75L = 3.86398 * ((decayXL * decayY) / sqrt (13.929 * SQR (decayXL) + SQR (decayY)));
double decay15LT = 1.07854 * ((decayXL * decayYT) / sqrt (0.07179 * SQR (decayXL) + SQR (decayYT)));
double decay30LT = 1.15473 * ((decayXL * decayYT) / sqrt (0.33335 * SQR (decayXL) + SQR (decayYT)));
double decay60LT = 2. * ((decayXL * decayYT) / sqrt (3.0 * SQR (decayXL) + SQR (decayYT)));
double decay75LT = 3.86398 * ((decayXL * decayYT) / sqrt (13.929 * SQR (decayXL) + SQR (decayYT)));
double decay15T = 1.07854 * ((decayX * decayYT) / sqrt (0.07179 * SQR (decayX) + SQR (decayYT)));
double decay30T = 1.15473 * ((decayX * decayYT) / sqrt (0.33335 * SQR (decayX) + SQR (decayYT)));
double decay60T = 2. * ((decayX * decayYT) / sqrt (3.0 * SQR (decayX) + SQR (decayYT)));
double decay75T = 3.86398 * ((decayX * decayYT) / sqrt (13.929 * SQR (decayX) + SQR (decayYT)));
double decay45 = (1.414 * decayX * decayY) / sqrt (SQR (decayX) + SQR (decayY));
double decay45L = (1.414 * decayXL * decayY) / sqrt (SQR (decayXL) + SQR (decayY));
double decay45LT = (1.414 * decayXL * decayYT) / sqrt (SQR (decayXL) + SQR (decayYT));
double decay45T = (1.414 * decayX * decayYT) / sqrt (SQR (decayX) + SQR (decayYT));
//printf("decayX=%f decayY=%f decay10=%f decay45=%f oriX=%i origY=%i\n", decayX, decayY, decay10, decay45, origin.x, origin.y);
updateBeziers (visibleGeometry.at (5), decayX, decay15 , decay30, 0., 15., 30.);
updateBeziers (mouseOverGeometry.at (5), decayX, decay15 , decay30, 0., 15., 30.);
updateBeziers (visibleGeometry.at (6), decay30, decay45 , decay60, 30., 45., 60.);
updateBeziers (mouseOverGeometry.at (6), decay30, decay45 , decay60, 30., 45., 60.);
updateBeziers (visibleGeometry.at (7), decay60, decay75 , decayY, 60., 75., 90.);
updateBeziers (mouseOverGeometry.at (7), decay60, decay75 , decayY, 60., 75., 90.);
updateBeziers (visibleGeometry.at (8), decayY, decay75L , decay60L, 90., 105., 120.);
updateBeziers (mouseOverGeometry.at (8), decayY, decay75L , decay60L, 90., 105., 120.);
updateBeziers (visibleGeometry.at (9), decay60L, decay45L , decay30L, 120., 135., 150.);
updateBeziers (mouseOverGeometry.at (9), decay60L, decay45L , decay30L, 120., 135., 150.);
updateBeziers (visibleGeometry.at (10), decay30L, decay15L , decayXL, 150., 165., 180.);
updateBeziers (mouseOverGeometry.at (10), decay30L, decay15L , decayXL, 150., 165., 180.);
updateBeziers (visibleGeometry.at (11), decayXL, decay15LT , decay30LT, 180., 195., 210.);
updateBeziers (mouseOverGeometry.at (11), decayXL, decay15LT , decay30LT, 180., 195., 210.);
updateBeziers (visibleGeometry.at (12), decay30LT, decay45LT , decay60LT, 210., 225., 240.);
updateBeziers (mouseOverGeometry.at (12), decay30LT, decay45LT , decay60LT, 210., 225., 240.);
updateBeziers (visibleGeometry.at (13), decay60LT, decay75LT , decayYT, 240., 255., 270.);
updateBeziers (mouseOverGeometry.at (13), decay60LT, decay75LT , decayYT, 240., 255., 270.);
updateBeziers (visibleGeometry.at (14), decayYT, decay75T , decay60T, 270., 285., 300.);
updateBeziers (mouseOverGeometry.at (14), decayYT, decay75T , decay60T, 270., 285., 300.);
updateBeziers (visibleGeometry.at (15), decay60T, decay45T , decay30T, 300., 315., 330.);
updateBeziers (mouseOverGeometry.at (15), decay60T, decay45T , decay30T, 300., 315., 330.);
updateBeziers (visibleGeometry.at (16), decay30T, decay15T , decayX, 330., 345., 360.);
updateBeziers (mouseOverGeometry.at (16), decay30T, decay15T , decayX, 330., 345., 360.);
}
// updateArcellipse (visibleGeometry.at (5), decayX, decayY, 0., 0.5);
// updateArcellipse (mouseOverGeometry.at (5), decayX, decayY, 0., 0.5);
}
@@ -2963,13 +3212,16 @@ bool Locallab::mouseOver (int modifierKey)
if (lastObject == 2 || lastObject == 3) {
EditSubscriber::visibleGeometry.at (2)->state = Geometry::NORMAL;
EditSubscriber::visibleGeometry.at (3)->state = Geometry::NORMAL;
} else if (lastObject == 0 || lastObject == 1) {
EditSubscriber::visibleGeometry.at (0)->state = Geometry::NORMAL;
EditSubscriber::visibleGeometry.at (1)->state = Geometry::NORMAL;
}
else {
EditSubscriber::visibleGeometry.at (lastObject)->state = Geometry::NORMAL;
EditSubscriber::visibleGeometry.at (4)->state = Geometry::NORMAL;
// EditSubscriber::visibleGeometry.at (lastObject)->state = Geometry::NORMAL;
}
}
@@ -2977,13 +3229,16 @@ bool Locallab::mouseOver (int modifierKey)
if (editProvider->object == 2 || editProvider->object == 3) {
EditSubscriber::visibleGeometry.at (2)->state = Geometry::PRELIGHT;
EditSubscriber::visibleGeometry.at (3)->state = Geometry::PRELIGHT;
} else if (editProvider->object == 0 || editProvider->object == 1) {
EditSubscriber::visibleGeometry.at (0)->state = Geometry::PRELIGHT;
EditSubscriber::visibleGeometry.at (1)->state = Geometry::PRELIGHT;
}
else {
EditSubscriber::visibleGeometry.at (editProvider->object)->state = Geometry::PRELIGHT;
EditSubscriber::visibleGeometry.at (4)->state = Geometry::PRELIGHT;
// EditSubscriber::visibleGeometry.at (editProvider->object)->state = Geometry::PRELIGHT;
}
}
@@ -3039,6 +3294,7 @@ bool Locallab::button1Pressed (int modifierKey)
if (lastObject == 2) {
//draggedlocYOffset = -draggedlocYOffset;
draggedlocYOffset -= (locYT->getValue() / 2000. * verti);
}
} else if (lastObject == 3) {
// Dragging a line to change the angle
@@ -3062,6 +3318,7 @@ bool Locallab::button1Pressed (int modifierKey)
if (lastObject == 3) {
draggedlocYOffset = -draggedlocYOffset;
draggedlocYOffset -= (locY->getValue() / 2000. * verti);
}
}
@@ -3095,6 +3352,7 @@ bool Locallab::button1Pressed (int modifierKey)
if (Smethod->get_active_row_number() == 0 || Smethod->get_active_row_number() == 2) {
if (lastObject == 0) {
// Dragging a line to change the angle
PolarCoord draggedPoint;
rtengine::Coord currPos;
currPos = provider->posImage;
@@ -3110,12 +3368,13 @@ bool Locallab::button1Pressed (int modifierKey)
// draggedPoint.setFromCartesian(centerPos, currPos);
// compute the projected value of the dragged point
printf ("rad=%f ang=%f\n", draggedPoint.radius, draggedPoint.angle - degree->getValue());
//printf ("rad=%f ang=%f\n", draggedPoint.radius, draggedPoint.angle - degree->getValue());
draggedlocXOffset = draggedPoint.radius * sin ((draggedPoint.angle - degree->getValue() + 90.) / 180.*M_PI);
// if (lastObject==1)
// draggedlocXOffset = -draggedlocXOffset;//-
draggedlocXOffset -= (locX->getValue() / 2000. * horiz);
} else if (lastObject == 1) {
// Dragging a line to change the angle
PolarCoord draggedPoint;
rtengine::Coord currPos;
@@ -3128,7 +3387,7 @@ bool Locallab::button1Pressed (int modifierKey)
draggedPoint = currPos - centerPos;
// draggedPoint.setFromCartesian(centerPos, currPos);
printf ("rad=%f ang=%f\n", draggedPoint.radius, draggedPoint.angle - degree->getValue());
// printf ("rad=%f ang=%f\n", draggedPoint.radius, draggedPoint.angle - degree->getValue());
draggedlocXOffset = draggedPoint.radius * sin ((draggedPoint.angle - degree->getValue() + 90.) / 180.*M_PI);
if (lastObject == 1) {
@@ -3152,7 +3411,7 @@ bool Locallab::button1Pressed (int modifierKey)
draggedPoint = currPos - centerPos;
// draggedPoint.setFromCartesian(centerPos, currPos);
printf ("rad=%f ang=%f\n", draggedPoint.radius, draggedPoint.angle - degree->getValue());
//printf ("rad=%f ang=%f\n", draggedPoint.radius, draggedPoint.angle - degree->getValue());
draggedlocXOffset = draggedPoint.radius * sin ((draggedPoint.angle - degree->getValue() + 90.) / 180.*M_PI);
if (lastObject == 1) {
@@ -3220,8 +3479,10 @@ bool Locallab::button1Pressed (int modifierKey)
if (lastObject == 0 || lastObject == 1) {
EditSubscriber::visibleGeometry.at (0)->state = Geometry::NORMAL;
EditSubscriber::visibleGeometry.at (1)->state = Geometry::NORMAL;
} else {
EditSubscriber::visibleGeometry.at (lastObject)->state = Geometry::NORMAL;
EditSubscriber::visibleGeometry.at (4)->state = Geometry::NORMAL;
// EditSubscriber::visibleGeometry.at (lastObject)->state = Geometry::NORMAL;
}
}
@@ -3385,7 +3646,7 @@ bool Locallab::drag1 (int modifierKey)
if (Smethod->get_active_row_number() == 0 || Smethod->get_active_row_number() == 2) {
//else if (lastObject==0) {
if (lastObject == 0) {
if (lastObject == 0) {// >=4
// Dragging the upper or lower locY bar
PolarCoord draggedPoint;
rtengine::Coord currPos;
@@ -3401,7 +3662,7 @@ bool Locallab::drag1 (int modifierKey)
// draggedPoint.setFromCartesian(centerPos, currPos);
double currDraggedStrOffset = draggedPoint.radius * sin ((draggedPoint.angle - degree->getValue() + 90.) / 180.*M_PI);
if (lastObject == 0)
if (lastObject == 0) //>=4
// Dragging the upper locY bar
{
currDraggedStrOffset -= draggedlocXOffset;

View File

@@ -441,6 +441,7 @@ void Options::setDefaults ()
UseIconNoText = true;
whiteBalanceSpotSize = 8;
showFilmStripToolBar = false;
showdelimspot = false;
menuGroupRank = true;
menuGroupLabel = true;
menuGroupFileOperations = true;
@@ -1474,6 +1475,10 @@ int Options::readFromFile (Glib::ustring fname)
showFilmStripToolBar = keyFile.get_boolean ("GUI", "ShowFilmStripToolBar");
}
if (keyFile.has_key ("GUI", "Showdelimspot")) {
showdelimspot = keyFile.get_boolean ("GUI", "Showdelimspot");
}
if (keyFile.has_key ("GUI", "FileBrowserToolbarSingleRow")) {
FileBrowserToolbarSingleRow = keyFile.get_boolean ("GUI", "FileBrowserToolbarSingleRow");
}
@@ -2101,6 +2106,7 @@ int Options::saveToFile (Glib::ustring fname)
keyFile.set_integer ("GUI", "NavigatorRGBUnit", (int)navRGBUnit);
keyFile.set_integer ("GUI", "NavigatorHSVUnit", (int)navHSVUnit);
keyFile.set_boolean ("GUI", "ShowFilmStripToolBar", showFilmStripToolBar);
keyFile.set_boolean ("GUI", "Showdelimspot", showdelimspot);
keyFile.set_boolean ("GUI", "FileBrowserToolbarSingleRow", FileBrowserToolbarSingleRow);
keyFile.set_boolean ("GUI", "HideTPVScrollbar", hideTPVScrollbar);
keyFile.set_boolean ("GUI", "UseIconNoText", UseIconNoText);

View File

@@ -226,6 +226,7 @@ public:
int curvebboxpos; // 0=above, 1=right, 2=below, 3=left
bool showFilmStripToolBar;
bool showdelimspot;
// Performance options
Glib::ustring clutsDir;

View File

@@ -993,11 +993,28 @@ Gtk::Widget* Preferences::getGeneralPanel ()
workflowGrid->attach_next_to (*ckbHideTPVScrollbar, *hb4label, Gtk::POS_RIGHT, 1, 1);
workflowGrid->attach_next_to (*ckbUseIconNoText, *ckbHideTPVScrollbar, Gtk::POS_RIGHT, 1, 1);
fworklflow->add (*workflowGrid);
mvbsd->attach_next_to (*fworklflow, Gtk::POS_TOP, 2, 1);
// ---------------------------------------------
Gtk::Frame* flocal = Gtk::manage ( new Gtk::Frame (M ("PREFERENCES_LOCAL")) );
setExpandAlignProperties (flocal, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START);
Gtk::Grid* localGrid = Gtk::manage ( new Gtk::Grid() );
localGrid->set_column_spacing (4);
localGrid->set_row_spacing (4);
setExpandAlignProperties (localGrid, false, false, Gtk::ALIGN_FILL, Gtk::ALIGN_BASELINE);
ckbShowdelimspot = Gtk::manage ( new Gtk::CheckButton (M ("PREFERENCES_LOCALSHOWDELIMSPOT")) );
setExpandAlignProperties (ckbShowdelimspot, false, false, Gtk::ALIGN_START, Gtk::ALIGN_START);
localGrid->attach_next_to (*ckbShowdelimspot, Gtk::POS_LEFT, 3, 1);
flocal->add (*localGrid);
mvbsd->attach_next_to (*flocal, *fworklflow, Gtk::POS_BOTTOM, 2, 1);
// ---------------------------------------------
Gtk::Frame* flang = Gtk::manage ( new Gtk::Frame (M ("PREFERENCES_DEFAULTLANG")) );
setExpandAlignProperties (flang, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START);
Gtk::Grid* langGrid = Gtk::manage ( new Gtk::Grid() );
@@ -1029,7 +1046,8 @@ Gtk::Widget* Preferences::getGeneralPanel ()
langGrid->attach_next_to (*languages, *langlab, Gtk::POS_RIGHT, 1, 1);
langGrid->attach_next_to (*langw, *languages, Gtk::POS_RIGHT, 1, 1);
flang->add (*langGrid);
mvbsd->attach_next_to (*flang, *fworklflow, Gtk::POS_BOTTOM, 2, 1);
// mvbsd->attach_next_to (*flang, *fworklflow, Gtk::POS_BOTTOM, 2, 1);
mvbsd->attach_next_to (*flang, *flocal, Gtk::POS_BOTTOM, 2, 1);
// ---------------------------------------------
@@ -1781,6 +1799,7 @@ void Preferences::storePreferences ()
moptions.histogramPosition = ckbHistogramPositionLeft->get_active() ? 1 : 2;
moptions.FileBrowserToolbarSingleRow = ckbFileBrowserToolbarSingleRow->get_active();
moptions.showFilmStripToolBar = ckbShowFilmStripToolBar->get_active();
moptions.showdelimspot = ckbShowdelimspot->get_active();
moptions.hideTPVScrollbar = ckbHideTPVScrollbar->get_active();
moptions.overwriteOutputFile = chOverwriteOutputFile->get_active ();
moptions.UseIconNoText = ckbUseIconNoText->get_active();
@@ -1988,6 +2007,7 @@ void Preferences::fillPreferences ()
// ckbHistogramWorking->set_active(moptions.histogramWorking==1);
ckbFileBrowserToolbarSingleRow->set_active (moptions.FileBrowserToolbarSingleRow);
ckbShowFilmStripToolBar->set_active (moptions.showFilmStripToolBar);
ckbShowdelimspot->set_active (moptions.showdelimspot);
ckbHideTPVScrollbar->set_active (moptions.hideTPVScrollbar);
ckbUseIconNoText->set_active (moptions.UseIconNoText);

View File

@@ -200,6 +200,7 @@ class Preferences : public Gtk::Dialog, public ProfileStoreListener
Gtk::CheckButton* ckbHistogramWorking;
Gtk::CheckButton* ckbFileBrowserToolbarSingleRow;
Gtk::CheckButton* ckbShowFilmStripToolBar;
Gtk::CheckButton* ckbShowdelimspot;
Gtk::CheckButton* ckbHideTPVScrollbar;
Gtk::CheckButton* ckbUseIconNoText;