1 /* 2 * Copyright 2009, Stephan Aßmus <superstippi@gmx.de>. All rights reserved. 3 * Distributed under the terms of the MIT License. 4 */ 5 6 #include "RotatePathIndicesCommand.h" 7 8 #include <stdio.h> 9 10 #include <Catalog.h> 11 #include <Locale.h> 12 13 #include "VectorPath.h" 14 15 16 #undef B_TRANSLATION_CONTEXT 17 #define B_TRANSLATION_CONTEXT "Icon-O-Matic-RotatePathIndiciesCmd" 18 19 20 RotatePathIndicesCommand::RotatePathIndicesCommand(VectorPath* path, 21 bool clockWise) 22 : 23 PathCommand(path), 24 fClockWise(clockWise) 25 { 26 } 27 28 29 RotatePathIndicesCommand::~RotatePathIndicesCommand() 30 { 31 } 32 33 34 status_t 35 RotatePathIndicesCommand::InitCheck() 36 { 37 status_t ret = PathCommand::InitCheck(); 38 if (ret == B_OK && fPath->CountPoints() < 2) 39 return B_NOT_SUPPORTED; 40 return ret; 41 } 42 43 44 status_t 45 RotatePathIndicesCommand::Perform() 46 { 47 return _Rotate(fClockWise); 48 } 49 50 51 status_t 52 RotatePathIndicesCommand::Undo() 53 { 54 return _Rotate(!fClockWise); 55 } 56 57 58 void 59 RotatePathIndicesCommand::GetName(BString& name) 60 { 61 name << B_TRANSLATE("Rotate path indices"); 62 } 63 64 65 status_t 66 RotatePathIndicesCommand::_Rotate(bool clockWise) 67 { 68 BPoint point; 69 BPoint pointIn; 70 BPoint pointOut; 71 bool connected; 72 73 int32 removeIndex; 74 int32 addIndex; 75 if (!clockWise) { 76 removeIndex = fPath->CountPoints() - 1; 77 addIndex = 0; 78 } else { 79 removeIndex = 0; 80 addIndex = fPath->CountPoints() - 1; 81 } 82 83 if (!fPath->GetPointsAt(removeIndex, point, pointIn, pointOut, &connected)) 84 return B_ERROR; 85 86 fPath->RemovePoint(removeIndex); 87 fPath->AddPoint(point, addIndex); 88 fPath->SetPoint(addIndex, point, pointIn, pointOut, connected); 89 90 return B_OK; 91 } 92 93