add (option) Bezier spot delimiters
This commit is contained in:
321
rtgui/edit.cc
321
rtgui/edit.cc
@@ -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) {
|
||||
|
Reference in New Issue
Block a user