//
// MultibitComp.m
//  
// Copyright (c) 1991 by Jiro Nakamura
// All Rights Reserved.
//
// Original Author:	Jiro Nakamura
// Created:		Jan 6, 1991
//
// RCS Information
// Revision Number->	$Revision: 2.1 $
// Last Revised->	$Date: 91/07/02 17:38:40 $
// ------------------
// History:
//	 3-Jun-91	Jiro Nakamura at The Shaman Group (jiro@shaman.com)
//		Frozen for Release 2.0 of ScanApp
// 	 6-Jan-91	Jiro Nakamura 
//		Created.

static char rcsid[]="$Id: MultibitCompView.m,v 2.1 91/07/02 17:38:40 jiro Exp Locker: jiro $";
static char copyrightid[] = "Copyright (C) 1991 by Jiro Nakamura. All Rights Reserved.";


#import "MultibitCompView.h"
#import <math.h>
#import <dpsclient/psops.h>
#import <dpsclient/wraps.h>

@implementation MultibitCompView
+ newFrame: (const NXRect *) frameRect
{
	self = [super newFrame: frameRect];
	brightness = contrast = 128;
	return self;
}

- drawSelf: (const NXRect *) rects : (int) rectCount
{
	double	bottomIntersection, topIntersection;
	double m, b;	// as in y = mx + b ....
	
	#ifdef DEBUG
		fprintf(stderr, "MultibitView: Updating, b = %d, c = %d\n",
			brightness, contrast);
	#endif
	
//	m =  tan( ((double) contrast * (M_PI/(256*2))));
//	b = brightness - 128;	
//	bottomIntersection = ((-128.0 - b) / m) + 128;
//	topIntersection = ((255.0 - 128.0 - b) / m) + 128;

	m =  tan( ((double) contrast * 45.0 / 128.0 * M_PI / 180.0));
	b = 128 - 128 * (brightness - 128) / 128;
  
	bottomIntersection = (-128.0 / m) + b;
	topIntersection = ((255.0 - 128.0) / m) + b;
	
	#ifdef DEBUG
		fprintf(stderr, "MultibitView: m=%f, b=%f, bi=%f, ti=%f\n",
			m, b, bottomIntersection, topIntersection);
	#endif

	[self lockFocus];
	
        PSsetgray (NX_WHITE);
        NXRectFill (&bounds);
	PSsetgray( NX_BLACK);
	PSsetlinewidth( 2.0 );
	PSscale( 0.5, 0.5 );
	PSmoveto( 0.0, 0.0 );
	PSlineto( bottomIntersection, 0.0);
	PSlineto( topIntersection, 255.0);
	PSlineto( 255.0, 255.0 );
	PSstroke();
	[self unlockFocus];	
	return self;
}
- setBrightness: (int) b andContrast: (int) c
{
	brightness = b;
	contrast = c;
	[self display];
	return self;
}

@end
