Index: GSDrawFunctions.m =================================================================== RCS file: /cvsroot/gnustep/gnustep/core/gui/Source/GSDrawFunctions.m,v retrieving revision 1.5 diff -u -r1.5 GSDrawFunctions.m --- GSDrawFunctions.m 31 May 2004 19:24:09 -0000 1.5 +++ GSDrawFunctions.m 20 Aug 2004 18:32:07 -0000 @@ -317,4 +317,94 @@ return rect; } ++ (void) drawGradient: (NSData*) gradient withSize: (NSArray*) size + border: (NSRect) border +{ + NSAffineTransform *transform; + NSDictionary* shader; + + transform=[[NSAffineTransform alloc] init]; + transform->matrix.m11=border.size.width; + transform->matrix.m12=0.0; + transform->matrix.m21=0.0; + transform->matrix.m22=border.size.height; + transform->matrix.tX=border.origin.x; + transform->matrix.tY=border.origin.y; + + shader = [[NSDictionary alloc] initWithObjectsAndKeys: + [NSNumber numberWithInt: 1], @"ShadingType", + [NSArray arrayWithObjects: + [NSNumber numberWithFloat: 0.0], + [NSNumber numberWithFloat: 1.0], + [NSNumber numberWithFloat: 0.0], + [NSNumber numberWithFloat: 1.0], nil], @"Domain", + transform, @"Matrix", + [NSMutableDictionary dictionaryWithObjectsAndKeys: + [NSNumber numberWithInt: 0],@"FunctionType", + [NSArray arrayWithObjects: + [NSNumber numberWithFloat: 0.0], // origin.x + [NSNumber numberWithFloat: 1.0], // x + width + [NSNumber numberWithFloat: 0.0], // origin.y + [NSNumber numberWithFloat: 1.0], // y + height + nil], + @"Domain", + [NSArray arrayWithObjects: + [NSNumber numberWithFloat: 0.0], + [NSNumber numberWithFloat: 1.0], + [NSNumber numberWithFloat: 0.0], + [NSNumber numberWithFloat: 1.0], + [NSNumber numberWithFloat: 0.0], + [NSNumber numberWithFloat: 1.0], + nil], + @"Range", + [NSNumber numberWithInt: 8],@"BitsPerSample", + size, @"Size", + gradient ,@"DataSource", + nil], @"Function", + nil]; + + PSshfill(shader); + [transform release]; +} + ++ (void) drawHorizontalGradient: (NSColor*) start to: (NSColor*) end frame: (NSRect) frame +{ + + unsigned char * data; + int datasize = 6 * sizeof (unsigned char); + data = malloc (datasize); + + data [0] = [start redComponent] * 255; + data [1] = [start greenComponent] * 255; + data [2] = [start blueComponent] * 255; + data [3] = [end redComponent] * 255; + data [4] = [end greenComponent] * 255; + data [5] = [end blueComponent] * 255; + + NSData* gradient = [NSData dataWithBytesNoCopy: data length: datasize]; + NSArray* size = [NSArray arrayWithObjects: [NSNumber numberWithInt: 2], [NSNumber numberWithInt: 1], nil]; + [GSDrawFunctions drawGradient: gradient withSize: size border: frame]; + free (data); +} + ++ (void) drawVerticalGradient: (NSColor*) start to: (NSColor*) end frame: (NSRect) frame +{ + + unsigned char * data; + int datasize = 6 * sizeof (unsigned char); + data = malloc (datasize); + + data [0] = [start redComponent] * 255; + data [1] = [start greenComponent] * 255; + data [2] = [start blueComponent] * 255; + data [3] = [end redComponent] * 255; + data [4] = [end greenComponent] * 255; + data [5] = [end blueComponent] * 255; + + NSData* gradient = [NSData dataWithBytesNoCopy: data length: datasize]; + NSArray* size = [NSArray arrayWithObjects: [NSNumber numberWithInt: 1], [NSNumber numberWithInt: 2], nil]; + [GSDrawFunctions drawGradient: gradient withSize: size border: frame]; + free (data); +} + @end