1/* 2 * Copyright 2006-2010, Stephan A��mus <superstippi@gmx.de>. 3 * All rights reserved. Distributed under the terms of the MIT License. 4 */ 5 6 7#include "TransformGradientCommand.h" 8 9#include <new> 10#include <stdio.h> 11 12#include "GradientTransformable.h" 13 14 15using std::nothrow; 16 17 18TransformGradientCommand::TransformGradientCommand(TransformBox* box, 19 Gradient* gradient, BPoint pivot, BPoint translation, double rotation, 20 double xScale, double yScale, const char* name) 21 : 22 TransformCommand(pivot, translation, rotation, xScale, yScale, name), 23 fTransformBox(box), 24 fGradient(gradient) 25{ 26 if (fGradient == NULL) 27 return; 28 29 fGradient->AcquireReference(); 30 31 if (fTransformBox != NULL) 32 fTransformBox->AddListener(this); 33} 34 35 36TransformGradientCommand::~TransformGradientCommand() 37{ 38 if (fGradient != NULL) 39 fGradient->ReleaseReference(); 40 41 if (fTransformBox != NULL) 42 fTransformBox->RemoveListener(this); 43} 44 45 46status_t 47TransformGradientCommand::InitCheck() 48{ 49 return fGradient != NULL ? TransformCommand::InitCheck() : B_NO_INIT; 50} 51 52// #pragma mark - 53 54// TransformBoxDeleted 55void 56TransformGradientCommand::TransformBoxDeleted(const TransformBox* box) 57{ 58 if (fTransformBox == box) { 59 if (fTransformBox != NULL) 60 fTransformBox->RemoveListener(this); 61 fTransformBox = NULL; 62 } 63} 64 65 66// #pragma mark - 67 68 69status_t 70TransformGradientCommand::_SetTransformation(BPoint pivot, BPoint translation, 71 double rotation, double xScale, double yScale) const 72{ 73 if (fTransformBox) { 74 fTransformBox->SetTransformation(pivot, translation, rotation, xScale, 75 yScale); 76 return B_OK; 77 } 78 79 ChannelTransform transform; 80 transform.SetTransformation(pivot, translation, rotation, xScale, yScale); 81 82 // Reset and apply transformation. (Gradients never have an original 83 // transformation that needs to be taken into account, the box always 84 // assignes it completely.) 85 fGradient->Reset(); 86 fGradient->Multiply(transform); 87 88 return B_OK; 89} 90 91