Git commit c5621355279c211721a74e2d4affa0d322e3de9f by Sven Langkamp. Committed on 27/08/2016 at 08:50. Pushed by langkamp into branch 'krita-testing-wolthera'. Pick color from canvas directly if the cursor is over the canvas M +29 -0 libs/ui/widgets/kis_screen_color_picker.cpp http://commits.kde.org/krita/c5621355279c211721a74e2d4affa0d322e3de9f diff --git a/libs/ui/widgets/kis_screen_color_picker.cpp b/libs/ui/widgets/= kis_screen_color_picker.cpp index b8f40ae..a7b89f2 100644 --- a/libs/ui/widgets/kis_screen_color_picker.cpp +++ b/libs/ui/widgets/kis_screen_color_picker.cpp @@ -29,6 +29,9 @@ = #include "kis_icon.h" #include "kis_screen_color_picker.h" +#include "KisMainWindow.h" +#include +#include "kis_wrapped_rect.h" = struct KisScreenColorPicker::Private { @@ -119,6 +122,32 @@ void KisScreenColorPicker::setCurrentColor(KoColor c) = KoColor KisScreenColorPicker::grabScreenColor(const QPoint &p) { + QWidget* topLevelWidget =3D parentWidget(); + while (topLevelWidget->parentWidget()) + topLevelWidget =3D topLevelWidget->parentWidget(); + + KisMainWindow* window =3D dynamic_cast(topLevelWidget); + KisView* activeView =3D window->activeView(); + if(activeView) { + QWidget* canvasWidget =3D activeView->canvasBase()->canvasWidget(); + QPoint widgetPoint =3D canvasWidget->mapFromGlobal(p); + + if(canvasWidget->rect().contains(widgetPoint)) + { + QPointF imagePoint =3D activeView->canvasBase()->coordinatesCo= nverter()->widgetToImage(widgetPoint); + KisImageWSP image =3D activeView->image(); + if(image) + { + if (activeView->image()->wrapAroundModePermitted()) { + imagePoint =3D KisWrappedRect::ptToWrappedPt(imagePoin= t.toPoint(), image->bounds()); + } + KoColor pickedColor =3D KoColor(); + image->projection()->pixel(imagePoint.x(), imagePoint.y(),= &pickedColor); + return pickedColor; + } + } + } + const QDesktopWidget *desktop =3D QApplication::desktop(); const QPixmap pixmap =3D QGuiApplication::screens().at(desktop->screen= Number())->grabWindow(desktop->winId(), = p.x(), p.y(), 1, 1);