summaryrefslogtreecommitdiff
path: root/packages
diff options
context:
space:
mode:
authormarco <marco@3ad0048d-3df7-0310-abae-a5850022a9f2>2020-11-30 18:14:22 +0000
committermarco <marco@3ad0048d-3df7-0310-abae-a5850022a9f2>2020-11-30 18:14:22 +0000
commit6dc772c0f3ea1abb55620db03205b66b276a29d8 (patch)
treed510a6edbeeaaab0d9e554d2c9d9d533c2b36abc /packages
parent6ad7204acd0d14e27e8260dc73f1f9f7c7ffcac2 (diff)
downloadfpc-6dc772c0f3ea1abb55620db03205b66b276a29d8.tar.gz
--- Merging r47236 into '.':
U packages/ptc/src/ptcwrapper/ptcwrapper.pp --- Recording mergeinfo for merge of r47236 into '.': U . --- Merging r47458 into '.': U packages/graph/src/ptcgraph/ptcgraph.pp --- Recording mergeinfo for merge of r47458 into '.': G . # revisions: 47236,47458 r47236 | michael | 2020-10-28 15:12:28 +0100 (Wed, 28 Oct 2020) | 1 line Changed paths: M /trunk/packages/ptc/src/ptcwrapper/ptcwrapper.pp * Fix bug 38003, small memleak r47458 | nickysn | 2020-11-19 18:59:21 +0100 (Thu, 19 Nov 2020) | 3 lines Changed paths: M /trunk/packages/graph/src/ptcgraph/ptcgraph.pp + added function InstallUserMode to ptcgraph, that allows you to register a custom resolution and thus, open a custom window size git-svn-id: https://svn.freepascal.org/svn/fpc/branches/fixes_3_2@47648 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'packages')
-rw-r--r--packages/graph/src/ptcgraph/ptcgraph.pp272
-rw-r--r--packages/ptc/src/ptcwrapper/ptcwrapper.pp1
2 files changed, 172 insertions, 101 deletions
diff --git a/packages/graph/src/ptcgraph/ptcgraph.pp b/packages/graph/src/ptcgraph/ptcgraph.pp
index 0b7ea2ef07..ed925355ae 100644
--- a/packages/graph/src/ptcgraph/ptcgraph.pp
+++ b/packages/graph/src/ptcgraph/ptcgraph.pp
@@ -139,6 +139,8 @@ var
WindowTitle: AnsiString;
PTCWrapperObject: TPTCWrapperThread;
+function InstallUserMode(Width, Height: SmallInt; Colors: LongInt; HardwarePages: SmallInt; XAspect, YAspect: Word): smallint;
+
{******************************************************************************}
implementation
{******************************************************************************}
@@ -156,6 +158,7 @@ var
VesaInfo: record { dummy, for compatibility with graph.inc under go32v2 }
ModeList: PInteger;
end;
+ NextNonStandardModeNumber: LongInt;
{$i graph.inc}
@@ -2442,6 +2445,106 @@ end;
isgraphmode := false;
end;
+ procedure FillCommonVESA16(var mode: TModeInfo);
+ begin
+ mode.HardwarePages := 1;
+ mode.MaxColor := 16;
+ mode.PaletteSize := mode.MaxColor;
+ mode.DirectColor := FALSE;
+ mode.DirectPutPixel := @ptc_DirectPixelProc_8bpp;
+ mode.PutPixel := @ptc_PutPixelProc_8bpp;
+ mode.GetPixel := @ptc_GetPixelProc_8bpp;
+ mode.PutImage := @ptc_PutImageProc_8bpp;
+ mode.GetImage := @ptc_GetImageProc_8bpp;
+ mode.GetScanLine := @ptc_GetScanLineProc_8bpp;
+ mode.SetRGBPalette := @ptc_SetRGBPaletteProc;
+ mode.GetRGBPalette := @ptc_GetRGBPaletteProc;
+ mode.HLine := @ptc_HLineProc_8bpp;
+ mode.VLine := @ptc_VLineProc_8bpp;
+ mode.PatternLine := @ptc_PatternLineProc_8bpp;
+ mode.SetVisualPage := @ptc_SetVisualPage;
+ mode.SetActivePage := @ptc_SetActivePage;
+ end;
+
+ procedure FillCommonVESA256(var mode: TModeInfo);
+ begin
+ mode.HardwarePages := 1;
+ mode.MaxColor := 256;
+ mode.PaletteSize := mode.MaxColor;
+ mode.DirectColor := FALSE;
+ mode.DirectPutPixel := @ptc_DirectPixelProc_8bpp;
+ mode.PutPixel := @ptc_PutPixelProc_8bpp;
+ mode.GetPixel := @ptc_GetPixelProc_8bpp;
+ mode.PutImage := @ptc_PutImageProc_8bpp;
+ mode.GetImage := @ptc_GetImageProc_8bpp;
+ mode.GetScanLine := @ptc_GetScanLineProc_8bpp;
+ mode.SetRGBPalette := @ptc_SetRGBPaletteProc;
+ mode.GetRGBPalette := @ptc_GetRGBPaletteProc;
+ //mode.SetAllPalette := {$ifdef fpc}@{$endif}SetVGARGBAllPalette;
+ mode.HLine := @ptc_HLineProc_8bpp;
+ mode.VLine := @ptc_VLineProc_8bpp;
+ mode.PatternLine := @ptc_PatternLineProc_8bpp;
+ mode.SetVisualPage := @ptc_SetVisualPage;
+ mode.SetActivePage := @ptc_SetActivePage;
+ end;
+
+ procedure FillCommonVESA32kOr64k(var mode: TModeInfo);
+ begin
+ mode.HardwarePages := 1;
+ mode.DirectColor := TRUE;
+ mode.DirectPutPixel := @ptc_DirectPixelProc_16bpp;
+ mode.PutPixel := @ptc_PutPixelProc_16bpp;
+ mode.GetPixel := @ptc_GetPixelProc_16bpp;
+ mode.PutImage := @ptc_PutImageProc_16bpp;
+ mode.GetImage := @ptc_GetImageProc_16bpp;
+ mode.GetScanLine := @ptc_GetScanLineProc_16bpp;
+ mode.SetRGBPalette := @ptc_SetRGBPaletteProc;
+ mode.GetRGBPalette := @ptc_GetRGBPaletteProc;
+ //mode.SetAllPalette := {$ifdef fpc}@{$endif}SetVGARGBAllPalette;
+ mode.HLine := @ptc_HLineProc_16bpp;
+ mode.VLine := @ptc_VLineProc_16bpp;
+ mode.PatternLine := @ptc_PatternLineProc_16bpp;
+ mode.SetVisualPage := @ptc_SetVisualPage;
+ mode.SetActivePage := @ptc_SetActivePage;
+ end;
+
+ procedure FillCommonVESA32k(var mode: TModeInfo);
+ begin
+ FillCommonVESA32kOr64k(mode);
+ mode.MaxColor := 32768;
+ mode.PaletteSize := mode.MaxColor;
+ end;
+ procedure FillCommonVESA64k(var mode: TModeInfo);
+ begin
+ FillCommonVESA32kOr64k(mode);
+ mode.MaxColor := 65536;
+ mode.PaletteSize := mode.MaxColor;
+ end;
+
+{$ifdef FPC_GRAPH_SUPPORTS_TRUECOLOR}
+ procedure FillCommonVESA32bpp(var mode: TModeInfo);
+ begin
+ mode.HardwarePages := 1;
+ mode.MaxColor := 16777216;
+ mode.PaletteSize := mode.MaxColor;
+ mode.DirectColor := TRUE;
+ mode.DirectPutPixel := @ptc_DirectPixelProc_32bpp;
+ mode.PutPixel := @ptc_PutPixelProc_32bpp;
+ mode.GetPixel := @ptc_GetPixelProc_32bpp;
+ mode.PutImage := @ptc_PutImageProc_32bpp;
+ mode.GetImage := @ptc_GetImageProc_32bpp;
+ mode.GetScanLine := @ptc_GetScanLineProc_32bpp;
+ mode.SetRGBPalette := @ptc_SetRGBPaletteProc;
+ mode.GetRGBPalette := @ptc_GetRGBPaletteProc;
+ //mode.SetAllPalette := {$ifdef fpc}@{$endif}SetVGARGBAllPalette;
+ mode.HLine := @ptc_HLineProc_32bpp;
+ mode.VLine := @ptc_VLineProc_32bpp;
+ mode.PatternLine := @ptc_PatternLineProc_32bpp;
+ mode.SetVisualPage := @ptc_SetVisualPage;
+ mode.SetActivePage := @ptc_SetActivePage;
+ end;
+{$endif FPC_GRAPH_SUPPORTS_TRUECOLOR}
+
function QueryAdapterInfo:PModeInfo;
{ This routine returns the head pointer to the list }
{ of supported graphics modes. }
@@ -2628,106 +2731,6 @@ end;
mode.SetActivePage := @ptc_SetActivePage;
end;
- procedure FillCommonVESA16(var mode: TModeInfo);
- begin
- mode.HardwarePages := 1;
- mode.MaxColor := 16;
- mode.PaletteSize := mode.MaxColor;
- mode.DirectColor := FALSE;
- mode.DirectPutPixel := @ptc_DirectPixelProc_8bpp;
- mode.PutPixel := @ptc_PutPixelProc_8bpp;
- mode.GetPixel := @ptc_GetPixelProc_8bpp;
- mode.PutImage := @ptc_PutImageProc_8bpp;
- mode.GetImage := @ptc_GetImageProc_8bpp;
- mode.GetScanLine := @ptc_GetScanLineProc_8bpp;
- mode.SetRGBPalette := @ptc_SetRGBPaletteProc;
- mode.GetRGBPalette := @ptc_GetRGBPaletteProc;
- mode.HLine := @ptc_HLineProc_8bpp;
- mode.VLine := @ptc_VLineProc_8bpp;
- mode.PatternLine := @ptc_PatternLineProc_8bpp;
- mode.SetVisualPage := @ptc_SetVisualPage;
- mode.SetActivePage := @ptc_SetActivePage;
- end;
-
- procedure FillCommonVESA256(var mode: TModeInfo);
- begin
- mode.HardwarePages := 1;
- mode.MaxColor := 256;
- mode.PaletteSize := mode.MaxColor;
- mode.DirectColor := FALSE;
- mode.DirectPutPixel := @ptc_DirectPixelProc_8bpp;
- mode.PutPixel := @ptc_PutPixelProc_8bpp;
- mode.GetPixel := @ptc_GetPixelProc_8bpp;
- mode.PutImage := @ptc_PutImageProc_8bpp;
- mode.GetImage := @ptc_GetImageProc_8bpp;
- mode.GetScanLine := @ptc_GetScanLineProc_8bpp;
- mode.SetRGBPalette := @ptc_SetRGBPaletteProc;
- mode.GetRGBPalette := @ptc_GetRGBPaletteProc;
- //mode.SetAllPalette := {$ifdef fpc}@{$endif}SetVGARGBAllPalette;
- mode.HLine := @ptc_HLineProc_8bpp;
- mode.VLine := @ptc_VLineProc_8bpp;
- mode.PatternLine := @ptc_PatternLineProc_8bpp;
- mode.SetVisualPage := @ptc_SetVisualPage;
- mode.SetActivePage := @ptc_SetActivePage;
- end;
-
- procedure FillCommonVESA32kOr64k(var mode: TModeInfo);
- begin
- mode.HardwarePages := 1;
- mode.DirectColor := TRUE;
- mode.DirectPutPixel := @ptc_DirectPixelProc_16bpp;
- mode.PutPixel := @ptc_PutPixelProc_16bpp;
- mode.GetPixel := @ptc_GetPixelProc_16bpp;
- mode.PutImage := @ptc_PutImageProc_16bpp;
- mode.GetImage := @ptc_GetImageProc_16bpp;
- mode.GetScanLine := @ptc_GetScanLineProc_16bpp;
- mode.SetRGBPalette := @ptc_SetRGBPaletteProc;
- mode.GetRGBPalette := @ptc_GetRGBPaletteProc;
- //mode.SetAllPalette := {$ifdef fpc}@{$endif}SetVGARGBAllPalette;
- mode.HLine := @ptc_HLineProc_16bpp;
- mode.VLine := @ptc_VLineProc_16bpp;
- mode.PatternLine := @ptc_PatternLineProc_16bpp;
- mode.SetVisualPage := @ptc_SetVisualPage;
- mode.SetActivePage := @ptc_SetActivePage;
- end;
-
- procedure FillCommonVESA32k(var mode: TModeInfo);
- begin
- FillCommonVESA32kOr64k(mode);
- mode.MaxColor := 32768;
- mode.PaletteSize := mode.MaxColor;
- end;
- procedure FillCommonVESA64k(var mode: TModeInfo);
- begin
- FillCommonVESA32kOr64k(mode);
- mode.MaxColor := 65536;
- mode.PaletteSize := mode.MaxColor;
- end;
-
-{$ifdef FPC_GRAPH_SUPPORTS_TRUECOLOR}
- procedure FillCommonVESA32bpp(var mode: TModeInfo);
- begin
- mode.HardwarePages := 1;
- mode.MaxColor := 16777216;
- mode.PaletteSize := mode.MaxColor;
- mode.DirectColor := TRUE;
- mode.DirectPutPixel := @ptc_DirectPixelProc_32bpp;
- mode.PutPixel := @ptc_PutPixelProc_32bpp;
- mode.GetPixel := @ptc_GetPixelProc_32bpp;
- mode.PutImage := @ptc_PutImageProc_32bpp;
- mode.GetImage := @ptc_GetImageProc_32bpp;
- mode.GetScanLine := @ptc_GetScanLineProc_32bpp;
- mode.SetRGBPalette := @ptc_SetRGBPaletteProc;
- mode.GetRGBPalette := @ptc_GetRGBPaletteProc;
- //mode.SetAllPalette := {$ifdef fpc}@{$endif}SetVGARGBAllPalette;
- mode.HLine := @ptc_HLineProc_32bpp;
- mode.VLine := @ptc_VLineProc_32bpp;
- mode.PatternLine := @ptc_PatternLineProc_32bpp;
- mode.SetVisualPage := @ptc_SetVisualPage;
- mode.SetActivePage := @ptc_SetActivePage;
- end;
-{$endif FPC_GRAPH_SUPPORTS_TRUECOLOR}
-
procedure FillCommonVESA320x200(var mode: TModeInfo);
begin
mode.DriverNumber := VESA;
@@ -2777,7 +2780,6 @@ end;
var
graphmode:Tmodeinfo;
I: Integer;
- NextNonStandardModeNumber: SmallInt;
begin
QueryAdapterInfo := ModeList;
{ If the mode listing already exists... }
@@ -3451,6 +3453,74 @@ end;
end;
end;
+function InstallUserMode(Width, Height: SmallInt; Colors: LongInt; HardwarePages: SmallInt; XAspect, YAspect: Word): smallint;
+var
+ graphmode: Tmodeinfo;
+begin
+ if (NextNonStandardModeNumber > NonStandardModeNumberMaxLimit) or (HardwarePages < 1) or
+ (Width <= 0) or (Height <= 0) or (XAspect <= 0) or (YAspect <= 0) then
+ begin
+ InstallUserMode := grError;
+ exit;
+ end;
+ InitMode(graphmode);
+ case Colors of
+{ 2:
+ begin
+ end;
+ 4:
+ begin
+ end;}
+ 16:
+ begin
+ FillCommonVESA16(graphmode);
+ graphmode.InitMode := @ptc_InitNonStandard16;
+ end;
+ 256:
+ begin
+ FillCommonVESA256(graphmode);
+ graphmode.InitMode := @ptc_InitNonStandard256;
+ end;
+ 32768:
+ begin
+ FillCommonVESA32k(graphmode);
+ graphmode.InitMode := @ptc_InitNonStandard32k;
+ end;
+ 65536:
+ begin
+ FillCommonVESA64k(graphmode);
+ graphmode.InitMode := @ptc_InitNonStandard64k;
+ end;
+{$ifdef FPC_GRAPH_SUPPORTS_TRUECOLOR}
+ 16777216:
+ begin
+ FillCommonVESA32bpp(graphmode);
+ graphmode.InitMode := @ptc_InitNonStandard32bpp;
+ end;
+{$endif FPC_GRAPH_SUPPORTS_TRUECOLOR}
+ else
+ begin
+ InstallUserMode := grError;
+ exit;
+ end;
+ end;
+ with graphmode do
+ begin
+ ModeNumber := NextNonStandardModeNumber;
+ DriverNumber := VESA;
+ WriteStr(ModeName, Width, ' x ', Height, ' VESA');
+ MaxX := Width - 1;
+ MaxY := Height - 1;
+ HardwarePages := 1;
+ end;
+ graphmode.XAspect := XAspect;
+ graphmode.YAspect := YAspect;
+ graphmode.HardwarePages := HardwarePages - 1;
+ AddMode(graphmode);
+ Inc(NextNonStandardModeNumber);
+ InstallUserMode := graphmode.ModeNumber;
+end;
+
initialization
WindowTitle := ParamStr(0);
PTCFormat8 := TPTCFormatFactory.CreateNew(8);
diff --git a/packages/ptc/src/ptcwrapper/ptcwrapper.pp b/packages/ptc/src/ptcwrapper/ptcwrapper.pp
index aaeff5ebe8..431c8878e6 100644
--- a/packages/ptc/src/ptcwrapper/ptcwrapper.pp
+++ b/packages/ptc/src/ptcwrapper/ptcwrapper.pp
@@ -179,6 +179,7 @@ end;
destructor TPTCWrapperThread.Destroy;
begin
+ FreeAndNil(FSurfaceCriticalSection);
inherited;
end;