com.google.gwt.media.client.Video Maven / Gradle / Ivy
/*
* Copyright 2011 Google Inc.
*
* Licensed 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.
*/
package com.google.gwt.media.client;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Document;
import com.google.gwt.dom.client.VideoElement;
/**
*
* A widget representing a <video> element.
*
*
* Experimental API: This API is still under development
* and is subject to change.
*
*
* This widget may not be supported on all browsers.
*/
public class Video extends MediaBase {
/**
* Detector for permutations that might support {@link VideoElement}.
*/
@SuppressWarnings("unused")
private static class VideoElementSupportDetectedMaybe
extends VideoElementSupportDetector {
/**
* Using a compile-time check, return true if {@link VideoElement} might be
* supported.
*
* @return true if might be supported, false otherwise.
*/
@Override
boolean isSupportedCompileTime() {
return true;
}
}
/**
* Detector for permutations that do not support {@link VideoElement}.
*/
@SuppressWarnings("unused")
private static class VideoElementSupportDetectedNo
extends VideoElementSupportDetector {
/**
* Using a compile-time check, return true if {@link VideoElement} might be
* supported.
*
* @return true if might be supported, false otherwise.
*/
@Override
boolean isSupportedCompileTime() {
return false;
}
}
/**
* Detector for browser support of {@link VideoElement}.
*/
private static class VideoElementSupportDetector {
/**
* Using a run-time check, return true if the {@link VideoElement} is
* supported.
*
* @return true if supported, false otherwise.
*/
static native boolean isSupportedRunTime(VideoElement element) /*-{
return !!element.canPlayType;
}-*/;
/**
* Using a compile-time check, return true if {@link VideoElement} might be
* supported.
*
* @return true if might be supported, false otherwise.
*/
boolean isSupportedCompileTime() {
// will be true in VideoElementSupportDetectedMaybe
// will be false in VideoElementSupportDetectedNo
return false;
}
}
private static VideoElementSupportDetector detector;
/**
* Return a new {@link Video} if supported, and null otherwise.
*
* @return a new {@link Video} if supported, and null otherwise
*/
public static Video createIfSupported() {
if (detector == null) {
detector = GWT.create(VideoElementSupportDetector.class);
}
if (!detector.isSupportedCompileTime()) {
return null;
}
VideoElement element = Document.get().createVideoElement();
if (!detector.isSupportedRunTime(element)) {
return null;
}
return new Video(element);
}
/**
* Runtime check for whether the video element is supported in this browser.
*
* @return whether the video element is supported
*/
public static boolean isSupported() {
if (detector == null) {
detector = GWT.create(VideoElementSupportDetector.class);
}
if (!detector.isSupportedCompileTime()) {
return false;
}
VideoElement element = Document.get().createVideoElement();
if (!detector.isSupportedRunTime(element)) {
return false;
}
return true;
}
/**
* Protected constructor. Use {@link #createIfSupported()} to create a Video.
*/
protected Video(VideoElement element) {
super(element);
}
/**
* Creates a Video widget with a given source URL.
*
* @param src a String URL.
* @deprecated use {@link #createIfSupported()}.
*/
@Deprecated
public Video(String src) {
super(Document.get().createVideoElement());
getMediaElement().setSrc(src);
}
/**
* Returns a poster URL.
*
* @return a URL containing a poster image
*
* @see #setPoster(String)
*/
public String getPoster() {
return getVideoElement().getPoster();
}
/**
* Returns the attached VideoElement.
*
* @return the VideoElement
*/
public VideoElement getVideoElement() {
return getMediaElement().cast();
}
/**
* Gets the intrinsic height of video within the element.
*
* To get the element height, use {@link VideoElement#getOffsetHeight()}
*
* @return the height, in pixels
*/
public int getVideoHeight() {
return getVideoElement().getVideoHeight();
}
/**
* Gets the instrinsic width of the video within the element.
*
* To get the element width, use {@link VideoElement#getOffsetWidth()}
*
* @return the width, in pixels
*/
public int getVideoWidth() {
return getVideoElement().getVideoWidth();
}
/**
* Sets the poster URL.
*
* @param url the poster image URL
* @see #getPoster
*/
public void setPoster(String url) {
getVideoElement().setPoster(url);
}
}