mirror of
https://github.com/cappuccino/cappuccino.git
synced 2026-09-14 22:51:28 +00:00
Merge branch 'master' of git@github.com:280north/cappuccino
This commit is contained in:
@@ -0,0 +1,140 @@
|
||||
|
||||
var OS = require("os");
|
||||
var FILE = require("file");
|
||||
var ByteString = require("binary").ByteString;
|
||||
|
||||
var javaImageSize = function (aFilePath)
|
||||
{
|
||||
var imageStream = javax.imageio.ImageIO.createImageInputStream(new Packages.java.io.File(aFilePath).getCanonicalFile()),
|
||||
readers = javax.imageio.ImageIO.getImageReaders(imageStream),
|
||||
reader = null;
|
||||
|
||||
if(readers.hasNext())
|
||||
reader = readers.next();
|
||||
|
||||
else
|
||||
{
|
||||
imageStream.close();
|
||||
//can't read image format... what do you want to do about it,
|
||||
//throw an exception, return ?
|
||||
}
|
||||
|
||||
reader.setInput(imageStream, true, true);
|
||||
|
||||
// Now we know the size (yay!)
|
||||
var size = {width:reader.getWidth(0), height:reader.getHeight(0)};
|
||||
|
||||
reader.dispose();
|
||||
imageStream.close();
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
var server = null;
|
||||
|
||||
var serverImageSize = function (aFilePath)
|
||||
{
|
||||
if (!server)
|
||||
{
|
||||
var cmd = "NARWHAL_ENGINE_HOME='' NARWHAL_ENGINE=rhino narwhal "+OS.enquote(module.path);
|
||||
server = OS.popen(cmd, { charset : "UTF-8" });
|
||||
}
|
||||
|
||||
var request = aFilePath.toByteString("UTF-8");
|
||||
sendLengthPrefixMessage(server.stdin.raw, request);
|
||||
|
||||
var response = receiveLengthPrefixMessage(server.stdout.raw);
|
||||
return JSON.parse(response.decodeToString("UTF-8"));
|
||||
}
|
||||
|
||||
if (system.engine == "rhino")
|
||||
exports.sizeOfImageAtPath = javaImageSize;
|
||||
else
|
||||
exports.sizeOfImageAtPath = serverImageSize;
|
||||
|
||||
// TODO: move these methods somewhere else?
|
||||
|
||||
var bytesToNumberLE = function(bytes) {
|
||||
var acc = 0;
|
||||
for (var i = 0; i < bytes.length; i++)
|
||||
acc += bytes.get(i) << (8*i);
|
||||
return acc;
|
||||
}
|
||||
|
||||
var bytesToNumberBE = function(bytes) {
|
||||
var acc = 0;
|
||||
for (var i = 0; i < bytes.length; i++)
|
||||
acc = (acc << 8) + bytes.get(i);
|
||||
return acc;
|
||||
}
|
||||
|
||||
var numberToBytesLE = function(number, length) {
|
||||
var bytes = [];
|
||||
for (var i = 0; i < length; i++)
|
||||
bytes[i] = (number >> (8*i)) & 0xFF;
|
||||
return new ByteString(bytes);
|
||||
}
|
||||
|
||||
var numberToBytesBE = function(number, length) {
|
||||
var bytes = [];
|
||||
for (var i = 0; i < length; i++)
|
||||
bytes[length-i-1] = (number >> (8*i)) & 0xFF;
|
||||
return new ByteString(bytes);
|
||||
}
|
||||
|
||||
var lengthPrefixServer = function(stream, callback, prefixLength) {
|
||||
var bytes;
|
||||
do {
|
||||
bytes = receiveLengthPrefixMessage(stream, prefixLength);
|
||||
callback(bytes);
|
||||
} while (bytes);
|
||||
}
|
||||
|
||||
var receiveLengthPrefixMessage = function(stream, prefixLength) {
|
||||
var prefixBytes = stream.read(prefixLength || 4);
|
||||
var length = bytesToNumberBE(prefixBytes);
|
||||
var bytes = stream.read(length);
|
||||
return bytes;
|
||||
}
|
||||
|
||||
var sendLengthPrefixMessage = function(stream, bytes, prefixLength) {
|
||||
var lengthBytes = numberToBytesBE(bytes.length, prefixLength || 4);
|
||||
stream.write(lengthBytes).write(bytes).flush();
|
||||
}
|
||||
|
||||
if (module == require.main)
|
||||
{
|
||||
var bytes;
|
||||
while (bytes = receiveLengthPrefixMessage(require("system").stdin.raw))
|
||||
{
|
||||
var fileName = bytes.decodeToString("UTF-8");
|
||||
var size = javaImageSize(fileName);
|
||||
|
||||
sendLengthPrefixMessage(require("system").stdout.raw, JSON.stringify(size).toByteString("UTF-8"));
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
//ASYNCHRONOUS, so not useful to us
|
||||
|
||||
function jscImageSize(aFilePath)
|
||||
{
|
||||
var MIME_TYPES = {
|
||||
".png" : "image/png",
|
||||
".jpg" : "image/jpeg",
|
||||
".jpeg" : "image/jpeg",
|
||||
".gif" : "image/gif",
|
||||
".tif" : "image/tiff",
|
||||
".tiff" : "image/tiff"
|
||||
},
|
||||
FILE = require("file");
|
||||
|
||||
var image = new Image();
|
||||
|
||||
image.src = "data:" + MIME_TYPES[FILE.extension(aFilePath)] + ";base64," + require("base64").encode(FILE.read(aFilePath, { mode : 'b'}));
|
||||
|
||||
return CGSizeMake(image.width, image.height);
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
@@ -172,11 +172,7 @@ exports.make_narwhal_factory = function(path)
|
||||
return function(require, exports, module, system, print)
|
||||
{
|
||||
Executable.setCommonJSArguments(require, exports, module, system, print, window);
|
||||
|
||||
Executable.fileImporterForURL(FILE.dirname(path))(path, YES, function()
|
||||
{
|
||||
print("all done");
|
||||
});
|
||||
Executable.fileImporterForURL(FILE.dirname(path))(path, YES);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
|
||||
@import <AppKit/_CPCibCustomResource.j>
|
||||
|
||||
var FILE = require("file");
|
||||
|
||||
@implementation _CPCibCustomResource (NSCoding)
|
||||
|
||||
@@ -47,9 +48,8 @@
|
||||
|
||||
if (!resourcePath)
|
||||
CPLog.warn("***WARNING: Resource named " + _resourceName + " not found in supplied resources path.");
|
||||
|
||||
else
|
||||
size = imageSize(resourcePath);
|
||||
size = imageSize(FILE.join(FILE.cwd(), resourcePath));
|
||||
}
|
||||
|
||||
_properties = [CPDictionary dictionaryWithObject:size forKey:@"size"];
|
||||
@@ -60,56 +60,8 @@
|
||||
|
||||
@end
|
||||
|
||||
function imageSize(aFilePath)
|
||||
{
|
||||
return (system.engine === "rhino") ? javaImageSize(aFilePath) : jscImageSize(aFilePath);
|
||||
}
|
||||
|
||||
function javaImageSize(aFilePath)
|
||||
{
|
||||
var imageStream = javax.imageio.ImageIO.createImageInputStream(new Packages.java.io.File(aFilePath).getCanonicalFile()),
|
||||
readers = javax.imageio.ImageIO.getImageReaders(imageStream),
|
||||
reader = null;
|
||||
|
||||
if(readers.hasNext())
|
||||
reader = readers.next();
|
||||
|
||||
else
|
||||
{
|
||||
imageStream.close();
|
||||
//can't read image format... what do you want to do about it,
|
||||
//throw an exception, return ?
|
||||
}
|
||||
|
||||
reader.setInput(imageStream, true, true);
|
||||
|
||||
// Now we know the size (yay!)
|
||||
var size = CGSizeMake(reader.getWidth(0), reader.getHeight(0));
|
||||
|
||||
reader.dispose();
|
||||
imageStream.close();
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
function jscImageSize(aFilePath)
|
||||
{
|
||||
var MIME_TYPES = {
|
||||
".png" : "image/png",
|
||||
".jpg" : "image/jpeg",
|
||||
".jpeg" : "image/jpeg",
|
||||
".gif" : "image/gif",
|
||||
".tif" : "image/tiff",
|
||||
".tiff" : "image/tiff"
|
||||
},
|
||||
FILE = require("file");
|
||||
|
||||
var image = new Image();
|
||||
|
||||
image.src = "data:" + MIME_TYPES[FILE.extension(aFilePath)] + ";base64," + require("base64").encode(FILE.read(aFilePath, { mode : 'b'}));
|
||||
|
||||
return CGSizeMake(image.width, image.height);
|
||||
}
|
||||
var ImageUtility = require("cappuccino/image-utility"),
|
||||
imageSize = ImageUtility.sizeOfImageAtPath;
|
||||
|
||||
@implementation NSCustomResource : _CPCibCustomResource
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user