Bug 1338030 - region : integrate the RegionNodeBox and RegionCueStyleBox. r=rillian
MozReview-Commit-ID: 8M9x31q2dSK
--- a/dom/media/webvtt/vtt.jsm
+++ b/dom/media/webvtt/vtt.jsm
@@ -1044,39 +1044,76 @@ const { XPCOMUtils } = require("resource
var boxPositions = [],
containerBox = BoxPosition.getSimpleBoxPosition(rootOfCues),
fontSize = Math.round(containerBox.height * FONT_SIZE_PERCENT * 100) / 100;
var styleOptions = {
font: fontSize + "px " + FONT_STYLE
};
(function() {
- var styleBox, cue;
+ var styleBox, cue, controlBarBox;
if (controlBarShown) {
+ controlBarBox = BoxPosition.getSimpleBoxPosition(controlBar);
// Add an empty output box that cover the same region as video control bar.
- boxPositions.push(BoxPosition.getSimpleBoxPosition(controlBar));
+ boxPositions.push(controlBarBox);
}
+ // https://w3c.github.io/webvtt/#processing-model 6.1.12.1
+ // Create regionNode
+ var regionNodeBoxes = {};
+ var regionNodeBox;
+
for (var i = 0; i < cues.length; i++) {
cue = cues[i];
-
- // Compute the intial position and styles of the cue div.
- styleBox = new CueStyleBox(window, cue, styleOptions);
- styleBox.cueDiv.style.setProperty("--cue-font-size", fontSize + "px");
- rootOfCues.appendChild(styleBox.div);
+ if (cue.region != null) {
+ // 6.1.14.1
+ styleBox = new RegionCueStyleBox(window, cue);
- // Move the cue div to it's correct line position.
- moveBoxToLinePosition(window, styleBox, containerBox, boxPositions);
+ if (!regionNodeBoxes[cue.region.id]) {
+ // create regionNode
+ // Adjust the container hieght to exclude the controlBar
+ var adjustContainerBox = BoxPosition.getSimpleBoxPosition(rootOfCues);
+ if (controlBarShown) {
+ adjustContainerBox.height -= controlBarBox.height;
+ adjustContainerBox.bottom += controlBarBox.height;
+ }
+ regionNodeBox = new RegionNodeBox(window, cue.region, adjustContainerBox);
+ regionNodeBoxes[cue.region.id] = regionNodeBox;
+ }
+ // 6.1.14.3
+ var currentRegionBox = regionNodeBoxes[cue.region.id];
+ var currentRegionNodeDiv = currentRegionBox.div;
+ // 6.1.14.3.2
+ // TODO: fix me, it looks like the we need to set/change "top" attribute at the styleBox.div
+ // to do the "scroll up", however, we do not implement it yet?
+ if (cue.region.scroll == "up" && currentRegionNodeDiv.childElementCount > 0) {
+ styleBox.div.style.transitionProperty = "top";
+ styleBox.div.style.transitionDuration = "0.433s";
+ }
- // Remember the computed div so that we don't have to recompute it later
- // if we don't have too.
- cue.displayState = styleBox.div;
+ currentRegionNodeDiv.appendChild(styleBox.div);
+ rootOfCues.appendChild(currentRegionNodeDiv);
+ cue.displayState = styleBox.div;
+ boxPositions.push(BoxPosition.getSimpleBoxPosition(currentRegionBox));
+ } else {
+ // Compute the intial position and styles of the cue div.
+ styleBox = new CueStyleBox(window, cue, styleOptions);
+ styleBox.cueDiv.style.setProperty("--cue-font-size", fontSize + "px");
+ rootOfCues.appendChild(styleBox.div);
- boxPositions.push(BoxPosition.getSimpleBoxPosition(styleBox));
+ // Move the cue div to it's correct line position.
+ moveBoxToLinePosition(window, styleBox, containerBox, boxPositions);
+
+ // Remember the computed div so that we don't have to recompute it later
+ // if we don't have too.
+ cue.displayState = styleBox.div;
+
+ boxPositions.push(BoxPosition.getSimpleBoxPosition(styleBox));
+ }
}
})();
};
WebVTT.Parser = function(window, decoder) {
this.window = window;
this.state = "INITIAL";
this.buffer = "";