com.sun.webkit.graphics.RenderMediaControls Maven / Gradle / Ivy
The newest version!
/*
* Copyright (c) 2011, 2022, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package com.sun.webkit.graphics;
import java.lang.annotation.Native;
import java.util.HashMap;
import java.util.Map;
import com.sun.prism.paint.Color;
final class RenderMediaControls {
/**
* Media control part constants (types for the paintControl method)
*/
@Native private static final int PLAY_BUTTON = 1;
@Native private static final int PAUSE_BUTTON = 2;
@Native private static final int DISABLED_PLAY_BUTTON = 3;
@Native private static final int MUTE_BUTTON = 4;
@Native private static final int UNMUTE_BUTTON = 5;
@Native private static final int DISABLED_MUTE_BUTTON = 6;
//@Native private static final int FULLSCREEN_BUTTON = 7;
// background for control panel (except buttons)
//@Native private static final int BACKGROUND = 8;
// Time slider track is rendered by paintTimeSliderTrack
@Native private static final int TIME_SLIDER_TRACK = 9;
@Native private static final int TIME_SLIDER_THUMB = 10;
@Native private static final int VOLUME_CONTAINER = 11;
// Volume slider track is rendered by paintVolumeTrack
@Native private static final int VOLUME_TRACK = 12;
@Native private static final int VOLUME_THUMB = 13;
//private static final int CURRENT_TIME = 14;
//private static final int REMAINING_TIME = 15;
private static String getControlName(int control) {
switch (control) {
case PLAY_BUTTON: return "PLAY_BUTTON";
case PAUSE_BUTTON: return "PAUSE_BUTTON";
case DISABLED_PLAY_BUTTON: return "DISABLED_PLAY_BUTTON";
case MUTE_BUTTON: return "MUTE_BUTTON";
case UNMUTE_BUTTON: return "UNMUTE_BUTTON";
case DISABLED_MUTE_BUTTON: return "DISABLED_MUTE_BUTTON";
//case FULLSCREEN_BUTTON: return "FULLSCREEN_BUTTON";
//case BACKGROUND: return "BACKGROUND";
case TIME_SLIDER_TRACK: return "TIME_SLIDER_TRACK";
case TIME_SLIDER_THUMB: return "TIME_SLIDER_THUMB";
case VOLUME_CONTAINER: return "VOLUME_CONTAINER";
case VOLUME_TRACK: return "VOLUME_TRACK";
case VOLUME_THUMB: return "VOLUME_THUMB";
//case CURRENT_TIME: return "CURRENT_TIME";
//case REMAINING_TIME: return "REMAINING_TIME";
}
return "{UNKNOWN CONTROL " + control + "}";
}
private RenderMediaControls() {} // disable instantiations
static void paintControl(WCGraphicsContext gc,
int type, int x, int y, int w, int h) {
if (log) {
log("paintControl, type=" + type + "(" + getControlName(type) + ")"
+ ", x=" + x + ", y=" + y + ", w=" + w + ", h=" + h);
}
switch (type) {
case PLAY_BUTTON:
paintControlImage("mediaPlay", gc, x, y, w, h);
break;
case PAUSE_BUTTON:
paintControlImage("mediaPause", gc, x, y, w, h);
break;
case DISABLED_PLAY_BUTTON:
paintControlImage("mediaPlayDisabled", gc, x, y, w, h);
break;
case MUTE_BUTTON:
paintControlImage("mediaMute", gc, x, y, w, h);
break;
case UNMUTE_BUTTON:
paintControlImage("mediaUnmute", gc, x, y, w, h);
break;
case DISABLED_MUTE_BUTTON:
paintControlImage("mediaMuteDisabled", gc, x, y, w, h);
break;
case TIME_SLIDER_THUMB:
paintControlImage("mediaTimeThumb", gc, x, y, w, h);
break;
case VOLUME_CONTAINER:
break;
case VOLUME_THUMB:
paintControlImage("mediaVolumeThumb", gc, x, y, w, h);
break;
default:
if (log) log("ERROR: paintControl, unknown type: " + type);
break;
}
}
private static final Color TimeSliderTrackUnbufferedColor =
rgba(0xec, 0x87, 0x7d);
private static final Color TimeSliderTrackBufferedColor =
rgba(0xf9, 0x1a, 0x02);
private static final int TimeSliderTrackThickness = 3;
static void paintTimeSliderTrack(WCGraphicsContext gc,
float duration, float curTime, float[] bufferedPairs,
int x, int y, int w, int h) {
if (log) {
String bufStr = "{";
for (int i=0; i0) {
bufStr += ", ";
}
bufStr += "[" + bufferedPairs[i] + "-" + bufferedPairs[i+1]+"]";
}
bufStr +="}";
log("paintTimeSliderTrack, duration=" + duration
+ ", curTime=" + curTime
+ ", buffered=" + bufStr
+ ", x=" + x + ", y=" + y + ", w=" + w + ", h=" + h);
}
// make the track height TimeSliderTrackThickness pixels
y += (h - TimeSliderTrackThickness)/2;
h = TimeSliderTrackThickness;
// descrease width by width of the thumb (increasing x by half of the value)
int thumbWidth = (fwkGetSliderThumbSize(SLIDER_TYPE_TIME) >> 16) & 0xFFFF;
w -= thumbWidth;
x += thumbWidth/2;
if (duration < 0) {
// the media is not available
} else {
float timeToPixel = (1f / duration) * w;
float start = 0f;
for (int i=0; i controlImages
= new HashMap<>();
private static WCImage getControlImage(String resName) {
WCImage image = controlImages.get(resName);
if (image == null) {
WCImageDecoder decoder =
WCGraphicsManager.getGraphicsManager().getImageDecoder();
decoder.loadFromResource(resName);
WCImageFrame frame = decoder.getFrame(0);
if (frame != null) {
image = frame.getFrame();
controlImages.put(resName, image);
}
}
return image;
}
private static void paintControlImage(String resName,
WCGraphicsContext gc, int x, int y, int w, int h) {
WCImage image = getControlImage(resName);
if (image != null) {
// don't stretch the image, just center it
x += (w - image.getWidth()) / 2;
w = image.getWidth();
y += (h - image.getHeight()) / 2;
h = image.getHeight();
gc.drawImage(image,
x, y, w, h,
0f, 0f, image.getWidth(), image.getHeight());
} else {
if (log) log(" paintControlImage(" + resName + "), image is NULL");
}
}
private static Color rgba(int r, int g, int b, int a) {
return new Color((r & 0xFF) / 255.0f,
(g & 0xFF) / 255.0f,
(b & 0xFF) / 255.0f,
(a & 0xFF) / 255.0f);
}
private static Color rgba(int r, int g, int b) {
return rgba(r, g, b, 0xFF);
}
private final static boolean log = false;
private static void log(String s) {
System.out.println(s);
System.out.flush();
}
}