Преглед на файлове

* fix graph related problems

pierre преди 23 години
родител
ревизия
550e4a6f42
променени са 2 файла, в които са добавени 52 реда и са изтрити 2 реда
  1. 26 1
      fv/drivers.pas
  2. 26 1
      fvision/drivers.pas

+ 26 - 1
fv/drivers.pas

@@ -1267,6 +1267,9 @@ END;
 {                           VIDEO CONTROL ROUTINES                          }
 {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
 
+const
+  VideoInitialized : boolean = false;
+
 {---------------------------------------------------------------------------}
 {  InitVideo -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 26Nov99 LdB         }
 {---------------------------------------------------------------------------}
@@ -1285,11 +1288,18 @@ VAR
 {$ENDIF}
 {$ENDIF}
 BEGIN
+if VideoInitialized then
+  DoneVideo;
 {$ifdef GRAPH_API}
 if Not TextmodeGFV then
   begin
+{$ifdef win32}
+    I := VESA;
+    J := mLargestWindow16;
+{$else not win32}
     I := Detect;                                   { Detect video card }
     J := 0;                                        { Zero select mode }
+{$endif win32}
     InitGraph(I, J, '');                           { Initialize graphics }
     I := Graph.GetMaxX;                            { Fetch max x size }
     J := Graph.GetMaxY;                            { Fetch max y size }
@@ -1308,7 +1318,11 @@ if Not TextmodeGFV then
       SysFontHeight;                               { Calc screen height }
     UseFixedFont:=true;
 {$ifdef USE_VIDEO_API}
+    if assigned(Video.VideoBuf) then
+      FreeMem(Video.VideoBuf);
     GetMem(Video.VideoBuf,sizeof(word)*ScreenWidth*ScreenHeight);
+    if assigned(Video.OldVideoBuf) then
+      FreeMem(Video.OldVideoBuf);
     GetMem(Video.OldVideoBuf,sizeof(word)*ScreenWidth*ScreenHeight);
     FillChar(Video.VideoBuf^,sizeof(word)*ScreenWidth*ScreenHeight,#0);
     FillChar(Video.OldVideoBuf^,sizeof(word)*ScreenWidth*ScreenHeight,#0);
@@ -1317,6 +1331,8 @@ if Not TextmodeGFV then
     ScreenMode.row:=ScreenHeight;
     GfvGraph.SysFontWidth:=SysFontWidth;
     GfvGraph.SysFontHeight:=SysFontHeight;
+    GfvGraph.TextScreenWidth:=ScreenWidth;
+    GfvGraph.TextScreenHeight:=ScreenHeight;
 {$endif USE_VIDEO_API}
 {$ifdef win32}
     SetGraphHooks;
@@ -1341,6 +1357,7 @@ else
     SysFontWidth := 8;                             { Font width }
     SysFontHeight := 8;                            { Font height }
   end;
+VideoInitialized:=true;
 END;
 
 {---------------------------------------------------------------------------}
@@ -1348,12 +1365,16 @@ END;
 {---------------------------------------------------------------------------}
 PROCEDURE DoneVideo;
 BEGIN
+  if not VideoInitialized then
+    exit;
 {$ifdef GRAPH_API}
   if Not TextmodeGFV then
     begin
 {$ifdef USE_VIDEO_API}
       FreeMem(Video.VideoBuf,sizeof(word)*ScreenWidth*ScreenHeight);
+      Video.VideoBuf:=nil;
       FreeMem(Video.OldVideoBuf,sizeof(word)*ScreenWidth*ScreenHeight);
+      Video.OldVideoBuf:=nil;
 {$endif USE_VIDEO_API}
       CloseGraph;
 {$ifdef win32}
@@ -1367,6 +1388,7 @@ BEGIN
 {$else not USE_video_api}
    ; { nothing to do }
 {$endif not USE_video_api}
+  VideoInitialized:=false;
 END;
 
 {---------------------------------------------------------------------------}
@@ -1599,7 +1621,10 @@ BEGIN
 END.
 {
  $Log$
- Revision 1.20  2002-05-28 19:14:35  pierre
+ Revision 1.21  2002-05-29 19:36:12  pierre
+  * fix graph related problems
+
+ Revision 1.20  2002/05/28 19:14:35  pierre
   * adapt to new GraphUpdateScreen function
 
  Revision 1.19  2002/05/24 10:36:52  pierre

+ 26 - 1
fvision/drivers.pas

@@ -1267,6 +1267,9 @@ END;
 {                           VIDEO CONTROL ROUTINES                          }
 {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
 
+const
+  VideoInitialized : boolean = false;
+
 {---------------------------------------------------------------------------}
 {  InitVideo -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 26Nov99 LdB         }
 {---------------------------------------------------------------------------}
@@ -1285,11 +1288,18 @@ VAR
 {$ENDIF}
 {$ENDIF}
 BEGIN
+if VideoInitialized then
+  DoneVideo;
 {$ifdef GRAPH_API}
 if Not TextmodeGFV then
   begin
+{$ifdef win32}
+    I := VESA;
+    J := mLargestWindow16;
+{$else not win32}
     I := Detect;                                   { Detect video card }
     J := 0;                                        { Zero select mode }
+{$endif win32}
     InitGraph(I, J, '');                           { Initialize graphics }
     I := Graph.GetMaxX;                            { Fetch max x size }
     J := Graph.GetMaxY;                            { Fetch max y size }
@@ -1308,7 +1318,11 @@ if Not TextmodeGFV then
       SysFontHeight;                               { Calc screen height }
     UseFixedFont:=true;
 {$ifdef USE_VIDEO_API}
+    if assigned(Video.VideoBuf) then
+      FreeMem(Video.VideoBuf);
     GetMem(Video.VideoBuf,sizeof(word)*ScreenWidth*ScreenHeight);
+    if assigned(Video.OldVideoBuf) then
+      FreeMem(Video.OldVideoBuf);
     GetMem(Video.OldVideoBuf,sizeof(word)*ScreenWidth*ScreenHeight);
     FillChar(Video.VideoBuf^,sizeof(word)*ScreenWidth*ScreenHeight,#0);
     FillChar(Video.OldVideoBuf^,sizeof(word)*ScreenWidth*ScreenHeight,#0);
@@ -1317,6 +1331,8 @@ if Not TextmodeGFV then
     ScreenMode.row:=ScreenHeight;
     GfvGraph.SysFontWidth:=SysFontWidth;
     GfvGraph.SysFontHeight:=SysFontHeight;
+    GfvGraph.TextScreenWidth:=ScreenWidth;
+    GfvGraph.TextScreenHeight:=ScreenHeight;
 {$endif USE_VIDEO_API}
 {$ifdef win32}
     SetGraphHooks;
@@ -1341,6 +1357,7 @@ else
     SysFontWidth := 8;                             { Font width }
     SysFontHeight := 8;                            { Font height }
   end;
+VideoInitialized:=true;
 END;
 
 {---------------------------------------------------------------------------}
@@ -1348,12 +1365,16 @@ END;
 {---------------------------------------------------------------------------}
 PROCEDURE DoneVideo;
 BEGIN
+  if not VideoInitialized then
+    exit;
 {$ifdef GRAPH_API}
   if Not TextmodeGFV then
     begin
 {$ifdef USE_VIDEO_API}
       FreeMem(Video.VideoBuf,sizeof(word)*ScreenWidth*ScreenHeight);
+      Video.VideoBuf:=nil;
       FreeMem(Video.OldVideoBuf,sizeof(word)*ScreenWidth*ScreenHeight);
+      Video.OldVideoBuf:=nil;
 {$endif USE_VIDEO_API}
       CloseGraph;
 {$ifdef win32}
@@ -1367,6 +1388,7 @@ BEGIN
 {$else not USE_video_api}
    ; { nothing to do }
 {$endif not USE_video_api}
+  VideoInitialized:=false;
 END;
 
 {---------------------------------------------------------------------------}
@@ -1599,7 +1621,10 @@ BEGIN
 END.
 {
  $Log$
- Revision 1.20  2002-05-28 19:14:35  pierre
+ Revision 1.21  2002-05-29 19:36:12  pierre
+  * fix graph related problems
+
+ Revision 1.20  2002/05/28 19:14:35  pierre
   * adapt to new GraphUpdateScreen function
 
  Revision 1.19  2002/05/24 10:36:52  pierre