⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 connectionresponse.java

📁 定要上载质量高而定要上载质量高而定要上载质量高而定要上载质量高而定要上载质量高而
💻 JAVA
字号:
/*
 * Created on Aug 29, 2004
 */
package org.flexdock.docking.drag.outline.x11;

/**
 * @author Christopher Butler
 */
public class ConnectionResponse {
	private DataBuffer dataBuffer;
	private DataBuffer[] screens;
	private int resourceIndex;
	
	public ConnectionResponse(DataBuffer dataBuffer) {
		this.dataBuffer = dataBuffer;
		int offset = getScreenDataOffset();
		int screenLen = getScreenLength();
		screens = new DataBuffer[getScreenCount()];
		
		for(int i=0; i<screens.length; i++) {
			screens[i] = dataBuffer.getSubBuffer(offset, screenLen);
			offset += screenLen;
		}
	}
	
	public int getScreenCount() {
		// PixMap count is 28 bytes into the buffer
		// and one byte long
		return dataBuffer.readByte(28);
	}
	
	public int getVendorLength() {
		// length of vendor is 24 bytes into the buffer
		// and two bytes long
		return dataBuffer.readTwoBytes(24);
	}
	
	public int getPixMapFormatCount() {
		// PixMap count is 29 bytes into the buffer
		// and one byte long
		return dataBuffer.readByte(29);
	}
	
	public int getPixMapOffset() {
		// first 40 bytes are static.  
		int offset = 40;
		
		// After that, there is a variable-length 'vendor' string, with some 
		// possible padding to ensure a 4-byte data unit boundary.  Return the first 
		// 40 bytes, plus the padded vendor length.
		int vendorLength = DataBuffer.padLength(getVendorLength());
		return offset += vendorLength;
	}
	
	public int getScreenDataOffset() {
		// screen data starts after the pixmap format data.  pixmap format data
		// starts at its own variable-length offset, and there are a variable
		// number of these format structures.  each pixmap format structure is 
		// 8 bytes, we start at the pixmap format offset and add 8 times the number
		// of pixmap format structures in the data buffer to arrive at the screen data offset.
		return getPixMapOffset() + 8*getPixMapFormatCount();
	}
	
	public int getScreenLength() {
		// screen buffers are 40 bytes long, followed by the number of pixmap formats
		return 40 + getPixMapFormatCount();
	}
	
	public int getResourceIdBase() {
		// resource-id-base is 12 bytes into the buffer
		// and one byte long
		return dataBuffer.readFourBytes(12);
	}
	
	public int getResourceIdMask() {
		// resource-id-mask is 16 bytes bytes into the buffer
		// and one byte long
		return dataBuffer.readFourBytes(16);		
	}
	
	public synchronized int getNextResourceId() {
		// poor man's resource ID allocation.  I think we're supposed to use subsets of 
		// resourceIdMask indices, but this works fine for the time being, since we only 
		// intend to allocate a small numer of resources (maybe only one).  Who knows.  
		// This will probably break something down the road and we'll be forced to fix it.
		int id = resourceIndex++ | getResourceIdBase();
		return id; 
	}
	
	public int getRootWindowID(int screenIndex) {
		DataBuffer screen = screens[screenIndex];
		return screen.readFourBytes(0);
	}
	
	public int getWhitePixel(int screenIndex) {
		// white pixel is 8 bytes into the buffer
		// and four bytes long
		return screens[screenIndex].readFourBytes(8);		
	}
	
	public int getBlackPixel(int screenIndex) {
		// black pixel is 12 bytes into the buffer
		// and four bytes long
		return screens[screenIndex].readFourBytes(12);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -