/* * Copyright 2009, Stephan Aßmus . All rights reserved. * Distributed under the terms of the MIT License. */ #include "RotatePathIndicesCommand.h" #include #include #include #include "VectorPath.h" #undef B_TRANSLATION_CONTEXT #define B_TRANSLATION_CONTEXT "Icon-O-Matic-RotatePathIndiciesCmd" RotatePathIndicesCommand::RotatePathIndicesCommand(VectorPath* path, bool clockWise) : PathCommand(path), fClockWise(clockWise) { } RotatePathIndicesCommand::~RotatePathIndicesCommand() { } status_t RotatePathIndicesCommand::InitCheck() { status_t ret = PathCommand::InitCheck(); if (ret == B_OK && fPath->CountPoints() < 2) return B_NOT_SUPPORTED; return ret; } status_t RotatePathIndicesCommand::Perform() { return _Rotate(fClockWise); } status_t RotatePathIndicesCommand::Undo() { return _Rotate(!fClockWise); } void RotatePathIndicesCommand::GetName(BString& name) { name << B_TRANSLATE("Rotate path indices"); } status_t RotatePathIndicesCommand::_Rotate(bool clockWise) { BPoint point; BPoint pointIn; BPoint pointOut; bool connected; int32 removeIndex; int32 addIndex; if (!clockWise) { removeIndex = fPath->CountPoints() - 1; addIndex = 0; } else { removeIndex = 0; addIndex = fPath->CountPoints() - 1; } if (!fPath->GetPointsAt(removeIndex, point, pointIn, pointOut, &connected)) return B_ERROR; fPath->RemovePoint(removeIndex); fPath->AddPoint(point, addIndex); fPath->SetPoint(addIndex, point, pointIn, pointOut, connected); return B_OK; }