| // 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. |
| package common; |
| |
| import java.awt.image.IndexColorModel; |
| import java.util.HashSet; |
| import java.util.Set; |
| |
| /** |
| * VncScreenDescription - contains information about remote VNC screen. |
| */ |
| public class ScreenDescription { |
| |
| protected Set<SizeChangeListener> sizeChangeListeners = new HashSet<SizeChangeListener>(); |
| |
| // Frame buffer size |
| protected int framebufferWidth = -1; |
| protected int framebufferHeight = -1; |
| |
| // Desktop name |
| protected String desktopName = null; |
| |
| // Bytes per pixel |
| protected int bytesPerPixel; |
| protected int colorDepth; |
| protected int bitsPerPixel; |
| protected int redShift; |
| protected int greenShift; |
| protected int blueShift; |
| protected int redMax; |
| protected int greenMax; |
| protected int blueMax; |
| protected boolean bigEndianFlag; |
| protected boolean trueColorFlag; |
| |
| public IndexColorModel colorMap = null; |
| |
| public ScreenDescription() { |
| } |
| |
| /** |
| * Store information about server pixel format. |
| */ |
| public void setPixelFormat(int bitsPerPixel, int depth, boolean bigEndianFlag, boolean trueColorFlag, int redMax, int greenMax, int blueMax, int redShift, |
| int greenShift, int blueShift) { |
| |
| bytesPerPixel = (bitsPerPixel + 7) / 8; |
| |
| this.bitsPerPixel = bitsPerPixel; |
| colorDepth = depth; |
| this.bigEndianFlag = bigEndianFlag; |
| this.trueColorFlag = trueColorFlag; |
| |
| this.redMax = redMax; |
| this.greenMax = greenMax; |
| this.blueMax = blueMax; |
| this.redShift = redShift; |
| this.greenShift = greenShift; |
| this.blueShift = blueShift; |
| } |
| |
| /** |
| * Store information about server pixel format. |
| */ |
| public void setPixelFormatRGBTrueColor(int bitsPerPixel) { |
| |
| switch (bitsPerPixel) { |
| case 8: |
| setPixelFormat(8, 8, false, false, -1, -1, -1, -1, -1, -1); |
| break; |
| case 15: |
| setPixelFormat(16, 15, false, true, 31, 31, 31, 0, 5, 10); |
| break; |
| case 16: |
| setPixelFormat(16, 16, false, true, 31, 63, 31, 0, 5, 11); |
| break; |
| case 24: |
| setPixelFormat(24, 24, false, true, 255, 255, 255, 0, 8, 16); |
| break; |
| case 32: |
| setPixelFormat(32, 24, false, true, 255, 255, 255, 0, 8, 16); |
| break; |
| default: |
| throw new RuntimeException("Unknown color depth."); |
| } |
| |
| } |
| |
| /** |
| * Store information about server screen size. |
| */ |
| public void setFramebufferSize(int width, int height) { |
| if (height <= 0 || width <= 0) |
| throw new RuntimeException("Incorrect framebuffer size: " + width + "x" + height + "."); |
| |
| framebufferWidth = width; |
| framebufferHeight = height; |
| |
| callSizeChangeListeners(width, height); |
| } |
| |
| protected void callSizeChangeListeners(int width, int height) { |
| for (SizeChangeListener listener : sizeChangeListeners) { |
| listener.sizeChanged(width, height); |
| } |
| } |
| |
| /** |
| * Store server desktop name. |
| */ |
| public void setDesktopName(String desktopName) { |
| this.desktopName = desktopName; |
| } |
| |
| // Getters for variables, as usual |
| |
| public String getDesktopName() { |
| return desktopName; |
| } |
| |
| public int getBytesPerPixel() { |
| return bytesPerPixel; |
| } |
| |
| public int getFramebufferHeight() { |
| return framebufferHeight; |
| } |
| |
| public int getFramebufferWidth() { |
| return framebufferWidth; |
| } |
| |
| public boolean isRGB888_32_LE() { |
| return (colorDepth == 24 && bitsPerPixel == 32 && redShift == 0 && greenShift == 8 && blueShift == 16 && redMax == 255 && greenMax == 255 && blueMax == 255 |
| && !bigEndianFlag && trueColorFlag); |
| } |
| |
| @Override |
| public String toString() { |
| return "ScreenDescription [framebufferWidth=" + framebufferWidth + ", framebufferHeight=" + framebufferHeight + ", desktopName=" + desktopName |
| + ", bytesPerPixel=" + bytesPerPixel + ", depth=" + colorDepth + ", bitsPerPixel=" + bitsPerPixel + ", redShift=" + redShift + ", greenShift=" + greenShift |
| + ", blueShift=" + blueShift + ", redMax=" + redMax + ", greenMax=" + greenMax + ", blueMax=" + blueMax + ", bigEndianFlag=" + bigEndianFlag |
| + ", trueColorFlag=" + trueColorFlag + "]"; |
| } |
| |
| public void addSizeChangeListener(SizeChangeListener sizeChangeListener) { |
| sizeChangeListeners.add(sizeChangeListener); |
| } |
| |
| public int getColorDeph() { |
| return colorDepth; |
| } |
| |
| } |