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