// SetColorStops void BGradient::SetColorStops(const BGradient& other) { MakeEmpty(); for (int32 i = 0; ColorStop* stop = other.ColorStopAt(i); i++) AddColorStop(*stop, i); }
void CanvasMessage::AddGradient(const BGradient& gradient) { Add(gradient.GetType()); switch (gradient.GetType()) { case BGradient::TYPE_NONE: break; case BGradient::TYPE_LINEAR: { const BGradientLinear* linear = dynamic_cast<const BGradientLinear *>(&gradient); if (linear == NULL) return; Add(linear->Start()); Add(linear->End()); break; } case BGradient::TYPE_RADIAL: { const BGradientRadial* radial = dynamic_cast<const BGradientRadial *>(&gradient); if (radial == NULL) return; Add(radial->Center()); Add(radial->Radius()); break; } case BGradient::TYPE_RADIAL_FOCUS: { const BGradientRadialFocus* radialFocus = dynamic_cast<const BGradientRadialFocus *>(&gradient); if (radialFocus == NULL) return; Add(radialFocus->Center()); Add(radialFocus->Focal()); Add(radialFocus->Radius()); break; } case BGradient::TYPE_DIAMOND: { const BGradientDiamond* diamond = dynamic_cast<const BGradientDiamond *>(&gradient); if (diamond == NULL) return; Add(diamond->Center()); break; } case BGradient::TYPE_CONIC: { const BGradientConic* conic = dynamic_cast<const BGradientConic *>(&gradient); if (conic == NULL) return; Add(conic->Center()); Add(conic->Angle()); break; } } int32 stopCount = gradient.CountColorStops(); Add(stopCount); for (int32 i = 0; i < stopCount; i++) { BGradient::ColorStop* stop = gradient.ColorStopAt(i); if (stop == NULL) return; Add(stop->color); Add(stop->offset); } }