📄 xgraphicsconfiguration.java
字号:
void calcZPixmapModels(int bitsPerPixel) { switch (visual.getVisualClass()) { case Visual.VC_TRUE_COLOR: calcDecomposedRGBModels(bitsPerPixel); break; case Visual.VC_PSEUDO_COLOR: calcPseudoColorModels(bitsPerPixel); break; default: String msg = "unimplemented visual class"; throw new UnsupportedOperationException(msg); } } void calcDecomposedRGBModels(int bitsPerPixel) { int dataType = Buffers.smallestAppropriateTransferType(bitsPerPixel); if (DataBuffer.getDataTypeSize(dataType) == bitsPerPixel) { ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_sRGB); imageCM = new DirectColorModel(cs, visual.getDepth(), visual.getRedMask(), visual.getGreenMask(), visual.getBlueMask(), 0, // no alpha false, dataType); } else { throw new UnsupportedOperationException("unimplemented bits per pixel"); } } void calcPseudoColorModels(int bitsPerPixel) { if (colormap == null) colormap = visual.getScreen().getDefaultColormap(); XColor[] colArray = colormap.getXColors(); int numCol = colArray.length; byte[] rmap = new byte[numCol]; byte[] gmap = new byte[numCol]; byte[] bmap = new byte[numCol]; byte[] amap = new byte[numCol]; for (int i=0; i < numCol; i++) { XColor color = colArray[i]; if (color.getFlags() == Colormap.FLAG_SHARED) { rmap[i] = (byte) (color.getRed() >> 8); gmap[i] = (byte) (color.getGreen() >> 8); bmap[i] = (byte) (color.getBlue() >> 8); amap[i] = (byte) 0xff; } // else, leave default zero values... } imageCM = new IndexColorModel(visual.getDepth(), numCol, rmap, gmap, bmap, amap); } /** * Gets the associated device that this configuration describes. * * @return the device */ public GraphicsDevice getDevice() { throw new UnsupportedOperationException("not implemented"); } /** * Returns a buffered image optimized to this device, so that blitting can * be supported in the buffered image. * * @param w the width of the buffer * @param h the height of the buffer * @return the buffered image, or null if none is supported */ public BufferedImage createCompatibleImage(int width, int height, int transparency) { throw new UnsupportedOperationException("not implemented"); } /** * Returns a buffered volatile image optimized to this device, so that * blitting can be supported in the buffered image. Because the buffer is * volatile, it can be optimized by native graphics accelerators. * * @param w the width of the buffer * @param h the height of the buffer * @return the buffered image, or null if none is supported * @see Component#createVolatileImage(int, int) * @since 1.4 */ public VolatileImage createCompatibleVolatileImage(int w, int h) { throw new UnsupportedOperationException("not implemented"); } /** * FIXME: I'm not sure which color model that should be returned here. */ public ColorModel getColorModel() { if (pixelCM == null) preparePixelCM(); return pixelCM; } void preparePixelCM() { switch (visual.getVisualClass()) { case Visual.VC_TRUE_COLOR: pixelCM = new DirectColorModel(visual.getDepth(), visual.getRedMask(), visual.getGreenMask(), visual.getBlueMask()); break; case Visual.VC_PSEUDO_COLOR: if (colormap == null) colormap = visual.getScreen().getDefaultColormap(); XColor[] colArray = colormap.getXColors(); int numCol = colArray.length; byte[] rmap = new byte[numCol]; byte[] gmap = new byte[numCol]; byte[] bmap = new byte[numCol]; byte[] amap = new byte[numCol]; for (int i=0; i < numCol; i++) { XColor color = colArray[i]; if (color.getFlags() == Colormap.FLAG_SHARED) { rmap[i] = (byte) (color.getRed() >> 8); gmap[i] = (byte) (color.getGreen() >> 8); bmap[i] = (byte) (color.getBlue() >> 8); amap[i] = (byte) 0xff; } // else, leave default zero values... } pixelCM = new IndexColorModel(visual.getDepth(), numCol, rmap, gmap, bmap, amap); break; default: throw new UnsupportedOperationException("not implemented"); } } public ColorModel getColorModel(int transparency) { throw new UnsupportedOperationException("not implemented"); } public AffineTransform getDefaultTransform() { throw new UnsupportedOperationException("not implemented"); } public AffineTransform getNormalizingTransform() { throw new UnsupportedOperationException("not implemented"); } public Rectangle getBounds() { throw new UnsupportedOperationException("not implemented"); } Visual getVisual() { return visual; } /* FIXME: This should be moved to XGraphicsDevice... */ XFontMetrics getXFontMetrics (java.awt.Font awtFont) { // If the metrics object for this font is already cached, use it. // Otherwise create and cache it. Display display = visual.getScreen ().getDisplay (); XFontMetrics fm = fontMetricsCache.get (awtFont,display); if (fm == null) { String foundry = "*"; String family = awtFont.getName (); String weight = awtFont.isBold () ? "bold" : "medium"; String slant = awtFont.isItalic () ? "i" : "r"; String sWidth = "*"; String addStyle = ""; String pixelSize = "*"; String pointSize = awtFont.getSize () + "0"; String xres = "*"; String yres = "*"; String spacing = "*"; String averageWidth = "*"; String charset = "iso10646-1"; // because we use functions like XDrawString16 String logicalFontDescription = "-" + // FontNameRegistry prefix foundry + "-" + family + "-" + weight + "-" + slant + "-" + sWidth + "-" + addStyle + "-" + pixelSize + "-" + pointSize + "-" + xres + "-" + yres + "-" + spacing + "-" + averageWidth + "-"; // Try to load a Unicode font. If that doesn't work, try again, without // specifying the character set. try { gnu.gcj.xlib.Font xfont = new gnu.gcj.xlib.Font (display, logicalFontDescription + charset); fm = new XFontMetrics (xfont, awtFont); } catch (XException e) { gnu.gcj.xlib.Font xfont = new gnu.gcj.xlib.Font (display, logicalFontDescription + "*-*"); fm = new XFontMetrics (xfont, awtFont); } fontMetricsCache.put (awtFont,display,fm); } return fm; } int getPixel(Color color) { /* FIXME: consider an integer technique whenever * the ColorModel is 8 bits per color. * The problem with using integers is that it doesn't work unless * the colors are 8 bits each (as in the array), since ColorModel.getDataElement(int[],int) * expects non-normalized values. For example, in a 16-bit display mode, you * would typically have 5 bits each for red and blue, and 6 bits for green. int[] components = { color.getRed (), color.getGreen (), color.getBlue (), 0xff }; */ float[] normalizedComponents = { ((float)color.getRed ()) / 255F, ((float)color.getGreen ()) / 255F, ((float)color.getBlue ()) / 255F, 1 }; int[] unnormalizedComponents = { 0, 0, 0, 0xff }; ColorModel cm = getColorModel (); cm.getUnnormalizedComponents(normalizedComponents, 0, unnormalizedComponents, 0); return cm.getDataElement (unnormalizedComponents, 0); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -