/*$Copyright:
 * Copyright (C) 1992.5.22. Recruit Co.,Ltd. 
 * Institute for Supercomputing Research
 * All rights reserved.
 * NewsBase  by ISR, Kazuto MIYAI, Gary ARAKAKI, Katsunori SUZUKI, Kok-meng Lue
 *
 * You may freely copy, distribute and reuse the code in this program under 
 * following conditions.
 * - to include this notice in the source code, if it is to be distributed 
 *   with source code.
 * - to add the file named "COPYING" within the code, which shall include 
 *   GNU GENERAL PUBLIC LICENSE(*).
 * - to display an acknowledgement in binary code as follows: "This product
 *   includes software developed by Recruit Co.,Ltd., ISR."
 * - to display a notice which shall state that the users may freely copy,
 *   distribute and reuse the code in this program under GNU GENERAL PUBLIC
 *   LICENSE(*)
 * - to indicate the way to access the copy of GNU GENERAL PUBLIC LICENSE(*)
 *
 *   (*)GNU GENERAL PUBLIC LICENSE is stored in the file named COPYING
 * 
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
 * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
$*/

// IEpsD is the media class for EPS.  The file extension, RTF control word
// and pasteboard type are "eps", "MMeps" and NXPostScriptPboardtype,
// respectively.

#import "IJfifD.h"
#import "JFIFBitmap.h"
#import <appkit/NXImage.h>
#import <appkit/Pasteboard.h>
#import <libc.h>
#import "errdebug.h"

@implementation IJfifD

static NXAtom fileExtension;
static NXAtom pasteboardType;
static NXImage *icon;

+ initialize
{
    fileExtension = NXUniqueStringNoCopy("jpeg");
    pasteboardType = NXUniqueStringNoCopy("JFIF Format");
    [IMediaD getFileIconFor:(Class)self];
    return(self);
}

+ (NXAtom)fileExtension
{
    return(fileExtension);
}

+ (NXAtom)pasteboardType
{
    return(pasteboardType);
}

+ setIcon:(NXImage *)theIcon
{
    icon = theIcon;
    return(self);
}

+ (NXImage *)icon
{
    return(icon);
}

- initWithKey:(char *)pathName
{
    [super initWithKey:pathName];
    image = nil;
    return(self);
}

- (NXImage *)image 
{
    return(image);
}

- (BOOL)readFromStream:(NXStream *)inStream
{
    JFIFBitmap *bitmap;
    NXSize imageSize;

    [super readFromStream:inStream];
    bitmap = [[JFIFBitmap alloc] readJFIF:inStream];
    imageSize.width = [bitmap pixelsWide];
    imageSize.height = [bitmap pixelsHigh];
    image = [[NXImage allocFromZone:[self zone]] initSize:&imageSize];
    [image useCacheWithDepth:NX_TwentyFourBitRGBDepth];
    [image lockFocus];
    [bitmap draw];
    [image unlockFocus];
    [bitmap free];
    [image setDataRetained:YES];
    return(YES);
}

- free
{
    if (image != nil) {
        [image free];
    }
    return([super free]);
}

@end
