void StandbyState::Decorator::postRenderDecorator(EditorPostRender* render) { Editor* editor = render->getEditor(); // Draw transformation handles (if the mask is visible and isn't frozen). if (editor->isActive() && editor->editorFlags() & Editor::kShowMask && editor->document()->isMaskVisible() && !editor->document()->mask()->isFrozen()) { // And draw only when the user has a selection tool as active tool. tools::Ink* ink = editor->getCurrentEditorInk(); if (ink->isSelection()) getTransformHandles(editor)->drawHandles(editor, m_standbyState->getTransformation(editor)); } // Draw transformation handles (if the mask is visible and isn't frozen). gfx::Rect box1, box2; if (StandbyState::Decorator::getSymmetryHandles(editor, box1, box2)) { skin::SkinTheme* theme = static_cast<skin::SkinTheme*>(CurrentTheme::get()); she::Surface* part = theme->parts.transformationHandle()->bitmap(0); ScreenGraphics g; g.drawRgbaSurface(part, box1.x, box1.y); g.drawRgbaSurface(part, box2.x, box2.y); } }
void TransformHandles::drawHandles(Editor* editor, const gfx::Transformation& transform) { ScreenGraphics g; fixmath::fixed angle = fixmath::ftofix(128.0 * transform.angle() / PI); gfx::Transformation::Corners corners; transform.transformBox(corners); std::vector<gfx::Point> screenPoints(corners.size()); for (size_t c=0; c<corners.size(); ++c) screenPoints[c] = editor->editorToScreen( gfx::Point((int)corners[c].x, (int)corners[c].y)); // TODO DO NOT COMMIT #if 0 // Uncomment this if you want to see the bounds in red (only for debugging purposes) // ----------------------------------------------- { gfx::Point a(transform.bounds().getOrigin()), b(transform.bounds().getPoint2()); a = editor->editorToScreen(a); b = editor->editorToScreen(b); g.drawRect(gfx::rgba(255, 0, 0), gfx::Rect(a, b)); a = transform.pivot(); a = editor->editorToScreen(a); g.drawRect(gfx::rgba(255, 0, 0), gfx::Rect(a.x-2, a.y-2, 5, 5)); } // ----------------------------------------------- #endif // Draw corner handle for (size_t c=0; c<HANDLES; ++c) { drawHandle(&g, (screenPoints[handles_info[c].i1].x+screenPoints[handles_info[c].i2].x)/2, (screenPoints[handles_info[c].i1].y+screenPoints[handles_info[c].i2].y)/2, angle + handles_info[c].angle); } // Draw the pivot if (visiblePivot(angle)) { gfx::Rect pivotBounds = getPivotHandleBounds(editor, transform, corners); SkinTheme* theme = static_cast<SkinTheme*>(CurrentTheme::get()); she::Surface* part = theme->parts.pivotHandle()->getBitmap(0); g.drawRgbaSurface(part, pivotBounds.x, pivotBounds.y); } }