227{
228
229
230 gc.save();
231
232 gc.setOpacity(
m_d->transaction.basePreviewOpacity());
233 gc.setTransform(
m_d->paintingTransform,
true);
234 gc.drawImage(
m_d->paintingOffset,
m_d->transformedImage);
235
236 gc.restore();
237
238
239 gc.save();
240 gc.setTransform(
m_d->handlesTransform,
true);
241
242 if (
m_d->drawConnectionLines) {
243 gc.setOpacity(0.5);
244
246 m_d->currentArgs.origPoints(),
247 m_d->currentArgs.transfPoints(),
248 m_d->currentArgs.isEditingTransformPoints());
249 }
250
251
252 QPen mainPen(Qt::black);
253 mainPen.setCosmetic(true);
255 QPen outlinePen(Qt::white);
256 outlinePen.setCosmetic(true);
258
259
260 {
261 const int numPoints =
m_d->currentArgs.origPoints().size();
262
263
264
266
267 qreal dstIn = 8 / handlesExtraScale;
268 qreal dstOut = 10 / handlesExtraScale;
269 qreal srcIn = 6 / handlesExtraScale;
270 qreal srcOut = 6 / handlesExtraScale;
271
272 QRectF handleRect1(-0.5 * dstIn, -0.5 * dstIn, dstIn, dstIn);
273 QRectF handleRect2(-0.5 * dstOut, -0.5 * dstOut, dstOut, dstOut);
274
275 if (
m_d->drawTransfPoints) {
276 gc.setOpacity(1.0);
277
278 for (int i = 0; i < numPoints; ++i) {
279 gc.setPen(outlinePen);
280 gc.drawEllipse(handleRect2.translated(
m_d->currentArgs.transfPoints()[i]));
281 gc.setPen(mainPen);
282 gc.drawEllipse(handleRect1.translated(
m_d->currentArgs.transfPoints()[i]));
283 }
284
285 QPointF center;
287
288 QBrush selectionBrush = selectedPoints.size() > 1 ? Qt::red : Qt::black;
289
290 QBrush oldBrush = gc.brush();
291 gc.setBrush(selectionBrush);
292 Q_FOREACH (const QPointF *pt, selectedPoints) {
293 gc.drawEllipse(handleRect1.translated(*pt));
294 }
295 gc.setBrush(oldBrush);
296
297 }
298
299 if (
m_d->drawOrigPoints) {
300 QPainterPath inLine;
301 inLine.moveTo(-0.5 * srcIn, 0);
302 inLine.lineTo( 0.5 * srcIn, 0);
303 inLine.moveTo( 0, -0.5 * srcIn);
304 inLine.lineTo( 0, 0.5 * srcIn);
305
306 QPainterPath outLine;
307 outLine.moveTo(-0.5 * srcOut, -0.5 * srcOut);
308 outLine.lineTo( 0.5 * srcOut, -0.5 * srcOut);
309 outLine.lineTo( 0.5 * srcOut, 0.5 * srcOut);
310 outLine.lineTo(-0.5 * srcOut, 0.5 * srcOut);
311 outLine.lineTo(-0.5 * srcOut, -0.5 * srcOut);
312
313 gc.setOpacity(0.5);
314
315 for (int i = 0; i < numPoints; ++i) {
316 gc.setPen(outlinePen);
317 gc.drawPath(outLine.translated(
m_d->currentArgs.origPoints()[i]));
318 gc.setPen(mainPen);
319 gc.drawPath(inLine.translated(
m_d->currentArgs.origPoints()[i]));
320 }
321 }
322
323 }
324
325
326 if (
m_d->currentArgs.warpCalculation() == KisWarpTransformWorker::WarpCalculation::GRID &&
328
329
330
331 const int numPoints =
m_d->currentArgs.origPoints().size();
332
333
334 int rowsInWarp = sqrt(
m_d->currentArgs.origPoints().size());
335
336
339
340
341 for (int i = 0; i < numPoints; i++) {
342 if (i != 0 && i % rowsInWarp == rowsInWarp -1) {
343
344 } else {
345 handlePainter.drawConnectionLine(
m_d->currentArgs.transfPoints()[i],
m_d->currentArgs.transfPoints()[i+1] );
346 }
347 }
348
349
350 for (int i = 0; i < numPoints; i++) {
351
352 if ( (numPoints - i - 1) < rowsInWarp ) {
353
354 } else {
355 handlePainter.drawConnectionLine(
m_d->currentArgs.transfPoints()[i],
m_d->currentArgs.transfPoints()[i+rowsInWarp] );
356 }
357 }
358
359 }
360
361 gc.restore();
362}
The KisHandlePainterHelper class is a special helper for painting handles around objects....
static KisHandleStyle & primarySelection()