mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-13 12:49:20 +02:00
+ SetAllPalette
+ SetPalette + GetPalette + GetDefaultPalette
This commit is contained in:
parent
bd452e05a9
commit
a4d8838546
147
rtl/inc/graph/palette.inc
Normal file
147
rtl/inc/graph/palette.inc
Normal file
@ -0,0 +1,147 @@
|
||||
{
|
||||
This file is part of the Free Pascal run time library.
|
||||
Copyright (c) 1993,99 by the Free Pascal development team
|
||||
|
||||
This include implements the different palette manipulation
|
||||
routines.
|
||||
|
||||
See the file COPYING.FPC, included in this distribution,
|
||||
for details about the copyright.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
**********************************************************************}
|
||||
|
||||
{CONST
|
||||
DefaultPalette : PaletteType =
|
||||
(255; }
|
||||
var
|
||||
DefaultColors : PaletteType;
|
||||
|
||||
procedure SetAllPalette(var Palette:PaletteType);
|
||||
var
|
||||
i: longint;
|
||||
Size: longint;
|
||||
begin
|
||||
Size:=Palette.Size; { number of entries...}
|
||||
{ first determine if we are not trying to }
|
||||
{ change too much colors... }
|
||||
if Palette.Size > PaletteSize then
|
||||
begin
|
||||
_GraphResult := grError;
|
||||
exit;
|
||||
end;
|
||||
Dec(Size); { Color arrays are indexed according to zero }
|
||||
for i:=0 to Size do
|
||||
begin
|
||||
{ skip if RGB values are -1 , as stated in the TP manual }
|
||||
if (Palette.Colors[i].Red <> -1) and (Palette.Colors[i].Green <> -1)
|
||||
and (Palette.Colors[i].Blue <> -1) then
|
||||
SetRGBPalette(i,
|
||||
Palette.Colors[i].Red,
|
||||
Palette.Colors[i].Green,
|
||||
Palette.Colors[i].Blue);
|
||||
end;
|
||||
end;
|
||||
|
||||
{********************************************************}
|
||||
{ Procedure SetPalette() }
|
||||
{--------------------------------------------------------}
|
||||
{ This routine changes the colorNum to the default }
|
||||
{ palette entry specified in the second parameter. }
|
||||
{ For example, SetPalette(0, Lightcyan) makes the }
|
||||
{ 0th palette entry to the default Light Cyan Color . }
|
||||
{********************************************************}
|
||||
Procedure SetPalette(ColorNum: word; Color: shortint);
|
||||
begin
|
||||
{ Check if we can actually change that palette color }
|
||||
if ColorNum > PaletteSize then
|
||||
Begin
|
||||
_GraphResult := grError;
|
||||
exit;
|
||||
end
|
||||
else
|
||||
{ Check if the max. default color is reached...}
|
||||
if Color > EGAWhite then
|
||||
begin
|
||||
_GraphResult := grError;
|
||||
exit;
|
||||
end;
|
||||
SetRGBPalette(ColorNum,
|
||||
DefaultColors.Colors[Color].Red,
|
||||
DefaultColors.Colors[Color].Green,
|
||||
DefaultColors.Colors[Color].Blue);
|
||||
end;
|
||||
|
||||
|
||||
procedure GetPalette(var Palette: PaletteType);
|
||||
var
|
||||
i: longint;
|
||||
size : longint;
|
||||
begin
|
||||
Palette.Size := PaletteSize;
|
||||
{ index at zero }
|
||||
size := PaletteSize - 1;
|
||||
for i:=0 to size do
|
||||
GetRGBPalette(i,
|
||||
Palette.Colors[i].Red,
|
||||
Palette.Colors[i].Green,
|
||||
Palette.Colors[i].Blue);
|
||||
end;
|
||||
|
||||
function GetPaletteSize: integer;
|
||||
begin
|
||||
GetPaletteSize := PaletteSize;
|
||||
end;
|
||||
|
||||
procedure GetDefaultPalette(var Palette: PaletteType);
|
||||
begin
|
||||
move(DefaultColors, Palette, sizeof(DefaultColors));
|
||||
{ The default palette always has 256 entries, but in reality }
|
||||
{ it depends on the number of colors possible. }
|
||||
Palette.Size := PaletteSize;
|
||||
end;
|
||||
|
||||
{
|
||||
procedure SetRGBPalette(ColorNum,RedValue,GreenValue,BlueValue:integer);
|
||||
begin
|
||||
asm
|
||||
movw $0x3c8,%DX
|
||||
movb ColorNum,%al
|
||||
outb %AL,%DX
|
||||
incw %DX
|
||||
movb RedValue,%al
|
||||
shrb $2,%al
|
||||
outb %AL,%DX
|
||||
movb GreenValue,%al
|
||||
shrb $2,%al
|
||||
outb %AL,%DX
|
||||
movb BlueValue,%al
|
||||
shrb $2,%al
|
||||
outb %AL,%DX
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure GetRGBPalette(ColorNum:byte; var RedValue,GreenValue,BlueValue:byte);
|
||||
begin
|
||||
asm
|
||||
movw $0x3c7,%DX
|
||||
movb ColorNum,%ax
|
||||
outb %AL,%DX
|
||||
addw $2,%DX
|
||||
xorl %eax,%eax
|
||||
inb %DX,%AL
|
||||
shlb $2,%al
|
||||
movb %al,RedValue
|
||||
inb %DX,%AL
|
||||
shlb $2,%al
|
||||
movb %al,GreenValue
|
||||
inb %DX,%AL
|
||||
shlb $2,%al
|
||||
movb %al,BlueValue
|
||||
end;
|
||||
end; }
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user