xref: /haiku/src/apps/icon-o-matic/shape/commands/RotatePathIndicesCommand.cpp (revision 22440f4105cafc95cc1d49f9bc65bb395c527d86)
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