Thank you very much Nikolay!  I will test it and let you know the results.

James


-----Original Message-----
From: fpc-pascal <fpc-pascal-boun...@lists.freepascal.org> On Behalf Of Nikolay 
Nikolov via fpc-pascal
Sent: Thursday, November 19, 2020 1:07 PM
To: fpc-pascal@lists.freepascal.org
Cc: Nikolay Nikolov <nick...@gmail.com>
Subject: Re: [fpc-pascal] PTC Graph - Custom window sizes


On 11/19/20 7:37 PM, Nikolay Nikolov wrote:
>
> On 11/19/20 3:44 PM, James Richters via fpc-pascal wrote:
>> I've been using PTCGraph from PTCPas and so far I can only use 
>> windows sizes that there happens to be a display driver for,  even if 
>> they are in a window.. so I can make a 640x480 or 1024x768 window, 
>> but if I have a screen in a vertical configuration now I can't get a
>> 640x480 window, I can only get a 480x640 window because with the 
>> screen vertical, only vertical orientation graphics drivers are 
>> available.    There are times I want a totally custom size window as 
>> well,  like a 100x50.  I see a lot of procedure like 
>> ptc_Init640x480x32bpp with all kinds of configurations of screen 
>> resolutions and color densities, but there is also some named 
>> ptc_InitNonStandard32k.. with other color densities.. but I don't 
>> know how to initialize PTCGraph into my own custom window size.
>> Does anyone know how I could make my PTCGraph windows a custom weird 
>> size that doesn't necessarily match the available video drivers?
>
> It's not possible with the current implementation, but right now I'm 
> working on a patch that would make this possible. I'll post here when 
> it's ready for testing.

Implemented and committed in ptcpas and fpc trunk. The new function is called 
InstallUserMode:

function InstallUserMode(Width, Height: SmallInt; Colors: LongInt;
HardwarePages: SmallInt; XAspect, YAspect: Word): smallint;

Example use:

uses
   {$ifdef UNIX}cthreads,{$endif} ptcgraph, ptccrt; var
   gd, gm: SmallInt;
begin
   gd := VESA;
   gm := InstallUserMode(100, 160, 16, 1, 10000, 10000);
   if gm < 0 then
   begin
     Writeln(ErrOutput, 'Error installing user mode: ', GraphErrorMsg(gm));
     Halt(1);
   end;
   InitGraph(gd, gm, '');
   OutText('Hello!');
   ReadKey;
   CloseGraph;
end.

It supports adding modes with 16, 256, 32768, 65536 and 16777216 colors with a 
custom X and Y resolution, custom number of hardware pages (for use with 
SetActivePage and SetVisualPage) and a custom pixel aspect ratio (used for 
drawing circles instead of ellipses on displays without square pixels - for 
square pixels, use "10000, 10000").

Please test. :)

Best regards,

Nikolay

_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org 
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to