CEF4Delphi/source/uCEFStreamWriter.pas

84 lines
2.2 KiB
ObjectPascal
Raw Normal View History

2017-01-27 16:37:51 +01:00
unit uCEFStreamWriter;
{$IFDEF FPC}
{$MODE OBJFPC}{$H+}
{$ENDIF}
2017-02-05 20:56:46 +01:00
{$I cef.inc}
{$IFNDEF TARGET_64BITS}{$ALIGN ON}{$ENDIF}
{$MINENUMSIZE 4}
2017-01-27 16:37:51 +01:00
interface
uses
uCEFBaseRefCounted, uCEFInterfaces, uCEFTypes;
2017-01-27 16:37:51 +01:00
type
TCefStreamWriterRef = class(TCefBaseRefCountedRef, ICefStreamWriter)
2017-01-27 16:37:51 +01:00
protected
function write(const ptr: Pointer; size, n: NativeUInt): NativeUInt;
function Seek(offset: Int64; whence: Integer): Integer;
function Tell: Int64;
function Flush: Integer;
function MayBlock: Boolean;
public
class function UnWrap(data: Pointer): ICefStreamWriter;
class function CreateForFile(const fileName: ustring): ICefStreamWriter;
class function CreateForHandler(const handler: ICefWriteHandler): ICefStreamWriter;
end;
implementation
uses
uCEFMiscFunctions, uCEFLibFunctions;
class function TCefStreamWriterRef.CreateForFile(const fileName: ustring): ICefStreamWriter;
var
TempFileName : TCefString;
2017-01-27 16:37:51 +01:00
begin
TempFileName := CefString(fileName);
Result := UnWrap(cef_stream_writer_create_for_file(@TempFileName));
2017-01-27 16:37:51 +01:00
end;
class function TCefStreamWriterRef.CreateForHandler(const handler: ICefWriteHandler): ICefStreamWriter;
begin
Result := UnWrap(cef_stream_writer_create_for_handler(CefGetData(handler)));
end;
function TCefStreamWriterRef.Flush: Integer;
begin
Result := PCefStreamWriter(FData)^.flush(PCefStreamWriter(FData));
2017-01-27 16:37:51 +01:00
end;
function TCefStreamWriterRef.MayBlock: Boolean;
begin
Result := PCefStreamWriter(FData)^.may_block(PCefStreamWriter(FData)) <> 0;
2017-01-27 16:37:51 +01:00
end;
function TCefStreamWriterRef.Seek(offset: Int64; whence: Integer): Integer;
begin
Result := PCefStreamWriter(FData)^.seek(PCefStreamWriter(FData), offset, whence);
2017-01-27 16:37:51 +01:00
end;
function TCefStreamWriterRef.Tell: Int64;
begin
Result := PCefStreamWriter(FData)^.tell(PCefStreamWriter(FData));
2017-01-27 16:37:51 +01:00
end;
class function TCefStreamWriterRef.UnWrap(data: Pointer): ICefStreamWriter;
begin
if data <> nil then
Result := Create(data) as ICefStreamWriter
else
2017-01-27 16:37:51 +01:00
Result := nil;
end;
function TCefStreamWriterRef.write(const ptr: Pointer; size, n: NativeUInt): NativeUInt;
begin
Result := PCefStreamWriter(FData)^.write(PCefStreamWriter(FData), ptr, size, n);
2017-01-27 16:37:51 +01:00
end;
end.