1/* 2 * Copyright 2006, Haiku. 3 * Distributed under the terms of the MIT License. 4 * 5 * Authors: 6 * Stephan Aßmus <superstippi@gmx.de> 7 */ 8 9#include "NudgePointsCommand.h" 10 11#include <new> 12#include <stdio.h> 13 14#include <Catalog.h> 15#include <Locale.h> 16 17#include "VectorPath.h" 18 19 20#undef B_TRANSLATION_CONTEXT 21#define B_TRANSLATION_CONTEXT "Icon-O-Matic-NudgePointsCommand" 22 23 24using std::nothrow; 25 26// constructor 27NudgePointsCommand::NudgePointsCommand(VectorPath* path, 28 const int32* indices, 29 const control_point* points, 30 int32 count) 31 : TransformCommand(B_ORIGIN, 32 B_ORIGIN, 33 0.0, 34 1.0, 35 1.0, 36 count > 1 ? B_TRANSLATE("Nudge Control Points") : 37 B_TRANSLATE("Nudge Control Point"), 38// count > 1 ? NUDGE_CONTROL_POINTS : NUDGE_CONTROL_POINT), 39 -1), 40 fPath(path), 41 fIndices(NULL), 42 fPoints(NULL), 43 fCount(count) 44{ 45 if (fCount > 0 && indices) { 46 fIndices = new (nothrow) int32[fCount]; 47 memcpy(fIndices, indices, fCount * sizeof(int32)); 48 } 49 if (fCount > 0 && points) { 50 fPoints = new (nothrow) control_point[fCount]; 51 memcpy(fPoints, points, fCount * sizeof(control_point)); 52 } 53} 54 55// destructor 56NudgePointsCommand::~NudgePointsCommand() 57{ 58 delete[] fIndices; 59 delete[] fPoints; 60} 61 62// InitCheck 63status_t 64NudgePointsCommand::InitCheck() 65{ 66 if (fPath && fIndices && fPoints) 67 return TransformCommand::InitCheck(); 68 else 69 return B_NO_INIT; 70} 71 72// _SetTransformation 73status_t 74NudgePointsCommand::_SetTransformation(BPoint pivot, 75 BPoint translation, 76 double rotation, 77 double xScale, 78 double yScale) const 79{ 80 if (!fPath) 81 return B_NO_INIT; 82 83 AutoNotificationSuspender _(fPath); 84 85 // restore original path 86 for (int32 i = 0; i < fCount; i++) { 87 fPath->SetPoint(fIndices[i], fPoints[i].point + translation, 88 fPoints[i].point_in + translation, 89 fPoints[i].point_out + translation, 90 fPoints[i].connected); 91 } 92 93 return B_OK; 94} 95 96