[kandinsky/context] getPixel only if in the clipping rect

Fixes the redrawing of RoundCursorView when its frame overlaps the
clipping rect.
This commit is contained in:
Ruben Dashyan
2020-01-31 17:18:58 +01:00
committed by Léa Saviot
parent 7b8f7007c4
commit 8d3f86c77f
3 changed files with 6 additions and 8 deletions

View File

@@ -12,7 +12,7 @@ public:
// Pixel manipulation
void setPixel(KDPoint p, KDColor c);
KDColor getPixel(KDPoint p);
void getPixel(KDPoint p, KDColor * pixel);
void getPixels(KDRect r, KDColor * pixels);
// Text

View File

@@ -7,14 +7,11 @@ void KDContext::setPixel(KDPoint p, KDColor c) {
}
}
KDColor KDContext::getPixel(KDPoint p) {
void KDContext::getPixel(KDPoint p, KDColor * pixel) {
KDPoint absolutePoint = p.translatedBy(m_origin);
if (m_clippingRect.contains(absolutePoint)) {
KDColor result = KDColorBlack;
pullRect(KDRect(absolutePoint, 1, 1), &result);
return result;
pullRect(KDRect(absolutePoint, 1, 1), pixel);
}
return KDColorBlack;
}
void KDContext::getPixels(KDRect r, KDColor * pixels) {
@@ -28,7 +25,7 @@ void KDContext::getPixels(KDRect r, KDColor * pixels) {
KDCoordinate xMax = r.x()+r.width();
for (int y = r.y(); y < yMax; y++) {
for (int x = r.x(); x < xMax; x++) {
pixels[i++] = getPixel(KDPoint(x, y));
getPixel(KDPoint(x, y), pixels + (i++));
}
}
}

View File

@@ -51,7 +51,8 @@ mp_obj_t modkandinsky_color(mp_obj_t red, mp_obj_t green, mp_obj_t blue) {
mp_obj_t modkandinsky_get_pixel(mp_obj_t x, mp_obj_t y) {
KDPoint point(mp_obj_get_int(x), mp_obj_get_int(y));
KDColor c = KDIonContext::sharedContext()->getPixel(point);
KDColor c;
KDIonContext::sharedContext()->getPixel(point, &c);
return TupleForRGB(c.red(), c.green(), c.blue());
}