Fix for review remarks
This commit is contained in:
parent
b73840cf3c
commit
77fefe90b3
@ -1961,8 +1961,8 @@ void CropWindow::expose (Cairo::RefPtr<Cairo::Context> cr)
|
|||||||
// drawing to the "mouse over" channel
|
// drawing to the "mouse over" channel
|
||||||
const auto mouseOverGeom = editSubscriber->getMouseOverGeometry();
|
const auto mouseOverGeom = editSubscriber->getMouseOverGeometry();
|
||||||
if (mouseOverGeom.size()) {
|
if (mouseOverGeom.size()) {
|
||||||
if (mouseOverGeom.size() > 65534) {
|
if (mouseOverGeom.size() > 255) {
|
||||||
// once it has been switched to OM_65535, it won't return back to OM_255
|
// Once it has been switched to OM_65535, it won't return back to OM_255
|
||||||
// to avoid constant memory allocations in some particular situation.
|
// to avoid constant memory allocations in some particular situation.
|
||||||
// It will return to OM_255 on a new editing session
|
// It will return to OM_255 on a new editing session
|
||||||
setObjectMode(OM_65535);
|
setObjectMode(OM_65535);
|
||||||
|
@ -42,14 +42,14 @@ void ObjectMOBuffer::setObjectMode(ObjectMode newType)
|
|||||||
switch (newType) {
|
switch (newType) {
|
||||||
case (OM_255):
|
case (OM_255):
|
||||||
if (objectMode==OM_65535) {
|
if (objectMode==OM_65535) {
|
||||||
objectMap->unreference();
|
objectMap.clear();
|
||||||
objectMap = Cairo::ImageSurface::create(Cairo::FORMAT_A8, w, h);
|
objectMap = Cairo::ImageSurface::create(Cairo::FORMAT_A8, w, h);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case (OM_65535):
|
case (OM_65535):
|
||||||
if (objectMode==OM_255) {
|
if (objectMode==OM_255) {
|
||||||
objectMap->unreference();
|
objectMap.clear();
|
||||||
objectMap = Cairo::ImageSurface::create(Cairo::FORMAT_RGB16_565, w, h);
|
objectMap = Cairo::ImageSurface::create(Cairo::FORMAT_RGB16_565, w, h);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -108,9 +108,11 @@ int ObjectMOBuffer::getObjectID(const rtengine::Coord& location)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (objectMode == OM_255) {
|
if (objectMode == OM_255) {
|
||||||
id = (unsigned char)(*( objectMap->get_data() + location.y * objectMap->get_stride() + location.x ));
|
// In OM_255 mode, size of pixel is 1 Byte (i.e. size of uint8_t)
|
||||||
|
memcpy(&id, ( objectMap->get_data() + location.y * objectMap->get_stride() + sizeof(std::uint8_t) * location.x ), sizeof(std::uint8_t));
|
||||||
} else {
|
} else {
|
||||||
id = (unsigned short)(*( objectMap->get_data() + location.y * objectMap->get_stride() + location.x ));
|
// In OM_65535 mode, size of pixel is 2 Bytes (i.e. size of uint16_t)
|
||||||
|
memcpy(&id, ( objectMap->get_data() + location.y * objectMap->get_stride() + sizeof(std::uint16_t) * location.x ), sizeof(std::uint16_t));
|
||||||
}
|
}
|
||||||
|
|
||||||
return id - 1;
|
return id - 1;
|
||||||
|
@ -67,6 +67,29 @@ RGBColor Geometry::getOuterLineColor ()
|
|||||||
return color;
|
return color;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Geometry::setMOChannelColor(Cairo::RefPtr<Cairo::Context> &cr, ObjectMOBuffer *objectBuffer, unsigned short id)
|
||||||
|
{
|
||||||
|
switch (objectBuffer->getObjectMode()) {
|
||||||
|
case OM_255:
|
||||||
|
/* In OM_255 mode, FORMAT_A8 format is used:
|
||||||
|
- Alpha is represented with 8 bits (mask = 0xFF) from 0 to 255
|
||||||
|
*/
|
||||||
|
cr->set_source_rgba (0., 0., 0., ((id + 1) & 0xFF) / 255.);
|
||||||
|
break;
|
||||||
|
case OM_65535:
|
||||||
|
default:
|
||||||
|
/* In OM_65535 mode, FORMAT_RGB16_565 format is used:
|
||||||
|
- Red is represented with 5 bits (mask = 0xF800, left shift = 11) from 0 to 31
|
||||||
|
- Green is represented with 6 bits (mask = 0x7E0, left shift = 5) from 0 to 63
|
||||||
|
- Blue is represented with 5 bits (mask = 0x1F) from 0 to 31
|
||||||
|
*/
|
||||||
|
const double red = (((id + 1) & 0xF800) >> 11) / 31.;
|
||||||
|
const double green = (((id + 1) & 0x7E0) >> 5) / 63.;
|
||||||
|
const double blue = ((id + 1) & 0x1F) / 31.;
|
||||||
|
cr->set_source_rgb (red, green, blue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef GUIVERSION
|
#ifdef GUIVERSION
|
||||||
|
|
||||||
void Circle::drawOuterGeometry(Cairo::RefPtr<Cairo::Context> &cr, ObjectMOBuffer *objectBuffer, EditCoordSystem &coordSystem)
|
void Circle::drawOuterGeometry(Cairo::RefPtr<Cairo::Context> &cr, ObjectMOBuffer *objectBuffer, EditCoordSystem &coordSystem)
|
||||||
@ -169,12 +192,9 @@ void Circle::drawToMOChannel (Cairo::RefPtr<Cairo::Context> &cr, unsigned short
|
|||||||
center_ += objectBuffer->getDataProvider()->posScreen + objectBuffer->getDataProvider()->deltaScreen;
|
center_ += objectBuffer->getDataProvider()->posScreen + objectBuffer->getDataProvider()->deltaScreen;
|
||||||
}
|
}
|
||||||
|
|
||||||
// setting the color to the objet's ID
|
// Setting MO Channel color according to the objet's ID
|
||||||
if (objectBuffer->getObjectMode() == OM_255) {
|
setMOChannelColor(cr, objectBuffer, id);
|
||||||
cr->set_source_rgba (0., 0., 0., ((id + 1) & 0xFF) / 255.);
|
|
||||||
} else {
|
|
||||||
cr->set_source_rgba (0., 0., 0., (id + 1) / 65535.);
|
|
||||||
}
|
|
||||||
cr->arc(center_.x + 0.5, center_.y + 0.5, radius_, 0, 2.*rtengine::RT_PI);
|
cr->arc(center_.x + 0.5, center_.y + 0.5, radius_, 0, 2.*rtengine::RT_PI);
|
||||||
|
|
||||||
if (filled) {
|
if (filled) {
|
||||||
@ -291,12 +311,9 @@ void Line::drawToMOChannel(Cairo::RefPtr<Cairo::Context> &cr, unsigned short id,
|
|||||||
end_ += objectBuffer->getDataProvider()->posScreen + objectBuffer->getDataProvider()->deltaScreen;
|
end_ += objectBuffer->getDataProvider()->posScreen + objectBuffer->getDataProvider()->deltaScreen;
|
||||||
}
|
}
|
||||||
|
|
||||||
// setting the color to the objet's ID
|
// Setting MO Channel color according to the objet's ID
|
||||||
if (objectBuffer->getObjectMode() == OM_255) {
|
setMOChannelColor(cr, objectBuffer, id);
|
||||||
cr->set_source_rgba (0., 0., 0., ((id + 1) & 0xFF) / 255.);
|
|
||||||
} else {
|
|
||||||
cr->set_source_rgba (0., 0., 0., (id + 1) / 65535.);
|
|
||||||
}
|
|
||||||
cr->move_to(begin_.x + 0.5, begin_.y + 0.5);
|
cr->move_to(begin_.x + 0.5, begin_.y + 0.5);
|
||||||
cr->line_to(end_.x + 0.5, end_.y + 0.5);
|
cr->line_to(end_.x + 0.5, end_.y + 0.5);
|
||||||
cr->stroke();
|
cr->stroke();
|
||||||
@ -433,12 +450,8 @@ void Polyline::drawToMOChannel (Cairo::RefPtr<Cairo::Context> &cr, unsigned shor
|
|||||||
if ((flags & F_HOVERABLE) && points.size() > 1) {
|
if ((flags & F_HOVERABLE) && points.size() > 1) {
|
||||||
rtengine::Coord currPos;
|
rtengine::Coord currPos;
|
||||||
|
|
||||||
// setting the color to the objet's ID
|
// Setting MO Channel color according to the objet's ID
|
||||||
if (objectBuffer->getObjectMode() == OM_255) {
|
setMOChannelColor(cr, objectBuffer, id);
|
||||||
cr->set_source_rgba (0., 0., 0., ((id + 1) & 0xFF) / 255.);
|
|
||||||
} else {
|
|
||||||
cr->set_source_rgba (0., 0., 0., (id + 1) / 65535.);
|
|
||||||
}
|
|
||||||
|
|
||||||
cr->set_line_width( getMouseOverLineWidth() );
|
cr->set_line_width( getMouseOverLineWidth() );
|
||||||
cr->set_line_cap(Cairo::LINE_CAP_ROUND);
|
cr->set_line_cap(Cairo::LINE_CAP_ROUND);
|
||||||
@ -628,12 +641,9 @@ void EditRectangle::drawToMOChannel(Cairo::RefPtr<Cairo::Context> &cr, unsigned
|
|||||||
br = bottomRight + objectBuffer->getDataProvider()->posScreen + objectBuffer->getDataProvider()->deltaScreen;
|
br = bottomRight + objectBuffer->getDataProvider()->posScreen + objectBuffer->getDataProvider()->deltaScreen;
|
||||||
}
|
}
|
||||||
|
|
||||||
// setting the color to the objet's ID
|
// Setting MO Channel color according to the objet's ID
|
||||||
if (objectBuffer->getObjectMode() == OM_255) {
|
setMOChannelColor(cr, objectBuffer, id);
|
||||||
cr->set_source_rgba (0., 0., 0., ((id + 1) & 0xFF) / 255.);
|
|
||||||
} else {
|
|
||||||
cr->set_source_rgba (0., 0., 0., (id + 1) / 65535.);
|
|
||||||
}
|
|
||||||
cr->rectangle(tl.x + 0.5, tl.y + 0.5, br.x - tl.x, br.y - tl.y);
|
cr->rectangle(tl.x + 0.5, tl.y + 0.5, br.x - tl.x, br.y - tl.y);
|
||||||
|
|
||||||
if (filled) {
|
if (filled) {
|
||||||
@ -880,6 +890,9 @@ void Ellipse::drawToMOChannel (Cairo::RefPtr<Cairo::Context> &cr, unsigned short
|
|||||||
center_ += objectBuffer->getDataProvider()->posScreen + objectBuffer->getDataProvider()->deltaScreen;
|
center_ += objectBuffer->getDataProvider()->posScreen + objectBuffer->getDataProvider()->deltaScreen;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Setting MO Channel color according to the objet's ID
|
||||||
|
setMOChannelColor(cr, objectBuffer, id);
|
||||||
|
|
||||||
if (radYT_ > 0 && radY_ > 0 && radXL_ > 0 && radX_ > 0) {
|
if (radYT_ > 0 && radY_ > 0 && radXL_ > 0 && radX_ > 0) {
|
||||||
// To have an ellipse with radius of (radX, radX), a circle of radius 1. shall be twisted with a scale
|
// To have an ellipse with radius of (radX, radX), a circle of radius 1. shall be twisted with a scale
|
||||||
// of radX for x-axis, radY for y-axis
|
// of radX for x-axis, radY for y-axis
|
||||||
@ -1110,12 +1123,9 @@ void OPIcon::drawMOImage(std::shared_ptr<RTSurface> &img, Cairo::RefPtr<Cairo::C
|
|||||||
rtengine::Coord tl, br; // Coordinate of the rectangle in the CropBuffer coordinate system
|
rtengine::Coord tl, br; // Coordinate of the rectangle in the CropBuffer coordinate system
|
||||||
drivenPointToRectangle(pos, tl, br, imgW, imgH);
|
drivenPointToRectangle(pos, tl, br, imgW, imgH);
|
||||||
|
|
||||||
// drawing the lower byte's value
|
// Setting MO Channel color according to the objet's ID
|
||||||
if (objectBuffer->getObjectMode() == OM_255) {
|
setMOChannelColor(cr, objectBuffer, id);
|
||||||
cr->set_source_rgba (0., 0., 0., ((id + 1) & 0xFF) / 255.);
|
|
||||||
} else {
|
|
||||||
cr->set_source_rgba (0., 0., 0., (id + 1) / 65535.);
|
|
||||||
}
|
|
||||||
cr->set_line_width(0.);
|
cr->set_line_width(0.);
|
||||||
cr->rectangle(tl.x, tl.y, imgW, imgH);
|
cr->rectangle(tl.x, tl.y, imgW, imgH);
|
||||||
cr->fill();
|
cr->fill();
|
||||||
|
@ -234,6 +234,9 @@ protected:
|
|||||||
RGBColor outerLineColor;
|
RGBColor outerLineColor;
|
||||||
short flags;
|
short flags;
|
||||||
|
|
||||||
|
// Set MO Channel color according to Edit Widget id and MO Channel mode
|
||||||
|
static void setMOChannelColor (Cairo::RefPtr<Cairo::Context> &cr, ObjectMOBuffer *objectBuffer, unsigned short id);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
float innerLineWidth; // ...outerLineWidth = innerLineWidth+2
|
float innerLineWidth; // ...outerLineWidth = innerLineWidth+2
|
||||||
Datum datum;
|
Datum datum;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user