Files
discord-decomp/modules/voice_panel/native/shared/CircleWithCutout.tsx
T
2026-11-01 12:12:55 +02:00

47 lines
1.8 KiB
TypeScript

// Metro module 16014 (f16015).
import { memo } from "react";
import { PixelRatio } from "react-native";
import * as _CircleWithCutoutUtils from "./CircleWithCutoutUtils";
import { getCutoutCenterX, getCutoutCenterY } from "./CircleWithCutoutUtils";
import Module8531, { Defs, Mask, Rect, Circle } from "../../../../_bundle/Module8531";
let c11481_5 = PixelRatio.get();
const r26 = memo(function CircleWithCutout(props) {
const { fill, circleRadius, cutoutRadius, enableCutout, cutoutPositionInDegrees } = props;
let alignBadgeEdgeWithCircleEdge = props.alignBadgeEdgeWithCircleEdge;
if (alignBadgeEdgeWithCircleEdge === void 0) {
alignBadgeEdgeWithCircleEdge = false;
}
const { badgeRadius, scaleToPixelDensity = true } = props;
const r22 = scaleToPixelDensity ? c11481_5 : 1;
const cx = circleRadius * r22;
const r27 = badgeRadius != null ? badgeRadius * r22 : void 0;
const height = 2 * cx;
const cutoutCenterX = getCutoutCenterX(cx, cutoutPositionInDegrees);
const cutoutCenterY = getCutoutCenterY(cx, cutoutPositionInDegrees);
if (alignBadgeEdgeWithCircleEdge) {
alignBadgeEdgeWithCircleEdge = r27 != null;
}
let cy = cutoutCenterY;
let cx2 = cutoutCenterX;
if (alignBadgeEdgeWithCircleEdge) {
cx2 = 2 * cx - r27;
cy = r27;
}
return <Module8531 height={height} width={height} style={{
transform: [{
scale: 1 / r22
}]
}}>
<Defs>
<Mask id="mask">
<Rect width={height} height={height} fill="white" />
<Circle cx={cx2} cy={cy} r={cutoutRadius * r22} fill="black" />
</Mask>
</Defs>
<Circle cx={cx} cy={cx} r={cx} fill={fill} mask={enableCutout ? "url(#mask)" : void 0} />
</Module8531>;
});
export default r26;
export const getBadgeLeft = _CircleWithCutoutUtils.getBadgeLeft;
export const getBadgeTop = _CircleWithCutoutUtils.getBadgeTop;