@vosjs/studio-core 0.5.0 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +14 -1
- package/dist/index.js +32 -9
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.d.ts
CHANGED
|
@@ -1426,6 +1426,19 @@ declare const FRAME_BORDER_DEFAULT = 0.35;
|
|
|
1426
1426
|
*/
|
|
1427
1427
|
declare const FRAME_BORDER_WIDTH_DEFAULT = 1.5;
|
|
1428
1428
|
declare const FRAME_BORDER_COLOR_DEFAULT = "#ffffff";
|
|
1429
|
+
/**
|
|
1430
|
+
* How far past the card's rounded clip the footage and the browser-bar fill
|
|
1431
|
+
* are drawn, in device pixels, so the clip is the ONE edge the eye sees.
|
|
1432
|
+
* A clipped drawImage whose destination rect lands exactly on the clip path
|
|
1433
|
+
* anti-aliases that edge twice wherever it falls on a fractional device
|
|
1434
|
+
* pixel (the studio canvas is the fitted box at device pixel ratio, and any
|
|
1435
|
+
* zoom rescales everything about its focus), leaving a partially covered
|
|
1436
|
+
* seam pixel along every straight edge that the arc, drawn by the clip
|
|
1437
|
+
* alone, never has. One pixel covers the seam and changes the footage scale
|
|
1438
|
+
* by less than a part in a thousand. Read by ON_FRAME; the layout tests
|
|
1439
|
+
* expect the destination rect to be the mirror's grown by this much.
|
|
1440
|
+
*/
|
|
1441
|
+
declare const CARD_EDGE_OVERDRAW = 1;
|
|
1429
1442
|
/**
|
|
1430
1443
|
* The realistic browser-bar kind matching the recorder's OS — seeds Default
|
|
1431
1444
|
* mode so the synthetic chrome looks native to where the take was recorded
|
|
@@ -3316,4 +3329,4 @@ declare function rejectSpan(rejected: RejectedSpan[] | undefined, lane: Rejected
|
|
|
3316
3329
|
anchor?: StepAnchor;
|
|
3317
3330
|
}, note?: string): RejectedSpan;
|
|
3318
3331
|
|
|
3319
|
-
export { ASPECT_RATIOS, AUDIO_PLAN_STEP, type AnchorKind, type AspectRatioOption, type AudioClip, type AudioPlanPoint, type AudioPlanTrack, BACKGROUND_Z, BASE_FRAME_STYLE, type Backdrop, type BackgroundMedia, type BakedText3dAsset, type BakedText3dMaterial, type BrowserBarStyle, type BuildDigestInput, CAMERA_FAR, CAMERA_NEAR, CAM_CHAIN_GAP, CAM_EASE, CAM_PAN, CAM_PAN_EASE, CAM_RAMP_IN, CAM_RAMP_OUT, CAM_SIZE_MAX, CAM_SIZE_MIN, CAM_SPAN_MIN, CAPTURE_COVERAGE_MIN, CARD_FOV, CARD_Z, CHANNEL_SPECS_HASH, CHANNEL_SPECS_VERIFIED, CLICK_FX_INTENSITY, CLICK_FX_PRE, CLICK_HIGHLIGHT_FADE, CLICK_PAIR_MAX, CLICK_PULSE_DUR, CLICK_RECT_MAX_FRAC, CLICK_RIPPLE_DUR, CLICK_SYNTH_RELEASE, CROP_MAX_PX, CROP_MIN_FRAC, CROP_MIN_PX, CROP_PAD, CURSOR_IDLE_EPS_FRAC, CURSOR_IDLE_FADE_IN, CURSOR_IDLE_FADE_OUT, CURSOR_IDLE_HOLD, type CamBubbleRect, type CamPoseSpan, type CamStyle, type CaptureNormalization, type CardLayout, type ClickFxStyle, type CursorEvent, type CursorFadeKey, type CursorIdleOptions, type CursorStyle, type CursorTrack, DARK_GROUND, DEFAULT_BROWSER_BAR, DEFAULT_CAM_POSE, DEFAULT_CAM_STYLE, DEFAULT_CLICK_FX, DEFAULT_CURSOR_STYLE, DEFAULT_DUCK, DEFAULT_FRAME_STYLE, DEFAULT_SPEED_PARAMS, DEFAULT_TILT_POSE, DEFAULT_ZOOM_LEVEL, DEFAULT_ZOOM_STYLE, DESTINATIONS, DIGEST_CROP_MAX, DIGEST_FULL_MAX, DIGEST_VERSION, DOC_SCHEMA_VERSION, DRAG_FIT_LEVEL, type Destination, type Digest, type DigestImageRef, type DigestPlan, type DigestTakeFacts, type DocSegment, type DuckOptions, END_CARD_SECONDS, ENTRANCE_SECONDS, EXPORT_RESOLUTION_OPTIONS, EXPORT_SHORT_EDGE, type EndCard, type EnvelopePoint, type ExportResolution, type ExtractClickOptions, FOLLOW_RECENTER, FOLLOW_SAFE_RATIO, FRAME_BORDER_COLOR_DEFAULT, FRAME_BORDER_DEFAULT, FRAME_BORDER_WIDTH_DEFAULT, type FocusBounds, type FollowEvent, type FollowOptions, type FrameEntrance, type FrameGeometry, type FrameStyle, HOUSE_GRADIENT, type IngestOptions, LOOK_KINDS, type Look, type LookBrand, type LookKind, type LookPlacement, type LowerProgramOptions, type LoweredAudioClip, type LoweredClick, type LoweredComposition, type LoweredZoomSpan, MINIMAL_BAR_THEMES, MOTION_DELTA, MOTION_EASE, type MediaOverlayClip, type MicRms, type MinimalBarTheme, type Moment, type MomentKind, type MomentsOptions, type MotionKey, type MotionPose, type MotionPose3D, type MusicBedInput, type NormRect, OBJECT_DEFAULT_SCALE, OVERLAY_FONT_FACES, OVERLAY_LINE_HEIGHT, OVERLAY_MEDIA_DEFAULT_RADIUS, OVERLAY_MEDIA_DEFAULT_WIDTH, OVERLAY_MIN_DURATION, OVERLAY_SCALE_MAX, OVERLAY_SIZE_MAX, OVERLAY_SIZE_MIN, OVERLAY_TRANSITION_DUR, OVERLAY_Z, type ObjectAnimation, type ObjectAsset, type ObjectClip, type ObjectPrimitiveShape, type OverlayClip, type OverlayFontFace, type OverlayKind, type OverlayPresetStyle, type OverlayRect, type OverlayTransform, type OverlayTransition, PLATE_GROUND, PLAYBACK_ACTIVITY, PROGRAM_RETIME, type PlanOptions, type PlanTiltOptions, type PlaneSize, type ProgramAnchorDoc, type ProgramTweenEdit, type ProjectDoc, type PxRect, REJECT_OVERLAP, type RecordingArtifact, type RecordingMeta, type Rect, type RejectedLane, type RejectedSpan, type ResolvedOverlayBox, type ResolvedOverlayStyle, SCENE_MOTION, SCENE_QUIET, SPEED_RATE_MAX, SPEED_RATE_MIN, SPEED_SPAN_MIN, STUDIO_ENTRY_ID, STYLE_FIELDS, type SmoothOptions, type SmoothPoint, type SpeedParams, type SpeedSpan, type StepAnchor, type StepSpan, type StudioAudioPlan, type StudioDoc, type StudioEntry, type StyleField, TEXT3D_DEPTH_DEFAULT, TEXT3D_DEPTH_MAX, TEXT3D_DEPTH_MIN, TEXT_PRESETS, TILT_AUTO_DEAD_ZONE, TILT_AUTO_MIN, TILT_CHAIN_GAP, TILT_DEG_MAX, TILT_EASE, TILT_INTENSITY_MAX, TILT_PAN, TILT_PAN_EASE, TILT_RAMP_IN, TILT_RAMP_OUT, TILT_SPAN_MIN, TILT_UI_DEG_MAX, TRANSITION_SPEED_MULT, type Text3dMaterial, type TextFxDirection, type TextFxKind, type TextFxSpec, type TextFxUnit, type TextOverlayBox, type TextOverlayClip, type TextOverlayPreset, type TextOverlayStroke, type TiltPersonality, type TiltSpan, type TiltStyleName, type TranscriptSegment, type TransitionSpeed, WINDOW_FOCUS_MIN, ZOOM_CHAIN_GAP, ZOOM_EASE, ZOOM_LEVELS, ZOOM_LEVEL_MAX, ZOOM_LEVEL_MIN, ZOOM_PAN, ZOOM_PAN_EASE, ZOOM_RAMP_IN, ZOOM_RAMP_IN_OVERLAP, ZOOM_RAMP_OUT, ZOOM_SPAN_MIN, ZOOM_STYLES, ZOOM_STYLE_OPTIONS, type ZoomSpan, type ZoomStyleName, type ZoomStyleParams, type ZoomWindow, anchorKindOf, anchorSourceDuration, applyLook, aspectRatioValue, audioLane, backdropMedia, buildDigest, camBubbleRect, camBubbleRectAt, camLane, camMoveLane, camRectFromPose, camRestPose, camTrackFromDoc, cardInset, cardPointToScreen, cardPoseTrack, clampCamFrac, clampCamSize, clampFocus, clampSpeedRate, clampTiltDeg, clampZoomLevel, clipEnvelope, clipLength, computeCardLayout, computeMicRms, computePeaks, copyStyle, cropBox, cursorIdleFade, deriveViewportCrop, destinationById, destinationsForChannel, docCardLayout, docOutputDuration, docToCropSpace, docToFullSpace, duckCurve, effectiveSegments, entranceSeconds, envelopeAt, envelopeValueAt, expandEndCard, expectedFrameSize, exportSizeFor, extractClicks, focusBounds, followFocusEvents, frameGeometry, hexToRgbTriplet, houseLook, idleGaps, isLookKind, isMusicBed, isPlayback, isProgramDoc, isRecordingDoc, isRejected, levelForFocusFraction, lookFromBrand, lookKindForGround, lowerProgramDoc, lowerStudioDoc, lowerToComposition, micLane, migrateHostedDoc, momentsFromDoc, motionTrack, musicBedClip, normalizeCaptureSpace, objectMotionBase, objectMotionPoseAt, objectsLane, outputDurationOf, outputRangeToSource, overlapFraction, overlayFaceFor, overlayFontFaces, overlayFontString, overlayHit, overlayLines, overlayMotionBase, overlayMotionPoseAt, overlayRect, overlaysLane, pageDisplayUrl, parsePoseId, pickStyle, planAutoSpeed, planAutoTilt, planAutoZoom, planForDigest, planeSizeAtDepth, platformBarKind, programDuration, projectFromArtifact, ratedSegments, recommendedExportResolution, refillAudioBeds, rejectSpan, removeSourceRange, removeSpeedInRange, resolveExportSize, resolveOverlayBox, resolveOverlayStyle, resolveText3dAsset, resolveZoomStyle, sceneChanges, scrollRuns, setSpeedInRange, smoothCursor, spanOutputExtent, speedLane, studioAudioPlan, studioEntry, studioLayerData, tiltLane, tiltTrackFromDoc, transitionMult, videoLane, voiceKey, withBackdrop, withHolds, withoutRejected, wrapProgramLength, zoomCoversRect, zoomLane, zoomSpanForRange, zoomTrackFromDoc, zoomWindow };
|
|
3332
|
+
export { ASPECT_RATIOS, AUDIO_PLAN_STEP, type AnchorKind, type AspectRatioOption, type AudioClip, type AudioPlanPoint, type AudioPlanTrack, BACKGROUND_Z, BASE_FRAME_STYLE, type Backdrop, type BackgroundMedia, type BakedText3dAsset, type BakedText3dMaterial, type BrowserBarStyle, type BuildDigestInput, CAMERA_FAR, CAMERA_NEAR, CAM_CHAIN_GAP, CAM_EASE, CAM_PAN, CAM_PAN_EASE, CAM_RAMP_IN, CAM_RAMP_OUT, CAM_SIZE_MAX, CAM_SIZE_MIN, CAM_SPAN_MIN, CAPTURE_COVERAGE_MIN, CARD_EDGE_OVERDRAW, CARD_FOV, CARD_Z, CHANNEL_SPECS_HASH, CHANNEL_SPECS_VERIFIED, CLICK_FX_INTENSITY, CLICK_FX_PRE, CLICK_HIGHLIGHT_FADE, CLICK_PAIR_MAX, CLICK_PULSE_DUR, CLICK_RECT_MAX_FRAC, CLICK_RIPPLE_DUR, CLICK_SYNTH_RELEASE, CROP_MAX_PX, CROP_MIN_FRAC, CROP_MIN_PX, CROP_PAD, CURSOR_IDLE_EPS_FRAC, CURSOR_IDLE_FADE_IN, CURSOR_IDLE_FADE_OUT, CURSOR_IDLE_HOLD, type CamBubbleRect, type CamPoseSpan, type CamStyle, type CaptureNormalization, type CardLayout, type ClickFxStyle, type CursorEvent, type CursorFadeKey, type CursorIdleOptions, type CursorStyle, type CursorTrack, DARK_GROUND, DEFAULT_BROWSER_BAR, DEFAULT_CAM_POSE, DEFAULT_CAM_STYLE, DEFAULT_CLICK_FX, DEFAULT_CURSOR_STYLE, DEFAULT_DUCK, DEFAULT_FRAME_STYLE, DEFAULT_SPEED_PARAMS, DEFAULT_TILT_POSE, DEFAULT_ZOOM_LEVEL, DEFAULT_ZOOM_STYLE, DESTINATIONS, DIGEST_CROP_MAX, DIGEST_FULL_MAX, DIGEST_VERSION, DOC_SCHEMA_VERSION, DRAG_FIT_LEVEL, type Destination, type Digest, type DigestImageRef, type DigestPlan, type DigestTakeFacts, type DocSegment, type DuckOptions, END_CARD_SECONDS, ENTRANCE_SECONDS, EXPORT_RESOLUTION_OPTIONS, EXPORT_SHORT_EDGE, type EndCard, type EnvelopePoint, type ExportResolution, type ExtractClickOptions, FOLLOW_RECENTER, FOLLOW_SAFE_RATIO, FRAME_BORDER_COLOR_DEFAULT, FRAME_BORDER_DEFAULT, FRAME_BORDER_WIDTH_DEFAULT, type FocusBounds, type FollowEvent, type FollowOptions, type FrameEntrance, type FrameGeometry, type FrameStyle, HOUSE_GRADIENT, type IngestOptions, LOOK_KINDS, type Look, type LookBrand, type LookKind, type LookPlacement, type LowerProgramOptions, type LoweredAudioClip, type LoweredClick, type LoweredComposition, type LoweredZoomSpan, MINIMAL_BAR_THEMES, MOTION_DELTA, MOTION_EASE, type MediaOverlayClip, type MicRms, type MinimalBarTheme, type Moment, type MomentKind, type MomentsOptions, type MotionKey, type MotionPose, type MotionPose3D, type MusicBedInput, type NormRect, OBJECT_DEFAULT_SCALE, OVERLAY_FONT_FACES, OVERLAY_LINE_HEIGHT, OVERLAY_MEDIA_DEFAULT_RADIUS, OVERLAY_MEDIA_DEFAULT_WIDTH, OVERLAY_MIN_DURATION, OVERLAY_SCALE_MAX, OVERLAY_SIZE_MAX, OVERLAY_SIZE_MIN, OVERLAY_TRANSITION_DUR, OVERLAY_Z, type ObjectAnimation, type ObjectAsset, type ObjectClip, type ObjectPrimitiveShape, type OverlayClip, type OverlayFontFace, type OverlayKind, type OverlayPresetStyle, type OverlayRect, type OverlayTransform, type OverlayTransition, PLATE_GROUND, PLAYBACK_ACTIVITY, PROGRAM_RETIME, type PlanOptions, type PlanTiltOptions, type PlaneSize, type ProgramAnchorDoc, type ProgramTweenEdit, type ProjectDoc, type PxRect, REJECT_OVERLAP, type RecordingArtifact, type RecordingMeta, type Rect, type RejectedLane, type RejectedSpan, type ResolvedOverlayBox, type ResolvedOverlayStyle, SCENE_MOTION, SCENE_QUIET, SPEED_RATE_MAX, SPEED_RATE_MIN, SPEED_SPAN_MIN, STUDIO_ENTRY_ID, STYLE_FIELDS, type SmoothOptions, type SmoothPoint, type SpeedParams, type SpeedSpan, type StepAnchor, type StepSpan, type StudioAudioPlan, type StudioDoc, type StudioEntry, type StyleField, TEXT3D_DEPTH_DEFAULT, TEXT3D_DEPTH_MAX, TEXT3D_DEPTH_MIN, TEXT_PRESETS, TILT_AUTO_DEAD_ZONE, TILT_AUTO_MIN, TILT_CHAIN_GAP, TILT_DEG_MAX, TILT_EASE, TILT_INTENSITY_MAX, TILT_PAN, TILT_PAN_EASE, TILT_RAMP_IN, TILT_RAMP_OUT, TILT_SPAN_MIN, TILT_UI_DEG_MAX, TRANSITION_SPEED_MULT, type Text3dMaterial, type TextFxDirection, type TextFxKind, type TextFxSpec, type TextFxUnit, type TextOverlayBox, type TextOverlayClip, type TextOverlayPreset, type TextOverlayStroke, type TiltPersonality, type TiltSpan, type TiltStyleName, type TranscriptSegment, type TransitionSpeed, WINDOW_FOCUS_MIN, ZOOM_CHAIN_GAP, ZOOM_EASE, ZOOM_LEVELS, ZOOM_LEVEL_MAX, ZOOM_LEVEL_MIN, ZOOM_PAN, ZOOM_PAN_EASE, ZOOM_RAMP_IN, ZOOM_RAMP_IN_OVERLAP, ZOOM_RAMP_OUT, ZOOM_SPAN_MIN, ZOOM_STYLES, ZOOM_STYLE_OPTIONS, type ZoomSpan, type ZoomStyleName, type ZoomStyleParams, type ZoomWindow, anchorKindOf, anchorSourceDuration, applyLook, aspectRatioValue, audioLane, backdropMedia, buildDigest, camBubbleRect, camBubbleRectAt, camLane, camMoveLane, camRectFromPose, camRestPose, camTrackFromDoc, cardInset, cardPointToScreen, cardPoseTrack, clampCamFrac, clampCamSize, clampFocus, clampSpeedRate, clampTiltDeg, clampZoomLevel, clipEnvelope, clipLength, computeCardLayout, computeMicRms, computePeaks, copyStyle, cropBox, cursorIdleFade, deriveViewportCrop, destinationById, destinationsForChannel, docCardLayout, docOutputDuration, docToCropSpace, docToFullSpace, duckCurve, effectiveSegments, entranceSeconds, envelopeAt, envelopeValueAt, expandEndCard, expectedFrameSize, exportSizeFor, extractClicks, focusBounds, followFocusEvents, frameGeometry, hexToRgbTriplet, houseLook, idleGaps, isLookKind, isMusicBed, isPlayback, isProgramDoc, isRecordingDoc, isRejected, levelForFocusFraction, lookFromBrand, lookKindForGround, lowerProgramDoc, lowerStudioDoc, lowerToComposition, micLane, migrateHostedDoc, momentsFromDoc, motionTrack, musicBedClip, normalizeCaptureSpace, objectMotionBase, objectMotionPoseAt, objectsLane, outputDurationOf, outputRangeToSource, overlapFraction, overlayFaceFor, overlayFontFaces, overlayFontString, overlayHit, overlayLines, overlayMotionBase, overlayMotionPoseAt, overlayRect, overlaysLane, pageDisplayUrl, parsePoseId, pickStyle, planAutoSpeed, planAutoTilt, planAutoZoom, planForDigest, planeSizeAtDepth, platformBarKind, programDuration, projectFromArtifact, ratedSegments, recommendedExportResolution, refillAudioBeds, rejectSpan, removeSourceRange, removeSpeedInRange, resolveExportSize, resolveOverlayBox, resolveOverlayStyle, resolveText3dAsset, resolveZoomStyle, sceneChanges, scrollRuns, setSpeedInRange, smoothCursor, spanOutputExtent, speedLane, studioAudioPlan, studioEntry, studioLayerData, tiltLane, tiltTrackFromDoc, transitionMult, videoLane, voiceKey, withBackdrop, withHolds, withoutRejected, wrapProgramLength, zoomCoversRect, zoomLane, zoomSpanForRange, zoomTrackFromDoc, zoomWindow };
|
package/dist/index.js
CHANGED
|
@@ -153,6 +153,7 @@ var DEFAULT_FRAME_STYLE = BASE_FRAME_STYLE;
|
|
|
153
153
|
var FRAME_BORDER_DEFAULT = 0.35;
|
|
154
154
|
var FRAME_BORDER_WIDTH_DEFAULT = 1.5;
|
|
155
155
|
var FRAME_BORDER_COLOR_DEFAULT = "#ffffff";
|
|
156
|
+
var CARD_EDGE_OVERDRAW = 1;
|
|
156
157
|
function platformBarKind(platform) {
|
|
157
158
|
return platform === "windows" || platform === "linux" ? "windows-light" : "mac-light";
|
|
158
159
|
}
|
|
@@ -3953,28 +3954,49 @@ var ON_FRAME = `(ctx, content, dt) => {
|
|
|
3953
3954
|
c.save()
|
|
3954
3955
|
// d.zoomSuppressed = editor aiming mode: the host merges it into ctx.data
|
|
3955
3956
|
// while the focus overlay is up so the full frame renders. Never persisted.
|
|
3957
|
+
// ceZs = the zoom transform's device scale, for the two values below that
|
|
3958
|
+
// are sized in DEVICE pixels inside a scaled user space.
|
|
3959
|
+
var ceZs = 1
|
|
3956
3960
|
if (lvl > 1.001 && !d.zoomSuppressed) {
|
|
3957
3961
|
var fx = dx + zx * dw, fy = dy + zy * dh
|
|
3958
3962
|
c.translate(fx, fy); c.scale(lvl, lvl); c.translate(-fx, -fy)
|
|
3959
|
-
|
|
3963
|
+
ceZs = lvl
|
|
3964
|
+
}
|
|
3965
|
+
// The card's shadows are cast by a body drawn OFF-CANVAS and brought back
|
|
3966
|
+
// by shadowOffsetX alone. Shadow offsets are device space, untouched by
|
|
3967
|
+
// the transform, so the body moves by shD / ceZs in user space and the
|
|
3968
|
+
// offset is shD; shD clears the canvas by the card's own device size, so
|
|
3969
|
+
// no part of the body lands on it at any zoom. Painting the body in place
|
|
3970
|
+
// (opaque black under the footage) left a 1px dark seam along every
|
|
3971
|
+
// straight card edge at a fractional coordinate: the fill's anti-aliased
|
|
3972
|
+
// rim showed through where the clipped footage did not cover it, and the
|
|
3973
|
+
// corners, drawn by the clip alone, hid theirs inside the arc.
|
|
3974
|
+
var shD = ceZs * (cardW + cardH) + 2 * (W + H)
|
|
3975
|
+
var shX = cardX - shD / ceZs
|
|
3960
3976
|
// soft shadow behind the card (bar strip + video)
|
|
3961
3977
|
if (shadow > 0) {
|
|
3962
3978
|
c.save()
|
|
3963
3979
|
c.shadowColor = 'rgba(' + shRgb + ',' + shadow + ')'
|
|
3964
|
-
c.shadowBlur = 60 * s2; c.shadowOffsetY = 24 * s2
|
|
3980
|
+
c.shadowBlur = 60 * s2; c.shadowOffsetX = shD; c.shadowOffsetY = 24 * s2
|
|
3965
3981
|
c.fillStyle = '#000'
|
|
3966
|
-
rr(
|
|
3982
|
+
rr(shX, cardY, cardW, cardH, radius); c.fill()
|
|
3967
3983
|
c.restore()
|
|
3968
3984
|
}
|
|
3969
3985
|
// contact shadow: tight and close, over the ambient layer
|
|
3970
3986
|
if (shC > 0) {
|
|
3971
3987
|
c.save()
|
|
3972
3988
|
c.shadowColor = 'rgba(' + shRgb + ',' + shC + ')'
|
|
3973
|
-
c.shadowBlur = 10 * s2; c.shadowOffsetY = 3 * s2
|
|
3989
|
+
c.shadowBlur = 10 * s2; c.shadowOffsetX = shD; c.shadowOffsetY = 3 * s2
|
|
3974
3990
|
c.fillStyle = '#000'
|
|
3975
|
-
rr(
|
|
3991
|
+
rr(shX, cardY, cardW, cardH, radius); c.fill()
|
|
3976
3992
|
c.restore()
|
|
3977
3993
|
}
|
|
3994
|
+
// The footage and the bar fill overdraw the clip by one device pixel
|
|
3995
|
+
// (CARD_EDGE_OVERDRAW) so the clip is the only edge: a destination rect
|
|
3996
|
+
// that lands exactly on the clip path anti-aliases the edge twice at a
|
|
3997
|
+
// fractional coordinate and leaves a half-covered seam pixel.
|
|
3998
|
+
var ceOv = ${CARD_EDGE_OVERDRAW} / ceZs
|
|
3999
|
+
var ceX = dx - ceOv, ceY = dy - ceOv, ceW = dw + 2 * ceOv, ceH = dh + 2 * ceOv
|
|
3978
4000
|
// video, then bar, clipped to the card's rounded corners. The bar draws
|
|
3979
4001
|
// AFTER the footage: under cover the video rect can overflow ABOVE the
|
|
3980
4002
|
// bar strip (a vertical crop), and bar-first let the footage paint over
|
|
@@ -3987,9 +4009,9 @@ var ON_FRAME = `(ctx, content, dt) => {
|
|
|
3987
4009
|
// dimension-checked at attach); false \u21D2 element path (pre-first-seek,
|
|
3988
4010
|
// or the provider never attached).
|
|
3989
4011
|
var wcp3 = video.__voilaWc
|
|
3990
|
-
if (!(wcp3 && wcp3.draw(c, crp,
|
|
3991
|
-
if (crp) c.drawImage(video, crp.x, crp.y, crp.w, crp.h,
|
|
3992
|
-
else c.drawImage(video,
|
|
4012
|
+
if (!(wcp3 && wcp3.draw(c, crp, ceX, ceY, ceW, ceH))) {
|
|
4013
|
+
if (crp) c.drawImage(video, crp.x, crp.y, crp.w, crp.h, ceX, ceY, ceW, ceH)
|
|
4014
|
+
else c.drawImage(video, ceX, ceY, ceW, ceH)
|
|
3993
4015
|
}
|
|
3994
4016
|
} catch (e) {}
|
|
3995
4017
|
if (barH > 0) {
|
|
@@ -3999,7 +4021,7 @@ var ON_FRAME = `(ctx, content, dt) => {
|
|
|
3999
4021
|
// absent = the built-in graphite look
|
|
4000
4022
|
var thm = (minimal && bar.theme) || null
|
|
4001
4023
|
c.fillStyle = minimal ? (thm ? thm.bar : '#141417') : dark ? '#2a2a2e' : '#e9e9eb'
|
|
4002
|
-
c.fillRect(cardX, cardY, cardW, barH)
|
|
4024
|
+
c.fillRect(cardX - ceOv, cardY - ceOv, cardW + 2 * ceOv, barH + ceOv)
|
|
4003
4025
|
c.fillStyle = dark || (minimal && !(thm && thm.light)) ? 'rgba(255,255,255,0.08)' : 'rgba(0,0,0,0.08)'
|
|
4004
4026
|
c.fillRect(cardX, cardY + barH - s2, cardW, s2) // hairline above the video
|
|
4005
4027
|
var midY = cardY + barH / 2
|
|
@@ -7231,6 +7253,7 @@ export {
|
|
|
7231
7253
|
CAM_SIZE_MIN,
|
|
7232
7254
|
CAM_SPAN_MIN,
|
|
7233
7255
|
CAPTURE_COVERAGE_MIN,
|
|
7256
|
+
CARD_EDGE_OVERDRAW,
|
|
7234
7257
|
CARD_FOV,
|
|
7235
7258
|
CARD_Z,
|
|
7236
7259
|
CHANNEL_SPECS_HASH,
|