fixed setting project LCLWidgetSet in defines

git-svn-id: trunk@5313 -
This commit is contained in:
mattias 2004-03-17 11:28:35 +00:00
parent 558acd0963
commit 70c99062d7
6 changed files with 292 additions and 356 deletions

View File

@ -2054,6 +2054,7 @@ var
MacroParam: string;
OldMacroLen: Integer;
Handled: Boolean;
MacroVarName: String;
begin
Result:=false;
MacroFuncNameEnd:=MacroEnd;
@ -2071,17 +2072,18 @@ var
MacroStr:=ExecuteMacroFunction(MacroFuncName,MacroParam);
end else begin
// Macro variable
MacroStr:=copy(CurValue,MacroStart+2,MacroEnd-MacroStart-3);
//writeln('**** MacroStr=',MacroStr);
MacroVarName:=copy(CurValue,MacroStart+2,MacroEnd-MacroStart-3);
MacroStr:=MacroVarName;
//writeln('**** MacroVarName=',MacroVarName,' ',DirDef.Values.Variables[MacroVarName]);
//writeln('DirDef.Values=',DirDef.Values.AsString);
if MacroStr=DefinePathMacroName then begin
if MacroVarName=DefinePathMacroName then begin
MacroStr:=CurDefinePath;
end else if DirDef.Values.IsDefined(MacroStr) then begin
MacroStr:=DirDef.Values.Variables[MacroStr];
end else if DirDef.Values.IsDefined(MacroVarName) then begin
MacroStr:=DirDef.Values.Variables[MacroVarName];
end else begin
Handled:=false;
if Assigned(FOnReadValue) then begin
MacroParam:=MacroStr;
MacroParam:=MacroVarName;
MacroStr:='';
FOnReadValue(Self,MacroParam,MacroStr,Handled);
end;
@ -2092,7 +2094,6 @@ var
MacroStr:='';
end;
end;
//writeln('**** NewValue MacroStr=',MacroStr);
end;
NewMacroLen:=length(MacroStr);
GrowBuffer(BufferPos+NewMacroLen-OldMacroLen+ValueLen-ValuePos+1);

View File

@ -329,6 +329,7 @@ type
function ShortenPath(const SearchPath: string;
MakeAlwaysRelative: boolean): string;
function GetCustomOptions: string;
function GetEffectiveLCLWidgetType: string;
public
{ Properties }
property Owner: TObject read fOwner write fOwner;
@ -1644,6 +1645,13 @@ begin
Result:=SpecialCharsToSpaces(Result);
end;
function TBaseCompilerOptions.GetEffectiveLCLWidgetType: string;
begin
Result:=LCLWidgetType;
if (Result='') or (Result='default') then
Result:=GetDefaultLCLWidgetType;
end;
function TBaseCompilerOptions.ShortenPath(const SearchPath: string;
MakeAlwaysRelative: boolean): string;
begin
@ -4709,7 +4717,7 @@ begin
Top:= y;
Width:=Self.ClientWidth-28;
Height:=45;
Caption:=dlgLCLWidgetType;
Caption:=lisLCLWidgetType;
with Items do begin
Add(Format(lisCOdefault, [GetDefaultLCLWidgetType]));
Add('gnome');

View File

@ -898,7 +898,6 @@ resourcestring
lisCOScanForMakeMessages = 'Scan for Make messages';
lisCOShowAllMessages = 'Show all messages';
dlgUnitOutp = 'Unit output directory:';
dlgLCLWidgetType = 'LCL Widget Type';
lisCOdefault = 'default (%s)';
dlgButApply = 'Apply';
dlgCOShowOptions = 'Show Options';

View File

@ -5180,7 +5180,7 @@ Begin
Project1.Units[i].Modified:=false;
Project1.Modified:=false;
writeln('TMainIDE.DoNewProject end ',CodeToolBoss.ConsistencyCheck);
writeln('TMainIDE.DoNewProject end ');
Result:=mrOk;
end;
@ -7295,115 +7295,95 @@ begin
exit;
end;
MacroName:=lowercase(TheMacro.Name);
if MacroName='save' then begin
Handled:=true;
if MacroName='save' then begin
if (SourceNoteBook<>nil) and (SourceNoteBook.NoteBook<>nil) then
Abort:=(DoSaveEditorFile(SourceNoteBook.NoteBook.PageIndex,
[sfCheckAmbigiousFiles])<>mrOk);
s:='';
end else if MacroName='saveall' then begin
Handled:=true;
Abort:=(DoSaveAll([sfCheckAmbigiousFiles])<>mrOk);
s:='';
end else if MacroName='edfile' then begin
Handled:=true;
if (SourceNoteBook<>nil) and (SourceNoteBook.NoteBook<>nil) then
s:=Project1.UnitWithEditorIndex(SourceNoteBook.NoteBook.PageIndex).Filename
else
s:='';
end else if MacroName='col' then begin
Handled:=true;
if (SourceNoteBook<>nil) and (SourceNoteBook.NoteBook<>nil) then
s:=IntToStr(SourceNoteBook.GetActiveSE.EditorComponent.CaretX);
end else if MacroName='row' then begin
Handled:=true;
if (SourceNoteBook<>nil) and (SourceNoteBook.NoteBook<>nil) then
s:=IntToStr(SourceNoteBook.GetActiveSE.EditorComponent.CaretY);
end else if MacroName='projfile' then begin
Handled:=true;
if Project1<>nil then
s:=Project1.MainFilename
else
s:='';
end else if MacroName='projpath' then begin
Handled:=true;
if Project1<>nil then
s:=Project1.ProjectDirectory
else
s:='';
end else if MacroName='projunitpath' then begin
Handled:=true;
if Project1<>nil then
s:=Project1.CompilerOptions.GetUnitPath(false)
else
s:='';
end else if MacroName='projincpath' then begin
Handled:=true;
if Project1<>nil then
s:=Project1.CompilerOptions.GetIncludePath(false)
else
s:='';
end else if MacroName='projsrcpath' then begin
Handled:=true;
if Project1<>nil then
s:=Project1.CompilerOptions.GetSrcPath(false)
else
s:='';
end else if MacroName='projpublishdir' then begin
Handled:=true;
if Project1<>nil then
s:=Project1.PublishOptions.DestinationDirectory
else
s:='';
end else if MacroName='curtoken' then begin
Handled:=true;
if (SourceNoteBook<>nil) and (SourceNoteBook.NoteBook<>nil) then
with SourceNoteBook.GetActiveSE.EditorComponent do
s:=GetWordAtRowCol(CaretXY);
end else if MacroName='lazarusdir' then begin
Handled:=true;
s:=EnvironmentOptions.LazarusDirectory;
end else if MacroName='lclwidgettype' then begin
Handled:=true;
if Project1<>nil then
s:=Project1.CompilerOptions.LCLWidgetType
else
s:='';
if (s='') or (s='default') then s:=GetDefaultLCLWidgetType;
end else if MacroName='targetcpu' then begin
Handled:=true;
if Project1<>nil then
s:=lowercase(Project1.CompilerOptions.TargetCPU)
else
s:='';
if (s='') or (s='default') then s:=GetDefaultTargetCPU;
end else if MacroName='targetos' then begin
Handled:=true;
if Project1<>nil then
s:=lowercase(Project1.CompilerOptions.TargetOS)
else
s:='';
if (s='') or (s='default') then s:=GetDefaultTargetOS;
end else if MacroName='fpcsrcdir' then begin
Handled:=true;
s:=EnvironmentOptions.FPCSourceDirectory;
end else if MacroName='comppath' then begin
Handled:=true;
s:=EnvironmentOptions.CompilerFilename;
end else if MacroName='params' then begin
Handled:=true;
if Project1<>nil then
s:=Project1.RunParameterOptions.CmdLineParams
else
s:='';
end else if MacroName='targetfile' then begin
Handled:=true;
if Project1<>nil then
s:=GetProjectTargetFilename
else
s:='';
end else if MacroName='targetcmdline' then begin
Handled:=true;
if Project1<>nil then begin
s:=Project1.RunParameterOptions.CmdLineParams;
if s='' then
@ -7413,27 +7393,24 @@ begin
end else
s:='';
end else if MacroName='testdir' then begin
Handled:=true;
if Project1<>nil then
s:=GetTestBuildDir
else
s:='';
end else if MacroName='runcmdline' then begin
Handled:=true;
if Project1<>nil then
s:=GetRunCommandLine
else
s:='';
end else if MacroName='projpublishdir' then begin
Handled:=true;
if Project1<>nil then
s:=GetProjPublishDir
else
s:='';
end else if MacroName='confdir' then begin
Handled:=true;
s:=GetPrimaryConfigPath;
end;
end else
Handled:=false;
end;
function TMainIDE.OnSubstituteCompilerOption(Options: TParsedCompilerOptions;
@ -8371,7 +8348,7 @@ begin
EnvironmentOptions.LazarusDirectory;
Variables[ExternalMacroStart+'FPCSrcDir']:=
EnvironmentOptions.FPCSourceDirectory;
Variables[ExternalMacroStart+'LCLWidgetType']:='gtk';
Variables[ExternalMacroStart+'LCLWidgetType']:=GetDefaultLCLWidgetType;
Variables[ExternalMacroStart+'ProjPath']:=VirtualDirectory;
end;
@ -10273,7 +10250,7 @@ begin
end
else if (not (ALayout.WindowPlacement in [iwpDocked,iwpUseWindowManagerSetting]))
then begin
// default position
// default window positions
l:=NonModalIDEFormIDToEnum(ALayout.FormID);
case l of
nmiwMainIDEName:
@ -10329,7 +10306,6 @@ end;
//-----------------------------------------------------------------------------
initialization
{ $I mainide.lrs}
{$I images/laz_images.lrs}
{$I images/mainicon.lrs}
ShowSplashScreen:=true;
@ -10339,6 +10315,9 @@ end.
{ =============================================================================
$Log$
Revision 1.717 2004/03/17 11:28:35 mattias
fixed setting project LCLWidgetSet in defines
Revision 1.716 2004/03/15 15:56:24 mattias
fixed package ID string to ID conversion

View File

@ -2818,7 +2818,7 @@ begin
Changed:=false;
Changed:=Changed or CodeToolBoss.SetGlobalValue(
ExternalMacroStart+'LCLWidgetType',
Owner.CompilerOptions.LCLWidgetType);
Owner.CompilerOptions.GetEffectiveLCLWidgetType);
if Owner.IsVirtual then
NewProjectDir:=VirtualDirectory
else
@ -2833,6 +2833,9 @@ end.
{
$Log$
Revision 1.151 2004/03/17 11:28:35 mattias
fixed setting project LCLWidgetSet in defines
Revision 1.150 2004/03/15 15:56:24 mattias
fixed package ID string to ID conversion

View File

@ -90,7 +90,7 @@ type
property Name: String read FName write SetName;
property Canvas: TPostScriptCanvas read FCanvas;
property GetPS: TStringList read GetPostscript;
property OldName: string read FOldName write FOldName; // used when notifying that name changed
property OldName: string read FOldName write FOldName; // used when notifying that name Changed
property OnChange: TNotifyEvent read FOnChange write FOnChange;
end;
PPSPattern = ^TPSPattern; // used for array
@ -155,7 +155,7 @@ type
MPostScript: TPostScript;
constructor Create(APostScript: TPostScript);
destructor Destroy; override;
procedure clear;
procedure Clear;
property PostScript: TStringList read FPostScript write FPostScript;
property FontFace: String read FFontFace write SetFontFace;
property FontSize: Integer read FFontSize write SetFontSize;
@ -170,7 +170,7 @@ type
procedure Ellipse(const Rect: TRect);
procedure Pie(x,y,width,mheight,angle1,angle2 : Integer);
//procedure Pie(x,y,width,height,SX,SY,EX,EY : Integer);
procedure Writeln(AString: String);
procedure Writeln(const AString: String);
procedure TextOut(X,Y: Integer; const Text: String);
//procedure Chord(x,y,width,height,angle1,angle2 : Integer);
//procedure Chord(x,y,width,height,SX,SY,EX,EY : Integer);
@ -219,7 +219,6 @@ type
procedure PatternChanged(Sender: TObject);
procedure InsertPattern(APattern: TPSPattern); // adds the pattern to the postscript
procedure RemovePattern(APattern: TPSPattern); // remove the pattern from the postscript
public
constructor Create;
destructor Destroy; override;
@ -239,8 +238,10 @@ type
procedure EndDoc;
end;
implementation
{ TPostScriptCanvas ----------------------------------------------------------}
{ Y coords in postscript are backwards... }
@ -252,9 +253,7 @@ end;
{ Adds a fill finishing line to any path we desire to fill }
procedure TPostScriptCanvas.AddFill;
begin
FPostScript.Add('gsave '+FBrush.AsString+' fill grestore');
end;
{ Sets the current font face}
@ -267,19 +266,16 @@ begin
FFontFace := '('+AValue+')'
else FFontFace:=AValue;
MyString := '/'+FFontFace+' '+inttostr(FFontSize)+' selectfont';
MyString := '/'+FFontFace+' '+IntToStr(FFontSize)+' selectfont';
// set the pen info
FPostScript.Add(MyString);
end;
function TPostScriptCanvas.GetColor: TColor;
begin
Result := FColor;
end;
procedure TPostScriptCanvas.SetBrush(const AValue: TPSPen);
@ -290,17 +286,14 @@ end;
procedure TPostScriptCanvas.SetColor(const AValue: TColor);
begin
FColor := AValue;
end;
procedure TPostScriptCanvas.SetFontSize(const AValue: Integer);
begin
if FFontSize=AValue then exit;
FFontSize:=AValue;
FPostScript.Add('/'+FFontFace+' '+inttostr(AValue)+' selectfont');
FPostScript.Add('/'+FFontFace+' '+IntToStr(AValue)+' selectfont');
end;
procedure TPostScriptCanvas.SetPen(const AValue: TPSPen);
@ -317,11 +310,10 @@ begin
// any routines that you specify a start location when calling such as
// textout, ellipse, etc. should not affect the default cursor location.
FPostScript.Add(inttostr(LastX)+' '+inttostr(TranslateY(LastY))+' moveto');
FPostScript.Add(IntToStr(LastX)+' '+IntToStr(TranslateY(LastY))+' moveto');
end;
{ This is called when drawing pen is changed but NOT when brush changes }
{ This is called when drawing pen is Changed but NOT when brush changes }
procedure TPostScriptCanvas.PenChanged(Sender: TObject);
begin
if FPostScript[FPostScript.Count-2] = '%%PEN' then begin
@ -331,7 +323,6 @@ begin
end;
FPostScript.Add('%%PEN');
FPostScript.Add(FPen.AsString);
end;
constructor TPostScriptCanvas.Create(APostScript: TPostScript);
@ -357,8 +348,7 @@ begin
FBrush := TPSPen.Create;
FBrush.Width := 1;
FBrush.Color := -1;
// don't notify us that the brush changed...
// don't notify us that the brush Changed...
end;
destructor TPostScriptCanvas.Destroy;
@ -369,10 +359,9 @@ begin
inherited Destroy;
end;
{ Clear the postscript canvas AND the graphic canvas (add later) }
{ Clear the postscript canvas AND the graphic canvas (Add later) }
procedure TPostScriptCanvas.clear;
begin
// clear the canvas for the next page
FPostScript.Clear;
// Choose a standard font in case the user doesn't
@ -383,10 +372,9 @@ begin
// also clear the canvas itself if we plan to embed the bitmap into
// the postscript
// also grab the latest canvas height just in case it's changed
// also grab the latest canvas height just in case it's Changed
FHeight := 792;
if assigned(MPostScript) then FHeight := MPostScript.Height;
if Assigned(MPostScript) then FHeight := MPostScript.Height;
end;
{ Move draw location }
@ -395,7 +383,7 @@ var
Y: Integer;
begin
Y := TranslateY(Y1);
FPostScript.Add(inttostr(X1)+' '+inttostr(Y)+' moveto');
FPostScript.Add(IntToStr(X1)+' '+IntToStr(Y)+' moveto');
LastX := X1;
LastY := Y1;
end;
@ -406,26 +394,23 @@ var
Y: Integer;
begin
Y := TranslateY(Y1);
FPostScript.Add(inttostr(X1)+' '+inttostr(Y)+' lineto');
FPostScript.Add(IntToStr(X1)+' '+IntToStr(Y)+' lineto');
LastX := X1;
LastY := Y1;
end;
procedure TPostScriptCanvas.Line(X1, Y1, X2, Y2: Integer);
var
Y12, Y22: Integer;
begin
Y12 := TranslateY(Y1);
Y22 := TranslateY(Y2);
FPostScript.Add('newpath '+inttostr(X1)+' '+inttostr(Y12)+' moveto '+
inttostr(X2)+' '+inttostr(Y22)+' lineto closepath stroke');
FPostScript.Add('newpath '+IntToStr(X1)+' '+IntToStr(Y12)+' moveto '+
IntToStr(X2)+' '+IntToStr(Y22)+' lineto closepath stroke');
// go back to last moveto position
ResetPos;
end;
procedure TPostScriptCanvas.Rectangle(X1, Y1, X2, Y2: Integer);
@ -436,15 +421,14 @@ begin
Y22 := TranslateY(Y2);
FPostScript.Add('stroke newpath');
FPostScript.Add(inttostr(X1)+' '+inttostr(Y12)+' moveto');
FPostScript.Add(inttostr(X2)+' '+inttostr(Y12)+' lineto');
FPostScript.Add(inttostr(X2)+' '+inttostr(Y22)+' lineto');
FPostScript.Add(inttostr(X1)+' '+inttostr(Y22)+' lineto');
FPostScript.Add(IntToStr(X1)+' '+IntToStr(Y12)+' moveto');
FPostScript.Add(IntToStr(X2)+' '+IntToStr(Y12)+' lineto');
FPostScript.Add(IntToStr(X2)+' '+IntToStr(Y22)+' lineto');
FPostScript.Add(IntToStr(X1)+' '+IntToStr(Y22)+' lineto');
FPostScript.Add('closepath');
if FBrush.Color > -1 then AddFill;
FPostScript.Add('stroke');
ResetPos;
end;
{ Draw a rectangle }
@ -456,15 +440,14 @@ begin
Y22 := TranslateY(Rect.Bottom);
FPostScript.Add('stroke newpath');
FPostScript.Add(inttostr(Rect.Left)+' '+inttostr(Y12)+' moveto');
FPostScript.Add(inttostr(Rect.Right)+' '+inttostr(Y12)+' lineto');
FPostScript.Add(inttostr(Rect.Right)+' '+inttostr(Y22)+' lineto');
FPostScript.Add(inttostr(Rect.Left)+' '+inttostr(Y22)+' lineto');
FPostScript.Add(IntToStr(Rect.Left)+' '+IntToStr(Y12)+' moveto');
FPostScript.Add(IntToStr(Rect.Right)+' '+IntToStr(Y12)+' lineto');
FPostScript.Add(IntToStr(Rect.Right)+' '+IntToStr(Y22)+' lineto');
FPostScript.Add(IntToStr(Rect.Left)+' '+IntToStr(Y22)+' lineto');
FPostScript.Add('closepath');
if FBrush.Color > -1 then AddFill;
FPostScript.Add('stroke');
ResetPos;
end;
{ Draw a series of lines }
@ -488,7 +471,6 @@ var
YRatio: Real;
centerX, centerY: Integer;
begin
// set radius to half the width
radius := (x2 - x1) div 2;
@ -500,14 +482,14 @@ begin
CenterX := ((X2 - X1) div 2) + X1;
CenterY := ((Y2 - Y1) div 2) + Y1;
FPostScript.Add('newpath '+inttostr(CenterX)+' '+inttostr(TranslateY(CenterY))+' translate');
FPostScript.Add('newpath '+IntToStr(CenterX)+' '+IntToStr(TranslateY(CenterY))+' translate');
// move to edge
FPostScript.Add(inttostr(radius)+' 0 moveto');
FPostScript.Add(IntToStr(radius)+' 0 moveto');
// now draw it
FPostScript.Add('gsave 1 '+format('%.3f',[YRatio])+' scale');
FPostScript.Add('0 0 '+inttostr(radius)+' 0 360 arc');
FPostScript.Add('0 0 '+IntToStr(radius)+' 0 360 arc');
if FBrush.Color > -1 then AddFill;
// reset scale for drawing line thickness so it doesn't warp
@ -515,31 +497,27 @@ begin
FPostScript.Add('1 '+format('%.2f',[YRatio])+' scale stroke grestore');
// move origin back
FPostScript.Add(inttostr(-CenterX)+' '+inttostr(-TranslateY(CenterY))+' translate closepath stroke');
FPostScript.Add(IntToStr(-CenterX)+' '+IntToStr(-TranslateY(CenterY))+' translate closepath stroke');
ResetPos;
end;
procedure TPostScriptCanvas.Ellipse(const Rect: TRect);
begin
self.Ellipse(Rect.Left, Rect.Top, Rect.Right, Rect.Bottom);
end;
procedure TPostScriptCanvas.Pie(x, y, width, mheight, angle1, angle2: Integer);
begin
// set zero at center
FPostScript.Add('newpath '+inttostr(X)+' '+inttostr(TranslateY(Y))+' translate');
FPostScript.Add('newpath '+IntToStr(X)+' '+IntToStr(TranslateY(Y))+' translate');
// scale it
FPostScript.Add('gsave '+inttostr(width)+' '+inttostr(mheight)+' scale');
FPostScript.Add('gsave '+IntToStr(width)+' '+IntToStr(mheight)+' scale');
//FPostScript.Add('gsave 1 1 scale');
// draw line to edge
FPostScript.Add('0 0 moveto');
FPostScript.Add('0 0 1 '+inttostr(angle1)+' '+inttostr(angle2)+' arc closepath');
FPostScript.Add('0 0 1 '+IntToStr(angle1)+' '+IntToStr(angle2)+' arc closepath');
if FBrush.Color > -1 then AddFill;
@ -548,20 +526,17 @@ begin
FPostScript.Add(format('%.6f',[(real(1) / X)+0.01])+' '+format('%.6f',[(real(1) / Y)+0.01])+' scale stroke grestore');
// close out and return origin
FPostScript.Add(inttostr(-X)+' '+inttostr(-TranslateY(Y))+' translate closepath stroke');
resetpos;
FPostScript.Add(IntToStr(-X)+' '+IntToStr(-TranslateY(Y))+' translate closepath stroke');
ResetPos;
end;
{ Writes text with a carriage return }
procedure TPostScriptCanvas.Writeln(AString: String);
procedure TPostScriptCanvas.Writeln(const AString: String);
begin
TextOut(LastX, LastY, AString);
LastY := LastY+FFontSize+FLineSpacing;
MoveTo(LastX, LastY);
end;
@ -571,14 +546,11 @@ var
Y1: Integer;
begin
Y1 := TranslateY(Y);
FPostScript.Add(inttostr(X)+' '+inttostr(Y1)+' moveto');
FPostScript.Add(IntToStr(X)+' '+IntToStr(Y1)+' moveto');
FPostScript.Add('('+Text+') show');
ResetPos; // move back to last moveto location
end;
{ TPostScript -------------------------------------------------------------- }
procedure TPostScript.SetHeight(const AValue: Integer);
@ -605,7 +577,6 @@ begin
// need to not hard-link these...
FDocument[3] := '%%Title: '+AValue;
end;
procedure TPostScript.SetWidth(const AValue: Integer);
@ -627,19 +598,16 @@ begin
Document.Add(FCanvas.PostScript[I]);
I := I+1;
end;
end;
{ Take our sizes and change the boundingbox line }
procedure TPostScript.UpdateBoundingBox;
begin
// need to not hard-link this to line 1
FDocument[1] := '%%BoundingBox: 0 0 '+inttostr(FWidth)+' '+inttostr(FHeight);
FDocument[1] := '%%BoundingBox: 0 0 '+IntToStr(FWidth)+' '+IntToStr(FHeight);
end;
{ Pattern changed so update the postscript code }
{ Pattern Changed so update the postscript code }
procedure TPostScript.PatternChanged(Sender: TObject);
begin
// called anytime a pattern changes. Update the postscript code.
@ -673,7 +641,6 @@ begin
exit;
end;
end;
end;
{Remove a pattern from the postscript code }
@ -763,7 +730,7 @@ begin
end;
{ add a pattern to the array }
{ Add a pattern to the array }
procedure TPostScript.AddPattern(APSPattern: TPSPattern);
begin
// does NOT create the pattern, just insert in the array of patterns
@ -773,7 +740,6 @@ begin
reallocmem(Patterns, sizeof(TPSPattern) * NumPatterns);
Patterns[NumPatterns-1] := APSPattern;
end;
{ Find a pattern object by it's name }
@ -789,7 +755,6 @@ begin
exit;
end;
end;
end;
function TPostScript.DelPattern(AName: String): Boolean;
@ -801,24 +766,21 @@ begin
Result:=false;
end;
{ Create a new pattern and inserts it into the array for safe keeping }
function TPostScript.NewPattern(AName: String): TPSPattern;
var
MyPattern: TPSPattern;
begin
MyPattern := TPSPattern.Create;
AddPattern(MyPattern);
MyPattern.Name := AName;
MyPattern.OnChange := @PatternChanged;
MyPattern.OldName := '';
// add this to the postscript now...
// Add this to the postscript now...
InsertPattern(MyPattern);
result := MyPattern;
end;
{ Start a new document }
@ -866,7 +828,6 @@ end;
{ Copy current page into the postscript and start a new one }
procedure TPostScript.NewPage;
begin
// dump the current page into our postscript first
GrabCanvas;
@ -875,10 +836,9 @@ begin
FDocument.Add('showpage');
FPageNumber := FPageNumber+1;
// start new page definition...
FDocument.Add('%%Page: '+inttostr(FPageNumber)+' '+inttostr(FPageNumber));
FDocument.Add('%%Page: '+IntToStr(FPageNumber)+' '+IntToStr(FPageNumber));
FDocument.Add('newpath');
FCanvas.Clear;
end;
{ Finish off the document }
@ -890,7 +850,7 @@ begin
// Start printing the document after closing out the pages
FDocument.Add('stroke');
FDocument.Add('showpage');
FDocument.Add('%%Pages: '+inttostr(FPageNumber));
FDocument.Add('%%Pages: '+IntToStr(FPageNumber));
// okay, the postscript is all ready, so dump it to the text file
// or to the printer
@ -901,10 +861,8 @@ end;
procedure TPSObject.Changed;
begin
Assert(False, Format('Trace:[TgraphicsObject.Changed] %s', [ClassName]));
if Assigned(FOnChange) then FOnChange(Self);
end;
procedure TPSObject.Lock;
@ -923,31 +881,25 @@ procedure TPSPen.SetPattern(const AValue: TPSPattern);
begin
if FPattern=AValue then exit;
FPattern:=AValue;
changed;
Changed;
end;
procedure TPSPen.SetColor(Value: TColor);
begin
FColor := Value;
changed;
Changed;
end;
procedure TPSPen.Setwidth(value: Real);
begin
FWidth := Value;
changed;
Changed;
end;
constructor TPSPen.Create;
begin
FPattern := nil;
end;
destructor TPSPen.Destroy;
@ -963,7 +915,6 @@ begin
FWidth := Source.Width;
FColor := Source.Color;
FPattern := Source.Pattern;
end;
{ Return the pen definition as a postscript string }
@ -983,17 +934,16 @@ begin
MyOut := '/Pattern setcolorspace '+FPattern.Name+' setcolor '
else begin
// now for uncolored, use color from pen
MyOut := '[/Pattern /DeviceRGB] setcolorspace '+inttostr(GetRValue(FColor))+' '+inttostr(GetGValue(FColor))+' '+
inttostr(GetBValue(FColor))+' '+FPattern.Name+' setcolor ';
MyOut := '[/Pattern /DeviceRGB] setcolorspace '+IntToStr(GetRValue(FColor))+' '+IntToStr(GetGValue(FColor))+' '+
IntToStr(GetBValue(FColor))+' '+FPattern.Name+' setcolor ';
end;
end else // no pattern do this:
MyOut := inttostr(GetRValue(FColor))+' '+inttostr(GetGValue(FColor))+' '+
inttostr(GetBValue(FColor))+' setrgbcolor ';
MyOut := IntToStr(GetRValue(FColor))+' '+IntToStr(GetGValue(FColor))+' '+
IntToStr(GetBValue(FColor))+' setrgbcolor ';
MyOut := MyOut + format('%f',[FWidth])+' setlinewidth ';
Result := MyOut;
end;
{ TPSPattern }
@ -1003,7 +953,6 @@ function TPSPattern.GetpostScript: TStringList;
var
I: Integer;
begin
// If nothing in the canvas, error
if FCanvas.Postscript.Count < 1 then begin
raise exception.create('Empty pattern');
@ -1012,31 +961,31 @@ begin
FPostScript.Clear;
With FPostScript do begin
add('%% PATTERN '+FName);
add('/'+FName+'proto 12 dict def '+FName+'proto begin');
add('/PatternType 1 def');
Add('%% PATTERN '+FName);
Add('/'+FName+'proto 12 dict def '+FName+'proto begin');
Add('/PatternType 1 def');
case FPaintType of
ptColored: add('/PaintType 1 def');
ptUncolored: add('/PaintType 2 def');
ptColored: Add('/PaintType 1 def');
ptUncolored: Add('/PaintType 2 def');
end;
case FTilingType of
ttConstant: add('/TilingType 1 def');
ttNoDistortion: add('/TilingType 2 def');
ttFast: add('/TilingType 3 def');
ttConstant: Add('/TilingType 1 def');
ttNoDistortion: Add('/TilingType 2 def');
ttFast: Add('/TilingType 3 def');
end;
add('/BBox ['+inttostr(FBBox.Left)+' '+inttostr(FBBox.Top)+' '+inttostr(FBBox.Right)+' '+inttostr(FBBox.Bottom)+'] def');
add('/XStep '+format('%f',[FXStep])+' def');
add('/YStep '+format('%f',[FYstep])+' def');
add('/PaintProc { begin');
Add('/BBox ['+IntToStr(FBBox.Left)+' '+IntToStr(FBBox.Top)+' '+IntToStr(FBBox.Right)+' '+IntToStr(FBBox.Bottom)+'] def');
Add('/XStep '+format('%f',[FXStep])+' def');
Add('/YStep '+format('%f',[FYstep])+' def');
Add('/PaintProc { begin');
// insert the canvas
for I := 0 to FCanvas.PostScript.Count - 1 do begin
add(FCanvas.PostScript[I]);
Add(FCanvas.PostScript[I]);
end;
// add support for custom matrix later
add('end } def end '+FName+'proto [1 0 0 1 0 0] makepattern /'+FName+' exch def');
add('%% END PATTERN '+FName);
// Add support for custom matrix later
Add('end } def end '+FName+'proto [1 0 0 1 0 0] makepattern /'+FName+' exch def');
Add('%% END PATTERN '+FName);
end;
Result := FPostScript;
end;
@ -1052,7 +1001,6 @@ end;
procedure TPSPattern.SetName(const AValue: String);
begin
FOldName := FName;
if FName=AValue then exit;
FName:=AValue;
@ -1068,39 +1016,37 @@ procedure TPSPattern.SetPaintType(const AValue: TPSPaintType);
begin
if FPaintType=AValue then exit;
FPaintType:=AValue;
changed;
Changed;
end;
procedure TPSPattern.SetTilingType(const AValue: TPSTileType);
begin
if FTilingType=AValue then exit;
FTilingType:=AValue;
changed;
Changed;
end;
procedure TPSPattern.SetXStep(const AValue: Real);
begin
if FXStep=AValue then exit;
FXStep:=AValue;
changed;
Changed;
end;
procedure TPSPattern.SetYStep(const AValue: Real);
begin
if FYStep=AValue then exit;
FYStep:=AValue;
changed;
Changed;
end;
constructor TPSPattern.Create;
begin
FPostScript := TStringList.Create;
FPaintType := ptColored;
FTilingType := ttConstant;
FCanvas := TPostScriptCanvas.Create(nil);
FName := 'Pattern1';
end;
destructor TPSPattern.Destroy;