1 /* 2 * Copyright 2023, Haiku. 3 * Distributed under the terms of the MIT License. 4 * 5 * Authors: 6 * Zardshard 7 */ 8 9 10 #include "CompoundStyleTransformer.h" 11 12 #include <string.h> 13 14 15 _USING_ICON_NAMESPACE 16 17 18 CompoundStyleTransformer::CompoundStyleTransformer( 19 StyleTransformer** transformers, int32 count) 20 : 21 fTransformers(transformers), 22 fCount(count) 23 { 24 } 25 26 27 CompoundStyleTransformer::~CompoundStyleTransformer() 28 { 29 for (int i = 0; i < fCount; i++) 30 delete fTransformers[i]; 31 delete[] fTransformers; 32 } 33 34 35 void 36 CompoundStyleTransformer::transform(double* x, double* y) const 37 { 38 for (int i = 0; i < fCount; i++) { 39 if (fTransformers[i] != NULL) 40 fTransformers[i]->transform(x, y); 41 } 42 } 43 44 45 void 46 CompoundStyleTransformer::Invert() 47 { 48 // reverse order of pipeline 49 StyleTransformer* oldOrder[fCount]; 50 memcpy(oldOrder, fTransformers, fCount * sizeof(StyleTransformer*)); 51 for (int i = 0; i < fCount; i++) { 52 fTransformers[fCount-i-1] = oldOrder[i]; 53 } 54 55 // invert individual transformations 56 for (int i = 0; i < fCount; i++) { 57 if (fTransformers[i] != NULL) 58 fTransformers[i]->Invert(); 59 } 60 } 61 62 63 bool 64 CompoundStyleTransformer::IsLinear() 65 { 66 bool linear = true; 67 for (int i = 0; i < fCount; i++) { 68 if (fTransformers[i] != NULL) 69 linear &= fTransformers[i]->IsLinear(); 70 } 71 return linear; 72 } 73