fun parseSvgTransform()

in platf-skia/src/commonMain/kotlin/org/jetbrains/letsPlot/skia/mapping/svg/SvgTransformParser.kt [34:80]


    fun parseSvgTransform(svgTransform: String): List<Matrix33> {
        val results = parseTransform(svgTransform)

        val transforms = ArrayList<Matrix33>()
        for (res in results) {
            val transform: Matrix33 =
                when (res.name) {
                    SvgTransform.SCALE -> {
                        val scaleX = res.getParam(SCALE_X)!!
                        val scaleY = res.getParam(SCALE_Y) ?: scaleX
                        Matrix33.makeScale(scaleX, scaleY)
                    }

                    SvgTransform.SKEW_X -> {
                        val angle = res.getParam(SKEW_X_ANGLE)!!
                        val factor = sin(toRadians(angle))
                        Matrix33.makeSkew(factor, 0.0f)
                    }

                    SvgTransform.SKEW_Y -> {
                        val angle = res.getParam(SKEW_Y_ANGLE)!!
                        val factor = sin(toRadians(angle))
                        Matrix33.makeSkew(0.0f, factor)
                    }

                    SvgTransform.ROTATE -> {
                        val angle = res.getParam(ROTATE_ANGLE)!!
                        val pivotX = if (res.paramCount == 3) res.getParam(ROTATE_X)!! else 0.0f
                        val pivotY = if (res.paramCount == 3) res.getParam(ROTATE_Y)!! else 0.0f
                        Matrix33.makeRotate(angle, pivotX, pivotY)
                    }

                    SvgTransform.TRANSLATE -> {
                        val dX = res.getParam(TRANSLATE_X)!!
                        val dY = res.getParam(TRANSLATE_Y) ?: 0.0f
                        Matrix33.makeTranslate(dX, dY)
                    }

                    SvgTransform.MATRIX -> error("UNSUPPORTED: We don't use MATRIX")

                    else -> throw IllegalArgumentException("Unknown transform: " + res.name)
                }
            transforms.add(transform)
        }

        return transforms
    }