<?xml version="1.0" encoding="UTF-8" ?> | |
<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file | |
distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under | |
the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may | |
obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to | |
in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF | |
ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under | |
the License. --> | |
<library> | |
<!--- Base container for a client, can be either: a remote-video (subscribing/playing a video) or a self-video (broadcasting | |
a cam/mic) --> | |
<class name="baseVideoObject" extends="view" bgcolor="0x000000" width="122" height="101"> | |
<switch> | |
<when property="$as3"> | |
<passthrough> | |
import flash.filters.DropShadowFilter; | |
import flash.media.* | |
import flash.net.SharedObject; | |
</passthrough> | |
</when> | |
</switch> | |
<!--- @keywords private --> | |
<attribute name="chatpartnername" value="" type="string" /> | |
<!--- @keywords private --> | |
<attribute name="showUserProfilePic" type="boolean" value="false" /> | |
<!--- color of this user, this is the color the user will also use for his chat-color --> | |
<attribute name="usercolor" value="0" type="number" /> | |
<!--- publicSID is a hash-value to identify a user --> | |
<attribute name="publicSID" value="" type="string" /> | |
<!--- micMuted indicates if the microphone is currently turned sound or gain to 0 --> | |
<attribute name="micMuted" value="false" type="boolean" /> | |
<!--- @keywords private --> | |
<attribute name="isremote" value="true" type="boolean" /> | |
<!--- @keywords private --> | |
<attribute name="clientVars" value="null" /> | |
<!--- @keywords private --> | |
<attribute name="isResizing" value="false" type="boolean" /> | |
<!--- @keywords private --> | |
<attribute name="isInterview" value="false" type="boolean" /> | |
<attribute name="respectRatio" value="true" type="boolean" /> | |
<attribute name="minimized" value="false" type="boolean" /> | |
<attribute name="hidebyAudioOnly" value="false" type="boolean" /> | |
<attribute name="custom" value="false" type="boolean" /> | |
<attribute name="initH" value="40" type="number" /> | |
<attribute name="initW" value="40" type="number" /> | |
<attribute name="isShowMicMute" value="false" type="boolean" /> | |
<attribute name="isMutedByModerator" value="false" type="boolean" /> | |
<attribute name="isMicrophonesRoom" value="false" type="boolean" /> | |
<attribute name="lastPositiveVolume" type="number" value="50" /> | |
<!-- Initial stream ratio: width / height --> | |
<attribute name="initRatio" type="number" value="null" /> | |
<attribute name="initialHeight" value="$once{ this.height }" type="number" /> | |
<handler name="onisremote" args="r"> | |
this.isremote = r; | |
</handler> | |
<handler name="oninit"> | |
<![CDATA[ | |
this.clientVars = new Array(); | |
this.clientVars['User']='No User Connected'; | |
if (this.isInterview) { | |
this._toolbar._minimize.setAttribute("visibility","hidden"); | |
this._resizeview.setAttribute("visibility","hidden"); | |
this._innerbottom.setAttribute("visibility","hidden"); | |
return; | |
} | |
if (this.custom) { | |
this._toolbar._minimize.setAttribute("visibility","hidden"); | |
this._resizeview.setAttribute("visibility","hidden"); | |
this._toolbar.setAttribute("visibility","hidden"); | |
this._resizeview.setAttribute("visibility","hidden"); | |
this._loudness.setAttribute("visibility","hidden"); | |
this._innertop.setAttribute("visibility","hidden"); | |
this._innerbottom.setAttribute("visibility","hidden"); | |
} | |
this.setShadow(); | |
if (this.publicSID == canvas.publicSID) { | |
this._toolbar._resync._tip.setAttribute("labelid",610); | |
} | |
this._giveExclusiveAudioView.bringToFront(); | |
this.isMicrophonesRoom = canvas.currentRoomObject.showMicrophoneStatus; | |
if (canvas.currentRoomObject.showMicrophoneStatus) { | |
this._innertop.setAttribute("bgcolor", "0xFF6600"); | |
this._innerbottom.setAttribute("bgcolor", "0xFF6600"); | |
} else { | |
this._innerbottom.setAttribute("visibility", "hidden"); | |
} | |
]]> | |
</handler> | |
<handler name="ony"> | |
<![CDATA[ | |
if (this.isInterview || this.custom || canvas.currentRoomObject.hideWhiteboard) { | |
return; | |
} | |
var bounds = this.getBounds(); | |
var parentBounds = canvas.getBounds(); | |
if (bounds.y < 0) { | |
this.setAttribute('y',0); | |
} | |
if (bounds.y > (parentBounds.height - bounds.height)) { | |
this.setAttribute('y', parentBounds.height - bounds.height ); | |
} | |
]]> | |
</handler> | |
<handler name="onx"> | |
<![CDATA[ | |
if (this.isInterview || this.custom) { | |
return; | |
} | |
var bounds = this.getBounds(); | |
var parentBounds = canvas.getBounds(); | |
if (bounds.x < 0) { | |
this.setAttribute('x',0); | |
} | |
if (bounds.x > (parentBounds.width - bounds.width)) { | |
this.setAttribute('x', parentBounds.width - bounds.width ); | |
} | |
]]> | |
</handler> | |
<method name="setShadow"> | |
<![CDATA[ | |
if (this.isinited){ | |
this.normalMC = this.getDisplayObject(); | |
//if($debug) Debug.write(this.normalMC); | |
//if($debug) Debug.write("this.normalMC: ",this.normalMC); | |
//if($debug) Debug.write("this: ",this); | |
this.displacementMap = new flash.filters.DropShadowFilter(); | |
this.normalMC.filters = [this.displacementMap]; | |
} | |
]]> | |
</method> | |
<!-- respect ratio and keep minimum width / height --> | |
<method name="setItemContraintsWidth" args="unused"> | |
<![CDATA[ | |
if (!this.respectRatio) { | |
return; | |
} | |
var h=this.width * this.initH/this.initW; | |
h=((h < this.initH ) ? initH : h); | |
if ($debug) Debug.write("setItemContraintsWidth",this.respectRatio,'orig',this.height,this.width,'new h',h); | |
this.setAttribute("height",h); | |
]]> | |
</method> | |
<method name="setItemContraintsHeight" args="unused"> | |
<![CDATA[ | |
if (!this.respectRatio) { | |
return; | |
} | |
var w=this.height * this.initW/this.initH; | |
w=((w < this.initW ) ? initW : w); | |
if ($debug) Debug.write("setItemContraintsHeight",this.respectRatio,'orig',this.height,this.width,'new w',w); | |
this.setAttribute("width",w); | |
]]> | |
</method> | |
<method name="updateAVSettingsSymbol" args="rcl"> | |
//FIXME: Set a Symbol wether this Client is Audio(only)/Video(only), both or Profile Picture | |
if ($debug) Debug.warn("updateAVSettingsSymbol TODO ",rcl); | |
</method> | |
<method name="doResize" args="bool"> | |
if ($debug) Debug.write("doResize",bool); | |
if(bool) { | |
dragHelper.create(); | |
} else { | |
dragHelper.remove(); | |
} | |
if (this.isInterview || this.custom) { | |
return; | |
} | |
if (bool) { | |
this.isResizing = true; | |
this.rs.apply(); | |
} else { | |
this.isResizing = false; | |
this.rs.remove(); | |
} | |
</method> | |
<!--- resets all values and stops the streaming --> | |
<method name="resetValues"> | |
<![CDATA[ | |
if ($debug) Debug.write("resetValues: ",this.isremote); | |
this.clientVars=null; | |
if (!this.isremote) { | |
deleteVideoConfProfilePic(); | |
} | |
if (this.isremote){ | |
this._chatvideoinner._videostream.restart(); | |
} else { | |
this._chatvideoinner._videostream._stop(); | |
} | |
]]> | |
</method> | |
<method name="setVideouserProfilePic" args="value"> | |
if ($debug) Debug.write("### setVideouserProfilePic ",value); | |
this.deleteVideoConfProfilePic(); | |
new lz.videoUserProfilePicSWF10(this._chatvideoinner,{name:'userProfilePic',value:value}); | |
this.showUserProfilePic = true; | |
</method> | |
<method name="deleteVideoConfProfilePic"> | |
if ($debug) Debug.write("### deleteVideoConfProfilePic ###"); | |
if ($debug) Debug.write("delete ",this.showUserProfilePic); | |
if (this.showUserProfilePic) { | |
this._chatvideoinner.userProfilePic.destroy(); | |
this.showUserProfilePic = false; | |
} | |
</method> | |
<!--- @keywords private --> | |
<method name="_startDragState" args="obj"> | |
if (this.isInterview || this.custom) { | |
return; | |
} | |
dragHelper.create(); | |
this.bringToFront(); | |
parent.bringToFront(); | |
this.dragger.apply(); | |
</method> | |
<!--- @keywords private --> | |
<method name="_removeDragState" args="obj"> | |
<![CDATA[ | |
lz.Cursor.unlock(); | |
if (this.x < 0) { | |
this.setAttribute("x",20); | |
} | |
if (this.y < 0) { | |
this.setAttribute("y",20); | |
} | |
if (this.x+this.width > parent.width) { | |
this.setAttribute("x",parent.width - this.width - 20); | |
} | |
if (this.y+this.height > parent.height) { | |
this.setAttribute("y",parent.height - this.height - 20); | |
} | |
dragHelper.remove(); | |
this.dragger.remove(); | |
]]> | |
</method> | |
<method name="minimize"> | |
<![CDATA[ | |
this.respectRatio = false; | |
this.setAttribute("minimized",true); | |
this._toolbar._minimize.setAttribute("visibility","hidden"); | |
this._toolbar._maximize2.setAttribute("visibility","visible"); | |
for (var eg in this.subviews) { | |
if (this.subviews[eg].name != "_toolbar" | |
&& this.subviews[eg].name != "_innertop" | |
&& this.subviews[eg].name != "_loudness") { | |
this.subviews[eg].setAttribute("visibility","hidden"); | |
} | |
} | |
this._loudness.setAttribute("x",this.width - 84 - (this.isShowMicMute ? 20 : 0)); | |
this._loudness.bringToFront(); | |
this.initialHeight = this.height; | |
//this.setAttribute("height",20); | |
this._minimizeZoom.setAttribute("to",20); | |
this._minimizeZoom.setAttribute('started', true); | |
]]> | |
</method> | |
<method name="reminimize"> | |
<![CDATA[ | |
this.setAttribute("minimized",false); | |
this._toolbar._minimize.setAttribute("visibility","visible"); | |
this._toolbar._maximize2.setAttribute("visibility","hidden"); | |
this._loudness.setAttribute("x",1); | |
//this.setAttribute("height",this.initialHeight); | |
if ($debug) Debug.write("this.initialHeight ",this.initialHeight); | |
this._minimizeZoom.setAttribute("to",this.initialHeight); | |
this._minimizeZoom.setAttribute('started', true); | |
]]> | |
</method> | |
<method name="reminimizeComplete"> | |
<![CDATA[ | |
if (!this.minimized) { | |
for (var eg in this.subviews) { | |
if (this.subviews[eg].name != "_toolbar" | |
&& this.subviews[eg].name != "_innertop" | |
&& this.subviews[eg].name != "_loudness" | |
&& this.subviews[eg].name != "_innerbottom") { | |
this.subviews[eg].setAttribute("visibility","visible"); | |
} | |
} | |
if (isMicrophonesRoom) { | |
this._innerbottom.setAttribute("visibility", "visible"); | |
} | |
this.respectRatio = true; | |
} | |
]]> | |
</method> | |
<view name="_innertop" width="${parent.width-2 }" height="18" x="1" y="1" | |
bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }"> | |
<text text="${ parent.parent.chatpartnername }" onmousedown="parent.parent._startDragState(this)" | |
onmouseup="parent.parent._removeDragState(this)" | |
width="${ parent.width-2 }" fgcolor="white" fontsize="9"> | |
<handler name="onmouseover"> | |
//cursor="arrow_draw_panel_cursor" | |
lz.Cursor.setCursorGlobal("arrow_draw_panel_cursor"); | |
</handler> | |
<handler name="onmouseout"> | |
lz.Cursor.unlock(); | |
</handler> | |
</text> | |
</view> | |
<view name="_innerbottom" width="${parent.width - 2}" x="1" y="${parent.height - 19}" height="18" | |
bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }"> | |
<text text="${canvas.getLabelName(1434)}" width="${ parent.width-2 }" fgcolor="white" name="title" fontsize="9" /> | |
</view> | |
<view name="_loudness" x="1" visible="${parent.isremote}" y="${parent.height - 20 - ((parent._innerbottom.visible) ? 18 : 0) }"> | |
<method name="setSpeaking" args="bool"> | |
this.loudness.setAttribute('opacity', bool ? 1 : 0.2); | |
</method> | |
<view x="2" y="2" name="loudness" resource="speaking" opacity="0.2" onmouseover="" onmouseout=""> | |
<handler name="onclick"> | |
<![CDATA[ | |
if (canvas.ismoderator || canvas.isAllowedToGiveExclusiveAudio) { | |
parent.parent.confirmExclusiveAudio(); | |
} else { | |
new lz.labelerrorPopupSWF10(canvas,{errorlabelid:1478}); | |
} | |
]]> | |
</handler> | |
<labelTooltip inittwice="true" labelid="372" /> | |
</view> | |
</view> | |
<view name="_resizeview" x="${ this.parent.width - 16 }" valign="bottom" resource="explorer_resize_rsc" cursor="explorer_resizemouse_rsc" | |
onmousedown="this.parent.doResize(true)" onmouseup="this.parent.doResize(false)"> | |
<handler name="oninit"> | |
//if ($debug) Debug.write("setTint"); | |
//TODO: Fix this, does not work at the moment | |
//canvas.protocol + '://code.google.com/p/openmeetings/issues/detail?id=470 | |
this.setColor(canvas.getThemeColor('baseMousecolorizer')); | |
</handler> | |
</view> | |
<view name="_toolbar" x="${ parent.width-this.width-2 }" layout="axis:x;spacing:0" y="2"> | |
<attribute name="isload" value="true" type="boolean" /> | |
<miniIconsPresenter name="_resync" iconRessourceName="resyncuser_rsc"> | |
<handler name="onclick"> | |
parent.parent.resetValues(); | |
if(!this.parent.parent.isremote) { | |
if ($debug) Debug.write("editRecordStream ################# baseVideObject isInterview" | |
,this.parent.parent.isInterview,this.parent.parent.interviewPodId); | |
if (this.parent.parent.isInterview) { | |
//TODO: fix it | |
new lz.editRecordStreamSWF10(canvas.inner,{ | |
name:"editRecordStream", | |
doDefaultAnimation:false, | |
isInterview:true, | |
interviewPodId:this.parent.parent.interviewPodId, | |
isSyncUpdate:true}); | |
} else { | |
new lz.editRecordStreamSWF10(canvas.inner,{ | |
name:"editRecordStream", | |
isInterview:false, | |
isSyncUpdate:true}); | |
} | |
} | |
</handler> | |
<labelTooltip name="_tip" labelid="540" /> | |
</miniIconsPresenter> | |
<miniIconsPresenter name="_mute" width="16" height="16" iconRessourceName="mute_micro_btn_rsc"> | |
<handler name="onclick"> | |
parent.parent.silenceMicrophone(!parent.parent.micMuted); | |
</handler> | |
<labelTooltip name="_tip" labelid="1405" /> | |
</miniIconsPresenter> | |
<miniIconsPresenter x="0" y="0" name="_volume" width="16" height="16" iconRessourceName="volume"> | |
<handler name="oninit"> | |
_tip.setAttribute("labelid", parent.parent.isremote ? 1511 : 1512); | |
</handler> | |
<handler name="onclick"> | |
var volume = parent.parent.getStreamVolume(); | |
var sliderHeight = 120; | |
var sliderX = | |
this.getAttributeRelative('x',canvas) - 2; | |
var pick = new lz.VolumeSlider(canvas, { | |
height:sliderHeight, | |
x:sliderX, | |
y:(parent.getAttributeRelative('y',canvas) - sliderHeight/2), | |
initialNumber:volume, | |
videoObject:parent.parent | |
}); | |
lz.ModeManager.makeModal(pick); | |
</handler> | |
<labelTooltip name="_tip" /> | |
</miniIconsPresenter> | |
<miniIconsPresenter name="_minimize" iconRessourceName="btn_presenter_minimize"> | |
<handler name="onclick"> | |
this.parent.parent.minimize(); | |
</handler> | |
<labelTooltip labelid="856" /> | |
</miniIconsPresenter> | |
<miniIconsPresenter name="_maximize2" visibility="hidden" iconRessourceName="btn_presenter_maximize"> | |
<handler name="onclick"> | |
this.parent.parent.reminimize(); | |
</handler> | |
<labelTooltip labelid="857" /> | |
</miniIconsPresenter> | |
</view> | |
<view name="_giveExclusiveAudioView" valign="middle" align="center" visible="false"> | |
<view name="_micButton" width="40" height="40" resource="mic_rsc" showhandcursor="true"> | |
<labelTooltip name="_toolTipTextExclusiveAudio" labelid="1386" /> | |
</view> | |
</view> | |
<handler name="onmouseover"> | |
<![CDATA[ | |
if (this.isInterview || this.minimized) { | |
return; | |
} | |
if (canvas.ismoderator || canvas.isAllowedToGiveExclusiveAudio) { | |
this._giveExclusiveAudioView._micButton._toolTipTextExclusiveAudio.doonmouseover(); | |
this._giveExclusiveAudioView.setAttribute("visible", true); | |
} | |
]]> | |
</handler> | |
<handler name="onmouseout"> | |
<![CDATA[ | |
if (this.isInterview || this.minimized) { | |
return; | |
} | |
this._giveExclusiveAudioView._micButton._toolTipTextExclusiveAudio.cleanHolder(); | |
this._giveExclusiveAudioView.setAttribute("visible", false); | |
]]> | |
</handler> | |
<handler name="onclick"> | |
<![CDATA[ | |
if (canvas.ismoderator || canvas.isAllowedToGiveExclusiveAudio) { | |
this._giveExclusiveAudioView._micButton._toolTipTextExclusiveAudio.cleanHolder(); | |
this.confirmExclusiveAudio(); | |
} else { | |
new lz.labelerrorPopupSWF10(canvas,{errorlabelid:1478}); | |
} | |
]]> | |
</handler> | |
<dragstate name="dragger" /> | |
<resizestatemin name="rs" resize_min_width="70" resize_min_height="70" /> | |
<dragHelper name="dragHelper" /> | |
<animator name="_minimizeZoom" attribute="height" duration="750" to="20" started="false"> | |
<handler name="onstop" args="s"> | |
parent.reminimizeComplete(); | |
</handler> | |
</animator> | |
<handler name="onismoderator" reference="canvas" args="m"> | |
<![CDATA[ | |
if ($debug) Debug.write("###### ismoderator ", m); | |
if (this.minimized) { | |
this._loudness.setAttribute("x",this.width - 84 - (this.isShowMicMute ? 20 : 0)); | |
this._loudness.bringToFront(); | |
} | |
]]> | |
</handler> | |
<method name="giveExclusiveAudio"> | |
canvas.videoComp_lc.send(canvas.videoComp_lc_name, 'lc_giveExclusiveAudio', this.publicSID); | |
</method> | |
<method name="confirmExclusiveAudio"> | |
var so:SharedObject = SharedObject.getLocal('userdata'); | |
var userData = so.data; | |
var dontShowExclusiveAudioConfirmation = userData["dontShowExclusiveAudioConfirmation"]; | |
var exclusiveAudioListener = new Object(); | |
exclusiveAudioListener.sendNoConfirmation = function() {}; | |
exclusiveAudioListener.sendConfirmation = function(answer, remember) { | |
if (answer) { | |
giveExclusiveAudio(); | |
if (remember) { | |
userData["dontShowExclusiveAudioConfirmation"] = true; | |
so.flush(); | |
} | |
} | |
}; | |
if (dontShowExclusiveAudioConfirmation == true) { | |
exclusiveAudioListener.sendConfirmation(true, true); | |
} else { | |
new lz.confirmationSingleSWF10(canvas,{ | |
labelid:1428, | |
labeliderror:1539, | |
refObj:exclusiveAudioListener, | |
showCheckBox:true}); | |
} | |
</method> | |
<!-- This will mute the Microphone only to the person that is speaking if the gain is set to zero NOBODY will hear 'em --> | |
<method name="muteMicrophone" args="roomClientObj"> | |
<![CDATA[ | |
if ($debug) Debug.write("############ muteMicrophone ", roomClientObj.micMuted, roomClientObj.publicSID, this.publicSID); | |
if (roomClientObj.publicSID == this.publicSID) { | |
if ($debug) Debug.write("Set Mute for Client :: ", roomClientObj); | |
if ($debug) Debug.write("############ SET GAIN " + roomClientObj.micMuted); | |
this._chatvideoinner._videostream.muteMicro(roomClientObj.micMuted); | |
this.isMutedByModerator = roomClientObj.micMuted; | |
this.setMicMuted(roomClientObj.micMuted); | |
} | |
]]> | |
</method> | |
<!-- This will mute it only locally, that means on other screens the user might be still online and loud --> | |
<method name="silenceMicrophone" args="mute"> | |
<![CDATA[ | |
if ($debug) Debug.write("############ silenceMicrophone ", this.publicSID); | |
if (this.publicSID == canvas.publicSID) { | |
//self sound turned off | |
canvas.videoComp_lc.send(canvas.videoComp_lc_name, 'lc_switchMicMuted', this.publicSID, mute); | |
if (!mute) { | |
this._chatvideoinner._videostream.muteMicro(false); | |
} | |
} else { | |
//disable this action for now | |
if (!canvas.ismoderator) { | |
new lz.labelerrorPopupSWF10(canvas,{errorlabelid:1409}); | |
return; | |
} | |
//you can not unmute it locally by putting sound to 100 cause the gain is set to zero globally in the micro of the sender! | |
//so setting the sound/volume on the other remote clients has zero effect | |
if (this.isMutedByModerator && !canvas.ismoderator) { | |
//FIXME: That is not true, you could restart audio/video ... | |
var errorlabelid = this.publicSID == canvas.publicSID ? 1387 : 1402; | |
new lz.labelerrorPopupSWF10(canvas,{errorlabelid:errorlabelid}); | |
return; | |
} | |
if (canvas.ismoderator) { | |
canvas.videoComp_lc.send(canvas.videoComp_lc_name, 'lc_switchMicMuted', this.publicSID, mute); | |
} else { | |
this._chatvideoinner._videostream.setSoundVolume(mute ? 0 : 100); | |
} | |
} | |
this.setMicMuted(mute); | |
]]> | |
</method> | |
<method name="setMicMuted" args="micMuted"> | |
<![CDATA[ | |
this.micMuted = micMuted; | |
this._toolbar._mute._tip.setAttribute("labelid", micMuted ? "1406" : "1405"); | |
this._toolbar._mute._itemRsc.setAttribute('frame', micMuted ? 2 : 1); | |
if (isMicrophonesRoom) { | |
var label = canvas.getLabelName(micMuted ? 1435 : 1434); | |
var color = micMuted ? canvas.getThemeColor('basebgcolorizer') : "0xFF6600"; | |
this._innertop.setAttribute('bgcolor', color); | |
this._innerbottom.setAttribute('bgcolor', color); | |
this._innerbottom.title.setAttribute('text', label); | |
} | |
]]> | |
</method> | |
<method name="setStreamVolume" args="v"> | |
if ($debug) Debug.write("############ setStreamVolume ", v, this.publicSID); | |
var stream = this._chatvideoinner._videostream; | |
if (this.isremote) { | |
stream.setSoundVolume(v); | |
} else { | |
stream.setAttribute('micGain', v); | |
stream.micro.gain = v; | |
if (0 == v) { | |
this.setMicMuted(true); | |
canvas.videoComp_lc.send(canvas.videoComp_lc_name, 'lc_switchMicMuted', this.publicSID, true); | |
} else if (micMuted) { | |
this.silenceMicrophone(false); | |
} | |
} | |
</method> | |
<method name="getStreamVolume"> | |
var stream = this._chatvideoinner._videostream; | |
return this.isremote ? Number(stream._ns.soundTransform.volume * 100) : stream.micro.gain; | |
</method> | |
<handler name="onheight" args="value"> | |
if (null == initRatio || !respectRatio) { | |
return; | |
} | |
var videoHeight = value - this.videoInsetY - this.bottomBarHeight; | |
var expectedVideoWidth = videoHeight * initRatio; | |
var expectedPodWidth = expectedVideoWidth + this.videoInsetX; | |
if (this.width != expectedPodWidth) { | |
this.setAttribute("width", expectedPodWidth); | |
} | |
</handler> | |
<handler name="onwidth" args="value"> | |
if (null == initRatio || !respectRatio) { | |
return; | |
} | |
var videoWidth = value - this.videoInsetX; | |
var expectedVideoHeight = videoWidth / initRatio; | |
var expectedPodHeight = expectedVideoHeight + this.videoInsetY + this.bottomBarHeight; | |
if (this.height != expectedPodHeight) { | |
this.setAttribute("height", expectedPodHeight); | |
} | |
</handler> | |
</class> | |
</library> |