Package org.gstreamer.swt.overlay

Source Code of org.gstreamer.swt.overlay.SWTOverlay

/*
* Copyright (C) 2009 Levente Farkas <lfarkas@lfarkas.org>
*
* This file is part of gstreamer-java.
*
* This code is free software: you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License version 3 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
* version 3 for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* version 3 along with this work.  If not, see <http://www.gnu.org/licenses/>.
*/

package org.gstreamer.swt.overlay;

import java.lang.reflect.Field;

import org.eclipse.swt.widgets.Composite;
import org.gstreamer.Element;
import org.gstreamer.GstException;
import org.gstreamer.interfaces.XOverlay;

import com.sun.jna.Platform;

/**
* Interface for elements providing tuner operations
*/
public class SWTOverlay extends XOverlay {
    /**
     * Wraps the {@link Element} in a <tt>SWTOverlay</tt> interface
     *
     * @param element the element to use as a <tt>SWTOverlay</tt>
     * @return a <tt>SWTOverlay</tt> for the element
     */
    public static SWTOverlay wrap(Element element) {
        return new SWTOverlay(element);
    }
   
    /**
     * Creates a new <tt>SWTOverlay</tt> instance
     *
     * @param element the element that implements the tuner interface
     */
    private SWTOverlay(Element element) {
        super(element);
    }
   
    /**
     * Helper function to get the proper handle for a given SWT Composite.
     *
     * @param composite the SWT Composite for what i like to get the handle.
     * The type can't be Control since only Composite has embeddedHandle and
     * the Composite's style must be embedded. 
     * @return the handle of the Composite or 0 if the handle is not available.
     */
    public static long getNativeHandle(Composite composite) {
        if (composite != null /*&& ((composite.getStyle() | SWT.EMBEDDED) != 0)*/)
          try {
              Class<? extends Composite> compositeClass = composite.getClass();
              Field handleField = Platform.isLinux() ? compositeClass.getField("embeddedHandle") : compositeClass.getField("handle");
              Class<?> t = handleField.getType();
              if (t.equals(long.class))
                  return handleField.getLong(composite);
              else if (t.equals(int.class))
                  return handleField.getInt(composite);
          } catch (Exception e) {
              throw new GstException("Cannot set window ID, in XOverlay interface, composite is null or not SWT.EMBEDDED");
          }
        return 0L;
    }

    /**
     * Sets the native window for the {@link Element} to use to display video.
     *
     * @param window A native window to use to display video, or <tt>null</tt> to
     * stop using the previously set window.
     */
    public void setWindowHandle(Composite composite) {
        setWindowHandle(getNativeHandle(composite));
    }
    /**
     * Sets the native window for the {@link Element} to use to display video.
     *
     * @param window A native window to use to display video, or <tt>null</tt> to
     * stop using the previously set window.
     * @deprecated use {@link #setWindow(Composite)} instead
     */
    @Deprecated
    public void setWindowID(Composite composite) {
      setWindowHandle(composite);
    }
}
TOP

Related Classes of org.gstreamer.swt.overlay.SWTOverlay

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.