96 lines
3.9 KiB
PHP
96 lines
3.9 KiB
PHP
<?php
|
|
|
|
namespace swf2ass;
|
|
|
|
|
|
class StyleList {
|
|
/** @var FillStyleRecord[] */
|
|
public array $fillStyles;
|
|
/** @var LineStyleRecord[] */
|
|
public array $lineStyles;
|
|
|
|
public function __construct($fillStyles = [], $lineStyles = []) {
|
|
$this->fillStyles = $fillStyles;
|
|
$this->lineStyles = $lineStyles;
|
|
}
|
|
|
|
public static function fromXML(\DOMElement $element): StyleList {
|
|
$fillStyles = [];
|
|
$lineStyles = [];
|
|
foreach ($element->getElementsByTagName("fillStyles")->item(0)->childNodes as $node) {
|
|
if ($node instanceof \DOMElement) {
|
|
if ($node->nodeName === "Solid") {
|
|
$fillStyles[] = new FillStyleRecord(Color::fromXML($node->getElementsByTagName("color")->item(0)->getElementsByTagName("Color")->item(0)));
|
|
} else if ($node->nodeName === "LinearGradient") {
|
|
$fillStyles[] = new FillStyleRecord(LinearGradient::fromXML($node));
|
|
} else if ($node->nodeName === "RadialGradient") {
|
|
$fillStyles[] = new FillStyleRecord(RadialGradient::fromXML($node));
|
|
} else if ($node->nodeName === "ShiftedRadialGradient") {
|
|
$fillStyles[] = new FillStyleRecord(RadialGradient::fromXML($node));
|
|
} else if ($node->nodeName === "ClippedBitmap") {
|
|
Utils::dump_element($node);
|
|
//TODO
|
|
$fillStyles[] = new FillStyleRecord(new Color(0, 0, 0, 255 / 2));
|
|
} else if ($node->nodeName === "ClippedBitmap2") {
|
|
Utils::dump_element($node);
|
|
//TODO
|
|
$fillStyles[] = new FillStyleRecord(new Color(0, 0, 0, 255 / 2));
|
|
} else if ($node->nodeName === "TiledBitmap") {
|
|
//TODO
|
|
Utils::dump_element($node);
|
|
$fillStyles[] = new FillStyleRecord(new Color(0, 0, 0, 255 / 2));
|
|
} else if ($node->nodeName === "TiledBitmap2") {
|
|
//TODO
|
|
Utils::dump_element($node);
|
|
$fillStyles[] = new FillStyleRecord(new Color(0, 0, 0, 255 / 2));
|
|
} else {
|
|
Utils::dump_element($node);
|
|
throw new \Exception("Unknown style " . $node->nodeName);
|
|
}
|
|
|
|
}
|
|
}
|
|
foreach ($element->getElementsByTagName("lineStyles")->item(0)->childNodes as $node) {
|
|
if ($node instanceof \DOMElement) {
|
|
|
|
//$fill = null;
|
|
$colors = $node->getElementsByTagName("color");
|
|
$colors2 = $node->getElementsByTagName("Color");
|
|
$grads = $node->getElementsByTagName("coLinearGradientlor");
|
|
$color = null;
|
|
|
|
if ($colors->count() > 0) {
|
|
$color = Color::fromXML($colors->item(0)->getElementsByTagName("Color")->item(0));
|
|
} else if ($colors2->count() > 0) {
|
|
$color = Color::fromXML($colors2->item(0));
|
|
} else if ($grads->count() > 0) {
|
|
//TODO: other gradients?
|
|
//$fill = new FillStyleRecord(LinearGradient::fromXML($grads->item(0)->getElementsByTagName("LinearGradient")->item(0)));
|
|
}
|
|
|
|
if ($color === null) {
|
|
Utils::dump_element($node);
|
|
}
|
|
|
|
$lineStyles[] = new LineStyleRecord(max(Constants::TWIP_SIZE, (int)$node->getAttribute("width")), $color, null);
|
|
}
|
|
}
|
|
return new StyleList($fillStyles, $lineStyles);
|
|
}
|
|
|
|
/**
|
|
* @param $i
|
|
* @return FillStyleRecord|null
|
|
*/
|
|
public function getFillStyle($i): ?FillStyleRecord {
|
|
return $this->fillStyles[$i] ?? null;
|
|
}
|
|
|
|
/**
|
|
* @param $i
|
|
* @return LineStyleRecord|null
|
|
*/
|
|
public function getLineStyle($i): ?LineStyleRecord {
|
|
return $this->lineStyles[$i] ?? null;
|
|
}
|
|
} |