* the mode detection takes now care of window caption and border

+ 1024x768 and 1280x1024 modes added
  + special gui modes added: largest window and maximized window to
    use the desktop as much as possible
  * Hline fixed: the windows function LineTo doesn't draw the last pixel!
This commit is contained in:
florian 2000-03-24 10:49:17 +00:00
parent 17c623dc25
commit 03869981ef

View File

@ -70,6 +70,18 @@ CONST
m1280x1024x32k = $119; m1280x1024x32k = $119;
m1280x1024x64k = $11A; m1280x1024x64k = $11A;
{ some extra modes which applies only to GUI }
mLargestWindow16 = $f0;
mLargestWindow256 = $f1;
mLargestWindow32k = $f2;
mLargestWindow64k = $f3;
mLargestWindow16M = $f4;
mMaximizedWindow16 = $f5;
mMaximizedWindow256 = $f6;
mMaximizedWindow32k = $f7;
mMaximizedWindow64k = $f8;
mMaximizedWindow16M = $f9;
implementation implementation
@ -316,12 +328,12 @@ procedure HLine16Win32GUI(x,x2,y: integer);
pen:=CreatePen(PS_SOLID,1,c); pen:=CreatePen(PS_SOLID,1,c);
oldpen:=SelectObject(bitmapdc,pen); oldpen:=SelectObject(bitmapdc,pen);
Windows.MoveToEx(bitmapdc,x,y,nil); Windows.MoveToEx(bitmapdc,x,y,nil);
Windows.LineTo(bitmapdc,x2,y); Windows.LineTo(bitmapdc,x2+1,y);
SelectObject(bitmapdc,oldpen); SelectObject(bitmapdc,oldpen);
oldpen:=SelectObject(windc,pen); oldpen:=SelectObject(windc,pen);
Windows.MoveToEx(windc,x,y,nil); Windows.MoveToEx(windc,x,y,nil);
Windows.LineTo(windc,x2,y); Windows.LineTo(windc,x2+1,y);
SelectObject(windc,oldpen); SelectObject(windc,oldpen);
DeleteObject(pen); DeleteObject(pen);
@ -426,8 +438,7 @@ begin
{$endif def DEBUG_WM_PAINT} {$endif def DEBUG_WM_PAINT}
if graphrunning then if graphrunning then
{BitBlt(dc,0,0,maxx+1,maxy+1,bitmapdc,0,0,SRCCOPY);} {BitBlt(dc,0,0,maxx+1,maxy+1,bitmapdc,0,0,SRCCOPY);}
BitBlt(dc,r.left,r.top,r.right,r.bottom,bitmapdc,r.left,r.top,SRCCOPY); BitBlt(dc,r.left,r.top,r.right-r.left+1,r.bottom-r.top+1,bitmapdc,r.left,r.top,SRCCOPY);
EndPaint(Window,ps); EndPaint(Window,ps);
LeaveCriticalSection(graphdrawing); LeaveCriticalSection(graphdrawing);
Exit; Exit;
@ -480,21 +491,25 @@ begin
WindowClass.hCursor := LoadCursor(0, idc_Arrow); WindowClass.hCursor := LoadCursor(0, idc_Arrow);
WindowClass.hbrBackground := GetStockObject(BLACK_BRUSH); WindowClass.hbrBackground := GetStockObject(BLACK_BRUSH);
WindowClass.lpszMenuName := nil; WindowClass.lpszMenuName := nil;
WindowClass.lpszClassName := 'MyWindow'; WindowClass.lpszClassName := 'FPCGraphWindow';
winregister:=RegisterClass(WindowClass) <> 0; winregister:=RegisterClass(WindowClass) <> 0;
end; end;
var
// here we can force the creation of a maximized window }
extrastyle : longint;
{ Create the Window Class } { Create the Window Class }
function WinCreate: HWnd; function WinCreate : HWnd;
var var
hWindow: HWnd; hWindow: HWnd;
begin begin
hWindow := CreateWindow('MyWindow', windowtitle, hWindow := CreateWindow('FPCGraphWindow', windowtitle,
ws_OverlappedWindow, 50, 50, ws_OverlappedWindow or extrastyle, CW_USEDEFAULT, 0,
maxx+1+2*GetSystemMetrics(SM_CXBORDER), maxx+1+2*GetSystemMetrics(SM_CXFRAME),
maxy+1+2*GetSystemMetrics(SM_CYBORDER)+ maxy+1+2*GetSystemMetrics(SM_CYFRAME)+
GetSystemMetrics(SM_CYCAPTION), GetSystemMetrics(SM_CYCAPTION),
0, 0, system.MainInstance, nil); 0, 0, system.MainInstance, nil);
@ -519,14 +534,14 @@ function MessageHandleThread(p : pointer) : DWord;StdCall;
begin begin
if not WinRegister then if not WinRegister then
begin begin
MessageBox(0, 'Register failed', nil, mb_Ok); MessageBox(0, 'Window registration failed', nil, mb_Ok);
ExitThread(1); ExitThread(1);
end; end;
winregistered:=true; winregistered:=true;
end; end;
MainWindow := WinCreate; MainWindow := WinCreate;
if longint(mainwindow) = 0 then begin if longint(mainwindow) = 0 then begin
MessageBox(0, 'WinCreate failed', nil, mb_Ok); MessageBox(0, 'Window creation failed', nil, mb_Ok);
ExitThread(1); ExitThread(1);
end; end;
while longint(GetMessage(@AMessage, 0, 0, 0))=longint(true) do while longint(GetMessage(@AMessage, 0, 0, 0))=longint(true) do
@ -544,6 +559,14 @@ procedure InitWin32GUI16colors;
begin begin
getmem(pal,sizeof(RGBrec)*maxcolor); getmem(pal,sizeof(RGBrec)*maxcolor);
move(DefaultColors,pal^,sizeof(RGBrec)*maxcolor); move(DefaultColors,pal^,sizeof(RGBrec)*maxcolor);
if (IntCurrentMode=mMaximizedWindow16) or
(IntCurrentMode=mMaximizedWindow256) or
(IntCurrentMode=mMaximizedWindow32k) or
(IntCurrentMode=mMaximizedWindow64k) or
(IntCurrentMode=mMaximizedWindow16M) then
extrastyle:=ws_maximize
else
extrastyle:=0;
{ start graph subsystem } { start graph subsystem }
InitializeCriticalSection(graphdrawing); InitializeCriticalSection(graphdrawing);
graphrunning:=false; graphrunning:=false;
@ -621,177 +644,388 @@ function queryadapterinfo : pmodeinfo;
var var
mode: TModeInfo; mode: TModeInfo;
ScreenWidth,ScreenHeight : longint; ScreenWidth,ScreenHeight : longint;
ScreenWidthMaximized,ScreenHeightMaximized : longint;
begin begin
SaveVideoState:=savestate; SaveVideoState:=savestate;
RestoreVideoState:=restorestate; RestoreVideoState:=restorestate;
ScreenWidth:=GetSystemMetrics(SM_CXSCREEN); { we must take care of the border and caption }
ScreenHeight:=GetSystemMetrics(SM_CYSCREEN); ScreenWidth:=GetSystemMetrics(SM_CXSCREEN)-
2*GetSystemMetrics(SM_CXFRAME);
ScreenHeight:=GetSystemMetrics(SM_CYSCREEN)-
2*GetSystemMetrics(SM_CYFRAME)-
GetSystemMetrics(SM_CYCAPTION);
{ for maximozed windows it's again different }
{ here we've only a caption }
ScreenWidthMaximized:=GetSystemMetrics(SM_CXFULLSCREEN);
{ neither GetSystemMetrics(SM_CYFULLSCREEN nor }
{ SystemParametersInfo(SPI_GETWORKAREA) }
{ takes a hidden try into account :( FK }
ScreenHeightMaximized:=GetSystemMetrics(SM_CYFULLSCREEN);
QueryAdapterInfo := ModeList; QueryAdapterInfo := ModeList;
{ If the mode listing already exists... } { If the mode listing already exists... }
{ simply return it, without changing } { simply return it, without changing }
{ anything... } { anything... }
if assigned(ModeList) then if assigned(ModeList) then
exit; exit;
InitMode(mode); if (ScreenWidth>=640) and (ScreenHeight>=200) then
{ now add all standard VGA modes... } begin
mode.DriverNumber:= VGA; InitMode(mode);
mode.HardwarePages:= 0; { now add all standard VGA modes... }
mode.ModeNumber:=VGALo; mode.DriverNumber:= VGA;
mode.ModeName:='640 x 200 Win32GUI'; mode.HardwarePages:= 0;
mode.MaxColor := 16; mode.ModeNumber:=VGALo;
mode.PaletteSize := mode.MaxColor; mode.ModeName:='640 x 200 x 16 Win32GUI';
mode.DirectColor := FALSE; mode.MaxColor := 16;
mode.MaxX := 639; mode.PaletteSize := mode.MaxColor;
mode.MaxY := 199; mode.DirectColor := FALSE;
mode.DirectPutPixel:={$ifdef fpc}@{$endif}DirectPutPixel16Win32GUI; mode.MaxX := 639;
mode.PutPixel:={$ifdef fpc}@{$endif}PutPixel16Win32GUI; mode.MaxY := 199;
mode.GetPixel:={$ifdef fpc}@{$endif}GetPixel16Win32GUI; mode.DirectPutPixel:={$ifdef fpc}@{$endif}DirectPutPixel16Win32GUI;
mode.HLine := {$ifdef fpc}@{$endif}HLine16Win32GUI; mode.PutPixel:={$ifdef fpc}@{$endif}PutPixel16Win32GUI;
mode.SetRGBPalette := {$ifdef fpc}@{$endif}SetRGBPaletteWin32GUI; mode.GetPixel:={$ifdef fpc}@{$endif}GetPixel16Win32GUI;
mode.GetRGBPalette := {$ifdef fpc}@{$endif}GetRGBPaletteWin32GUI; mode.HLine := {$ifdef fpc}@{$endif}HLine16Win32GUI;
mode.SetVisualPage := {$ifdef fpc}@{$endif}SetVisualWin32GUI; mode.SetRGBPalette := {$ifdef fpc}@{$endif}SetRGBPaletteWin32GUI;
mode.SetActivePage := {$ifdef fpc}@{$endif}SetActiveWin32GUI; mode.GetRGBPalette := {$ifdef fpc}@{$endif}GetRGBPaletteWin32GUI;
mode.InitMode := {$ifdef fpc}@{$endif}InitWin32GUI16colors; mode.SetVisualPage := {$ifdef fpc}@{$endif}SetVisualWin32GUI;
mode.XAspect := 10000; mode.SetActivePage := {$ifdef fpc}@{$endif}SetActiveWin32GUI;
mode.YAspect := 10000; mode.InitMode := {$ifdef fpc}@{$endif}InitWin32GUI16colors;
AddMode(mode); mode.XAspect := 10000;
InitMode(mode); mode.YAspect := 10000;
mode.DriverNumber:= VGA; AddMode(mode);
mode.HardwarePages:= 0; end;
mode.ModeNumber:=VGAMed; if (ScreenWidth>=640) and (ScreenHeight>=350) then
mode.ModeName:='640 x 350 Win32GUI'; begin
mode.MaxColor := 16; InitMode(mode);
mode.PaletteSize := mode.MaxColor; mode.DriverNumber:= VGA;
mode.DirectColor := FALSE; mode.HardwarePages:= 0;
mode.MaxX := 639; mode.ModeNumber:=VGAMed;
mode.MaxY := 349; mode.ModeName:='640 x 350 x 16 Win32GUI';
mode.DirectPutPixel:={$ifdef fpc}@{$endif}DirectPutPixel16Win32GUI; mode.MaxColor := 16;
mode.PutPixel:={$ifdef fpc}@{$endif}PutPixel16Win32GUI; mode.PaletteSize := mode.MaxColor;
mode.GetPixel:={$ifdef fpc}@{$endif}GetPixel16Win32GUI; mode.DirectColor := FALSE;
mode.HLine := {$ifdef fpc}@{$endif}HLine16Win32GUI; mode.MaxX := 639;
mode.SetRGBPalette := {$ifdef fpc}@{$endif}SetRGBPaletteWin32GUI; mode.MaxY := 349;
mode.GetRGBPalette := {$ifdef fpc}@{$endif}GetRGBPaletteWin32GUI; mode.DirectPutPixel:={$ifdef fpc}@{$endif}DirectPutPixel16Win32GUI;
mode.SetVisualPage := {$ifdef fpc}@{$endif}SetVisualWin32GUI; mode.PutPixel:={$ifdef fpc}@{$endif}PutPixel16Win32GUI;
mode.SetActivePage := {$ifdef fpc}@{$endif}SetActiveWin32GUI; mode.GetPixel:={$ifdef fpc}@{$endif}GetPixel16Win32GUI;
mode.InitMode := {$ifdef fpc}@{$endif}InitWin32GUI16colors; mode.HLine := {$ifdef fpc}@{$endif}HLine16Win32GUI;
mode.XAspect := 10000; mode.SetRGBPalette := {$ifdef fpc}@{$endif}SetRGBPaletteWin32GUI;
mode.YAspect := 10000; mode.GetRGBPalette := {$ifdef fpc}@{$endif}GetRGBPaletteWin32GUI;
AddMode(mode); mode.SetVisualPage := {$ifdef fpc}@{$endif}SetVisualWin32GUI;
InitMode(mode); mode.SetActivePage := {$ifdef fpc}@{$endif}SetActiveWin32GUI;
mode.DriverNumber:= VGA; mode.InitMode := {$ifdef fpc}@{$endif}InitWin32GUI16colors;
mode.HardwarePages:= 0; mode.XAspect := 10000;
mode.ModeNumber:=VGAHi; mode.YAspect := 10000;
mode.ModeName:='640 x 480 Win32GUI'; AddMode(mode);
mode.MaxColor := 16; end;
mode.PaletteSize := mode.MaxColor; if (ScreenWidth>=640) and (ScreenHeight>=400) then
mode.DirectColor := FALSE; begin
mode.MaxX := 639; InitMode(mode);
mode.MaxY := 479; mode.DriverNumber:= VESA;
mode.DirectPutPixel:={$ifdef fpc}@{$endif}DirectPutPixel16Win32GUI; mode.HardwarePages:= 0;
mode.PutPixel:={$ifdef fpc}@{$endif}PutPixel16Win32GUI; mode.ModeNumber:=m640x400x256;
mode.GetPixel:={$ifdef fpc}@{$endif}GetPixel16Win32GUI; mode.ModeName:='640 x 400 x 256 Win32GUI';
mode.HLine := {$ifdef fpc}@{$endif}HLine16Win32GUI; mode.MaxColor := 256;
mode.SetRGBPalette := {$ifdef fpc}@{$endif}SetRGBPaletteWin32GUI; mode.PaletteSize := mode.MaxColor;
mode.GetRGBPalette := {$ifdef fpc}@{$endif}GetRGBPaletteWin32GUI; mode.DirectColor := FALSE;
mode.SetVisualPage := {$ifdef fpc}@{$endif}SetVisualWin32GUI; mode.MaxX := 639;
mode.SetActivePage := {$ifdef fpc}@{$endif}SetActiveWin32GUI; mode.MaxY := 399;
mode.InitMode := {$ifdef fpc}@{$endif}InitWin32GUI16colors; mode.DirectPutPixel:={$ifdef fpc}@{$endif}DirectPutPixel16Win32GUI;
mode.XAspect := 10000; mode.PutPixel:={$ifdef fpc}@{$endif}PutPixel16Win32GUI;
mode.YAspect := 10000; mode.GetPixel:={$ifdef fpc}@{$endif}GetPixel16Win32GUI;
AddMode(mode); mode.HLine := {$ifdef fpc}@{$endif}HLine16Win32GUI;
InitMode(mode); mode.SetRGBPalette := {$ifdef fpc}@{$endif}SetRGBPaletteWin32GUI;
mode.DriverNumber:= VESA; mode.GetRGBPalette := {$ifdef fpc}@{$endif}GetRGBPaletteWin32GUI;
mode.HardwarePages:= 0; mode.SetVisualPage := {$ifdef fpc}@{$endif}SetVisualWin32GUI;
mode.ModeNumber:=m640x400x256; mode.SetActivePage := {$ifdef fpc}@{$endif}SetActiveWin32GUI;
mode.ModeName:='640 x 400 x 256 Win32GUI'; mode.InitMode := {$ifdef fpc}@{$endif}InitWin32GUI16colors;
mode.MaxColor := 256; mode.XAspect := 10000;
mode.PaletteSize := mode.MaxColor; mode.YAspect := 10000;
mode.DirectColor := FALSE; AddMode(mode);
mode.MaxX := 639; end;
mode.MaxY := 399; if (ScreenWidth>=640) and (ScreenHeight>=480) then
mode.DirectPutPixel:={$ifdef fpc}@{$endif}DirectPutPixel16Win32GUI; begin
mode.PutPixel:={$ifdef fpc}@{$endif}PutPixel16Win32GUI; InitMode(mode);
mode.GetPixel:={$ifdef fpc}@{$endif}GetPixel16Win32GUI; mode.DriverNumber:= VGA;
mode.HLine := {$ifdef fpc}@{$endif}HLine16Win32GUI; mode.HardwarePages:= 0;
mode.SetRGBPalette := {$ifdef fpc}@{$endif}SetRGBPaletteWin32GUI; mode.ModeNumber:=VGAHi;
mode.GetRGBPalette := {$ifdef fpc}@{$endif}GetRGBPaletteWin32GUI; mode.ModeName:='640 x 480 x 16 Win32GUI';
mode.SetVisualPage := {$ifdef fpc}@{$endif}SetVisualWin32GUI; mode.MaxColor := 16;
mode.SetActivePage := {$ifdef fpc}@{$endif}SetActiveWin32GUI; mode.PaletteSize := mode.MaxColor;
mode.InitMode := {$ifdef fpc}@{$endif}InitWin32GUI16colors; mode.DirectColor := FALSE;
mode.XAspect := 10000; mode.MaxX := 639;
mode.YAspect := 10000; mode.MaxY := 479;
AddMode(mode); mode.DirectPutPixel:={$ifdef fpc}@{$endif}DirectPutPixel16Win32GUI;
InitMode(mode); mode.PutPixel:={$ifdef fpc}@{$endif}PutPixel16Win32GUI;
mode.DriverNumber:= VESA; mode.GetPixel:={$ifdef fpc}@{$endif}GetPixel16Win32GUI;
mode.HardwarePages:= 0; mode.HLine := {$ifdef fpc}@{$endif}HLine16Win32GUI;
mode.ModeNumber:=m640x480x256; mode.SetRGBPalette := {$ifdef fpc}@{$endif}SetRGBPaletteWin32GUI;
mode.ModeName:='640 x 480 x 256 Win32GUI'; mode.GetRGBPalette := {$ifdef fpc}@{$endif}GetRGBPaletteWin32GUI;
mode.MaxColor := 256; mode.SetVisualPage := {$ifdef fpc}@{$endif}SetVisualWin32GUI;
mode.PaletteSize := mode.MaxColor; mode.SetActivePage := {$ifdef fpc}@{$endif}SetActiveWin32GUI;
mode.DirectColor := FALSE; mode.InitMode := {$ifdef fpc}@{$endif}InitWin32GUI16colors;
mode.MaxX := 639; mode.XAspect := 10000;
mode.MaxY := 479; mode.YAspect := 10000;
mode.DirectPutPixel:={$ifdef fpc}@{$endif}DirectPutPixel16Win32GUI; AddMode(mode);
mode.PutPixel:={$ifdef fpc}@{$endif}PutPixel16Win32GUI; InitMode(mode);
mode.GetPixel:={$ifdef fpc}@{$endif}GetPixel16Win32GUI; mode.DriverNumber:= VESA;
mode.HLine := {$ifdef fpc}@{$endif}HLine16Win32GUI; mode.HardwarePages:= 0;
mode.SetRGBPalette := {$ifdef fpc}@{$endif}SetRGBPaletteWin32GUI; mode.ModeNumber:=m640x480x256;
mode.GetRGBPalette := {$ifdef fpc}@{$endif}GetRGBPaletteWin32GUI; mode.ModeName:='640 x 480 x 256 Win32GUI';
mode.SetVisualPage := {$ifdef fpc}@{$endif}SetVisualWin32GUI; mode.MaxColor := 256;
mode.SetActivePage := {$ifdef fpc}@{$endif}SetActiveWin32GUI; mode.PaletteSize := mode.MaxColor;
mode.InitMode := {$ifdef fpc}@{$endif}InitWin32GUI16colors; mode.DirectColor := FALSE;
mode.XAspect := 10000; mode.MaxX := 639;
mode.YAspect := 10000; mode.MaxY := 479;
AddMode(mode); mode.DirectPutPixel:={$ifdef fpc}@{$endif}DirectPutPixel16Win32GUI;
mode.PutPixel:={$ifdef fpc}@{$endif}PutPixel16Win32GUI;
mode.GetPixel:={$ifdef fpc}@{$endif}GetPixel16Win32GUI;
mode.HLine := {$ifdef fpc}@{$endif}HLine16Win32GUI;
mode.SetRGBPalette := {$ifdef fpc}@{$endif}SetRGBPaletteWin32GUI;
mode.GetRGBPalette := {$ifdef fpc}@{$endif}GetRGBPaletteWin32GUI;
mode.SetVisualPage := {$ifdef fpc}@{$endif}SetVisualWin32GUI;
mode.SetActivePage := {$ifdef fpc}@{$endif}SetActiveWin32GUI;
mode.InitMode := {$ifdef fpc}@{$endif}InitWin32GUI16colors;
mode.XAspect := 10000;
mode.YAspect := 10000;
AddMode(mode);
end;
{ add 800x600 only if screen is large enough } { add 800x600 only if screen is large enough }
If (ScreenWidth>=800) and (ScreenHeight>=600) then If (ScreenWidth>=800) and (ScreenHeight>=600) then
begin begin
InitMode(mode); InitMode(mode);
mode.DriverNumber:= VESA; mode.DriverNumber:= VESA;
mode.HardwarePages:= 0; mode.HardwarePages:= 0;
mode.ModeNumber:=m800x600x16; mode.ModeNumber:=m800x600x16;
mode.ModeName:='800 x 600 x 16 Win32GUI'; mode.ModeName:='800 x 600 x 16 Win32GUI';
mode.MaxColor := 16; mode.MaxColor := 16;
mode.PaletteSize := mode.MaxColor; mode.PaletteSize := mode.MaxColor;
mode.DirectColor := FALSE; mode.DirectColor := FALSE;
mode.MaxX := 799; mode.MaxX := 799;
mode.MaxY := 599; mode.MaxY := 599;
mode.DirectPutPixel:={$ifdef fpc}@{$endif}DirectPutPixel16Win32GUI; mode.DirectPutPixel:={$ifdef fpc}@{$endif}DirectPutPixel16Win32GUI;
mode.PutPixel:={$ifdef fpc}@{$endif}PutPixel16Win32GUI; mode.PutPixel:={$ifdef fpc}@{$endif}PutPixel16Win32GUI;
mode.GetPixel:={$ifdef fpc}@{$endif}GetPixel16Win32GUI; mode.GetPixel:={$ifdef fpc}@{$endif}GetPixel16Win32GUI;
mode.HLine := {$ifdef fpc}@{$endif}HLine16Win32GUI; mode.HLine := {$ifdef fpc}@{$endif}HLine16Win32GUI;
mode.SetRGBPalette := {$ifdef fpc}@{$endif}SetRGBPaletteWin32GUI; mode.SetRGBPalette := {$ifdef fpc}@{$endif}SetRGBPaletteWin32GUI;
mode.GetRGBPalette := {$ifdef fpc}@{$endif}GetRGBPaletteWin32GUI; mode.GetRGBPalette := {$ifdef fpc}@{$endif}GetRGBPaletteWin32GUI;
mode.SetVisualPage := {$ifdef fpc}@{$endif}SetVisualWin32GUI; mode.SetVisualPage := {$ifdef fpc}@{$endif}SetVisualWin32GUI;
mode.SetActivePage := {$ifdef fpc}@{$endif}SetActiveWin32GUI; mode.SetActivePage := {$ifdef fpc}@{$endif}SetActiveWin32GUI;
mode.InitMode := {$ifdef fpc}@{$endif}InitWin32GUI16colors; mode.InitMode := {$ifdef fpc}@{$endif}InitWin32GUI16colors;
mode.XAspect := 10000; mode.XAspect := 10000;
mode.YAspect := 10000; mode.YAspect := 10000;
AddMode(mode); AddMode(mode);
InitMode(mode); InitMode(mode);
mode.DriverNumber:= VESA; mode.DriverNumber:= VESA;
mode.HardwarePages:= 0; mode.HardwarePages:= 0;
mode.ModeNumber:=m800x600x256; mode.ModeNumber:=m800x600x256;
mode.ModeName:='800 x 600 x 256 Win32GUI'; mode.ModeName:='800 x 600 x 256 Win32GUI';
mode.MaxColor := 256; mode.MaxColor := 256;
mode.PaletteSize := mode.MaxColor; mode.PaletteSize := mode.MaxColor;
mode.DirectColor := FALSE; mode.DirectColor := FALSE;
mode.MaxX := 799; mode.MaxX := 799;
mode.MaxY := 599; mode.MaxY := 599;
mode.DirectPutPixel:={$ifdef fpc}@{$endif}DirectPutPixel16Win32GUI; mode.DirectPutPixel:={$ifdef fpc}@{$endif}DirectPutPixel16Win32GUI;
mode.PutPixel:={$ifdef fpc}@{$endif}PutPixel16Win32GUI; mode.PutPixel:={$ifdef fpc}@{$endif}PutPixel16Win32GUI;
mode.GetPixel:={$ifdef fpc}@{$endif}GetPixel16Win32GUI; mode.GetPixel:={$ifdef fpc}@{$endif}GetPixel16Win32GUI;
mode.HLine := {$ifdef fpc}@{$endif}HLine16Win32GUI; mode.HLine := {$ifdef fpc}@{$endif}HLine16Win32GUI;
mode.SetRGBPalette := {$ifdef fpc}@{$endif}SetRGBPaletteWin32GUI; mode.SetRGBPalette := {$ifdef fpc}@{$endif}SetRGBPaletteWin32GUI;
mode.GetRGBPalette := {$ifdef fpc}@{$endif}GetRGBPaletteWin32GUI; mode.GetRGBPalette := {$ifdef fpc}@{$endif}GetRGBPaletteWin32GUI;
mode.SetVisualPage := {$ifdef fpc}@{$endif}SetVisualWin32GUI; mode.SetVisualPage := {$ifdef fpc}@{$endif}SetVisualWin32GUI;
mode.SetActivePage := {$ifdef fpc}@{$endif}SetActiveWin32GUI; mode.SetActivePage := {$ifdef fpc}@{$endif}SetActiveWin32GUI;
mode.InitMode := {$ifdef fpc}@{$endif}InitWin32GUI16colors; mode.InitMode := {$ifdef fpc}@{$endif}InitWin32GUI16colors;
mode.XAspect := 10000; mode.XAspect := 10000;
mode.YAspect := 10000; mode.YAspect := 10000;
AddMode(mode); AddMode(mode);
end; end;
{ add 1024x768 only if screen is large enough }
If (ScreenWidth>=1024) and (ScreenHeight>=768) then
begin
InitMode(mode);
mode.DriverNumber:= VESA;
mode.HardwarePages:= 0;
mode.ModeNumber:=m1024x768x16;
mode.ModeName:='1024 x 768 x 16 Win32GUI';
mode.MaxColor := 16;
mode.PaletteSize := mode.MaxColor;
mode.DirectColor := FALSE;
mode.MaxX := 1023;
mode.MaxY := 767;
mode.DirectPutPixel:={$ifdef fpc}@{$endif}DirectPutPixel16Win32GUI;
mode.PutPixel:={$ifdef fpc}@{$endif}PutPixel16Win32GUI;
mode.GetPixel:={$ifdef fpc}@{$endif}GetPixel16Win32GUI;
mode.HLine := {$ifdef fpc}@{$endif}HLine16Win32GUI;
mode.SetRGBPalette := {$ifdef fpc}@{$endif}SetRGBPaletteWin32GUI;
mode.GetRGBPalette := {$ifdef fpc}@{$endif}GetRGBPaletteWin32GUI;
mode.SetVisualPage := {$ifdef fpc}@{$endif}SetVisualWin32GUI;
mode.SetActivePage := {$ifdef fpc}@{$endif}SetActiveWin32GUI;
mode.InitMode := {$ifdef fpc}@{$endif}InitWin32GUI16colors;
mode.XAspect := 10000;
mode.YAspect := 10000;
AddMode(mode);
InitMode(mode);
mode.DriverNumber:= VESA;
mode.HardwarePages:= 0;
mode.ModeNumber:=m1024x768x256;
mode.ModeName:='1024 x 768 x 256 Win32GUI';
mode.MaxColor := 256;
mode.PaletteSize := mode.MaxColor;
mode.DirectColor := FALSE;
mode.MaxX := 1023;
mode.MaxY := 768;
mode.DirectPutPixel:={$ifdef fpc}@{$endif}DirectPutPixel16Win32GUI;
mode.PutPixel:={$ifdef fpc}@{$endif}PutPixel16Win32GUI;
mode.GetPixel:={$ifdef fpc}@{$endif}GetPixel16Win32GUI;
mode.HLine := {$ifdef fpc}@{$endif}HLine16Win32GUI;
mode.SetRGBPalette := {$ifdef fpc}@{$endif}SetRGBPaletteWin32GUI;
mode.GetRGBPalette := {$ifdef fpc}@{$endif}GetRGBPaletteWin32GUI;
mode.SetVisualPage := {$ifdef fpc}@{$endif}SetVisualWin32GUI;
mode.SetActivePage := {$ifdef fpc}@{$endif}SetActiveWin32GUI;
mode.InitMode := {$ifdef fpc}@{$endif}InitWin32GUI16colors;
mode.XAspect := 10000;
mode.YAspect := 10000;
AddMode(mode);
end;
{ add 1280x1024 only if screen is large enough }
If (ScreenWidth>=1280) and (ScreenHeight>=1024) then
begin
InitMode(mode);
mode.DriverNumber:= VESA;
mode.HardwarePages:= 0;
mode.ModeNumber:=m1280x1024x16;
mode.ModeName:='1280 x 1024 x 16 Win32GUI';
mode.MaxColor := 16;
mode.PaletteSize := mode.MaxColor;
mode.DirectColor := FALSE;
mode.MaxX := 1279;
mode.MaxY := 1023;
mode.DirectPutPixel:={$ifdef fpc}@{$endif}DirectPutPixel16Win32GUI;
mode.PutPixel:={$ifdef fpc}@{$endif}PutPixel16Win32GUI;
mode.GetPixel:={$ifdef fpc}@{$endif}GetPixel16Win32GUI;
mode.HLine := {$ifdef fpc}@{$endif}HLine16Win32GUI;
mode.SetRGBPalette := {$ifdef fpc}@{$endif}SetRGBPaletteWin32GUI;
mode.GetRGBPalette := {$ifdef fpc}@{$endif}GetRGBPaletteWin32GUI;
mode.SetVisualPage := {$ifdef fpc}@{$endif}SetVisualWin32GUI;
mode.SetActivePage := {$ifdef fpc}@{$endif}SetActiveWin32GUI;
mode.InitMode := {$ifdef fpc}@{$endif}InitWin32GUI16colors;
mode.XAspect := 10000;
mode.YAspect := 10000;
AddMode(mode);
InitMode(mode);
mode.DriverNumber:= VESA;
mode.HardwarePages:= 0;
mode.ModeNumber:=m1280x1024x256;
mode.ModeName:='1280 x 1024 x 256 Win32GUI';
mode.MaxColor := 256;
mode.PaletteSize := mode.MaxColor;
mode.DirectColor := FALSE;
mode.MaxX := 1279;
mode.MaxY := 1023;
mode.DirectPutPixel:={$ifdef fpc}@{$endif}DirectPutPixel16Win32GUI;
mode.PutPixel:={$ifdef fpc}@{$endif}PutPixel16Win32GUI;
mode.GetPixel:={$ifdef fpc}@{$endif}GetPixel16Win32GUI;
mode.HLine := {$ifdef fpc}@{$endif}HLine16Win32GUI;
mode.SetRGBPalette := {$ifdef fpc}@{$endif}SetRGBPaletteWin32GUI;
mode.GetRGBPalette := {$ifdef fpc}@{$endif}GetRGBPaletteWin32GUI;
mode.SetVisualPage := {$ifdef fpc}@{$endif}SetVisualWin32GUI;
mode.SetActivePage := {$ifdef fpc}@{$endif}SetActiveWin32GUI;
mode.InitMode := {$ifdef fpc}@{$endif}InitWin32GUI16colors;
mode.XAspect := 10000;
mode.YAspect := 10000;
AddMode(mode);
end;
{ at least we add a mode with the largest possible window }
InitMode(mode);
mode.DriverNumber:= VESA;
mode.HardwarePages:= 0;
mode.ModeNumber:=mLargestWindow16;
mode.ModeName:='Largest Window x 16';
mode.MaxColor := 16;
mode.PaletteSize := mode.MaxColor;
mode.DirectColor := FALSE;
mode.MaxX := ScreenWidth-1;
mode.MaxY := ScreenHeight-1;
mode.DirectPutPixel:={$ifdef fpc}@{$endif}DirectPutPixel16Win32GUI;
mode.PutPixel:={$ifdef fpc}@{$endif}PutPixel16Win32GUI;
mode.GetPixel:={$ifdef fpc}@{$endif}GetPixel16Win32GUI;
mode.HLine := {$ifdef fpc}@{$endif}HLine16Win32GUI;
mode.SetRGBPalette := {$ifdef fpc}@{$endif}SetRGBPaletteWin32GUI;
mode.GetRGBPalette := {$ifdef fpc}@{$endif}GetRGBPaletteWin32GUI;
mode.SetVisualPage := {$ifdef fpc}@{$endif}SetVisualWin32GUI;
mode.SetActivePage := {$ifdef fpc}@{$endif}SetActiveWin32GUI;
mode.InitMode := {$ifdef fpc}@{$endif}InitWin32GUI16colors;
mode.XAspect := 10000;
mode.YAspect := 10000;
AddMode(mode);
InitMode(mode);
mode.DriverNumber:= VESA;
mode.HardwarePages:= 0;
mode.ModeNumber:=mLargestWindow256;
mode.ModeName:='Largest Window x 256';
mode.MaxColor := 256;
mode.PaletteSize := mode.MaxColor;
mode.DirectColor := FALSE;
mode.MaxX := ScreenWidth-1;
mode.MaxY := ScreenHeight-1;
mode.DirectPutPixel:={$ifdef fpc}@{$endif}DirectPutPixel16Win32GUI;
mode.PutPixel:={$ifdef fpc}@{$endif}PutPixel16Win32GUI;
mode.GetPixel:={$ifdef fpc}@{$endif}GetPixel16Win32GUI;
mode.HLine := {$ifdef fpc}@{$endif}HLine16Win32GUI;
mode.SetRGBPalette := {$ifdef fpc}@{$endif}SetRGBPaletteWin32GUI;
mode.GetRGBPalette := {$ifdef fpc}@{$endif}GetRGBPaletteWin32GUI;
mode.SetVisualPage := {$ifdef fpc}@{$endif}SetVisualWin32GUI;
mode.SetActivePage := {$ifdef fpc}@{$endif}SetActiveWin32GUI;
mode.InitMode := {$ifdef fpc}@{$endif}InitWin32GUI16colors;
mode.XAspect := 10000;
mode.YAspect := 10000;
AddMode(mode);
{ .. and a maximized window }
InitMode(mode);
mode.DriverNumber:= VESA;
mode.HardwarePages:= 0;
mode.ModeNumber:=mMaximizedWindow16;
mode.ModeName:='Maximized Window x 16';
mode.MaxColor := 16;
mode.PaletteSize := mode.MaxColor;
mode.DirectColor := FALSE;
mode.MaxX := ScreenWidthMaximized-1;
mode.MaxY := ScreenHeightMaximized-1;
mode.DirectPutPixel:={$ifdef fpc}@{$endif}DirectPutPixel16Win32GUI;
mode.PutPixel:={$ifdef fpc}@{$endif}PutPixel16Win32GUI;
mode.GetPixel:={$ifdef fpc}@{$endif}GetPixel16Win32GUI;
mode.HLine := {$ifdef fpc}@{$endif}HLine16Win32GUI;
mode.SetRGBPalette := {$ifdef fpc}@{$endif}SetRGBPaletteWin32GUI;
mode.GetRGBPalette := {$ifdef fpc}@{$endif}GetRGBPaletteWin32GUI;
mode.SetVisualPage := {$ifdef fpc}@{$endif}SetVisualWin32GUI;
mode.SetActivePage := {$ifdef fpc}@{$endif}SetActiveWin32GUI;
mode.InitMode := {$ifdef fpc}@{$endif}InitWin32GUI16colors;
mode.XAspect := 10000;
mode.YAspect := 10000;
AddMode(mode);
InitMode(mode);
mode.DriverNumber:= VESA;
mode.HardwarePages:= 0;
mode.ModeNumber:=mMaximizedWindow256;
mode.ModeName:='Maximized Window x 256';
mode.MaxColor := 256;
mode.PaletteSize := mode.MaxColor;
mode.DirectColor := FALSE;
mode.MaxX := ScreenWidthMaximized-1;
mode.MaxY := ScreenHeightMaximized-1;
mode.DirectPutPixel:={$ifdef fpc}@{$endif}DirectPutPixel16Win32GUI;
mode.PutPixel:={$ifdef fpc}@{$endif}PutPixel16Win32GUI;
mode.GetPixel:={$ifdef fpc}@{$endif}GetPixel16Win32GUI;
mode.HLine := {$ifdef fpc}@{$endif}HLine16Win32GUI;
mode.SetRGBPalette := {$ifdef fpc}@{$endif}SetRGBPaletteWin32GUI;
mode.GetRGBPalette := {$ifdef fpc}@{$endif}GetRGBPaletteWin32GUI;
mode.SetVisualPage := {$ifdef fpc}@{$endif}SetVisualWin32GUI;
mode.SetActivePage := {$ifdef fpc}@{$endif}SetActiveWin32GUI;
mode.InitMode := {$ifdef fpc}@{$endif}InitWin32GUI16colors;
mode.XAspect := 10000;
mode.YAspect := 10000;
AddMode(mode);
end; end;
begin begin
@ -799,7 +1033,14 @@ begin
end. end.
{ {
$Log$ $Log$
Revision 1.1 2000-03-19 11:20:14 peter Revision 1.2 2000-03-24 10:49:17 florian
* the mode detection takes now care of window caption and border
+ 1024x768 and 1280x1024 modes added
+ special gui modes added: largest window and maximized window to
use the desktop as much as possible
* Hline fixed: the windows function LineTo doesn't draw the last pixel!
Revision 1.1 2000/03/19 11:20:14 peter
* graph unit include is now independent and the dependent part * graph unit include is now independent and the dependent part
is now in graph.pp is now in graph.pp
* ggigraph unit for linux added * ggigraph unit for linux added
@ -833,5 +1074,4 @@ end.
Revision 1.1 1999/11/03 20:23:02 florian Revision 1.1 1999/11/03 20:23:02 florian
+ first release of win32 gui support + first release of win32 gui support
}
}