• R/O
  • HTTP
  • SSH
  • HTTPS

svg-dll: コミット

SVG (SSTP-Viewer Ghost) 用プラグイン


コミットメタ情報

リビジョン41de0ae1b88c67deb9ba2730d36a79f172daefac (tree)
日時2003-04-20 08:56:55
作者naru <bottle@mika...>
コミッターnaru

ログメッセージ

TPicture instance is cached

変更サマリ

差分

--- a/SVG.dpr
+++ b/SVG.dpr
@@ -20,6 +20,9 @@ var
2020 GhostFile: String;
2121 Ghost2File: TStringList;
2222
23+ Pic: TPicture; // 読み取った画像(*.png, *.bmp, *.jpg)
24+ PicFileName: String; // そのファイル名
25+
2326 // DLLロード時、およびDLL再初期化時に呼ばれる。
2427 // 読み込まれた画像は、Bottle Client側で「サーフィス再読み込み」を
2528 // 明示的に指定されない限りは Bottle Client 側でキャッシュされるので、
@@ -39,6 +42,8 @@ begin
3942 if not FileExists(GhostFile) then
4043 ShowMessage('SVG.dll Warning: Ghost file is not specified');
4144 Ghost2File := TStringList.Create;
45+ Pic := TPicture.Create;
46+ PicFileName := '';
4247 end;
4348
4449 // DLLアンロード時に呼ばれる。
@@ -46,6 +51,7 @@ end;
4651 procedure Unload; cdecl;
4752 begin
4853 Ghost2File.Free;
54+ Pic.Free;
4955 end;
5056
5157 // DLLの名前およびバージョンを返す。
@@ -57,7 +63,7 @@ end;
5763 // CanConfigureは、Configureを呼ばれてやることがあるかどうかを返す。
5864 function GetVersion(DLLName: PChar; NameLen: integer;
5965 var Version: integer; var CanConfigure: boolean): integer; cdecl;
60-const ThisDLL = 'SVG Surface Loader Ver. 2.0';
66+const ThisDLL = 'SVG Surface Loader Ver. 2.1';
6167 begin
6268 Version := 1;
6369 CanConfigure := true;
@@ -309,7 +315,6 @@ end;
309315 // Hで指定されているビットマップに書き出すこと。
310316 function GetImage(Ghost: PChar; Surface: integer; H: HBITMAP): integer; cdecl;
311317 var Bmp: TBitmap;
312- Pic: TPicture;
313318 BmpFile: String;
314319 Position, x, y, nCol: integer;
315320 begin
@@ -320,34 +325,34 @@ begin
320325 Result := 1;
321326 Exit;
322327 end;
323- except
324- on Exception do // ファイルが見つかってない可能性がもっとも高い
325- begin
326- Result := 1;
327- Exit;
328- end;
329- end;
330-
331- OutputDebugString(PChar(BmpFile + ' : ' + IntToStr(Position)));
332- //ShowMessage(BmpFile + ':' + IntToSTr(Position));
333- Bmp := TBitmap.Create;
334- try
335- Bmp.Handle := H;
336- Pic := TPicture.Create;
328+ Bmp := TBitmap.Create;
337329 try
338- Pic.LoadFromFile(BmpFile);
330+ Bmp.Handle := H;
331+ if PicFileName <> BmpFile then
332+ begin
333+ try
334+ Pic.LoadFromFile(BmpFile);
335+ PicFileName := BmpFile;
336+ except
337+ // 作り直し
338+ FreeAndNil(Pic);
339+ Pic := TPicture.Create;
340+ PicFileName := '';
341+ raise;
342+ end;
343+ end;
339344 nCol := Pic.Width div SurfaceWidth;
340345 x := SurfaceWidth * (Position mod nCol);
341346 y := SurfaceHeight * (Position div nCol);
342347 Bmp.Canvas.Draw(-x, -y, Pic.Graphic);
343348 finally
344- Pic.Free;
349+ Bmp.ReleaseHandle;
350+ Bmp.Free;
345351 end;
346- finally
347- Bmp.ReleaseHandle;
348- Bmp.Free;
352+ Result := 0;
353+ except
354+ Result := 1;
349355 end;
350- Result := 0;
351356 end;
352357
353358 // イメージの大きさを返す。
旧リポジトリブラウザで表示