summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/VERSION_FILE.inc2
-rw-r--r--src/build.bat2
-rwxr-xr-xsrc/build.sh2
-rw-r--r--src/build_wince.bat22
-rw-r--r--src/corelib/fpg_base.pas2
-rw-r--r--src/corelib/fpg_imgfmt_png.pas6
-rw-r--r--src/corelib/fpg_main.pas2
-rw-r--r--src/corelib/gdi/fpg_gdi.pas45
-rw-r--r--src/corelib/gdi/fpgui_toolkit.lpk4
-rw-r--r--src/corelib/gdi/fpgui_toolkit.pas26
-rw-r--r--src/corelib/lang_af.inc4
-rw-r--r--src/corelib/lang_de.inc4
-rw-r--r--src/corelib/lang_en.inc4
-rw-r--r--src/corelib/lang_es.inc4
-rw-r--r--src/corelib/lang_fr.inc48
-rw-r--r--src/corelib/lang_it.inc4
-rw-r--r--src/corelib/lang_pt.inc4
-rw-r--r--src/corelib/lang_ru.inc4
-rw-r--r--src/corelib/render/software/Agg2D.pas8
-rw-r--r--src/corelib/render/software/agg_color.pas3
-rw-r--r--src/corelib/render/software/agg_scanline_storage_aa.pas3
-rw-r--r--src/corelib/render/software/fpg_fontcache.pas1
-rw-r--r--src/corelib/x11/fpg_netlayer_x11.pas2
-rw-r--r--src/corelib/x11/fpg_x11.pas3
-rw-r--r--src/corelib/x11/fpgui_toolkit.lpk3
-rw-r--r--src/gui/fpg_basegrid.pas4
-rw-r--r--src/gui/fpg_checkbox.pas1
-rw-r--r--src/gui/fpg_colormapping.pas2
-rw-r--r--src/gui/fpg_dialogs.pas25
-rw-r--r--src/gui/fpg_edit.pas5
-rw-r--r--src/gui/fpg_editcombo.pas6
-rw-r--r--src/gui/fpg_iniutils.pas4
-rw-r--r--src/gui/fpg_listbox.pas2
-rw-r--r--src/gui/fpg_memo.pas14
-rw-r--r--src/gui/fpg_menu.pas1
-rw-r--r--src/gui/fpg_scrollbar.pas2
-rw-r--r--src/gui/fpg_scrollframe.pas3
-rw-r--r--src/gui/fpg_spinedit.pas103
-rw-r--r--src/gui/fpg_tab.pas150
-rw-r--r--src/gui/fpg_trackbar.pas4
-rw-r--r--src/gui/messagedialog.inc1
-rw-r--r--src/gui/selectdirdialog.inc1
-rw-r--r--src/reportengine/u_command.pas2
-rw-r--r--src/reportengine/u_pdf.pas1293
-rw-r--r--src/reportengine/u_report.pas6
45 files changed, 950 insertions, 891 deletions
diff --git a/src/VERSION_FILE.inc b/src/VERSION_FILE.inc
index bac1d842..aeedab00 100644
--- a/src/VERSION_FILE.inc
+++ b/src/VERSION_FILE.inc
@@ -1 +1 @@
-FPGUI_VERSION = '1.4';
+FPGUI_VERSION = '1.4.1';
diff --git a/src/build.bat b/src/build.bat
index 741048db..20396172 100644
--- a/src/build.bat
+++ b/src/build.bat
@@ -18,5 +18,5 @@ echo "You've got the correct output lib directory"
:end
-fpc -dDEBUG -dGDI @extrafpc.cfg corelib\gdi\fpgui_toolkit.pas
+fpc -dGDI @extrafpc.cfg corelib\gdi\fpgui_toolkit.pas
diff --git a/src/build.sh b/src/build.sh
index 8a180ceb..61c6ac2b 100755
--- a/src/build.sh
+++ b/src/build.sh
@@ -13,7 +13,7 @@ if [ ! -d $libpath ]; then
fi
# Default build
-$fpcbin -dDEBUG -dX11 @extrafpc.cfg corelib/x11/fpgui_toolkit.pas
+$fpcbin -dX11 @extrafpc.cfg corelib/x11/fpgui_toolkit.pas
# experimental AggPas-enabled Canvas under X11
#$fpcbin -dDEBUG -dX11 -dAGGCanvas @extrafpc.cfg corelib/x11/fpgui_toolkit.pas
diff --git a/src/build_wince.bat b/src/build_wince.bat
new file mode 100644
index 00000000..26223e34
--- /dev/null
+++ b/src/build_wince.bat
@@ -0,0 +1,22 @@
+@echo off
+
+rem We use FPC to found out the Platform and OS to create a lib output path
+fpc -Parm -Twince -iTP > tmpvar
+set /p myplatform= < tmpvar
+fpc -Parm -Twince -iTO > tmpvar
+set /p myos= < tmpvar
+del tmpvar
+
+if exist ..\lib\%myplatform%-%myos%\nul.x goto exists
+
+echo Creating missing directory ..\lib\%myplatform%-%myos%
+mkdir ..\lib\%myplatform%-%myos%
+goto end
+
+:exists
+echo "You've got the correct output lib directory"
+
+:end
+
+fpc -v0 -dGDI -Twince -Parm @extrafpc.cfg corelib\gdi\fpgui_toolkit.pas
+
diff --git a/src/corelib/fpg_base.pas b/src/corelib/fpg_base.pas
index c110f3b0..9177e420 100644
--- a/src/corelib/fpg_base.pas
+++ b/src/corelib/fpg_base.pas
@@ -123,7 +123,7 @@ const
var
- {$IFDEF MSWINDOWS}
+ {$IFDEF WINDOWS}
FPG_DEFAULT_FONT_DESC: string = 'Arial-8:antialias=true';
FPG_DEFAULT_SANS: string = 'Arial';
{$ENDIF}
diff --git a/src/corelib/fpg_imgfmt_png.pas b/src/corelib/fpg_imgfmt_png.pas
index 3148a5b4..c4ee504f 100644
--- a/src/corelib/fpg_imgfmt_png.pas
+++ b/src/corelib/fpg_imgfmt_png.pas
@@ -1,7 +1,7 @@
{
fpGUI - Free Pascal GUI Toolkit
- Copyright (C) 2006 - 2014 See the file AUTHORS.txt, included in this
+ Copyright (C) 2006 - 2015 See the file AUTHORS.txt, included in this
distribution, for details of the copyright.
See the file COPYING.modifiedLGPL, included in this distribution,
@@ -32,7 +32,7 @@ uses
function LoadImage_PNG(const AFileName: TfpgString): TfpgImage; overload;
function LoadImage_PNG(AStream: TStream): TfpgImage; overload;
function LoadImage_PNG(const AImageData: Pointer; const AImageDataSize: LongWord): TfpgImage; overload;
-function LoadImage_PNG(AInstance: THandle; const AResName: String; AResType: PChar): TfpgImage; overload;
+function LoadImage_PNG(AInstance: THandle; const AResName: String; AResType: {$IFNDEF WINCE} PChar {$ELSE} PWideChar{$ENDIF}): TfpgImage; overload;
function LoadImage_PNGcrop(const AMaxWidth, AMaxHeight: integer; const AFileName: TfpgString): TfpgImage;
@@ -134,7 +134,7 @@ begin
end;
end;
-function LoadImage_PNG(AInstance: THandle; const AResName: String; AResType: PChar): TfpgImage;
+function LoadImage_PNG(AInstance: THandle; const AResName: String; AResType: {$IFNDEF WINCE} PChar {$ELSE} PWideChar{$ENDIF}): TfpgImage;
var
res: TResourceStream;
begin
diff --git a/src/corelib/fpg_main.pas b/src/corelib/fpg_main.pas
index 1f063cb5..275543cf 100644
--- a/src/corelib/fpg_main.pas
+++ b/src/corelib/fpg_main.pas
@@ -1760,7 +1760,7 @@ end;
procedure TfpgApplication.ShowException(E: Exception);
begin
- TfpgMessageDialog.Critical('An unexpected error occurred.', E.Message);
+ TfpgMessageDialog.Critical(rsErrUnexpected, E.Message);
end;
procedure TfpgApplication.WaitWindowMessage(atimeoutms: integer);
diff --git a/src/corelib/gdi/fpg_gdi.pas b/src/corelib/gdi/fpg_gdi.pas
index a1d314f6..e909782e 100644
--- a/src/corelib/gdi/fpg_gdi.pas
+++ b/src/corelib/gdi/fpg_gdi.pas
@@ -1,7 +1,7 @@
{
fpGUI - Free Pascal GUI Toolkit
- Copyright (C) 2006 - 2014 See the file AUTHORS.txt, included in this
+ Copyright (C) 2006 - 2015 See the file AUTHORS.txt, included in this
distribution, for details of the copyright.
See the file COPYING.modifiedLGPL, included in this distribution,
@@ -30,6 +30,14 @@ unit fpg_gdi;
{.$Define DND_DEBUG}
{.$Define DEBUGKEYS}
+// enable or disable DND support. Disabled by default while implementing AlienWindows.
+{$define HAS_DND}
+
+{$IFDEF WINCE}
+ // WinCE doesn't have DND support
+ {$undefine HAS_DND}
+{$ENDIF}
+
interface
uses
@@ -42,7 +50,9 @@ uses
{$IFDEF DEBUG}
,fpg_dbugintf
{$ENDIF DEBUG}
+ {$IFDEF HAS_DND}
,fpg_OLEDragDrop
+ {$ENDIF}
;
{ Constants missing on windows unit }
@@ -153,15 +163,19 @@ type
TfpgGDIWindow = class(TfpgWindowBase)
private
+ {$IFDEF HAS_DND}
FDropManager: TfpgOLEDropTarget;
+ {$ENDIF}
FDropPos: TPoint;
FUserMimeSelection: TfpgString;
FUserAcceptDrag: Boolean;
- function GetDropManager: TfpgOLEDropTarget;
+ {$IFDEF HAS_DND}
procedure HandleDNDLeave(Sender: TObject);
procedure HandleDNDEnter(Sender: TObject; DataObj: IDataObject; KeyState: Longint; PT: TPoint; var Effect: DWORD);
+ function GetDropManager: TfpgOLEDropTarget;
procedure HandleDNDPosition(Sender: TObject; KeyState: Longint; PT: TPoint; var Effect: TfpgOLEDragDropEffect);
procedure HandleDNDDrop(Sender: TObject; DataObj: IDataObject; KeyState: Longint; PT: TPoint; Effect: TfpgOLEDragDropEffect);
+ {$ENDIF}
private
FMouseInWindow: boolean;
FNonFullscreenRect: TfpgRect;
@@ -171,7 +185,9 @@ type
QueueAcceptDrops: boolean;
function DoMouseEnterLeaveCheck(AWindow: TfpgGDIWindow; uMsg, wParam, lParam: Cardinal): Boolean;
procedure WindowSetFullscreen(aFullScreen, aUpdate: boolean);
+ {$IFDEF HAS_DND}
property DropManager: TfpgOLEDropTarget read GetDropManager;
+ {$ENDIF}
protected
FWinHandle: TfpgWinHandle;
FModalForWin: TfpgGDIWindow;
@@ -1445,6 +1461,7 @@ var
// this are required for Windows MouseEnter & MouseExit detection.
uLastWindowHndl: TfpgWinHandle;
+{$IFDEF HAS_DND}
procedure TfpgGDIWindow.HandleDNDLeave(Sender: TObject);
var
wg: TfpgWidget;
@@ -1610,6 +1627,7 @@ begin
end;
Result := FDropManager;
end;
+{$ENDIF HAS_DND}
function TfpgGDIWindow.DoMouseEnterLeaveCheck(AWindow: TfpgGDIWindow; uMsg, wParam, lParam: Cardinal): Boolean;
var
@@ -2016,6 +2034,7 @@ end;
procedure TfpgGDIWindow.DoAcceptDrops(const AValue: boolean);
begin
+ {$IFDEF HAS_DND}
if AValue then
begin
if HasHandle then
@@ -2029,6 +2048,7 @@ begin
DropManager.RevokeDragDrop;
QueueAcceptDrops := False;
end;
+ {$ENDIF}
end;
procedure TfpgGDIWindow.DoDragStartDetected;
@@ -2066,7 +2086,9 @@ begin
else
begin
+ {$IFNDEF WINCE}
placement.length:= sizeof(placement);
+ // This Windows function doesn't exist in WinCE
if GetWindowPlacement(FWinHandle, placement) then
begin
case placement.ShowCmd of
@@ -2074,6 +2096,7 @@ begin
SW_SHOWMINIMIZED: result:= wsMinimized;
end;
end;
+ {$ENDIF}
end; { case..else }
end; { case }
end;
@@ -2082,7 +2105,9 @@ constructor TfpgGDIWindow.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FWinHandle := 0;
+ {$IFDEF HAS_DND}
FDropManager := nil;
+ {$ENDIF}
FDropPos.x := 0;
FDropPos.y := 0;
FFullscreenIsSet := false;
@@ -2092,8 +2117,10 @@ end;
destructor TfpgGDIWindow.Destroy;
begin
+ {$IFDEF HAS_DND}
if Assigned(FDropManager) then
FDropManager.Free;
+ {$ENDIF}
inherited Destroy;
end;
@@ -3027,10 +3054,13 @@ var
M: PStgMedium;
itm: TfpgMimeDataItem;
lEffects: DWORD;
+ {$IFDEF HAS_DND}
FDataObject: TfpgOLEDataObject;
FDropSource: TfpgOLEDropSource;
+ {$ENDIF}
lIsTranslated: boolean;
begin
+ {$IFDEF HAS_DND}
if FDragging then
begin
{$IFDEF DND_DEBUG}
@@ -3121,6 +3151,7 @@ begin
// (FDropSource as IUnknown)._Release;
// (FDataObject as IUnknown)._Release;
end;
+ {$ENDIF HAS_DND}
end;
{ TGDIDragManager }
@@ -3164,18 +3195,22 @@ end;
procedure TGDIDragManager.RegisterDragDrop;
begin
+ {$IFDEF HAS_DND}
Activex.RegisterDragDrop(TfpgWidget(FDropTarget).WinHandle, self as IDropTarget)
+ {$ENDIF}
end;
procedure TGDIDragManager.RevokeDragDrop;
begin
+ {$IFDEF HAS_DND}
ActiveX.RevokeDragDrop(TfpgWidget(FDropTarget).WinHandle);
+ {$ENDIF}
end;
{$IF FPC_FULLVERSION<20602}
procedure TimerCallBackProc(hWnd: HWND; uMsg: UINT; idEvent: UINT; dwTime: DWORD); stdcall;
{$ELSE}
-procedure TimerCallBackProc(hWnd: HWND; uMsg: UINT; idEvent: UINT_PTR; dwTime: DWORD); stdcall;
+procedure TimerCallBackProc(hWnd: HWND; uMsg: UINT; idEvent: UINT_PTR; dwTime: DWORD); {$IFNDEF WINCE} stdcall; {$ELSE} cdecl; {$ENDIF}
{$IFEND}
begin
{ idEvent contains the handle to the timer that got triggered }
@@ -3240,12 +3275,12 @@ end;
initialization
wapplication := nil;
MouseFocusedWH := 0;
- NeedToUnitialize := Succeeded(OleInitialize(nil));
{$IFDEF WinCE}
UnicodeEnabledOS := True;
FontSmoothingType := DEFAULT_QUALITY;
{$ELSE}
+ NeedToUnitialize := Succeeded(OleInitialize(nil));
WinVersion.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
GetVersionEx(WinVersion);
UnicodeEnabledOS := (WinVersion.dwPlatformID = VER_PLATFORM_WIN32_NT) or
@@ -3256,11 +3291,11 @@ initialization
FontSmoothingType := CLEARTYPE_QUALITY
else
FontSmoothingType := ANTIALIASED_QUALITY;
-{$ENDIF}
finalization
if NeedToUnitialize then
OleUninitialize;
+{$ENDIF}
end.
diff --git a/src/corelib/gdi/fpgui_toolkit.lpk b/src/corelib/gdi/fpgui_toolkit.lpk
index 3566dc09..e14414e4 100644
--- a/src/corelib/gdi/fpgui_toolkit.lpk
+++ b/src/corelib/gdi/fpgui_toolkit.lpk
@@ -30,7 +30,7 @@
</CompilerOptions>
<Description Value="fpGUI Toolkit"/>
<License Value="LGPL 2 with static linking exception."/>
- <Version Major="1" Minor="4"/>
+ <Version Major="1" Minor="4" Release="1"/>
<Files Count="107">
<Item1>
<Filename Value="..\stdimages.inc"/>
@@ -166,6 +166,7 @@
</Item33>
<Item34>
<Filename Value="fpg_oledragdrop.pas"/>
+ <AddToUsesPkgSection Value="False"/>
<UnitName Value="fpg_OLEDragDrop"/>
</Item34>
<Item35>
@@ -422,6 +423,7 @@
</Item97>
<Item98>
<Filename Value="..\render\software\Agg2D.pas"/>
+ <AddToUsesPkgSection Value="False"/>
<UnitName Value="Agg2D"/>
</Item98>
<Item99>
diff --git a/src/corelib/gdi/fpgui_toolkit.pas b/src/corelib/gdi/fpgui_toolkit.pas
index 4704d56a..2cc8e7f0 100644
--- a/src/corelib/gdi/fpgui_toolkit.pas
+++ b/src/corelib/gdi/fpgui_toolkit.pas
@@ -2,27 +2,27 @@
This source is only used to compile and install the package.
}
-unit fpgui_toolkit;
+unit fpgui_toolkit;
interface
uses
- fpg_base, fpg_main, fpg_cmdlineparams, fpg_command_intf, fpg_constants,
+ fpg_base, fpg_main, fpg_cmdlineparams, fpg_command_intf, fpg_constants,
fpg_extinterpolation, fpg_imagelist, fpg_imgfmt_bmp, fpg_pofiles,
fpg_popupwindow, fpg_stdimages, fpg_stringhashlist, fpg_translations,
fpg_stringutils, fpg_utils, fpg_widget, fpg_wuline, fpg_impl, fpg_gdi,
- fpg_OLEDragDrop, fpg_animation, fpg_basegrid, fpg_button, fpg_checkbox,
- fpg_combobox, fpg_customgrid, fpg_dialogs, fpg_editcombo, fpg_edit,
- fpg_form, fpg_gauge, fpg_grid, fpg_hyperlink, fpg_iniutils, fpg_label,
- fpg_listbox, fpg_listview, fpg_memo, fpg_menu, fpg_mru, fpg_panel,
- fpg_popupcalendar, fpg_progressbar, fpg_radiobutton, fpg_scrollbar,
- fpg_style, fpg_tab, fpg_trackbar, fpg_tree, fpgui_db, fpg_splitter,
- fpg_hint, fpg_spinedit, fpg_extgraphics, fpg_ColorMapping, fpg_ColorWheel,
- fpg_interface, fpg_editbtn, fpg_imgfmt_jpg, fpg_imgutils, fpg_stylemanager,
- fpg_style_win2k, fpg_style_motif, fpg_style_clearlooks, fpg_style_bluecurve,
+ fpg_animation, fpg_basegrid, fpg_button, fpg_checkbox, fpg_combobox,
+ fpg_customgrid, fpg_dialogs, fpg_editcombo, fpg_edit, fpg_form, fpg_gauge,
+ fpg_grid, fpg_hyperlink, fpg_iniutils, fpg_label, fpg_listbox, fpg_listview,
+ fpg_memo, fpg_menu, fpg_mru, fpg_panel, fpg_popupcalendar, fpg_progressbar,
+ fpg_radiobutton, fpg_scrollbar, fpg_style, fpg_tab, fpg_trackbar, fpg_tree,
+ fpgui_db, fpg_splitter, fpg_hint, fpg_spinedit, fpg_extgraphics,
+ fpg_ColorMapping, fpg_ColorWheel, fpg_interface, fpg_editbtn,
+ fpg_imgfmt_jpg, fpg_imgutils, fpg_stylemanager, fpg_style_win2k,
+ fpg_style_motif, fpg_style_clearlooks, fpg_style_bluecurve,
fpg_style_bitmap, fpg_readonly, fpg_imgfmt_png, U_Command, U_Pdf, U_Report,
- U_ReportImages, U_Visu, fpg_trayicon, Agg2D, fpg_dbugintf, fpg_dbugmsg,
- fpg_style_carbon, fpg_style_plastic, fpg_style_win8, fpg_toggle,
+ U_ReportImages, U_Visu, fpg_trayicon, fpg_dbugintf, fpg_dbugmsg,
+ fpg_style_carbon, fpg_style_plastic, fpg_style_win8, fpg_toggle,
fpg_StringGridBuilder, fpg_CSVParser;
implementation
diff --git a/src/corelib/lang_af.inc b/src/corelib/lang_af.inc
index 173dd6b2..f822e9dc 100644
--- a/src/corelib/lang_af.inc
+++ b/src/corelib/lang_af.inc
@@ -12,6 +12,7 @@ rsall = 'Alles';
rsallfiles = 'Alle Lêers';
rscollectionallfonts = 'Alle Lettertipes';
rskeyalt = 'Alt+';
+rserrunexpected = 'An unexpected error occurred.';
rsantialiasing = 'Anti-aliasing';
rsshortapr = 'Apr';
rslongapr = 'April';
@@ -21,6 +22,7 @@ rslongaug = 'Augustus';
rskeybksp = 'BkSp';
rscolorblue = 'Blue';
rsbold = 'Vetdruk';
+rsbookmarks = 'Bookmarks';
rscancel = 'Kanselleer';
rscannotcreatedir = 'Kan nie die lêergids skep nie';
rschange = 'Verander';
@@ -74,6 +76,8 @@ rscollectionfontaliases = 'Font Kenname';
rserrreportfontfilemissing = 'Font lêer" <%s.fnt> is nie gevind nie';
rsshortfri = 'Vr';
rslongfri = 'Vrydag';
+rsgotoparentdirectory = 'Go to parent directory';
+rsgotohomedirectory = 'Got to home directory';
rscolorgreen = 'Green';
rsfilegroup = 'Groep';
rshelp = 'Help';
diff --git a/src/corelib/lang_de.inc b/src/corelib/lang_de.inc
index a261926f..18f96adb 100644
--- a/src/corelib/lang_de.inc
+++ b/src/corelib/lang_de.inc
@@ -12,6 +12,7 @@ rsall = 'Alle';
rsallfiles = 'Alle Dateien';
rscollectionallfonts = 'Alle Schriften';
rskeyalt = 'Alt+';
+rserrunexpected = 'An unexpected error occurred.';
rsantialiasing = 'Antialiasing';
rsshortapr = 'Apr';
rslongapr = 'April';
@@ -21,6 +22,7 @@ rslongaug = 'August';
rskeybksp = 'BkSp';
rscolorblue = 'Blue';
rsbold = 'Fett';
+rsbookmarks = 'Bookmarks';
rscancel = 'Abbrechen';
rscannotcreatedir = 'Kann Verzeichnis nicht anlegen';
rschange = 'Ändern';
@@ -74,6 +76,8 @@ rscollectionfontaliases = 'Font-Aliase';
rserrreportfontfilemissing = 'Font file <%s.fnt> not found';
rsshortfri = 'Fre';
rslongfri = 'Freitag';
+rsgotoparentdirectory = 'Go to parent directory';
+rsgotohomedirectory = 'Got to home directory';
rscolorgreen = 'Green';
rsfilegroup = 'Gruppe';
rshelp = 'Hilfe';
diff --git a/src/corelib/lang_en.inc b/src/corelib/lang_en.inc
index aec26b22..d1c1fcc4 100644
--- a/src/corelib/lang_en.inc
+++ b/src/corelib/lang_en.inc
@@ -12,6 +12,7 @@ rsall = 'All';
rsallfiles = 'All Files';
rscollectionallfonts = 'All Fonts';
rskeyalt = 'Alt+';
+rserrunexpected = 'An unexpected error occurred.';
rsantialiasing = 'Anti aliasing';
rsshortapr = 'Apr';
rslongapr = 'April';
@@ -21,6 +22,7 @@ rslongaug = 'August';
rskeybksp = 'BkSp';
rscolorblue = 'Blue';
rsbold = 'Bold';
+rsbookmarks = 'Bookmarks';
rscancel = 'Cancel';
rscannotcreatedir = 'Cannot create directory';
rschange = 'Change';
@@ -74,6 +76,8 @@ rscollectionfontaliases = 'Font Aliases';
rserrreportfontfilemissing = 'Font file <%s.fnt> not found';
rsshortfri = 'Fri';
rslongfri = 'Friday';
+rsgotoparentdirectory = 'Go to parent directory';
+rsgotohomedirectory = 'Got to home directory';
rscolorgreen = 'Green';
rsfilegroup = 'Group';
rshelp = 'Help';
diff --git a/src/corelib/lang_es.inc b/src/corelib/lang_es.inc
index f53ccb76..1c0ca2cd 100644
--- a/src/corelib/lang_es.inc
+++ b/src/corelib/lang_es.inc
@@ -12,6 +12,7 @@ rsall = 'Todos';
rsallfiles = 'Todos los Archivos';
rscollectionallfonts = 'Todas las Fuentes';
rskeyalt = 'Alt+';
+rserrunexpected = 'An unexpected error occurred.';
rsantialiasing = 'Anti aliasing';
rsshortapr = 'Apr';
rslongapr = 'April';
@@ -21,6 +22,7 @@ rslongaug = 'August';
rskeybksp = 'BkSp';
rscolorblue = 'Blue';
rsbold = 'Negrita';
+rsbookmarks = 'Bookmarks';
rscancel = 'Cancelar';
rscannotcreatedir = 'No se puede crear la carpeta';
rschange = 'Cambiar';
@@ -74,6 +76,8 @@ rscollectionfontaliases = 'Aliases de Fuentes';
rserrreportfontfilemissing = 'Font file <%s.fnt> not found';
rsshortfri = 'Vie';
rslongfri = 'Viernes';
+rsgotoparentdirectory = 'Go to parent directory';
+rsgotohomedirectory = 'Got to home directory';
rscolorgreen = 'Green';
rsfilegroup = 'Grupo';
rshelp = 'Ayuda';
diff --git a/src/corelib/lang_fr.inc b/src/corelib/lang_fr.inc
index 0a9a8e21..7ccad790 100644
--- a/src/corelib/lang_fr.inc
+++ b/src/corelib/lang_fr.inc
@@ -12,28 +12,30 @@ rsall = 'Tous';
rsallfiles = 'Tous les fichiers';
rscollectionallfonts = 'Toutes les polices';
rskeyalt = 'Alt+';
+rserrunexpected = 'An unexpected error occurred.';
rsantialiasing = 'Anti alias';
rsshortapr = 'Avr';
rslongapr = 'Avril';
rsfileattributes = 'Attributs';
rsshortaug = 'Aoû';
rslongaug = 'Août';
-rskeybksp = 'BkSp';
-rscolorblue = 'Blue';
+rskeybksp = 'Retour';
+rscolorblue = 'Bleu';
rsbold = 'Gras';
+rsbookmarks = 'Signets';
rscancel = 'Annuler';
rscannotcreatedir = 'Impossible de créer le répertoire';
rschange = 'Modifier';
rschangetitle = 'Changer le titre';
rscharactermap = 'Table de caractères';
-rscolorpickerhint = 'Click on Picker and maintain click => release to get the color';
+rscolorpickerhint = 'Cliquer le Picker et le maintenir => relacher pour avoir la couleur';
rsclose = 'Fermer';
rscollection = 'Collection';
-rstabsheetcolorwheel = 'Color Wheel';
+rstabsheetcolorwheel = 'Roue des couleurs';
rsconfigurebookmarks = 'Configurer les signets';
rsconfirm = 'Confirmer';
rsconfirmation = 'Confirmation';
-rscontinuous = 'Continuous';
+rscontinuous = 'Continu';
rscopy = 'Copier';
rserrcouldnotopendir = 'Le répertoire <%s> n''''a pas pu être ouvert';
rscreate = 'Créer';
@@ -44,19 +46,19 @@ rscut = 'Couper';
rsdatabase = 'Base de données';
rsshortdec = 'Déc';
rslongdec = 'Décembre';
-rskeydel = 'Del';
+rskeydel = 'Suppr';
rsdelete = 'Supprimer';
rsdirectories = 'Répertoires';
rsdirectory = 'Répertoire';
-rskeydown = 'Down';
+rskeydown = 'Bas';
rsdrive = 'Disque';
rsedit = 'Editer';
-rskeyend = 'End';
+rskeyend = 'Fin';
rslanguage = 'Français';
-rskeyenter = 'Enter';
+rskeyenter = 'Entrée';
rsenternewdirectory = 'Entrer le nom du nouveau répertoire';
rserror = 'Erreur';
-rskeyesc = 'Esc';
+rskeyesc = 'Echap';
rsexampletext = 'Texte exemple';
rsexit = 'Sortir';
rserrfailedtocreatedir = 'Le répertoire <%s> n''''a pas pu être ouvert';
@@ -74,11 +76,13 @@ rscollectionfontaliases = 'Alias';
rserrreportfontfilemissing = 'Fichier de police <%s.fnt> non trouvé';
rsshortfri = 'Ven';
rslongfri = 'Vendredi';
-rscolorgreen = 'Green';
+rsgotoparentdirectory = 'Aller au répertoire parent';
+rsgotohomedirectory = 'Aller au répertoire origine';
+rscolorgreen = 'Vert';
rsfilegroup = 'Groupe';
rshelp = 'Aide';
-rshexadecimal = 'Hexadecimal';
-rskeyhome = 'Home';
+rshexadecimal = 'Hexadécimal';
+rskeyhome = 'Début';
rsignore = 'Ignorer';
rserrreportimagefilemissing = 'Image <%s> introuvable';
rsinformation = 'Information';
@@ -93,7 +97,7 @@ rsshortjul = 'Jul';
rslongjul = 'Juillet';
rsshortjun = 'Jun';
rslongjun = 'Juin';
-rskeyleft = 'Left';
+rskeyleft = 'Gauche';
rserrlistmustbeempty = 'La liste doit être vide';
rsshortmar = 'Mar';
rslongmar = 'Mars';
@@ -121,15 +125,15 @@ rsfiletypepdf = 'Documents PDF';
rsreportpage = 'Page';
rspassword = 'Mot de passe';
rspaste = 'Coller';
-rskeypgdn = 'PgDn';
-rskeypgup = 'PgUp';
-rstabpredefined = 'Predefined';
+rskeypgdn = 'PgBas';
+rskeypgup = 'PgHaut';
+rstabpredefined = 'Prédéfini';
rsreportpreview = 'Prévisualisation';
rscollectionrecentlyused = 'Récemment utilisé';
-rscolorred = 'Red';
+rscolorred = 'Rouge';
rsreplace = 'Remplacer';
rsretry = 'Retenter';
-rskeyright = 'Right';
+rskeyright = 'Droit';
rsfilerights = 'Droits';
rscollectionsans = 'Sans';
rsshortsat = 'Sam';
@@ -144,10 +148,10 @@ rsselectafont = 'Choisir la police';
rsshortsep = 'Sep';
rslongsep = 'Septembre';
rscollectionserif = 'Serif';
-rskeyshift = 'Shift+';
+rskeyshift = 'Maj+';
rsshowhidden = 'Montrer les fichiers cachés';
rssize = 'Taille';
-rskeyspace = 'Space';
+rskeyspace = 'Espace';
rsstyle = 'Style';
rsshortsun = 'Dim';
rslongsun = 'Dimanche';
@@ -163,7 +167,7 @@ rslongtue = 'Mardi';
rsfiletype = 'Type de fichier';
rstypeface = 'Style';
rsunderscore = 'Souligné';
-rskeyup = 'Up';
+rskeyup = 'Haut';
rsusername = 'Nom utilisateur';
rswarning = 'Alerte';
rsshortwed = 'Mer';
diff --git a/src/corelib/lang_it.inc b/src/corelib/lang_it.inc
index 26eb36d8..e1df75f4 100644
--- a/src/corelib/lang_it.inc
+++ b/src/corelib/lang_it.inc
@@ -12,6 +12,7 @@ rsall = 'Tutto';
rsallfiles = 'Tutti i Files';
rscollectionallfonts = 'Tutti i Fonts';
rskeyalt = 'Alt+';
+rserrunexpected = 'An unexpected error occurred.';
rsantialiasing = 'Anti aliasing';
rsshortapr = 'Apr';
rslongapr = 'Aprile';
@@ -21,6 +22,7 @@ rslongaug = 'Agosto';
rskeybksp = 'BkSp';
rscolorblue = 'Blue';
rsbold = 'Grassetto';
+rsbookmarks = 'Bookmarks';
rscancel = 'Annulla';
rscannotcreatedir = 'Non riesco a creare la cartella';
rschange = 'Cambia';
@@ -74,6 +76,8 @@ rscollectionfontaliases = 'Font Aliases';
rserrreportfontfilemissing = 'Font file <%s.fnt> not found';
rsshortfri = 'Ven';
rslongfri = 'Venerdì';
+rsgotoparentdirectory = 'Go to parent directory';
+rsgotohomedirectory = 'Got to home directory';
rscolorgreen = 'Green';
rsfilegroup = 'Gruppo';
rshelp = 'Aiuto';
diff --git a/src/corelib/lang_pt.inc b/src/corelib/lang_pt.inc
index fb3dd92b..718137e5 100644
--- a/src/corelib/lang_pt.inc
+++ b/src/corelib/lang_pt.inc
@@ -12,6 +12,7 @@ rsall = 'Todos';
rsallfiles = 'Todos os arquivos';
rscollectionallfonts = 'Todas Fontes';
rskeyalt = 'Alt+';
+rserrunexpected = 'An unexpected error occurred.';
rsantialiasing = 'Anti aliasing';
rsshortapr = 'Abr';
rslongapr = 'Abril';
@@ -21,6 +22,7 @@ rslongaug = 'Agosto';
rskeybksp = 'BkSp';
rscolorblue = 'Blue';
rsbold = 'Negrito';
+rsbookmarks = 'Bookmarks';
rscancel = 'Cancelar';
rscannotcreatedir = 'Não foi possível criar diretório';
rschange = 'Editar';
@@ -74,6 +76,8 @@ rscollectionfontaliases = 'Font Aliases';
rserrreportfontfilemissing = 'Font file <%s.fnt> not found';
rsshortfri = 'Sex';
rslongfri = 'Sexta-feira';
+rsgotoparentdirectory = 'Go to parent directory';
+rsgotohomedirectory = 'Got to home directory';
rscolorgreen = 'Green';
rsfilegroup = 'Grupo';
rshelp = 'Ajuda';
diff --git a/src/corelib/lang_ru.inc b/src/corelib/lang_ru.inc
index ce5b753e..d720842b 100644
--- a/src/corelib/lang_ru.inc
+++ b/src/corelib/lang_ru.inc
@@ -12,6 +12,7 @@ rsall = 'Все';
rsallfiles = 'Все файлы';
rscollectionallfonts = 'Все шрифты';
rskeyalt = 'Alt+';
+rserrunexpected = 'An unexpected error occurred.';
rsantialiasing = 'Сглаживание';
rsshortapr = 'Апр';
rslongapr = 'Апрель';
@@ -21,6 +22,7 @@ rslongaug = 'Август';
rskeybksp = 'BkSp';
rscolorblue = 'Синий';
rsbold = 'Жирный';
+rsbookmarks = 'Bookmarks';
rscancel = 'Отмена';
rscannotcreatedir = 'Невозможно создать директорию';
rschange = 'Изменить';
@@ -74,6 +76,8 @@ rscollectionfontaliases = 'Псевдонимы шрифтов';
rserrreportfontfilemissing = 'Файл шрифта <%s.fnt> не найден';
rsshortfri = 'Пт';
rslongfri = 'Пятница';
+rsgotoparentdirectory = 'Go to parent directory';
+rsgotohomedirectory = 'Got to home directory';
rscolorgreen = 'Green';
rsfilegroup = 'Группа';
rshelp = 'Справка';
diff --git a/src/corelib/render/software/Agg2D.pas b/src/corelib/render/software/Agg2D.pas
index b77b9ce9..7cf9cb48 100644
--- a/src/corelib/render/software/Agg2D.pas
+++ b/src/corelib/render/software/Agg2D.pas
@@ -644,7 +644,7 @@ type
function BitmapAlphaTransparency(bitmap : TfpgImage; alpha : byte ) : boolean;
function fpgColor2AggColor(c: TfpgColor): TAggColor;
-
+
IMPLEMENTATION
@@ -995,7 +995,6 @@ end;
function fpgColor2AggColor(c: TfpgColor): TAggColor;
var
t: TRGBTriple;
- c1: TfpgColor;
begin
t := fpgColorToRGBTriple(c);
Result.Construct(t.Red, t.Green, t.Blue, t.Alpha);
@@ -1137,7 +1136,7 @@ begin
stride );
{ OK }
- result:=true;
+ result:=true;
end;
@@ -3569,7 +3568,6 @@ end;
{$ENDIF}
{$IFDEF UNIX}
var
- s: TfpgString;
i: integer;
fnt: TFontCacheItem;
lSize: double;
@@ -3841,4 +3839,4 @@ end;
end.
-
+
diff --git a/src/corelib/render/software/agg_color.pas b/src/corelib/render/software/agg_color.pas
index 3aadb4f4..05958f8d 100644
--- a/src/corelib/render/software/agg_color.pas
+++ b/src/corelib/render/software/agg_color.pas
@@ -244,13 +244,12 @@ end;
{ FROM_WAVELENGTH }
constructor aggclr.from_wavelength(wl ,gamma : double );
var
- tr ,tg ,tb ,ta ,s : double;
+ tr ,tg ,tb ,s : double;
begin
tr:=0;
tg:=0;
tb:=0;
- ta:=0;
if (wl >= 380.0 ) and
(wl <= 440.0 ) then
diff --git a/src/corelib/render/software/agg_scanline_storage_aa.pas b/src/corelib/render/software/agg_scanline_storage_aa.pas
index 1f1f4ab4..b625f097 100644
--- a/src/corelib/render/software/agg_scanline_storage_aa.pas
+++ b/src/corelib/render/software/agg_scanline_storage_aa.pas
@@ -1671,9 +1671,6 @@ end;
{ REWIND_SCANLINES }
function serialized_scanlines_adaptor_aa.rewind_scanlines;
-var
- x : int;
-
begin
m_ptr:=m_data;
diff --git a/src/corelib/render/software/fpg_fontcache.pas b/src/corelib/render/software/fpg_fontcache.pas
index 15f65e40..3de3a7f6 100644
--- a/src/corelib/render/software/fpg_fontcache.pas
+++ b/src/corelib/render/software/fpg_fontcache.pas
@@ -207,7 +207,6 @@ function TFontCacheList.BuildFontCacheItem(const AFontFile: TfpgString): TFontCa
var
face_ptr: FT_Face_ptr;
s: Ansistring;
- i: integer;
flags: integer;
begin
FT_New_Face(m_library, PChar(AFontFile), 0, face_ptr);
diff --git a/src/corelib/x11/fpg_netlayer_x11.pas b/src/corelib/x11/fpg_netlayer_x11.pas
index eb9207b0..0ba60a6b 100644
--- a/src/corelib/x11/fpg_netlayer_x11.pas
+++ b/src/corelib/x11/fpg_netlayer_x11.pas
@@ -601,8 +601,6 @@ begin
end;
procedure TNETWindowLayer.WindowSetSupportPING(const AWindow: TWindow);
-var
- WM_PROTOCOLS: TAtom;
begin
//WM_PROTOCOLS := XInternAtom(FDisplay, 'WM_PROTOCOLS', True);
WindowAddProtocol(AWindow, FNetAtoms[naWM_PING]);
diff --git a/src/corelib/x11/fpg_x11.pas b/src/corelib/x11/fpg_x11.pas
index ff6e7272..3d28a873 100644
--- a/src/corelib/x11/fpg_x11.pas
+++ b/src/corelib/x11/fpg_x11.pas
@@ -704,7 +704,6 @@ var
Data: Pointer;
xia_Atom_Pair: TAtom;
AtomPair: TAtomPair;
- i: Integer;
r: cint;
begin
@@ -1689,7 +1688,7 @@ begin
OnIdle(self);
fpFD_ZERO(rfds);
fpFD_SET(xfd, rfds);
- r := fpSelect(xfd + 1, @rfds, nil, nil, Min(atimeoutms, 50));
+ r := fpSelect(xfd + 1, @rfds, nil, nil, 10);
if r <> 0 then // We got a X event or the timeout happened
XNextEvent(display, @ev)
else
diff --git a/src/corelib/x11/fpgui_toolkit.lpk b/src/corelib/x11/fpgui_toolkit.lpk
index f53dd62e..52454211 100644
--- a/src/corelib/x11/fpgui_toolkit.lpk
+++ b/src/corelib/x11/fpgui_toolkit.lpk
@@ -23,12 +23,11 @@
</CodeGeneration>
<Other>
<CustomOptions Value="-dAggCanvasX"/>
- <CompilerPath Value="$(CompPath)"/>
</Other>
</CompilerOptions>
<Description Value="fpGUI Toolkit"/>
<License Value="LGPL 2 with static linking exception."/>
- <Version Major="1" Minor="4"/>
+ <Version Major="1" Minor="4" Release="1"/>
<Files Count="110">
<Item1>
<Filename Value="../stdimages.inc"/>
diff --git a/src/gui/fpg_basegrid.pas b/src/gui/fpg_basegrid.pas
index 2df7b414..0524adac 100644
--- a/src/gui/fpg_basegrid.pas
+++ b/src/gui/fpg_basegrid.pas
@@ -696,7 +696,6 @@ var
cw: integer;
vl: integer;
i: integer;
- x: integer;
hmax: integer;
vmax: integer;
Hfits, showH : boolean;
@@ -929,7 +928,6 @@ var
rTop: integer;
firstcol, lastcol, firstrow, lastrow : integer;
cWidths: array of integer;
- rect: TRect;
begin
Canvas.ClearClipRect;
r.SetRect(0, 0, Width, Height);
@@ -1446,7 +1444,6 @@ end;
procedure TfpgBaseGrid.HandleLMouseUp(x, y: integer; shiftstate: TShiftState);
var
- lColumn: integer;
hh: integer; { header height }
cLeft: integer; { column left }
c: integer;
@@ -1512,7 +1509,6 @@ var
hh: integer;
n: Integer;
cw: integer;
- nw: integer;
prow: Integer;
pcol: Integer;
c: integer;
diff --git a/src/gui/fpg_checkbox.pas b/src/gui/fpg_checkbox.pas
index a2946c3c..d428ad55 100644
--- a/src/gui/fpg_checkbox.pas
+++ b/src/gui/fpg_checkbox.pas
@@ -189,7 +189,6 @@ procedure TfpgBaseCheckBox.HandlePaint;
var
r: TfpgRect;
ix: integer;
- img: TfpgImage;
LFlags: TfpgTextFlags;
begin
inherited HandlePaint;
diff --git a/src/gui/fpg_colormapping.pas b/src/gui/fpg_colormapping.pas
index a22b949e..9e736e4b 100644
--- a/src/gui/fpg_colormapping.pas
+++ b/src/gui/fpg_colormapping.pas
@@ -54,7 +54,7 @@ begin
hi := max(max(r, g), b);
lo := min(min(r, g), b);
d := hi - lo;
- Value := hi / 256;
+ Value := hi / 255;
if d > 0 then
begin
if r = hi then
diff --git a/src/gui/fpg_dialogs.pas b/src/gui/fpg_dialogs.pas
index 42f4752c..0ceeaa13 100644
--- a/src/gui/fpg_dialogs.pas
+++ b/src/gui/fpg_dialogs.pas
@@ -1,7 +1,7 @@
{
fpGUI - Free Pascal GUI Toolkit
- Copyright (C) 2006 - 2014 See the file AUTHORS.txt, included in this
+ Copyright (C) 2006 - 2015 See the file AUTHORS.txt, included in this
distribution, for details of the copyright.
See the file COPYING.modifiedLGPL, included in this distribution,
@@ -118,6 +118,7 @@ type
procedure SetupCaptions; virtual;
public
constructor Create(AOwner: TComponent); override;
+ procedure AfterCreate; override;
end;
@@ -202,6 +203,7 @@ type
procedure HandleKeyPress(var keycode: word; var shiftstate: TShiftState; var consumed: boolean); override;
procedure btnOKClick(Sender: TObject); override;
procedure SetCurrentDirectory(const ADir: string);
+ procedure SetupCaptions; override;
public
FileName: string;
constructor Create(AOwner: TComponent); override;
@@ -250,7 +252,7 @@ uses
fpg_widget,
fpg_utils,
fpg_stringutils
- {$IFDEF MSWINDOWS}
+ {$IFDEF WINDOWS}
,Windows // used by File Dialog & Select Dir Dialog
{$ENDIF}
,DateUtils
@@ -605,6 +607,12 @@ begin
btnOK.TabOrder := 1;
end;
+procedure TfpgBaseDialog.AfterCreate;
+begin
+ inherited AfterCreate;
+ SetupCaptions;
+end;
+
{ TfpgFontSelectDialog }
@@ -1101,6 +1109,8 @@ end;
procedure TfpgFileDialog.InitializeComponents;
begin
+ self.ShowHint := True;
+
chlDir := TfpgComboBox.Create(self);
with chlDir do
begin
@@ -1450,6 +1460,16 @@ begin
edFilename.Clear;
end;
+procedure TfpgFileDialog.SetupCaptions;
+begin
+ inherited SetupCaptions;
+ btnUpDir.Hint := rsGoToParentDirectory;
+ btnDirNew.Hint := rsCreateDirectory;
+ btnShowHidden.Hint := rsShowHidden;
+ btnGoHome.Hint := rsGoToHomeDirectory;
+ btnBookmark.Hint := rsBookmarks;
+end;
+
function TfpgFileDialog.HighlightFile(const AFilename: string): boolean;
var
n: integer;
@@ -1469,7 +1489,6 @@ end;
function TfpgFileDialog.CreatePopupMenu: TfpgPopupMenu;
var
i: integer;
- s: TfpgString;
lst: TStringList;
mi: TfpgMenuItem;
begin
diff --git a/src/gui/fpg_edit.pas b/src/gui/fpg_edit.pas
index 6bc3cc7c..1ddce281 100644
--- a/src/gui/fpg_edit.pas
+++ b/src/gui/fpg_edit.pas
@@ -1,7 +1,7 @@
{
fpGUI - Free Pascal GUI Toolkit
- Copyright (C) 2006 - 2013 See the file AUTHORS.txt, included in this
+ Copyright (C) 2006 - 2015 See the file AUTHORS.txt, included in this
distribution, for details of the copyright.
See the file COPYING.modifiedLGPL, included in this distribution,
@@ -933,8 +933,7 @@ begin
end;
end; { if }
- if not consumed then
- inherited HandleKeyPress(keycode, shiftstate, consumed);
+ inherited HandleKeyPress(keycode, shiftstate, consumed);
if hasChanged then
DoOnChange;
diff --git a/src/gui/fpg_editcombo.pas b/src/gui/fpg_editcombo.pas
index 12773d9b..a8bd30ed 100644
--- a/src/gui/fpg_editcombo.pas
+++ b/src/gui/fpg_editcombo.pas
@@ -441,9 +441,9 @@ begin
end;
procedure TfpgBaseEditCombo.SetDefaultPopupMenuItemsState;
-var
- i: integer;
- itm: TfpgMenuItem;
+//var
+ //i: integer;
+ //itm: TfpgMenuItem;
begin
//for i := 0 to FDefaultPopupMenu.ComponentCount-1 do
//begin
diff --git a/src/gui/fpg_iniutils.pas b/src/gui/fpg_iniutils.pas
index 6bbe83bd..144b007e 100644
--- a/src/gui/fpg_iniutils.pas
+++ b/src/gui/fpg_iniutils.pas
@@ -203,7 +203,7 @@ begin
// If the form is off screen (positioned outside all monitor screens) then
// center the form on screen.
- //{$IFDEF MSWINDOWS}
+ //{$IFDEF WINDOWS}
//if (AForm.FormStyle <> fsMDIChild) {$IFNDEF FPC} and tiFormOffScreen(AForm) {$ENDIF} then
//begin
//if Assigned(Application.MainForm) and (Application.MainForm <> AForm) then
@@ -211,7 +211,7 @@ begin
//else
//AForm.Position:= poScreenCenter;
//end;
- //{$ENDIF MSWINDOWS}
+ //{$ENDIF WINDOWS}
end;
// Do NOT localize
diff --git a/src/gui/fpg_listbox.pas b/src/gui/fpg_listbox.pas
index d876a222..80c836a0 100644
--- a/src/gui/fpg_listbox.pas
+++ b/src/gui/fpg_listbox.pas
@@ -236,6 +236,8 @@ type
property Items;
property ParentShowHint;
property PopupFrame;
+ property ScrollBarPage;
+ property ScrollBarWidth;
property ShowColorNames;
property ShowHint;
property TabOrder;
diff --git a/src/gui/fpg_memo.pas b/src/gui/fpg_memo.pas
index d02e6ec4..0e5079c1 100644
--- a/src/gui/fpg_memo.pas
+++ b/src/gui/fpg_memo.pas
@@ -1,7 +1,7 @@
{
fpGUI - Free Pascal GUI Toolkit
- Copyright (C) 2006 - 2013 See the file AUTHORS.txt, included in this
+ Copyright (C) 2006 - 2015 See the file AUTHORS.txt, included in this
distribution, for details of the copyright.
See the file COPYING.modifiedLGPL, included in this distribution,
@@ -1108,8 +1108,7 @@ begin
RePaint;
end;
-procedure TfpgMemo.HandleKeyPress(var keycode: word;
- var shiftstate: TShiftState; var consumed: boolean);
+procedure TfpgMemo.HandleKeyPress(var keycode: word; var shiftstate: TShiftState; var consumed: boolean);
var
cx: integer;
ls: string;
@@ -1347,14 +1346,14 @@ begin
end;
end;
- if Consumed then
- RePaint
- else
- inherited;
+ inherited HandleKeyPress(keycode, shiftstate, consumed);
if hasChanged then
if Assigned(FOnChange) then
FOnChange(self);
+
+ if Consumed then
+ RePaint;
end;
procedure TfpgMemo.HandleLMouseDown(x, y: integer; shiftstate: TShiftState);
@@ -1706,7 +1705,6 @@ end;
procedure TfpgMemo.SetText(const AValue: TfpgString);
var
n: integer;
- c: TfpgChar;
s: TfpgString;
begin
FLines.Clear;
diff --git a/src/gui/fpg_menu.pas b/src/gui/fpg_menu.pas
index 4779fe40..f1966759 100644
--- a/src/gui/fpg_menu.pas
+++ b/src/gui/fpg_menu.pas
@@ -1070,7 +1070,6 @@ procedure TfpgPopupMenu.DrawItem(mi: TfpgMenuItem; rect: TfpgRect; AFlags: TfpgM
var
s: string;
x: integer;
- img: TfpgImage;
lFlags: TfpgMenuItemFlags;
begin
lFlags := AFlags;
diff --git a/src/gui/fpg_scrollbar.pas b/src/gui/fpg_scrollbar.pas
index fbe20006..69a85097 100644
--- a/src/gui/fpg_scrollbar.pas
+++ b/src/gui/fpg_scrollbar.pas
@@ -434,8 +434,6 @@ begin
end;
procedure TfpgScrollBar.HandleLMouseDown(x, y: integer; shiftstate: TShiftState);
-var
- lPos: TfpgCoord;
begin
inherited;
CaptureMouse;
diff --git a/src/gui/fpg_scrollframe.pas b/src/gui/fpg_scrollframe.pas
index 008832ce..2355929e 100644
--- a/src/gui/fpg_scrollframe.pas
+++ b/src/gui/fpg_scrollframe.pas
@@ -161,7 +161,6 @@ var
c : TComponent;
max_w, max_h : integer;
this_need : integer;
- par : TfpgWidget;
begin
if ComponentCount=0 then
Exit;
@@ -217,8 +216,6 @@ end;
procedure TfpgScrollFrame.HandleMouseScroll(x, y: integer;
shiftstate: TShiftState; delta: smallint);
-var
- old_val, new_val : integer;
begin
inherited HandleMouseScroll(x, y, shiftstate, delta);
with FVScrollBar do
diff --git a/src/gui/fpg_spinedit.pas b/src/gui/fpg_spinedit.pas
index 6061eb3b..97de1027 100644
--- a/src/gui/fpg_spinedit.pas
+++ b/src/gui/fpg_spinedit.pas
@@ -1,7 +1,7 @@
{
fpGUI - Free Pascal GUI Toolkit
- Copyright (C) 2006 - 2014 See the file AUTHORS.txt, included in this
+ Copyright (C) 2006 - 2015 See the file AUTHORS.txt, included in this
distribution, for details of the copyright.
See the file COPYING.modifiedLGPL, included in this distribution,
@@ -175,53 +175,53 @@ type
FValue: integer;
procedure EnableButtons;
protected
- function IsMinLimitReached: Boolean; override;
- function IsMaxLimitReached: Boolean; override;
- function GetEditBackgroundColor: TfpgColor;
- function GetTextColor: TfpgColor;
- function GetNegativeColor: TfpgColor;
- function GetFontDesc: string;
- procedure ResizeChildren; override;
- procedure SetEditBackgroundColor(const AValue: Tfpgcolor);
- procedure SetTextColor(const AValue: Tfpgcolor); override;
- procedure SetNegativeColor(const AValue: Tfpgcolor);
- procedure SetFontDesc(const AValue: string);
- procedure SetMaxValue(const AValue: integer);
- procedure SetMinValue(const AValue: integer);
- procedure SetIncrement(const AValue: integer);
- procedure SetLargeIncrement(const AValue: integer);
- procedure SetValue(const AValue: integer);
- procedure SetHint(const AValue: TfpgString); override;
- procedure ButtonUpClick(Sender: TObject);
- procedure ButtonDownClick(Sender: TObject);
- procedure ButtonUpMouseDown(Sender: TObject; AButton: TMouseButton; AShift: TShiftState; const AMousePos: TPoint);
- procedure ButtonUpMouseUp(Sender: TObject; AButton: TMouseButton; AShift: TShiftState; const AMousePos: TPoint);
- procedure ButtonDownMouseDown(Sender: TObject; AButton: TMouseButton; AShift: TShiftState; const AMousePos: TPoint);
- procedure ButtonDownMouseUp(Sender: TObject; AButton: TMouseButton; AShift: TShiftState; const AMousePos: TPoint);
- procedure EditKeyPress(Sender: TObject; var keycode: word; var shiftstate: TShiftState; var consumed: Boolean);
- procedure EditExit(Sender: TObject);
- procedure MouseEnter(Sender: TObject);
- procedure MouseMove(Sender: TObject; AShift: TShiftState; const AMousePos: TPoint);
- procedure MouseExit(Sender: TObject);
- procedure TimerStep(Sender: TObject);
+ function IsMinLimitReached: Boolean; override;
+ function IsMaxLimitReached: Boolean; override;
+ function GetEditBackgroundColor: TfpgColor;
+ function GetTextColor: TfpgColor;
+ function GetNegativeColor: TfpgColor;
+ function GetFontDesc: string;
+ procedure ResizeChildren; override;
+ procedure SetEditBackgroundColor(const AValue: Tfpgcolor);
+ procedure SetTextColor(const AValue: Tfpgcolor); override;
+ procedure SetNegativeColor(const AValue: Tfpgcolor);
+ procedure SetFontDesc(const AValue: string);
+ procedure SetMaxValue(const AValue: integer);
+ procedure SetMinValue(const AValue: integer);
+ procedure SetIncrement(const AValue: integer);
+ procedure SetLargeIncrement(const AValue: integer);
+ procedure SetValue(const AValue: integer);
+ procedure SetHint(const AValue: TfpgString); override;
+ procedure ButtonUpClick(Sender: TObject);
+ procedure ButtonDownClick(Sender: TObject);
+ procedure ButtonUpMouseDown(Sender: TObject; AButton: TMouseButton; AShift: TShiftState; const AMousePos: TPoint);
+ procedure ButtonUpMouseUp(Sender: TObject; AButton: TMouseButton; AShift: TShiftState; const AMousePos: TPoint);
+ procedure ButtonDownMouseDown(Sender: TObject; AButton: TMouseButton; AShift: TShiftState; const AMousePos: TPoint);
+ procedure ButtonDownMouseUp(Sender: TObject; AButton: TMouseButton; AShift: TShiftState; const AMousePos: TPoint);
+ procedure EditKeyPress(Sender: TObject; var keycode: word; var shiftstate: TShiftState; var consumed: Boolean);
+ procedure EditExit(Sender: TObject);
+ procedure MouseEnter(Sender: TObject);
+ procedure MouseMove(Sender: TObject; AShift: TShiftState; const AMousePos: TPoint);
+ procedure MouseExit(Sender: TObject);
+ procedure TimerStep(Sender: TObject);
public
constructor Create(AOwner: TComponent); override;
published
- property EditBackgroundColor: Tfpgcolor read GetEditBackgroundColor write SetEditBackgroundColor default clBoxColor;
- property ButtonsBackgroundColor;
- property ButtonWidth;
- property TextColor: Tfpgcolor read GetTextColor write SetTextColor;
- property NegativeColor: TfpgColor read GetNegativeColor write SetNegativeColor;
- property ArrowUpColor;
- property ArrowDownColor;
- property FontDesc: string read GetFontDesc write SetFontDesc;
- property MaxValue: integer read FMaxValue write SetMaxValue default 100;
- property MinValue: integer read FMinValue write SetMinValue default 0;
- property Increment: integer read FIncrement write SetIncrement default 1;
- property LargeIncrement: integer read FLargeIncrement write SetLargeIncrement default 10;
- property Value: integer read FValue write SetValue default 0;
- property Hint;
- property TabOrder;
+ property EditBackgroundColor: Tfpgcolor read GetEditBackgroundColor write SetEditBackgroundColor default clBoxColor;
+ property ButtonsBackgroundColor;
+ property ButtonWidth;
+ property TextColor: Tfpgcolor read GetTextColor write SetTextColor;
+ property NegativeColor: TfpgColor read GetNegativeColor write SetNegativeColor;
+ property ArrowUpColor;
+ property ArrowDownColor;
+ property FontDesc: string read GetFontDesc write SetFontDesc;
+ property MaxValue: integer read FMaxValue write SetMaxValue default 100;
+ property MinValue: integer read FMinValue write SetMinValue default 0;
+ property Increment: integer read FIncrement write SetIncrement default 1;
+ property LargeIncrement: integer read FLargeIncrement write SetLargeIncrement default 10;
+ property Value: integer read FValue write SetValue default 0;
+ property Hint;
+ property TabOrder;
property OnChange;
property OnEnter;
property OnExit;
@@ -238,7 +238,8 @@ function CreateSpinEditFloat(AOwner: TComponent; x, y, w, h: TfpgCoord;
AFixedDecimals: integer = 1; AValue: extended = 0; ADecimals: integer = -1): TfpgSpinEditFloat;
function CreateSpinEdit(AOwner: TComponent; x, y, w, h: TfpgCoord; AMinValue: integer = 0;
AMaxValue: integer = 100; AIncrement: integer = 1; ALargeIncrement: integer = 10;
- AValue: integer = 0): TfpgSpinEdit;
+ AValue: integer = 0): TfpgSpinEdit; overload;
+function CreateSpinEdit(AOwner: TComponent; x, y, w: TfpgCoord; AOnChangeEvent: TNotifyEvent = nil): TfpgSpinEdit; overload;
implementation
@@ -299,6 +300,15 @@ begin
Result.Value := AValue;
end;
+function CreateSpinEdit(AOwner: TComponent; x, y, w: TfpgCoord; AOnChangeEvent: TNotifyEvent): TfpgSpinEdit;
+begin
+ Result := TfpgSpinEdit.Create(AOwner);
+ Result.SetPosition(x, y, w, Result.Height);
+ if Assigned(AOnChangeEvent) then
+ Result.OnChange := AOnChangeEvent;
+ Result.UpdateWindowPosition;
+end;
+
{ TfpgAbstractSpinEdit }
@@ -427,6 +437,7 @@ end;
constructor TfpgAbstractSpinEdit.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
+ FHeight := 24;
FButtonWidth := 13; // width of spin buttons
Shape := bsSpacer;
diff --git a/src/gui/fpg_tab.pas b/src/gui/fpg_tab.pas
index 8846a7e1..5f0e7fbf 100644
--- a/src/gui/fpg_tab.pas
+++ b/src/gui/fpg_tab.pas
@@ -1,7 +1,7 @@
{
fpGUI - Free Pascal GUI Toolkit
- Copyright (C) 2006 - 2014 See the file AUTHORS.txt, included in this
+ Copyright (C) 2006 - 2015 See the file AUTHORS.txt, included in this
distribution, for details of the copyright.
See the file COPYING.modifiedLGPL, included in this distribution,
@@ -55,6 +55,8 @@ type
FPageControl: TfpgPageControl;
FText: string;
FTabVisible: boolean;
+ FTabColor: TfpgColor;
+ FTabTextColor: TfpgColor;
function GetPageControl: TfpgPageControl;
function GetPageIndex: Integer;
function GetText: string;
@@ -72,6 +74,8 @@ type
property PageIndex: Integer read GetPageIndex write SetPageIndex;
property PageControl: TfpgPageControl read FPageControl write SetPageControl;
property TabVisible: boolean read FTabVisible write FTabVisible;
+ property TabColor: Tfpgcolor read FTabColor write FTabColor;
+ property TabTextColor: TfpgColor read FTabTextColor write FTabTextColor;
published
property BackgroundColor;
property Enabled;
@@ -105,6 +109,7 @@ type
FLastRClickPos: TfpgPoint;
FUpdateCount: Integer;
FActiveTabColor: TfpgColor;
+ FActiveTabTextColor: TfpgColor;
function GetActivePageIndex: integer;
function GetPage(AIndex: integer): TfpgTabSheet;
function GetPageCount: Integer;
@@ -130,10 +135,12 @@ type
procedure SetTabPosition(const AValue: TfpgTabPosition);
procedure DoPageChange(ATabSheet: TfpgTabSheet);
procedure DoTabSheetClosing(ATabSheet: TfpgTabSheet);
- function DrawTab(const rect: TfpgRect; const Selected: Boolean = False; const Mode: Integer = 1): TfpgRect;
+ function DrawTab(const ATabSheet: TfpgTabSheet; const rect: TfpgRect; const Selected: Boolean = False; const Mode: Integer = 1): TfpgRect;
procedure pmCloseTab(Sender: TObject);
function GetActiveTabColor: TfpgColor;
procedure SetActiveTabColor(AValue: TfpgColor);
+ function GetActiveTabTextColor: TfpgColor;
+ procedure SetActiveTabTextColor(AValue: TfpgColor);
protected
procedure SetBackgroundColor(const AValue: TfpgColor); override;
procedure OrderSheets; // currently using bubblesort
@@ -159,7 +166,8 @@ type
property OnClosingTabSheet: TTabSheetClosing read FOnClosingTabSheet write FOnClosingTabSheet;
published
property ActivePageIndex: integer read GetActivePageIndex write SetActivePageIndex default 0;
- property ActiveTabColor: TfpgColor read GetActiveTabColor write SetActiveTabColor default clWindowBackground;
+ property ActiveTabColor: TfpgColor read GetActiveTabColor write SetActiveTabColor default clDefault;
+ property ActiveTabTextColor: TfpgColor read GetActiveTabTextColor write SetActiveTabTextColor default clDefault;
property Align;
property BackgroundColor;
property Enabled;
@@ -183,11 +191,6 @@ implementation
uses
fpg_stringutils;
-const
- DFL_TAB_HEIGHT = 21;
- DFL_TAB_WIDTH = 0;
-
-
// compare function used by FPages.Sort
function SortCompare(Item1, Item2: Pointer): integer;
@@ -262,6 +265,7 @@ begin
FTabVisible:= True;
FFocusable := True;
FBackgroundColor := Parent.BackgroundColor;
+ FTabColor := Parent.BackgroundColor;
FTextColor := Parent.TextColor;
FIsContainer := True;
end;
@@ -409,7 +413,6 @@ var
wd: integer; { width delta }
h: integer;
hd: integer; { height delta }
- msg: TfpgMessageParams;
begin
// PageControl has bevelled edges in some themes
r := fpgStyle.GetControlFrameBorders;
@@ -662,10 +665,22 @@ begin
end;
{ Mode = 1 means the background tabs. Mode = 2 means the Active Tab }
-function TfpgPageControl.DrawTab(const rect: TfpgRect; const Selected: Boolean = False; const Mode: Integer = 1): TfpgRect;
+function TfpgPageControl.DrawTab(const ATabSheet: TfpgTabSheet; const rect: TfpgRect; const Selected: Boolean = False;
+ const Mode: Integer = 1): TfpgRect;
var
r: TfpgRect;
+
+ procedure ApplyCorrectTabColorToCanvas;
+ begin
+ if ActiveTabColor = clDefault then
+ Canvas.SetColor(ATabSheet.TabColor)
+ else
+ Canvas.SetColor(ActiveTabColor);
+ end;
+
begin
+ if not Assigned(ATabSheet) then
+ raise Exception.Create('DrawTab parameter error. ATabSheet may not be nil.');
r := rect;
if Selected then
begin
@@ -679,10 +694,10 @@ begin
r.Height -= 1;
if TabPosition = tpBottom then
r.Top += 1;
- Canvas.SetColor(ActiveTabColor);
+ ApplyCorrectTabColorToCanvas;
end
else
- Canvas.SetColor(BackgroundColor);
+ Canvas.SetColor(ATabSheet.TabColor);
case TabPosition of
tpTop:
@@ -714,7 +729,7 @@ begin
Canvas.DrawLine(r.Right, r.Bottom-2, r.Right, r.Top-1); // right outer edge
if Mode = 2 then { selected tab }
begin
- Canvas.SetColor(ActiveTabColor);
+ ApplyCorrectTabColorToCanvas;
Canvas.DrawLine(r.Left+1, r.Top-1, r.Right-1, r.Top-1);
end;
end;
@@ -794,6 +809,20 @@ begin
end;
end;
+function TfpgPageControl.GetActiveTabTextColor: TfpgColor;
+begin
+ Result := FActiveTabTextColor;
+end;
+
+procedure TfpgPageControl.SetActiveTabTextColor(AValue: TfpgColor);
+begin
+ if FActiveTabTextColor <> AValue then
+ begin
+ FActiveTabTextColor := AValue;
+ RePaint;
+ end;
+end;
+
procedure TfpgPageControl.SetBackgroundColor(const AValue: TfpgColor);
var
lWasMatch: boolean;
@@ -820,10 +849,17 @@ var
h: TfpgTabSheet;
lp: integer;
toffset: integer;
- TextLeft, TextTop: Integer;
- dx: integer;
lTxtFlags: TfpgTextFlags;
ActivePageVisible: Boolean;
+
+ procedure ApplyCorrectTabTextColorToCanvas(ATab: TfpgTabSheet);
+ begin
+ if ActiveTabTextColor = clDefault then
+ Canvas.SetTextColor(ATab.TabTextColor)
+ else
+ Canvas.SetTextColor(ActiveTabTextColor);
+ end;
+
begin
if not HasHandle then
Exit; //==>
@@ -831,10 +867,10 @@ begin
if PageCount = 0 then
Exit; //==>
- TabW:=FixedTabWidth;
- TabH:=FixedTabHeight;
+ TabW := FixedTabWidth;
+ TabH := FixedTabHeight;
ActivePageVisible := false;
- If TabH = 0 then
+ if TabH <= 1 then
TabH := TAB_HEIGHT;
h := TfpgTabSheet(FPages.First);
if h = nil then
@@ -845,7 +881,6 @@ begin
if not Enabled then
Include(lTxtFlags, txtDisabled);
-
if TabPosition in [tpTop, tpBottom] then
begin
if MaxButtonWidthSum > (Width-(FMargin*2)) then
@@ -944,12 +979,14 @@ begin
end;
// paint tab button
r2.Width := ButtonWidth(h.Text);
- r3 := DrawTab(r2, h = ActivePage);
+ r3 := DrawTab(h, r2, h = ActivePage);
// paint text on non-active tabs
if h <> ActivePage then
+ begin
+ Canvas.SetTextColor(h.TabTextColor);
Canvas.DrawText(lp + (ButtonWidth(h.Text) div 2) - fpgStyle.DefaultFont.TextWidth(GetTabText(h.Text)) div 2,
Height-TabH+toffset, GetTabText(h.Text), lTxtFlags);
-
+ end;
r2.Left := r2.Left + r2.Width;
lp := lp + ButtonWidth(h.Text);
if h <> TfpgTabSheet(FPages.Last) then
@@ -963,8 +1000,11 @@ begin
r2.Width := Width;
r2.Height := Height - TabH;
Canvas.DrawButtonFace(r2, []);
+
// Draw text of ActivePage, because we didn't before.
- DrawTab(r3, false, 2);
+ h := self.ActivePage;
+ DrawTab(h, r3, false, 2);
+ ApplyCorrectTabTextColorToCanvas(h);
Canvas.DrawText(r3.Left+4, r3.Top+5, r3.Width, r3.Height, ActivePage.Text, lTxtFlags);
end;
@@ -988,11 +1028,14 @@ begin
end;
// paint tab button
r2.Width := ButtonWidth(h.Text);
- r3 := DrawTab(r2, h = ActivePage);
+ r3 := DrawTab(h, r2, h = ActivePage);
// paint text on non-active tabs
if h <> ActivePage then
+ begin
+ Canvas.SetTextColor(h.TabTextColor);
Canvas.DrawText(lp + (ButtonWidth(h.Text) div 2) - fpgStyle.DefaultFont.TextWidth(GetTabText(h.Text)) div 2,
FMargin+toffset, GetTabText(h.Text), lTxtFlags);
+ end;
r2.Left := r2.Left + r2.Width;
lp := lp + ButtonWidth(h.Text);
if h <> TfpgTabSheet(FPages.Last) then
@@ -1008,7 +1051,9 @@ begin
Canvas.DrawButtonFace(r2, []);
// Draw text of ActivePage, because we didn't before.
- DrawTab(r3, false, 2);
+ h := self.ActivePage;
+ DrawTab(h, r3, false, 2);
+ ApplyCorrectTabTextColorToCanvas(h);
Canvas.DrawText(r3.Left+4, r3.Top+3, r3.Width, r3.Height, ActivePage.Text, lTxtFlags);
end;
@@ -1033,11 +1078,14 @@ begin
h.SetPosition(FMargin+2, FMargin+2, Width - ((FMargin+2)*2) - TabW, Height - ((FMargin+2)*2));
end;
// paint tab button
- r3 := DrawTab(r2, h = ActivePage);
+ r3 := DrawTab(h, r2, h = ActivePage);
// paint text on non-active tabs
if h <> ActivePage then
+ begin
+ Canvas.SetTextColor(h.TabTextColor);
Canvas.DrawText(r2.left+toffset, r2.Top, r2.Width, r2.Height, GetTabText(h.Text), lTxtFlags);
+ end;
r2.Top += r2.Height;
lp := r2.Top;
if h <> TfpgTabSheet(FPages.Last) then
@@ -1053,7 +1101,9 @@ begin
Canvas.DrawButtonFace(r2, []);
// Draw text of ActivePage, because we didn't before.
- DrawTab(r3, false, 2);
+ h := self.ActivePage;
+ DrawTab(h, r3, false, 2);
+ ApplyCorrectTabTextColorToCanvas(h);
Canvas.DrawText(r3.left+toffset, r3.Top, r3.Width, r3.Height, ActivePage.Text, lTxtFlags);
end;
@@ -1078,11 +1128,14 @@ begin
h.SetPosition(FMargin+2+TabW, FMargin+2, Width - ((FMargin+2)*2) - TabW, Height - ((FMargin+2)*2));
end;
// paint tab button
- r3 := DrawTab(r2, h = ActivePage);
+ r3 := DrawTab(h, r2, h = ActivePage);
// paint text on non-active tabs
if h <> ActivePage then
+ begin
+ Canvas.SetTextColor(h.TabTextColor);
Canvas.DrawText(r2.left+toffset, r2.Top, r2.Width, r2.Height, GetTabText(h.Text), lTxtFlags);
+ end;
r2.Top += r2.Height;
lp := r2.Top;
if h <> TfpgTabSheet(FPages.Last) then
@@ -1098,7 +1151,9 @@ begin
Canvas.DrawButtonFace(r2, []);
// Draw text of ActivePage, because we didn't before.
- DrawTab(r3, false, 2);
+ h := self.ActivePage;
+ DrawTab(h, r3, false, 2);
+ ApplyCorrectTabTextColorToCanvas(h);
Canvas.DrawText(r3.left+toffset, r3.Top, r3.Width, r3.Height, ActivePage.Text, lTxtFlags);
end;
end; { case }
@@ -1188,26 +1243,24 @@ var
i: integer;
begin
i := ActivePageIndex;
- if ssAlt in shiftstate then
- case keycode of
- keyLeft:
- begin
- if ActivePage <> TfpgTabSheet(FPages.First) then
- begin
- ActivePage := TfpgTabSheet(FPages[i-1]);
- consumed := True;
- end;
- end;
- keyRight:
- begin
- if ActivePage <> TfpgTabSheet(FPages.Last) then
- begin
- ActivePage := TfpgTabSheet(FPages[i+1]);
- consumed := True;
- end;
- end;
- end; { case/else }
+ if (shiftstate = [ssCtrl]) and (keycode = keyTab) then
+ begin
+ consumed := True;
+ if ActivePage <> TfpgTabSheet(FPages.Last) then
+ ActivePage := TfpgTabSheet(FPages[i+1])
+ else
+ ActivePage := TfpgTabSheet(FPages.First); // loop back to the front
+ end
+ else if (shiftstate = [ssCtrl, ssShift]) and (keycode = keyTab) then
+ begin
+ consumed := True;
+ if ActivePage <> TfpgTabSheet(FPages.First) then
+ ActivePage := TfpgTabSheet(FPages[i-1])
+ else
+ ActivePage := TfpgTabSheet(FPages.Last); // loop back to the end
+ end;
+
if not consumed then
inherited HandleKeyPress(keycode, shiftstate, consumed);
end;
@@ -1231,7 +1284,8 @@ begin
FTextColor := Parent.TextColor;
FBackgroundColor := Parent.BackgroundColor;
- FActiveTabColor := FBackgroundColor;
+ FActiveTabColor := clDefault;
+ FActiveTabTextColor := clDefault;
FFocusable := True;
FOnChange := nil;
FFixedTabWidth := 0;
diff --git a/src/gui/fpg_trackbar.pas b/src/gui/fpg_trackbar.pas
index 32da0b99..752ae132 100644
--- a/src/gui/fpg_trackbar.pas
+++ b/src/gui/fpg_trackbar.pas
@@ -480,7 +480,7 @@ var
d: integer;
area: integer;
newp: integer;
- ppos: integer;
+ //ppos: integer;
tw: TfpgCoord;
begin
inherited HandleMouseMove(x, y, btnstate, shiftstate);
@@ -506,7 +506,7 @@ begin
area := Width - FSliderLength-4-tw;
end;
- ppos := FSliderPos;
+ //ppos := FSliderPos;
FSliderPos := FSliderDragStart + d;
if FSliderPos < 0 then
diff --git a/src/gui/messagedialog.inc b/src/gui/messagedialog.inc
index db894f6d..7fea78e8 100644
--- a/src/gui/messagedialog.inc
+++ b/src/gui/messagedialog.inc
@@ -260,7 +260,6 @@ var
logo: TfpgImage;
i: integer;
y: integer;
- tw: integer;
begin
inherited HandlePaint;
case FDialogType of
diff --git a/src/gui/selectdirdialog.inc b/src/gui/selectdirdialog.inc
index 063c7972..857fb0a2 100644
--- a/src/gui/selectdirdialog.inc
+++ b/src/gui/selectdirdialog.inc
@@ -197,7 +197,6 @@ var
s: TfpgString;
dir: TfpgString;
i: integer;
- p: integer;
prevn, nextn: TfpgTreeNode;
begin
if AValue = '' then
diff --git a/src/reportengine/u_command.pas b/src/reportengine/u_command.pas
index c6746d0d..8d3deaab 100644
--- a/src/reportengine/u_command.pas
+++ b/src/reportengine/u_command.pas
@@ -1,7 +1,7 @@
{
fpGUI - Free Pascal GUI Toolkit
- Copyright (C) 2006 - 2012 See the file AUTHORS.txt, included in this
+ Copyright (C) 2006 - 2015 See the file AUTHORS.txt, included in this
distribution, for details of the copyright.
See the file COPYING.modifiedLGPL, included in this distribution,
diff --git a/src/reportengine/u_pdf.pas b/src/reportengine/u_pdf.pas
index f6222cf2..0c9917ea 100644
--- a/src/reportengine/u_pdf.pas
+++ b/src/reportengine/u_pdf.pas
@@ -1,7 +1,7 @@
{
fpGUI - Free Pascal GUI Toolkit
- Copyright (C) 2006 - 2012 See the file AUTHORS.txt, included in this
+ Copyright (C) 2006 - 2015 See the file AUTHORS.txt, included in this
distribution, for details of the copyright.
See the file COPYING.modifiedLGPL, included in this distribution,
@@ -32,127 +32,120 @@ uses
fpg_base;
type
- TPdfObjet = class(TObject)
+ TPdfObject = class(TObject)
public
constructor Create; virtual;
destructor Destroy; override;
end;
- TPdfBoolean = class(TPdfObjet)
+ TPdfBoolean = class(TPdfObject)
private
FValue: Boolean;
protected
- procedure WriteBoolean(const AFlux: TStream);
+ procedure WriteBoolean(const AStream: TStream);
public
constructor CreateBoolean(const AValue: Boolean);
- destructor Destroy; override;
end;
- TPdfInteger = class(TPdfObjet)
+ TPdfInteger = class(TPdfObject)
private
FValue: integer;
protected
- procedure WriteInteger(const AFlux: TStream);
+ procedure WriteInteger(const AStream: TStream);
procedure IncrementeInteger;
property Value: integer read FValue write FValue;
public
constructor CreateInteger(const AValue: integer);
- destructor Destroy; override;
end;
- TPdfReference = class(TPdfObjet)
+ TPdfReference = class(TPdfObject)
private
FValue: integer;
protected
- procedure WriteReference(const AFlux: TStream);
+ procedure WriteReference(const AStream: TStream);
public
constructor CreateReference(const AValue: integer);
- destructor Destroy; override;
end;
- TPdfName = class(TPdfObjet)
+ TPdfName = class(TPdfObject)
private
FValue: string;
protected
- procedure WriteName(const AFlux: TStream);
+ procedure WriteName(const AStream: TStream);
public
constructor CreateName(const AValue: string);
- destructor Destroy; override;
end;
- TPdfString = class(TPdfObjet)
+ TPdfString = class(TPdfObject)
private
FValue: string;
protected
- procedure WriteString(const AFlux: TStream);
+ procedure Write(const AStream: TStream);
public
constructor CreateString(const AValue: string);
- destructor Destroy; override;
end;
- TPdfArray = class(TPdfObjet)
+ TPdfArray = class(TPdfObject)
private
FArray: TList;
protected
- procedure WriteArray(const AFlux: TStream);
- procedure AddItem(const AValue: TPdfObjet);
+ procedure WriteArray(const AStream: TStream);
+ procedure AddItem(const AValue: TPdfObject);
public
constructor CreateArray;
destructor Destroy; override;
end;
- TPdfStream = class(TPdfObjet)
+ TPdfStream = class(TPdfObject)
private
FStream: TList;
protected
- procedure WriteStream(const AFlux: TStream);
- procedure AddItem(const AValue: TPdfObjet);
+ procedure WriteStream(const AStream: TStream);
+ procedure AddItem(const AValue: TPdfObject);
public
constructor CreateStream;
destructor Destroy; override;
end;
- TPdfFonte = class(TPdfObjet)
+ TPdfEmbeddedFont = class(TPdfObject)
private
FTxtFont: integer;
FTxtSize: string;
protected
- procedure WriteFonte(const AFlux: TStream);
- function WriteFonteStream(const FFlux: TMemoryStream; const AFlux: TStream): int64;
+ procedure WriteFont(const AStream: TStream);
+ function WriteEmbeddedFont(const ASrcStream: TMemoryStream; const AStream: TStream): int64;
public
- constructor CreateFonte(const AFont: integer; const ASize: string);
- destructor Destroy; override;
+ constructor CreateFont(const AFont: integer; const ASize: string);
end;
- TPdfText = class(TPdfObjet)
+ TPdfText = class(TPdfObject)
private
FTxtPosX: single;
FTxtPosY: single;
FTxtText: TPdfString;
protected
- procedure WriteText(const AFlux: TStream);
+ procedure WriteText(const AStream: TStream);
public
constructor CreateText(const APosX, APosY: single; const AText: string);
destructor Destroy; override;
end;
- TPdfLigne = class(TPdfObjet)
+ TPdfLineSegment = class(TPdfObject)
private
- FEpais: single;
- FStaX: single;
- FStaY: single;
- FEndX: single;
- FEndY: single;
+ FWidth: single;
+ FX1: single;
+ FY1: single;
+ FX2: single;
+ FY2: single;
protected
- procedure WriteLigne(const AFlux: TStream);
+ procedure WriteLineSegment(const AStream: TStream);
public
- constructor CreateLigne(const AEpais, AStaX, AStaY, AEndX, AEndY: single);
- destructor Destroy; override;
+ constructor CreateLineSegment(const AWidth, AX1, AY1, AX2, AY2: single);
end;
- TPdfRectangle = class(TPdfObjet)
+ TPdfRectangle = class(TPdfObject)
private
- FEpais: single;
+ FLineWidth: single;
FRecX: single;
FRecY: single;
FRecW: single;
@@ -160,10 +153,9 @@ type
FFill: Boolean;
FStroke: Boolean;
protected
- procedure WriteRectangle(const AFlux: TStream);
+ procedure WriteRectangle(const AStream: TStream);
public
- constructor CreateRectangle(const AEpais, APosX, APosY, AWidth, AHeight: single; const AFill, AStroke: Boolean);
- destructor Destroy; override;
+ constructor CreateRectangle(const ALineWidth, APosX, APosY, AWidth, AHeight: single; const AFill, AStroke: Boolean);
end;
TRefPos = record
@@ -173,17 +165,16 @@ type
T_Points = array of TRefPos;
- TPdfSurface = class(TPdfObjet)
+ TPdfSurface = class(TPdfObject)
private
FPoints: T_Points;
protected
- procedure WriteSurface(const AFlux: TStream);
+ procedure WriteSurface(const AStream: TStream);
public
constructor CreateSurface(const APoints: T_Points);
- destructor Destroy; override;
end;
- TPdfImage = class(TPdfObjet)
+ TPdfImage = class(TPdfObject)
private
FNumber: integer;
FLeft: single;
@@ -191,55 +182,52 @@ type
FWidth: integer;
FHeight: integer;
protected
- function WriteImageStream(const ANumber: integer; AFlux: TStream): int64;
- procedure WriteImage(const AFlux: TStream);
+ function WriteImageStream(const ANumber: integer; AStream: TStream): int64;
+ procedure WriteImage(const AStream: TStream);
public
constructor CreateImage(const ALeft, ABottom: single; AWidth, AHeight, ANumber: integer);
- destructor Destroy; override;
end;
- TPdfLineStyle = class(TPdfObjet)
+ TPdfLineStyle = class(TPdfObject)
private
FDash: TfpgLineStyle;
FPhase: integer;
protected
- procedure WriteLineStyle(const AFlux: TStream);
+ procedure WriteLineStyle(const AStream: TStream);
public
constructor CreateLineStyle(ADash: TfpgLineStyle; APhase: integer);
- destructor Destroy; override;
end;
- TPdfColor = class(TPdfObjet)
+ TPdfColor = class(TPdfObject)
private
FRed: string;
FGreen: string;
FBlue: string;
FStroke: Boolean;
protected
- procedure WriteColor(const AFlux: TStream);
+ procedure WriteColor(const AStream: TStream);
public
constructor CreateColor(const AStroke: Boolean; AColor: TfpgColor);
- destructor Destroy; override;
end;
TPdfDicElement = class(TObject)
private
FKey: TPdfName;
- FValue: TPdfObjet;
+ FValue: TPdfObject;
protected
- procedure WriteDicElement(const AFlux: TStream);
+ procedure WriteDicElement(const AStream: TStream);
public
- constructor CreateDicElement(const AKey: string; const AValue: TPdfObjet);
+ constructor CreateDicElement(const AKey: string; const AValue: TPdfObject);
destructor Destroy; override;
end;
- TPdfDictionary = class(TPdfObjet)
+ TPdfDictionary = class(TPdfObject)
private
FElement: TList; // list of TPdfDicElement
protected
- procedure AddElement(const AKey: string; const AValue: TPdfObjet);
+ procedure AddElement(const AKey: string; const AValue: TPdfObject);
function ElementParCle(const AValue: string): integer;
- procedure WriteDictionary(const AObjet: integer; const AFlux: TStream);
+ procedure WriteDictionary(const AObjet: integer; const AStream: TStream);
public
constructor CreateDictionary;
destructor Destroy; override;
@@ -248,14 +236,15 @@ type
TPdfXRef = class(TObject)
private
FOffset: integer;
- FObjet: TPdfDictionary;
+ FDict: TPdfDictionary;
FStream: TPdfStream;
protected
- procedure WriteXRef(const AFlux: TStream);
+ procedure WriteXRef(const AStream: TStream);
public
constructor CreateXRef;
destructor Destroy; override;
property Offset: integer read FOffset write FOffset;
+ Property Dict: TPdfDictionary read FDict;
end;
TPageLayout = (lSingle, lTwo, lContinuous);
@@ -265,11 +254,11 @@ type
FPreferences: Boolean;
FPageLayout: TPageLayout;
FZoomValue: string;
- FXRefObjets: TList; // list of TPdfXRef
+ FGlobalXRefs: TList; // list of TPdfXRef
protected
function ElementParNom(const AValue: string): integer;
- procedure WriteXRefTable(const AFlux: TStream);
- procedure WriteObjet(const AObjet: integer; const AFlux: TStream);
+ procedure WriteXRefTable(const AStream: TStream);
+ procedure WriteObject(const AObject: integer; const AStream: TStream);
procedure CreateRefTable;
procedure CreateTrailer;
function CreateCatalog: integer;
@@ -280,19 +269,19 @@ type
function CreateOutlines: integer;
function CreateOutline(Parent, SectNo, PageNo: integer; SectTitre: string): integer;
procedure CreateStdFont(NomFonte: string; NumFonte: integer);
- function LoadFont(NomFonte: string): string;
+ function LoadFont(AFontName: string): string;
procedure CreateTtfFont(const NumFonte: integer);
procedure CreateTp1Font(const NumFonte: integer);
procedure CreateFontDescriptor(const NumFonte: integer);
procedure CreateFontWidth;
procedure CreateFontFile(const NumFonte: integer);
- procedure CreateImage(ImgWidth, ImgHeight, NumImg: integer);
+ procedure CreateImage(ImgWidth, ImgHeight, ImgNumber: integer);
function CreateContents: integer;
procedure CreateStream(NumeroPage, PageNum: integer);
public
constructor CreateDocument(const ALayout: TPageLayout = lSingle; const AZoom: string = '100'; const APreferences: Boolean = True);
destructor Destroy; override;
- procedure WriteDocument(const AFlux: TStream);
+ procedure WriteDocument(const AStream: TStream);
property PageLayout: TPageLayout read FPageLayout write FPageLayout default lSingle;
end;
@@ -320,7 +309,7 @@ const
PDF_FILE_END = '%%EOF';
PDF_MAX_GEN_NUM = 65535;
PDF_UNICODE_HEADER = 'FEFF001B%s001B';
- PDF_LANG_STRING = 'fr';
+ PDF_LANG_STRING = 'en';
var
Document: TPdfDocument;
@@ -339,67 +328,47 @@ uses
U_Command;
var
- Trailer: TPdfDictionary;
- CurrentColor: string;
- CurrentWidth: string;
- Catalogue: integer;
- FontDef: TFontDef;
- Flux: TMemoryStream;
- FontFiles: array of string;
+ uDictionary: TPdfDictionary;
+ uCurrentColor: string;
+ uCurrentWidth: string;
+ uCatalogue: integer;
+ uFontDef: TFontDef;
+ uStream: TMemoryStream;
+ uFontFiles: array of string;
// utility functions
function InsertEscape(const AValue: string): string;
var
- Chaine: string;
+ S: string;
begin
Result := '';
- Chaine := AValue;
- if Pos('\', Chaine) > 0 then
- Chaine := AnsiReplaceStr(Chaine, '\', '\\');
- if Pos('(', Chaine) > 0 then
- Chaine := AnsiReplaceStr(Chaine, '(', '\(');
- if Pos(')', Chaine) > 0 then
- Chaine := AnsiReplaceStr(Chaine, ')', '\)');
- Result := Chaine;
- //while Pos('\',Chaine)> 0 do
- // begin
- // Result:= Result+Copy(Chaine,1,Pred(Pos('\',Chaine)))+'\\';
- // Chaine:= Copy(Chaine,Succ(Pos('\',Chaine)),Length(Chaine)-Pos('\',Chaine));
- // end;
- //Chaine:= Result+Chaine;
- //Result:= '';
- //while Pos('(',Chaine)> 0 do
- // begin
- // Result:= Result+Copy(Chaine,1,Pred(Pos('(',Chaine)))+'\(';
- // Chaine:= Copy(Chaine,Succ(Pos('(',Chaine)),Length(Chaine)-Pos('(',Chaine));
- // end;
- //Chaine:= Result+Chaine;
- //Result:= '';
- //while Pos(')',Chaine)> 0 do
- // begin
- // Result:= Result+Copy(Chaine,1,Pred(Pos(')',Chaine)))+'\)';
- // Chaine:= Copy(Chaine,Succ(Pos(')',Chaine)),Length(Chaine)-Pos(')',Chaine));
- // end;
- //Result:= Result+Chaine;
-end;
-
-procedure WriteChaine(const Valeur: string; AFlux: TStream);
-begin
- AFlux.Write(PChar(Valeur)^, Length(Valeur));
-end;
-
-function IntToChaine(const Valeur: integer; const Long: integer): string;
+ S := AValue;
+ if Pos('\', S) > 0 then
+ S := AnsiReplaceStr(S, '\', '\\');
+ if Pos('(', S) > 0 then
+ S := AnsiReplaceStr(S, '(', '\(');
+ if Pos(')', S) > 0 then
+ S := AnsiReplaceStr(S, ')', '\)');
+ Result := S;
+end;
+
+procedure WriteString(const AValue: string; AStream: TStream);
+begin
+ AStream.Write(PChar(AValue)^, Length(AValue));
+end;
+
+function IntToString(const AValue: integer; const ALength: integer): string;
var
- Chaine: string;
+ S: string;
Cpt: integer;
begin
Result := '';
- Chaine := IntToStr(Valeur);
- if Length(Chaine) < Long then
- for Cpt := Succ(Length(Chaine)) to Long do
+ S := IntToStr(AValue);
+ if Length(S) < ALength then
+ for Cpt := Succ(Length(S)) to ALength do
Result := Result + '0';
- Result := Result + Chaine;
+ Result := Result + S;
end;
function DateToPdfDate(const ADate: TDateTime): string;
@@ -431,22 +400,22 @@ end;
// object methods
-constructor TPdfObjet.Create;
+constructor TPdfObject.Create;
begin
- // to be implemented by descendents
+ // to be implemented by descendants
end;
-destructor TPdfObjet.Destroy;
+destructor TPdfObject.Destroy;
begin
inherited;
end;
-procedure TPdfBoolean.WriteBoolean(const AFlux: TStream);
+procedure TPdfBoolean.WriteBoolean(const AStream: TStream);
begin
if FValue then
- WriteChaine('true', AFlux)
+ WriteString('true', AStream)
else
- WriteChaine('false', AFlux);
+ WriteString('false', AStream);
end;
constructor TPdfBoolean.CreateBoolean(const AValue: Boolean);
@@ -455,14 +424,9 @@ begin
FValue := AValue;
end;
-destructor TPdfBoolean.Destroy;
-begin
- inherited;
-end;
-
-procedure TPdfInteger.WriteInteger(const AFlux: TStream);
+procedure TPdfInteger.WriteInteger(const AStream: TStream);
begin
- WriteChaine(IntToStr(FValue), AFlux);
+ WriteString(IntToStr(FValue), AStream);
end;
procedure TPdfInteger.IncrementeInteger;
@@ -476,14 +440,9 @@ begin
FValue := AValue;
end;
-destructor TPdfInteger.Destroy;
-begin
- inherited;
-end;
-
-procedure TPdfReference.WriteReference(const AFlux: TStream);
+procedure TPdfReference.WriteReference(const AStream: TStream);
begin
- WriteChaine(IntToStr(FValue) + ' 0 R', AFlux);
+ WriteString(IntToStr(FValue) + ' 0 R', AStream);
end;
constructor TPdfReference.CreateReference(const AValue: integer);
@@ -492,18 +451,13 @@ begin
FValue := AValue;
end;
-destructor TPdfReference.Destroy;
-begin
- inherited;
-end;
-
-procedure TPdfName.WriteName(const AFlux: TStream);
+procedure TPdfName.WriteName(const AStream: TStream);
begin
if FValue <> '' then
if Pos('Length1', FValue) > 0 then
- WriteChaine('/Length1', AFlux)
+ WriteString('/Length1', AStream)
else
- WriteChaine('/' + FValue, AFlux);
+ WriteString('/' + FValue, AStream);
end;
constructor TPdfName.CreateName(const AValue: string);
@@ -512,14 +466,9 @@ begin
FValue := AValue;
end;
-destructor TPdfName.Destroy;
+procedure TPdfString.Write(const AStream: TStream);
begin
- inherited;
-end;
-
-procedure TPdfString.WriteString(const AFlux: TStream);
-begin
- WriteChaine('(' + Utf8ToAnsi(FValue) + ')', AFlux);
+ WriteString('(' + Utf8ToAnsi(FValue) + ')', AStream);
end;
constructor TPdfString.CreateString(const AValue: string);
@@ -530,31 +479,26 @@ begin
FValue := InsertEscape(FValue);
end;
-destructor TPdfString.Destroy;
-begin
- inherited;
-end;
-
-procedure TPdfArray.WriteArray(const AFlux: TStream);
+procedure TPdfArray.WriteArray(const AStream: TStream);
var
Cpt: integer;
begin
- WriteChaine('[', AFlux);
+ WriteString('[', AStream);
for Cpt := 0 to Pred(FArray.Count) do
begin
if Cpt > 0 then
- WriteChaine(' ', AFlux);
- if TPdfObjet(FArray[Cpt]) is TPdfInteger then
- TPdfInteger(FArray[Cpt]).WriteInteger(AFlux);
- if TPdfObjet(FArray[Cpt]) is TPdfReference then
- TPdfReference(FArray[Cpt]).WriteReference(AFlux);
- if TPdfObjet(FArray[Cpt]) is TPdfName then
- TPdfName(FArray[Cpt]).WriteName(AFlux);
+ WriteString(' ', AStream);
+ if TPdfObject(FArray[Cpt]) is TPdfInteger then
+ TPdfInteger(FArray[Cpt]).WriteInteger(AStream);
+ if TPdfObject(FArray[Cpt]) is TPdfReference then
+ TPdfReference(FArray[Cpt]).WriteReference(AStream);
+ if TPdfObject(FArray[Cpt]) is TPdfName then
+ TPdfName(FArray[Cpt]).WriteName(AStream);
end;
- WriteChaine(']', AFlux);
+ WriteString(']', AStream);
end;
-procedure TPdfArray.AddItem(const AValue: TPdfObjet);
+procedure TPdfArray.AddItem(const AValue: TPdfObject);
begin
FArray.Add(AValue);
end;
@@ -571,42 +515,42 @@ var
begin
if FArray.Count > 0 then
for Cpt := 0 to Pred(FArray.Count) do
- if TPdfObjet(FArray[Cpt]) is TPdfInteger then
+ if TPdfObject(FArray[Cpt]) is TPdfInteger then
TPdfInteger(FArray[Cpt]).Free
- else if TPdfObjet(FArray[Cpt]) is TPdfReference then
+ else if TPdfObject(FArray[Cpt]) is TPdfReference then
TPdfReference(FArray[Cpt]).Free
- else if TPdfObjet(FArray[Cpt]) is TPdfName then
+ else if TPdfObject(FArray[Cpt]) is TPdfName then
TPdfName(FArray[Cpt]).Free;
FArray.Free;
inherited;
end;
-procedure TPdfStream.WriteStream(const AFlux: TStream);
+procedure TPdfStream.WriteStream(const AStream: TStream);
var
Cpt: integer;
begin
for Cpt := 0 to Pred(FStream.Count) do
begin
- if TPdfObjet(FStream[Cpt]) is TPdfFonte then
- TPdfFonte(FStream[Cpt]).WriteFonte(AFlux);
- if TPdfObjet(FStream[Cpt]) is TPdfColor then
- TPdfColor(FStream[Cpt]).WriteColor(AFlux);
- if TPdfObjet(FStream[Cpt]) is TPdfText then
- TPdfText(FStream[Cpt]).WriteText(AFlux);
- if TPdfObjet(FStream[Cpt]) is TPdfRectangle then
- TPdfRectangle(FStream[Cpt]).WriteRectangle(AFlux);
- if TPdfObjet(FStream[Cpt]) is TPdfLigne then
- TPdfLigne(FStream[Cpt]).WriteLigne(AFlux);
- if TPdfObjet(FStream[Cpt]) is TPdfLineStyle then
- TPdfLineStyle(FStream[Cpt]).WriteLineStyle(AFlux);
- if TPdfObjet(FStream[Cpt]) is TPdfSurface then
- TPdfSurface(FStream[Cpt]).WriteSurface(AFlux);
- if TPdfObjet(FStream[Cpt]) is TPdfImage then
- TPdfImage(FStream[Cpt]).WriteImage(AFlux);
+ if TPdfObject(FStream[Cpt]) is TPdfEmbeddedFont then
+ TPdfEmbeddedFont(FStream[Cpt]).WriteFont(AStream);
+ if TPdfObject(FStream[Cpt]) is TPdfColor then
+ TPdfColor(FStream[Cpt]).WriteColor(AStream);
+ if TPdfObject(FStream[Cpt]) is TPdfText then
+ TPdfText(FStream[Cpt]).WriteText(AStream);
+ if TPdfObject(FStream[Cpt]) is TPdfRectangle then
+ TPdfRectangle(FStream[Cpt]).WriteRectangle(AStream);
+ if TPdfObject(FStream[Cpt]) is TPdfLineSegment then
+ TPdfLineSegment(FStream[Cpt]).WriteLineSegment(AStream);
+ if TPdfObject(FStream[Cpt]) is TPdfLineStyle then
+ TPdfLineStyle(FStream[Cpt]).WriteLineStyle(AStream);
+ if TPdfObject(FStream[Cpt]) is TPdfSurface then
+ TPdfSurface(FStream[Cpt]).WriteSurface(AStream);
+ if TPdfObject(FStream[Cpt]) is TPdfImage then
+ TPdfImage(FStream[Cpt]).WriteImage(AStream);
end;
end;
-procedure TPdfStream.AddItem(const AValue: TPdfObjet);
+procedure TPdfStream.AddItem(const AValue: TPdfObject);
begin
FStream.Add(AValue);
end;
@@ -625,21 +569,21 @@ begin
begin
for Cpt := 0 to Pred(FStream.Count) do
begin
- if TPdfObjet(FStream[Cpt]) is TPdfFonte then
- TPdfFonte(FStream[Cpt]).Free
- else if TPdfObjet(FStream[Cpt]) is TPdfColor then
+ if TPdfObject(FStream[Cpt]) is TPdfEmbeddedFont then
+ TPdfEmbeddedFont(FStream[Cpt]).Free
+ else if TPdfObject(FStream[Cpt]) is TPdfColor then
TPdfColor(FStream[Cpt]).Free
- else if TPdfObjet(FStream[Cpt]) is TPdfText then
+ else if TPdfObject(FStream[Cpt]) is TPdfText then
TPdfText(FStream[Cpt]).Free
- else if TPdfObjet(FStream[Cpt]) is TPdfRectangle then
+ else if TPdfObject(FStream[Cpt]) is TPdfRectangle then
TPdfRectangle(FStream[Cpt]).Free
- else if TPdfObjet(FStream[Cpt]) is TPdfLigne then
- TPdfLigne(FStream[Cpt]).Free
- else if TPdfObjet(FStream[Cpt]) is TPdfLineStyle then
+ else if TPdfObject(FStream[Cpt]) is TPdfLineSegment then
+ TPdfLineSegment(FStream[Cpt]).Free
+ else if TPdfObject(FStream[Cpt]) is TPdfLineStyle then
TPdfLineStyle(FStream[Cpt]).Free
- else if TPdfObjet(FStream[Cpt]) is TPdfSurface then
+ else if TPdfObject(FStream[Cpt]) is TPdfSurface then
TPdfSurface(FStream[Cpt]).Free
- else if TPdfObjet(FStream[Cpt]) is TPdfImage then
+ else if TPdfObject(FStream[Cpt]) is TPdfImage then
TPdfImage(FStream[Cpt]).Free;
end;
end;
@@ -647,43 +591,38 @@ begin
inherited;
end;
-procedure TPdfFonte.WriteFonte(const AFlux: TStream);
+procedure TPdfEmbeddedFont.WriteFont(const AStream: TStream);
begin
- WriteChaine('/F' + IntToStr(FTxtFont) + ' ' + FTxtSize + ' Tf' + CRLF, AFlux);
+ WriteString('/F' + IntToStr(FTxtFont) + ' ' + FTxtSize + ' Tf' + CRLF, AStream);
end;
-function TPdfFonte.WriteFonteStream(const FFlux: TMemoryStream; const AFlux: TStream): int64;
+function TPdfEmbeddedFont.WriteEmbeddedFont(const ASrcStream: TMemoryStream; const AStream: TStream): int64;
var
BeginFlux, EndFlux: int64;
begin
- WriteChaine(CRLF + 'stream' + CRLF, AFlux);
- BeginFlux := AFlux.Position;
- FFlux.SaveToStream(AFlux);
- EndFlux := AFlux.Position;
+ WriteString(CRLF + 'stream' + CRLF, AStream);
+ BeginFlux := AStream.Position;
+ ASrcStream.SaveToStream(AStream);
+ EndFlux := AStream.Position;
Result := EndFlux - BeginFlux;
- WriteChaine(CRLF, AFlux);
- WriteChaine('endstream', AFlux);
+ WriteString(CRLF, AStream);
+ WriteString('endstream', AStream);
end;
-constructor TPdfFonte.CreateFonte(const AFont: integer; const ASize: string);
+constructor TPdfEmbeddedFont.CreateFont(const AFont: integer; const ASize: string);
begin
inherited Create;
FTxtFont := AFont;
FTxtSize := ASize;
end;
-destructor TPdfFonte.Destroy;
-begin
- inherited;
-end;
-
-procedure TPdfText.WriteText(const AFlux: TStream);
+procedure TPdfText.WriteText(const AStream: TStream);
begin
- WriteChaine('BT' + CRLF, AFlux);
- WriteChaine(FormatFloat('0.##', FTxtPosX) + ' ' + FormatFloat('0.##', FTxtPosY) + ' Td' + CRLF, AFlux);
- TPdfString(FTxtText).WriteString(AFlux);
- WriteChaine(' Tj' + CRLF, AFlux);
- WriteChaine('ET' + CRLF, AFlux);
+ WriteString('BT' + CRLF, AStream);
+ WriteString(FormatFloat('0.##', FTxtPosX) + ' ' + FormatFloat('0.##', FTxtPosY) + ' Td' + CRLF, AStream);
+ TPdfString(FTxtText).Write(AStream);
+ WriteString(' Tj' + CRLF, AStream);
+ WriteString('ET' + CRLF, AStream);
end;
constructor TPdfText.CreateText(const APosX, APosY: single; const AText: string);
@@ -700,56 +639,51 @@ begin
inherited;
end;
-procedure TPdfLigne.WriteLigne(const AFlux: TStream);
+procedure TPdfLineSegment.WriteLineSegment(const AStream: TStream);
begin
- if (FormatFloat('0.##', FEpais) + ' w') <> CurrentWidth then
+ if (FormatFloat('0.##', FWidth) + ' w') <> uCurrentWidth then
begin
- WriteChaine('1 J' + CRLF, AFlux);
- WriteChaine(FormatFloat('0.##', FEpais) + ' w' + CRLF, AFlux);
- CurrentWidth := FormatFloat('0.##', FEpais) + ' w';
+ WriteString('1 J' + CRLF, AStream);
+ WriteString(FormatFloat('0.##', FWidth) + ' w' + CRLF, AStream);
+ uCurrentWidth := FormatFloat('0.##', FWidth) + ' w';
end;
- WriteChaine(FormatFloat('0.##', FStaX) + ' ' + FormatFloat('0.##', FStaY) + ' m' + CRLF, AFlux);
- WriteChaine(FormatFloat('0.##', FEndX) + ' ' + FormatFloat('0.##', FEndY) + ' l' + CRLF, AFlux);
- WriteChaine('S' + CRLF, AFlux);
+ WriteString(FormatFloat('0.##', FX1) + ' ' + FormatFloat('0.##', FY1) + ' m' + CRLF, AStream);
+ WriteString(FormatFloat('0.##', FX2) + ' ' + FormatFloat('0.##', FY2) + ' l' + CRLF, AStream);
+ WriteString('S' + CRLF, AStream);
end;
-constructor TPdfLigne.CreateLigne(const AEpais, AStaX, AStaY, AEndX, AEndY: single);
+constructor TPdfLineSegment.CreateLineSegment(const AWidth, AX1, AY1, AX2, AY2: single);
begin
inherited Create;
- FEpais := AEpais;
- FStaX := AStaX;
- FStaY := AStaY;
- FEndX := AEndX;
- FEndY := AEndY;
+ FWidth := AWidth;
+ FX1 := AX1;
+ FY1 := AY1;
+ FX2 := AX2;
+ FY2 := AY2;
end;
-destructor TPdfLigne.Destroy;
-begin
- inherited;
-end;
-
-procedure TPdfRectangle.WriteRectangle(const AFlux: TStream);
+procedure TPdfRectangle.WriteRectangle(const AStream: TStream);
begin
if FStroke then
begin
- if (FormatFloat('0.##', FEpais) + ' w') <> CurrentWidth then
+ if (FormatFloat('0.##', FLineWidth) + ' w') <> uCurrentWidth then
begin
- WriteChaine('1 J' + CRLF, AFlux);
- WriteChaine(FormatFloat('0.##', FEpais) + ' w' + CRLF, AFlux);
- CurrentWidth := FormatFloat('0.##', FEpais) + ' w';
+ WriteString('1 J' + CRLF, AStream);
+ WriteString(FormatFloat('0.##', FLineWidth) + ' w' + CRLF, AStream);
+ uCurrentWidth := FormatFloat('0.##', FLineWidth) + ' w';
end;
end;
- WriteChaine(FormatFloat('0.##', FRecX) + ' ' + FormatFloat('0.##', FRecY) + ' ' + FormatFloat('0.##', FRecW) + ' ' + FormatFloat('0.##', FRecH) + ' re' + CRLF, AFlux);
+ WriteString(FormatFloat('0.##', FRecX) + ' ' + FormatFloat('0.##', FRecY) + ' ' + FormatFloat('0.##', FRecW) + ' ' + FormatFloat('0.##', FRecH) + ' re' + CRLF, AStream);
if FStroke then
- WriteChaine('S' + CRLF, AFlux);
+ WriteString('S' + CRLF, AStream);
if FFill then
- WriteChaine('f' + CRLF, AFlux);
+ WriteString('f' + CRLF, AStream);
end;
-constructor TPdfRectangle.CreateRectangle(const AEpais, APosX, APosY, AWidth, AHeight: single; const AFill, AStroke: Boolean);
+constructor TPdfRectangle.CreateRectangle(const ALineWidth, APosX, APosY, AWidth, AHeight: single; const AFill, AStroke: Boolean);
begin
inherited Create;
- FEpais := AEpais;
+ FLineWidth := ALineWidth;
FRecX := APosX;
FRecY := APosY;
FRecW := AWidth;
@@ -758,20 +692,15 @@ begin
FStroke := AStroke;
end;
-destructor TPdfRectangle.Destroy;
-begin
- inherited;
-end;
-
-procedure TPdfSurface.WriteSurface(const AFlux: TStream);
+procedure TPdfSurface.WriteSurface(const AStream: TStream);
var
Cpt: integer;
begin
- WriteChaine(FormatFloat('0.##', FPoints[0].X) + ' ' + FormatFloat('0.##', FPoints[0].Y) + ' m' + CRLF, AFlux);
+ WriteString(FormatFloat('0.##', FPoints[0].X) + ' ' + FormatFloat('0.##', FPoints[0].Y) + ' m' + CRLF, AStream);
for Cpt := 1 to Pred(Length(FPoints)) do
- WriteChaine(FormatFloat('0.##', FPoints[Cpt].X) + ' ' + FormatFloat('0.##', FPoints[Cpt].Y) + ' l' + CRLF, AFlux);
- WriteChaine('h' + CRLF, AFlux);
- WriteChaine('f' + CRLF, AFlux);
+ WriteString(FormatFloat('0.##', FPoints[Cpt].X) + ' ' + FormatFloat('0.##', FPoints[Cpt].Y) + ' l' + CRLF, AStream);
+ WriteString('h' + CRLF, AStream);
+ WriteString('f' + CRLF, AStream);
end;
constructor TPdfSurface.CreateSurface(const APoints: T_Points);
@@ -780,39 +709,34 @@ begin
FPoints := APoints;
end;
-destructor TPdfSurface.Destroy;
-begin
- inherited;
-end;
-
-function TPdfImage.WriteImageStream(const ANumber: integer; AFlux: TStream): int64;
+function TPdfImage.WriteImageStream(const ANumber: integer; AStream: TStream): int64;
var
CptW, CptH: integer;
BeginFlux, EndFlux: int64;
begin
- WriteChaine(CRLF + 'stream' + CRLF, AFlux);
- BeginFlux := AFlux.Position;
+ WriteString(CRLF + 'stream' + CRLF, AStream);
+ BeginFlux := AStream.Position;
for CptH := 0 to Pred(TfpgImage(Images[ANumber]).Height) do
begin
for CptW := 0 to Pred(TfpgImage(Images[ANumber]).Width) do
begin
- AFlux.WriteByte(fpgGetRed(TfpgImage(Images[ANumber]).Colors[CptW, CptH]));
- AFlux.WriteByte(fpgGetGreen(TfpgImage(Images[ANumber]).Colors[CptW, CptH]));
- AFlux.WriteByte(fpgGetBlue(TfpgImage(Images[ANumber]).Colors[CptW, CptH]));
+ AStream.WriteByte(fpgGetRed(TfpgImage(Images[ANumber]).Colors[CptW, CptH]));
+ AStream.WriteByte(fpgGetGreen(TfpgImage(Images[ANumber]).Colors[CptW, CptH]));
+ AStream.WriteByte(fpgGetBlue(TfpgImage(Images[ANumber]).Colors[CptW, CptH]));
end;
end;
- EndFlux := AFlux.Position;
+ EndFlux := AStream.Position;
Result := EndFlux - BeginFlux;
- WriteChaine(CRLF, AFlux);
- WriteChaine('endstream', AFlux);
+ WriteString(CRLF, AStream);
+ WriteString('endstream', AStream);
end;
-procedure TPdfImage.WriteImage(const AFlux: TStream);
+procedure TPdfImage.WriteImage(const AStream: TStream);
begin
- WriteChaine('q' + CRLF, AFlux);
- WriteChaine(IntToStr(FWidth) + ' 0 0 ' + IntToStr(FHeight) + ' ' + FormatFloat('0.##', FLeft) + ' ' + FormatFloat('0.##', FBottom) + ' cm' + CRLF, AFlux);
- WriteChaine('/I' + IntToStr(FNumber) + ' Do ' + CRLF, AFlux);
- WriteChaine('Q' + CRLF, AFlux);
+ WriteString('q' + CRLF, AStream);
+ WriteString(IntToStr(FWidth) + ' 0 0 ' + IntToStr(FHeight) + ' ' + FormatFloat('0.##', FLeft) + ' ' + FormatFloat('0.##', FBottom) + ' cm' + CRLF, AStream);
+ WriteString('/I' + IntToStr(FNumber) + ' Do ' + CRLF, AStream);
+ WriteString('Q' + CRLF, AStream);
end;
constructor TPdfImage.CreateImage(const ALeft, ABottom: single; AWidth, AHeight, ANumber: integer);
@@ -825,25 +749,20 @@ begin
FHeight := AHeight;
end;
-destructor TPdfImage.Destroy;
-begin
- inherited;
-end;
-
-procedure TPdfLineStyle.WriteLineStyle(const AFlux: TStream);
+procedure TPdfLineStyle.WriteLineStyle(const AStream: TStream);
begin
- WriteChaine('[', AFlux);
+ WriteString('[', AStream);
case FDash of
lsDash:
- WriteChaine('5 5', AFlux);
+ WriteString('5 5', AStream);
lsDot:
- WriteChaine('2 2', AFlux);
+ WriteString('2 2', AStream);
lsDashDot:
- WriteChaine('5 2 2 2', AFlux);
+ WriteString('5 2 2 2', AStream);
lsDashDotDot:
- WriteChaine('5 2 2 2 2 2', AFlux);
+ WriteString('5 2 2 2 2 2', AStream);
end;
- WriteChaine('] ' + IntToStr(FPhase) + ' d' + CRLF, AFlux);
+ WriteString('] ' + IntToStr(FPhase) + ' d' + CRLF, AStream);
end;
constructor TPdfLineStyle.CreateLineStyle(ADash: TfpgLineStyle; APhase: integer);
@@ -853,25 +772,20 @@ begin
FPhase := APhase;
end;
-destructor TPdfLineStyle.Destroy;
-begin
- inherited;
-end;
-
-procedure TPdfColor.WriteColor(const AFlux: TStream);
+procedure TPdfColor.WriteColor(const AStream: TStream);
begin
if FStroke then
begin
- if (FRed + ' ' + FGreen + ' ' + FBlue + ' rg') <> CurrentColor then
+ if (FRed + ' ' + FGreen + ' ' + FBlue + ' rg') <> uCurrentColor then
begin
- WriteChaine(FRed + ' ' + FGreen + ' ' + FBlue + ' rg' + CRLF, AFlux);
- CurrentColor := FRed + ' ' + FGreen + ' ' + FBlue + ' rg';
+ WriteString(FRed + ' ' + FGreen + ' ' + FBlue + ' rg' + CRLF, AStream);
+ uCurrentColor := FRed + ' ' + FGreen + ' ' + FBlue + ' rg';
end;
end
- else if (FRed + ' ' + FGreen + ' ' + FBlue + ' RG') <> CurrentColor then
+ else if (FRed + ' ' + FGreen + ' ' + FBlue + ' RG') <> uCurrentColor then
begin
- WriteChaine(FRed + ' ' + FGreen + ' ' + FBlue + ' RG' + CRLF, AFlux);
- CurrentColor := FRed + ' ' + FGreen + ' ' + FBlue + ' RG';
+ WriteString(FRed + ' ' + FGreen + ' ' + FBlue + ' RG' + CRLF, AStream);
+ uCurrentColor := FRed + ' ' + FGreen + ' ' + FBlue + ' RG';
end;
end;
@@ -884,33 +798,28 @@ begin
FStroke := AStroke;
end;
-destructor TPdfColor.Destroy;
+procedure TPdfDicElement.WriteDicElement(const AStream: TStream);
begin
- inherited;
-end;
-
-procedure TPdfDicElement.WriteDicElement(const AFlux: TStream);
-begin
- FKey.WriteName(AFlux);
- WriteChaine(' ', AFlux);
+ FKey.WriteName(AStream);
+ WriteString(' ', AStream);
if FValue is TPdfBoolean then
- TPdfBoolean(FValue).WriteBoolean(AFlux);
+ TPdfBoolean(FValue).WriteBoolean(AStream);
if FValue is TPdfInteger then
- TPdfInteger(FValue).WriteInteger(AFlux);
+ TPdfInteger(FValue).WriteInteger(AStream);
if FValue is TPdfReference then
- TPdfReference(FValue).WriteReference(AFlux);
+ TPdfReference(FValue).WriteReference(AStream);
if FValue is TPdfName then
- TPdfName(FValue).WriteName(AFlux);
+ TPdfName(FValue).WriteName(AStream);
if FValue is TPdfString then
- TPdfString(FValue).WriteString(AFlux);
+ TPdfString(FValue).Write(AStream);
if FValue is TPdfArray then
- TPdfArray(FValue).WriteArray(AFlux);
+ TPdfArray(FValue).WriteArray(AStream);
if FValue is TPdfDictionary then
- TPdfDictionary(FValue).WriteDictionary(-1, AFlux);
- WriteChaine(CRLF, AFlux);
+ TPdfDictionary(FValue).WriteDictionary(-1, AStream);
+ WriteString(CRLF, AStream);
end;
-constructor TPdfDicElement.CreateDicElement(const AKey: string; const AValue: TPdfObjet);
+constructor TPdfDicElement.CreateDicElement(const AKey: string; const AValue: TPdfObject);
begin
inherited Create;
FKey := TPdfName.CreateName(AKey);
@@ -937,7 +846,7 @@ begin
inherited;
end;
-procedure TPdfDictionary.AddElement(const AKey: string; const AValue: TPdfObjet);
+procedure TPdfDictionary.AddElement(const AKey: string; const AValue: TPdfObject);
var
DicElement: TPdfDicElement;
begin
@@ -958,20 +867,20 @@ begin
end;
end;
-procedure TPdfDictionary.WriteDictionary(const AObjet: integer; const AFlux: TStream);
+procedure TPdfDictionary.WriteDictionary(const AObjet: integer; const AStream: TStream);
var
Long: TPdfInteger;
Cpt, NumImg, NumFnt: integer;
Value: string;
begin
if TPdfName(TPdfDicElement(FElement[0]).FKey).FValue = '' then
- TPdfDicElement(FElement[0]).WriteDicElement(AFlux) // write a charwidth array of a font
+ TPdfDicElement(FElement[0]).WriteDicElement(AStream) // write a charwidth array of a font
else
begin
- WriteChaine('<<' + CRLF, AFlux);
+ WriteString('<<' + CRLF, AStream);
if FElement.Count > 0 then
for Cpt := 0 to Pred(FElement.Count) do
- TPdfDicElement(FElement[Cpt]).WriteDicElement(AFlux);
+ TPdfDicElement(FElement[Cpt]).WriteDicElement(AStream);
NumImg := -1;
NumFnt := -1;
if FElement.Count > 0 then
@@ -982,41 +891,41 @@ begin
begin
if (TPdfName(TPdfDicElement(FElement[Cpt]).FKey).FValue = 'Name') then
begin
- if (TPdfObjet(TPdfDicElement(FElement[Cpt]).FValue) is TPdfName) and (TPdfName(TPdfDicElement(FElement[Cpt]).FValue).FValue[1] = 'I') then
+ if (TPdfObject(TPdfDicElement(FElement[Cpt]).FValue) is TPdfName) and (TPdfName(TPdfDicElement(FElement[Cpt]).FValue).FValue[1] = 'I') then
begin
NumImg := StrToInt(Copy(TPdfName(TPdfDicElement(FElement[Cpt]).FValue).FValue, 2, Length(TPdfName(TPdfDicElement(FElement[Cpt]).FValue).FValue) - 1));
- Flux := TMemoryStream.Create;
- Flux.Position := 0;
+ uStream := TMemoryStream.Create;
+ uStream.Position := 0;
// write image stream length in xobject dictionary
- Long := TPdfInteger.CreateInteger(TPdfImage(TPdfXRef(Document.FXRefObjets[AObjet]).FObjet).WriteImageStream(NumImg, Flux));
- TPdfDictionary(TPdfXRef(Document.FXRefObjets[AObjet]).FObjet).AddElement('Length', Long);
- TPdfDicElement(FElement[Pred(FElement.Count)]).WriteDicElement(AFlux);
- Flux.Free;
- WriteChaine('>>', AFlux);
+ Long := TPdfInteger.CreateInteger(TPdfImage(TPdfXRef(Document.FGlobalXRefs[AObjet]).FDict).WriteImageStream(NumImg, uStream));
+ TPdfDictionary(TPdfXRef(Document.FGlobalXRefs[AObjet]).FDict).AddElement('Length', Long);
+ TPdfDicElement(FElement[Pred(FElement.Count)]).WriteDicElement(AStream);
+ uStream.Free;
+ WriteString('>>', AStream);
// write image stream in xobject dictionary
- TPdfImage(TPdfXRef(Document.FXRefObjets[AObjet]).FObjet).WriteImageStream(NumImg, AFlux);
+ TPdfImage(TPdfXRef(Document.FGlobalXRefs[AObjet]).FDict).WriteImageStream(NumImg, AStream);
end;
end;
if Pos('Length1', TPdfName(TPdfDicElement(FElement[Cpt]).FKey).FValue) > 0 then
begin
- Flux := TMemoryStream.Create;
+ uStream := TMemoryStream.Create;
Value := TPdfName(TPdfDicElement(FElement[Cpt]).FKey).FValue;
NumFnt := StrToInt(Copy(Value, Succ(Pos(' ', Value)), Length(Value) - Pos(' ', Value)));
- Flux.LoadFromFile(FontFiles[NumFnt]);
+ uStream.LoadFromFile(uFontFiles[NumFnt]);
// write fontfile stream length in xobject dictionary
- Long := TPdfInteger.CreateInteger(Flux.Size);
- TPdfDictionary(TPdfXRef(Document.FXRefObjets[AObjet]).FObjet).AddElement('Length', Long);
- TPdfDicElement(FElement[Pred(FElement.Count)]).WriteDicElement(AFlux);
- WriteChaine('>>', AFlux);
+ Long := TPdfInteger.CreateInteger(uStream.Size);
+ TPdfDictionary(TPdfXRef(Document.FGlobalXRefs[AObjet]).FDict).AddElement('Length', Long);
+ TPdfDicElement(FElement[Pred(FElement.Count)]).WriteDicElement(AStream);
+ WriteString('>>', AStream);
// write fontfile stream in xobject dictionary
- TPdfFonte(TPdfXRef(Document.FXRefObjets[NumFnt]).FObjet).WriteFonteStream(Flux, AFlux);
- Flux.Free;
+ TPdfEmbeddedFont(TPdfXRef(Document.FGlobalXRefs[NumFnt]).FDict).WriteEmbeddedFont(uStream, AStream);
+ uStream.Free;
end;
end;
end; { for Cpt... }
end; { if FElement.Count... }
if (NumImg = -1) and (NumFnt = -1) then
- WriteChaine('>>', AFlux);
+ WriteString('>>', AStream);
end; { if/else }
end;
@@ -1037,22 +946,22 @@ begin
inherited;
end;
-procedure TPdfXRef.WriteXRef(const AFlux: TStream);
+procedure TPdfXRef.WriteXRef(const AStream: TStream);
begin
- WriteChaine(IntToChaine(FOffset, 10) + ' ' + IntToChaine(0, 5) + ' n' + CRLF, AFlux);
+ WriteString(IntToString(FOffset, 10) + ' ' + IntToString(0, 5) + ' n' + CRLF, AStream);
end;
constructor TPdfXRef.CreateXRef;
begin
inherited Create;
FOffset := 0;
- FObjet := TpdfDictionary.CreateDictionary;
+ FDict := TpdfDictionary.CreateDictionary;
FStream := nil;
end;
destructor TPdfXRef.Destroy;
begin
- FObjet.Free;
+ FDict.Free;
FStream.Free;
inherited;
end;
@@ -1061,68 +970,68 @@ function TPdfDocument.ElementParNom(const AValue: string): integer;
var
Cpt: integer;
begin
- for Cpt := 1 to Pred(FXRefObjets.Count) do
- if TPdfName(TPdfDicElement(TPdfDictionary(TPdfXRef(FXRefObjets[Cpt]).FObjet).FElement[0]).FValue).FValue = AValue then
+ for Cpt := 1 to Pred(FGlobalXRefs.Count) do
+ if TPdfName(TPdfDicElement(TPdfDictionary(TPdfXRef(FGlobalXRefs[Cpt]).FDict).FElement[0]).FValue).FValue = AValue then
Result := Cpt;
end;
-procedure TPdfDocument.WriteXRefTable(const AFlux: TStream);
+procedure TPdfDocument.WriteXRefTable(const AStream: TStream);
var
Cpt: integer;
begin
- if FXRefObjets.Count > 1 then
- for Cpt := 1 to Pred(FXRefObjets.Count) do
- TPdfXRef(FXRefObjets[Cpt]).WriteXRef(AFlux);
+ if FGlobalXRefs.Count > 1 then
+ for Cpt := 1 to Pred(FGlobalXRefs.Count) do
+ TPdfXRef(FGlobalXRefs[Cpt]).WriteXRef(AStream);
end;
-procedure TPdfDocument.WriteObjet(const AObjet: integer; const AFlux: TStream);
+procedure TPdfDocument.WriteObject(const AObject: integer; const AStream: TStream);
var
Long: TPdfInteger;
Flux: TMemoryStream;
begin
- WriteChaine(IntToStr(AObjet) + ' 0 obj' + CRLF, AFlux);
- if TPdfXRef(FXRefObjets[AObjet]).FStream = nil then
- TPdfDictionary(TPdfXRef(FXRefObjets[AObjet]).FObjet).WriteDictionary(AObjet, AFlux)
+ WriteString(IntToStr(AObject) + ' 0 obj' + CRLF, AStream);
+ if TPdfXRef(FGlobalXRefs[AObject]).FStream = nil then
+ TPdfDictionary(TPdfXRef(FGlobalXRefs[AObject]).FDict).WriteDictionary(AObject, AStream)
else
begin
Flux := TMemoryStream.Create;
Flux.Position := 0;
- CurrentColor := '';
- CurrentWidth := '';
- TPdfXRef(FXRefObjets[AObjet]).FStream.WriteStream(Flux);
+ uCurrentColor := '';
+ uCurrentWidth := '';
+ TPdfXRef(FGlobalXRefs[AObject]).FStream.WriteStream(Flux);
// write stream length element in contents dictionary
Long := TPdfInteger.CreateInteger(Flux.Size);
- TPdfDictionary(TPdfXRef(FXRefObjets[AObjet]).FObjet).AddElement('Length', Long);
+ TPdfDictionary(TPdfXRef(FGlobalXRefs[AObject]).FDict).AddElement('Length', Long);
Flux.Free;
- TPdfXRef(FXRefObjets[AObjet]).FObjet.WriteDictionary(-1, AFlux);
+ TPdfXRef(FGlobalXRefs[AObject]).FDict.WriteDictionary(-1, AStream);
// write stream in contents dictionary
- CurrentColor := '';
- CurrentWidth := '';
- WriteChaine(CRLF + 'stream' + CRLF, AFlux);
- TPdfXRef(FXRefObjets[AObjet]).FStream.WriteStream(AFlux);
- WriteChaine('endstream', AFlux);
+ uCurrentColor := '';
+ uCurrentWidth := '';
+ WriteString(CRLF + 'stream' + CRLF, AStream);
+ TPdfXRef(FGlobalXRefs[AObject]).FStream.WriteStream(AStream);
+ WriteString('endstream', AStream);
end;
- WriteChaine(CRLF + 'endobj' + CRLF + CRLF, AFlux);
+ WriteString(CRLF + 'endobj' + CRLF + CRLF, AStream);
end;
procedure TPdfDocument.CreateRefTable;
var
XRefObjet: TPdfXRef;
begin
- FXRefObjets := TList.Create;
+ FGlobalXRefs := TList.Create;
// add first xref entry
XRefObjet := TPdfXRef.CreateXRef;
- FXRefObjets.Add(XRefObjet);
+ FGlobalXRefs.Add(XRefObjet);
end;
procedure TPdfDocument.CreateTrailer;
var
XRefObjets: TPdfInteger;
begin
- Trailer := TPdfDictionary.CreateDictionary;
- // add size trailer element
- XRefObjets := TPdfInteger.CreateInteger(FXRefObjets.Count);
- Trailer.AddElement('Size', XRefObjets);
+ uDictionary := TPdfDictionary.CreateDictionary;
+ // add size uDictionary element
+ XRefObjets := TPdfInteger.CreateInteger(FGlobalXRefs.Count);
+ uDictionary.AddElement('Size', XRefObjets);
end;
function TPdfDocument.CreateCatalog: integer;
@@ -1134,13 +1043,13 @@ var
begin
// add xref entry
Catalog := TPdfXRef.CreateXRef;
- FXRefObjets.Add(Catalog);
- // add root trailer element
- XRefObjets := TPdfReference.CreateReference(Pred(FXRefObjets.Count));
- Trailer.AddElement('Root', XRefObjets);
+ FGlobalXRefs.Add(Catalog);
+ // add root uDictionary element
+ XRefObjets := TPdfReference.CreateReference(Pred(FGlobalXRefs.Count));
+ uDictionary.AddElement('Root', XRefObjets);
// add type element to catalog dictionary
Nom := TPdfName.CreateName('Catalog');
- Catalog.FObjet.AddElement('Type', Nom);
+ Catalog.FDict.AddElement('Type', Nom);
// add pagelayout element to catalog dictionary
case FPageLayout of
lSingle:
@@ -1150,111 +1059,111 @@ begin
lContinuous:
Nom := TPdfName.CreateName('OneColumn');
end;
- Catalog.FObjet.AddElement('PageLayout', Nom);
+ Catalog.FDict.AddElement('PageLayout', Nom);
// add openaction element to catalog dictionary
Table := TPdfArray.CreateArray;
- Catalog.FObjet.AddElement('OpenAction', Table);
- Result := Pred(FXRefObjets.Count);
+ Catalog.FDict.AddElement('OpenAction', Table);
+ Result := Pred(FGlobalXRefs.Count);
end;
procedure TPdfDocument.CreateInfo;
var
Info: TPdfXRef;
XRefObjets: TPdfReference;
- Nom: TPdfString;
+ lName: TPdfString;
begin
// add xref entry
Info := TPdfXRef.CreateXRef;
- FXRefObjets.Add(Info);
- // add info trailer element
- XRefObjets := TPdfReference.CreateReference(Pred(FXRefObjets.Count));
- Trailer.AddElement('Info', XRefObjets);
- TPdfInteger(TPdfDicElement(Trailer.FElement[Trailer.ElementParCle('Size')]).FValue).FValue := FXRefObjets.Count;
+ FGlobalXRefs.Add(Info);
+ // add info uDictionary element
+ XRefObjets := TPdfReference.CreateReference(Pred(FGlobalXRefs.Count));
+ uDictionary.AddElement('Info', XRefObjets);
+ TPdfInteger(TPdfDicElement(uDictionary.FElement[uDictionary.ElementParCle('Size')]).FValue).FValue := FGlobalXRefs.Count;
// add title element to info dictionary
- Nom := TPdfString.CreateString(Infos.Titre);
- Info.FObjet.AddElement('Title', Nom);
+ lName := TPdfString.CreateString(Infos.Title);
+ Info.FDict.AddElement('Title', lName);
// add author element to info dictionary
- Nom := TPdfString.CreateString(Infos.Auteur);
- Info.FObjet.AddElement('Author', Nom);
+ lName := TPdfString.CreateString(Infos.Author);
+ Info.FDict.AddElement('Author', lName);
// add creator element to info dictionary
- Nom := TPdfString.CreateString(ApplicationName);
- Info.FObjet.AddElement('Creator', Nom);
+ lName := TPdfString.CreateString(ApplicationName);
+ Info.FDict.AddElement('Creator', lName);
// add producer element to info dictionary
- Nom := TPdfString.CreateString(fpGUIName + ' ' + FPGUI_VERSION);
- Info.FObjet.AddElement('Producer', Nom);
+ lName := TPdfString.CreateString(fpGUIName + ' ' + FPGUI_VERSION);
+ Info.FDict.AddElement('Producer', lName);
// add creationdate element to info dictionary
- Nom := TPdfString.CreateString(DateToPdfDate(Now));
- Info.FObjet.AddElement('CreationDate', Nom);
+ lName := TPdfString.CreateString(DateToPdfDate(Now));
+ Info.FDict.AddElement('CreationDate', lName);
end;
procedure TPdfDocument.CreatePreferences;
var
Viewer: TPdfXRef;
XRefObjets: TPdfReference;
- Nom: TPdfName;
+ lName: TPdfName;
Preference: TPdfBoolean;
begin
// add xref entry
Viewer := TPdfXRef.CreateXRef;
- FXRefObjets.Add(Viewer);
+ FGlobalXRefs.Add(Viewer);
// add type element to preferences dictionary
- Nom := TPdfName.CreateName('ViewerPreferences');
- Viewer.FObjet.AddElement('Type', Nom);
+ lName := TPdfName.CreateName('ViewerPreferences');
+ Viewer.FDict.AddElement('Type', lName);
// add preference element to preferences dictionary
Preference := TPdfBoolean.CreateBoolean(True);
- Viewer.FObjet.AddElement('FitWindow', Preference);
+ Viewer.FDict.AddElement('FitWindow', Preference);
// add preferences reference to catalog dictionary
- XRefObjets := TPdfReference.CreateReference(Pred(FXRefObjets.Count));
- TPdfDictionary(TPdfXRef(FXRefObjets[ElementParNom('Catalog')]).FObjet).AddElement('ViewerPreferences', XRefObjets);
+ XRefObjets := TPdfReference.CreateReference(Pred(FGlobalXRefs.Count));
+ TPdfDictionary(TPdfXRef(FGlobalXRefs[ElementParNom('Catalog')]).FDict).AddElement('ViewerPreferences', XRefObjets);
end;
function TPdfDocument.CreatePages(Parent: integer): integer;
var
Pages: TPdfXRef;
XRefObjets: TPdfReference;
- Nom: TPdfName;
+ lName: TPdfName;
Dictionaire: TPdfDictionary;
Table: TPdfArray;
Count: TPdfInteger;
begin
// add xref entry
Pages := TPdfXRef.CreateXRef;
- FXRefObjets.Add(Pages);
+ FGlobalXRefs.Add(Pages);
// add type element to pages dictionary
- Nom := TPdfName.CreateName('Pages');
- Pages.FObjet.AddElement('Type', Nom);
+ lName := TPdfName.CreateName('Pages');
+ Pages.FDict.AddElement('Type', lName);
// add parent reference to pages dictionary if pages is not the root of the page tree
if Parent > 0 then
begin
XRefObjets := TPdfReference.CreateReference(Parent);
- Pages.FObjet.AddElement('Parent', XRefObjets);
+ Pages.FDict.AddElement('Parent', XRefObjets);
// increment count in parent pages dictionary
- Dictionaire := TPdfDictionary(TPdfXRef(FXRefObjets[Parent]).FObjet);
+ Dictionaire := TPdfDictionary(TPdfXRef(FGlobalXRefs[Parent]).FDict);
TPdfInteger(TPdfDicElement(Dictionaire.FElement[Dictionaire.ElementParCle('Count')]).FValue).IncrementeInteger;
// add kid reference in parent pages dictionary
- XRefObjets := TPdfReference.CreateReference(Pred(FXRefObjets.Count));
+ XRefObjets := TPdfReference.CreateReference(Pred(FGlobalXRefs.Count));
TPdfArray(TPdfDicElement(Dictionaire.FElement[Dictionaire.ElementParCle('Kids')]).FValue).AddItem(XRefObjets);
end
else
begin
// add pages reference to catalog dictionary
- XRefObjets := TPdfReference.CreateReference(Pred(FXRefObjets.Count));
- TPdfDictionary(TPdfXRef(FXRefObjets[ElementParNom('Catalog')]).FObjet).AddElement('Pages', XRefObjets);
+ XRefObjets := TPdfReference.CreateReference(Pred(FGlobalXRefs.Count));
+ TPdfDictionary(TPdfXRef(FGlobalXRefs[ElementParNom('Catalog')]).FDict).AddElement('Pages', XRefObjets);
end;
// add kids element to pages dictionary
Table := TPdfArray.CreateArray;
- Pages.FObjet.AddElement('Kids', Table);
+ Pages.FDict.AddElement('Kids', Table);
// add count element to pages dictionary
Count := TPdfInteger.CreateInteger(0);
- Pages.FObjet.AddElement('Count', Count);
- Result := Pred(FXRefObjets.Count);
+ Pages.FDict.AddElement('Count', Count);
+ Result := Pred(FGlobalXRefs.Count);
end;
function TPdfDocument.CreatePage(Parent, Haut, Larg, PageNum: integer): integer;
var
Page: TPdfXRef;
XRefObjets: TPdfReference;
- Nom: TPdfName;
+ lName: TPdfName;
Dictionaire: TPdfDictionary;
Table: TPdfArray;
Coord: TPdfInteger;
@@ -1262,24 +1171,24 @@ var
begin
// add xref entry
Page := TPdfXRef.CreateXRef;
- FXRefObjets.Add(Page);
+ FGlobalXRefs.Add(Page);
// add type element to page dictionary
- Nom := TPdfName.CreateName('Page');
- Page.FObjet.AddElement('Type', Nom);
+ lName := TPdfName.CreateName('Page');
+ Page.FDict.AddElement('Type', lName);
// add parent reference to page dictionary
XRefObjets := TPdfReference.CreateReference(Parent);
- Page.FObjet.AddElement('Parent', XRefObjets);
+ Page.FDict.AddElement('Parent', XRefObjets);
// increment count in parent pages dictionary
- Dictionaire := TPdfDictionary(TPdfXRef(FXRefObjets[Parent]).FObjet);
+ Dictionaire := TPdfDictionary(TPdfXRef(FGlobalXRefs[Parent]).FDict);
TPdfInteger(TPdfDicElement(Dictionaire.FElement[Dictionaire.ElementParCle('Count')]).FValue).IncrementeInteger;
// add kid reference in parent pages dictionary
- XRefObjets := TPdfReference.CreateReference(Pred(FXRefObjets.Count));
+ XRefObjets := TPdfReference.CreateReference(Pred(FGlobalXRefs.Count));
TPdfArray(TPdfDicElement(Dictionaire.FElement[Dictionaire.ElementParCle('Kids')]).FValue).AddItem(XRefObjets);
// add mediabox element to page dictionary
Table := TPdfArray.CreateArray;
- Page.FObjet.AddElement('MediaBox', Table);
+ Page.FDict.AddElement('MediaBox', Table);
// add coordinates in page mediabox
- Dictionaire := TPdfDictionary(TPdfXRef(Page).FObjet);
+ Dictionaire := TPdfDictionary(TPdfXRef(Page).FDict);
Coord := TPdfInteger.CreateInteger(0);
TPdfArray(TPdfDicElement(Dictionaire.FElement[Dictionaire.ElementParCle('MediaBox')]).FValue).AddItem(Coord);
Coord := TPdfInteger.CreateInteger(0);
@@ -1290,15 +1199,15 @@ begin
TPdfArray(TPdfDicElement(Dictionaire.FElement[Dictionaire.ElementParCle('MediaBox')]).FValue).AddItem(Coord);
// add resources element to page dictionary
Dictionaire := TPdfDictionary.CreateDictionary;
- Page.FObjet.AddElement('Resources', Dictionaire);
+ Page.FDict.AddElement('Resources', Dictionaire);
// add procset element in resources element to page dictionary
Table := TPdfArray.CreateArray;
- TPdfDictionary(TPdfDicElement(Page.FObjet.FElement[Pred(Page.FObjet.FElement.Count)]).FValue).AddElement('ProcSet', Table);
+ TPdfDictionary(TPdfDicElement(Page.FDict.FElement[Pred(Page.FDict.FElement.Count)]).FValue).AddElement('ProcSet', Table);
// add font element in resources element to page dictionary
if Fonts.Count > 0 then
begin
Dictionaire := TPdfDictionary.CreateDictionary;
- TPdfDictionary(TPdfDicElement(Page.FObjet.FElement[Pred(Page.FObjet.FElement.Count)]).FValue).AddElement('Font', Dictionaire);
+ TPdfDictionary(TPdfDicElement(Page.FDict.FElement[Pred(Page.FDict.FElement.Count)]).FValue).AddElement('Font', Dictionaire);
end;
for Cpt := 0 to Pred(PdfPage.Count) do
begin
@@ -1308,40 +1217,40 @@ begin
begin
// add xobject element in resources element to page dictionary
Dictionaire := TPdfDictionary.CreateDictionary;
- TPdfDictionary(TPdfDicElement(Page.FObjet.FElement[Pred(Page.FObjet.FElement.Count)]).FValue).AddElement('XObject', Dictionaire);
+ TPdfDictionary(TPdfDicElement(Page.FDict.FElement[Pred(Page.FDict.FElement.Count)]).FValue).AddElement('XObject', Dictionaire);
Break;
end;
end;
end;
// add pdf element in procset array to page dictionary
- Dictionaire := TPdfDictionary(TPdfDicElement(Page.FObjet.FElement[Pred(Page.FObjet.FElement.Count)]).FValue);
- Nom := TPdfName.CreateName('PDF');
- TPdfArray(TPdfDicElement(Dictionaire.FElement[Dictionaire.ElementParCle('ProcSet')]).FValue).AddItem(Nom);
+ Dictionaire := TPdfDictionary(TPdfDicElement(Page.FDict.FElement[Pred(Page.FDict.FElement.Count)]).FValue);
+ lName := TPdfName.CreateName('PDF');
+ TPdfArray(TPdfDicElement(Dictionaire.FElement[Dictionaire.ElementParCle('ProcSet')]).FValue).AddItem(lName);
// add text element in procset array to page dictionary
- Nom := TPdfName.CreateName('Text');
- TPdfArray(TPdfDicElement(Dictionaire.FElement[Dictionaire.ElementParCle('ProcSet')]).FValue).AddItem(Nom);
+ lName := TPdfName.CreateName('Text');
+ TPdfArray(TPdfDicElement(Dictionaire.FElement[Dictionaire.ElementParCle('ProcSet')]).FValue).AddItem(lName);
// add image element in procset array to page dictionary
- Nom := TPdfName.CreateName('ImageC');
- TPdfArray(TPdfDicElement(Dictionaire.FElement[Dictionaire.ElementParCle('ProcSet')]).FValue).AddItem(Nom);
- Result := Pred(FXRefObjets.Count);
+ lName := TPdfName.CreateName('ImageC');
+ TPdfArray(TPdfDicElement(Dictionaire.FElement[Dictionaire.ElementParCle('ProcSet')]).FValue).AddItem(lName);
+ Result := Pred(FGlobalXRefs.Count);
end;
function TPdfDocument.CreateOutlines: integer;
var
Outlines: TPdfXRef;
- Nom: TPdfName;
+ lName: TPdfName;
Count: TPdfInteger;
begin
// add xref entry
Outlines := TPdfXRef.CreateXRef;
- FXRefObjets.Add(Outlines);
+ FGlobalXRefs.Add(Outlines);
// add type element to outlines dictionary
- Nom := TPdfName.CreateName('Outlines');
- Outlines.FObjet.AddElement('Type', Nom);
+ lName := TPdfName.CreateName('Outlines');
+ Outlines.FDict.AddElement('Type', lName);
// add count element to outlines dictionary
Count := TPdfInteger.CreateInteger(0);
- Outlines.FObjet.AddElement('Count', Count);
- Result := Pred(FXRefObjets.Count);
+ Outlines.FDict.AddElement('Count', Count);
+ Result := Pred(FGlobalXRefs.Count);
end;
function TPdfDocument.CreateOutline(Parent, SectNo, PageNo: integer; SectTitre: string): integer;
@@ -1354,7 +1263,7 @@ var
begin
// add xref entry
Outline := TPdfXRef.CreateXRef;
- FXRefObjets.Add(Outline);
+ FGlobalXRefs.Add(Outline);
// add title element to outline dictionary
if PageNo > -1 then
begin
@@ -1370,24 +1279,24 @@ begin
else
Titre := TPdfString.CreateString('Section ' + IntToStr(SectNo));
end;
- Outline.FObjet.AddElement('Title', Titre);
+ Outline.FDict.AddElement('Title', Titre);
// add parent reference to outline dictionary
XRefObjets := TPdfReference.CreateReference(Parent);
- Outline.FObjet.AddElement('Parent', XRefObjets);
+ Outline.FDict.AddElement('Parent', XRefObjets);
// add count element to outline dictionary
Count := TPdfInteger.CreateInteger(0);
- Outline.FObjet.AddElement('Count', Count);
+ Outline.FDict.AddElement('Count', Count);
// add dest element to outline dictionary
Table := TPdfArray.CreateArray;
- Outline.FObjet.AddElement('Dest', Table);
- Result := Pred(FXRefObjets.Count);
+ Outline.FDict.AddElement('Dest', Table);
+ Result := Pred(FGlobalXRefs.Count);
end;
procedure TPdfDocument.CreateStdFont(NomFonte: string; NumFonte: integer);
var
Fontes: TPdfXRef;
XRefObjets: TPdfReference;
- Nom: TPdfName;
+ lName: TPdfName;
Dictionaire: TPdfDictionary;
Cpt: integer;
begin
@@ -1396,151 +1305,151 @@ begin
// AnsiReplaceText(NomFonte,'Italic','Oblique');
// add xref entry
Fontes := TPdfXRef.CreateXRef;
- FXRefObjets.Add(Fontes);
+ FGlobalXRefs.Add(Fontes);
// add type element to font dictionary
- Nom := TPdfName.CreateName('Font');
- Fontes.FObjet.AddElement('Type', Nom);
+ lName := TPdfName.CreateName('Font');
+ Fontes.FDict.AddElement('Type', lName);
// add subtype element to font dictionary
- Nom := TPdfName.CreateName('Type1');
- Fontes.FObjet.AddElement('Subtype', Nom);
+ lName := TPdfName.CreateName('Type1');
+ Fontes.FDict.AddElement('Subtype', lName);
// add encoding element to font dictionary
- Nom := TPdfName.CreateName('WinAnsiEncoding');
- Fontes.FObjet.AddElement('Encoding', Nom);
+ lName := TPdfName.CreateName('WinAnsiEncoding');
+ Fontes.FDict.AddElement('Encoding', lName);
// add firstchar element to font dictionary
- Nom := TPdfName.CreateName('32');
- //Nom:= TPdfName.CreateName('0');
- Fontes.FObjet.AddElement('FirstChar', Nom);
+ lName := TPdfName.CreateName('32');
+ //lName:= TPdfName.CreateName('0');
+ Fontes.FDict.AddElement('FirstChar', lName);
// add lastchar element to font dictionary
- Nom := TPdfName.CreateName('255');
- Fontes.FObjet.AddElement('LastChar', Nom);
+ lName := TPdfName.CreateName('255');
+ Fontes.FDict.AddElement('LastChar', lName);
// add basefont element to font dictionary
- Nom := TPdfName.CreateName(NomFonte);
- Fontes.FObjet.AddElement('BaseFont', Nom);
+ lName := TPdfName.CreateName(NomFonte);
+ Fontes.FDict.AddElement('BaseFont', lName);
// add name element to font dictionary
- Nom := TPdfName.CreateName('F' + IntToStr(NumFonte));
- Fontes.FObjet.AddElement('Name', Nom);
+ lName := TPdfName.CreateName('F' + IntToStr(NumFonte));
+ Fontes.FDict.AddElement('Name', lName);
// add font reference to all page dictionary
- for Cpt := 1 to Pred(FXRefObjets.Count) do
+ for Cpt := 1 to Pred(FGlobalXRefs.Count) do
begin
- Dictionaire := TPdfDictionary(TPdfXRef(FXRefObjets[Cpt]).FObjet);
+ Dictionaire := TPdfDictionary(TPdfXRef(FGlobalXRefs[Cpt]).FDict);
if Dictionaire.FElement.Count > 0 then
if TPdfName(TPdfDicElement(Dictionaire.FElement[0]).FValue).FValue = 'Page' then
begin
Dictionaire := TPdfDictionary(TPdfDicElement(Dictionaire.FElement[Dictionaire.ElementParCle('Resources')]).FValue);
Dictionaire := TPdfDictionary(TPdfDicElement(Dictionaire.FElement[Dictionaire.ElementParCle('Font')]).FValue);
- XRefObjets := TPdfReference.CreateReference(Pred(FXRefObjets.Count));
- Dictionaire.AddElement(TPdfName(Nom).FValue, XRefObjets);
+ XRefObjets := TPdfReference.CreateReference(Pred(FGlobalXRefs.Count));
+ Dictionaire.AddElement(TPdfName(lName).FValue, XRefObjets);
end;
end;
- SetLength(FontFiles, Succ(Length(FontFiles)));
- FontFiles[NumFonte] := '';
+ SetLength(uFontFiles, Succ(Length(uFontFiles)));
+ uFontFiles[NumFonte] := '';
end;
-function TPdfDocument.LoadFont(NomFonte: string): string;
+function TPdfDocument.LoadFont(AFontName: string): string;
var
FileTxt: TextFile;
- Ligne: WideString;
+ lLine: WideString;
begin
- if fpgFileExists(FontDirectory + NomFonte + '.fnt') then
+ if fpgFileExists(FontDirectory + AFontName + '.fnt') then
begin
- AssignFile(FileTxt, FontDirectory + NomFonte + '.fnt');
+ AssignFile(FileTxt, FontDirectory + AFontName + '.fnt');
Reset(FileTxt);
while not EOF(FileTxt) do
begin
- Readln(FileTxt, Ligne);
- if Copy(Ligne, 1, Pred(Pos('=', Ligne))) = 'FontType' then
- FontDef.FType := Copy(Ligne, Succ(Pos('=', Ligne)), Length(Ligne) - Pos('=', Ligne));
- if Copy(Ligne, 1, Pred(Pos('=', Ligne))) = 'FontName' then
- FontDef.FName := Copy(Ligne, Succ(Pos('=', Ligne)), Length(Ligne) - Pos('=', Ligne));
- if Copy(Ligne, 1, Pred(Pos('=', Ligne))) = 'Ascent' then
- FontDef.FAscent := Copy(Ligne, Succ(Pos('=', Ligne)), Length(Ligne) - Pos('=', Ligne));
- if Copy(Ligne, 1, Pred(Pos('=', Ligne))) = 'Descent' then
- FontDef.FDescent := Copy(Ligne, Succ(Pos('=', Ligne)), Length(Ligne) - Pos('=', Ligne));
- if Copy(Ligne, 1, Pred(Pos('=', Ligne))) = 'CapHeight' then
- FontDef.FCapHeight := Copy(Ligne, Succ(Pos('=', Ligne)), Length(Ligne) - Pos('=', Ligne));
- if Copy(Ligne, 1, Pred(Pos('=', Ligne))) = 'Flags' then
- FontDef.FFlags := Copy(Ligne, Succ(Pos('=', Ligne)), Length(Ligne) - Pos('=', Ligne));
- if Copy(Ligne, 1, Pred(Pos('=', Ligne))) = 'FontBBox' then
- FontDef.FFontBBox := Copy(Ligne, Succ(Pos('=', Ligne)), Length(Ligne) - Pos('=', Ligne));
- if Copy(Ligne, 1, Pred(Pos('=', Ligne))) = 'ItalicAngle' then
- FontDef.FItalicAngle := Copy(Ligne, Succ(Pos('=', Ligne)), Length(Ligne) - Pos('=', Ligne));
- if Copy(Ligne, 1, Pred(Pos('=', Ligne))) = 'StemV' then
- FontDef.FStemV := Copy(Ligne, Succ(Pos('=', Ligne)), Length(Ligne) - Pos('=', Ligne));
- if Copy(Ligne, 1, Pred(Pos('=', Ligne))) = 'MissingWidth' then
- FontDef.FMissingWidth := Copy(Ligne, Succ(Pos('=', Ligne)), Length(Ligne) - Pos('=', Ligne));
- if Copy(Ligne, 1, Pred(Pos('=', Ligne))) = 'Encoding' then
- FontDef.FEncoding := Copy(Ligne, Succ(Pos('=', Ligne)), Length(Ligne) - Pos('=', Ligne));
- if Copy(Ligne, 1, Pred(Pos('=', Ligne))) = 'FontFile' then
- FontDef.FFile := FontDirectory + Copy(Ligne, Succ(Pos('=', Ligne)), Length(Ligne) - Pos('=', Ligne));
- if Copy(Ligne, 1, Pred(Pos('=', Ligne))) = 'OriginalSize' then
- FontDef.FOriginalSize := Copy(Ligne, Succ(Pos('=', Ligne)), Length(Ligne) - Pos('=', Ligne));
- if Copy(Ligne, 1, Pred(Pos('=', Ligne))) = 'Diffs' then
- FontDef.FDiffs := Copy(Ligne, Succ(Pos('=', Ligne)), Length(Ligne) - Pos('=', Ligne));
- if Copy(Ligne, 1, Pred(Pos('=', Ligne))) = 'CharWidth' then
- FontDef.FCharWidth := Copy(Ligne, Succ(Pos('=', Ligne)), Length(Ligne) - Pos('=', Ligne));
+ Readln(FileTxt, lLine);
+ if Copy(lLine, 1, Pred(Pos('=', lLine))) = 'FontType' then
+ uFontDef.FType := Copy(lLine, Succ(Pos('=', lLine)), Length(lLine) - Pos('=', lLine));
+ if Copy(lLine, 1, Pred(Pos('=', lLine))) = 'FontName' then
+ uFontDef.FName := Copy(lLine, Succ(Pos('=', lLine)), Length(lLine) - Pos('=', lLine));
+ if Copy(lLine, 1, Pred(Pos('=', lLine))) = 'Ascent' then
+ uFontDef.FAscent := Copy(lLine, Succ(Pos('=', lLine)), Length(lLine) - Pos('=', lLine));
+ if Copy(lLine, 1, Pred(Pos('=', lLine))) = 'Descent' then
+ uFontDef.FDescent := Copy(lLine, Succ(Pos('=', lLine)), Length(lLine) - Pos('=', lLine));
+ if Copy(lLine, 1, Pred(Pos('=', lLine))) = 'CapHeight' then
+ uFontDef.FCapHeight := Copy(lLine, Succ(Pos('=', lLine)), Length(lLine) - Pos('=', lLine));
+ if Copy(lLine, 1, Pred(Pos('=', lLine))) = 'Flags' then
+ uFontDef.FFlags := Copy(lLine, Succ(Pos('=', lLine)), Length(lLine) - Pos('=', lLine));
+ if Copy(lLine, 1, Pred(Pos('=', lLine))) = 'FontBBox' then
+ uFontDef.FFontBBox := Copy(lLine, Succ(Pos('=', lLine)), Length(lLine) - Pos('=', lLine));
+ if Copy(lLine, 1, Pred(Pos('=', lLine))) = 'ItalicAngle' then
+ uFontDef.FItalicAngle := Copy(lLine, Succ(Pos('=', lLine)), Length(lLine) - Pos('=', lLine));
+ if Copy(lLine, 1, Pred(Pos('=', lLine))) = 'StemV' then
+ uFontDef.FStemV := Copy(lLine, Succ(Pos('=', lLine)), Length(lLine) - Pos('=', lLine));
+ if Copy(lLine, 1, Pred(Pos('=', lLine))) = 'MissingWidth' then
+ uFontDef.FMissingWidth := Copy(lLine, Succ(Pos('=', lLine)), Length(lLine) - Pos('=', lLine));
+ if Copy(lLine, 1, Pred(Pos('=', lLine))) = 'Encoding' then
+ uFontDef.FEncoding := Copy(lLine, Succ(Pos('=', lLine)), Length(lLine) - Pos('=', lLine));
+ if Copy(lLine, 1, Pred(Pos('=', lLine))) = 'FontFile' then
+ uFontDef.FFile := FontDirectory + Copy(lLine, Succ(Pos('=', lLine)), Length(lLine) - Pos('=', lLine));
+ if Copy(lLine, 1, Pred(Pos('=', lLine))) = 'OriginalSize' then
+ uFontDef.FOriginalSize := Copy(lLine, Succ(Pos('=', lLine)), Length(lLine) - Pos('=', lLine));
+ if Copy(lLine, 1, Pred(Pos('=', lLine))) = 'Diffs' then
+ uFontDef.FDiffs := Copy(lLine, Succ(Pos('=', lLine)), Length(lLine) - Pos('=', lLine));
+ if Copy(lLine, 1, Pred(Pos('=', lLine))) = 'CharWidth' then
+ uFontDef.FCharWidth := Copy(lLine, Succ(Pos('=', lLine)), Length(lLine) - Pos('=', lLine));
end;
- Result := FontDef.FType;
+ Result := uFontDef.FType;
end
else
- ShowMessage(Format(rsErrReportFontFileMissing, [NomFonte]));
+ ShowMessage(Format(rsErrReportFontFileMissing, [AFontName]));
end;
procedure TPdfDocument.CreateTtfFont(const NumFonte: integer);
var
Fontes: TPdfXRef;
XRefObjets: TPdfReference;
- Nom: TPdfName;
+ lName: TPdfName;
Dictionaire: TPdfDictionary;
Value: TPdfInteger;
Cpt: integer;
begin
// add xref entry
Fontes := TPdfXRef.CreateXRef;
- FXRefObjets.Add(Fontes);
+ FGlobalXRefs.Add(Fontes);
// add type element to font dictionary
- Nom := TPdfName.CreateName('Font');
- Fontes.FObjet.AddElement('Type', Nom);
+ lName := TPdfName.CreateName('Font');
+ Fontes.FDict.AddElement('Type', lName);
// add subtype element to font dictionary
- Nom := TPdfName.CreateName(FontDef.FType);
- Fontes.FObjet.AddElement('Subtype', Nom);
+ lName := TPdfName.CreateName(uFontDef.FType);
+ Fontes.FDict.AddElement('Subtype', lName);
// add encoding element to font dictionary
- Nom := TPdfName.CreateName('WinAnsiEncoding');
- Fontes.FObjet.AddElement('Encoding', Nom);
+ lName := TPdfName.CreateName('WinAnsiEncoding');
+ Fontes.FDict.AddElement('Encoding', lName);
// add firstchar element to font dictionary
Value := TPdfInteger.CreateInteger(32);
- Fontes.FObjet.AddElement('FirstChar', Value);
+ Fontes.FDict.AddElement('FirstChar', Value);
// add lastchar element to font dictionary
Value := TPdfInteger.CreateInteger(255);
- Fontes.FObjet.AddElement('LastChar', Value);
+ Fontes.FDict.AddElement('LastChar', Value);
// add basefont element to font dictionary
- Nom := TPdfName.CreateName(FontDef.FName);
- Fontes.FObjet.AddElement('BaseFont', Nom);
+ lName := TPdfName.CreateName(uFontDef.FName);
+ Fontes.FDict.AddElement('BaseFont', lName);
// add name element to font dictionary
- Nom := TPdfName.CreateName('F' + IntToStr(NumFonte));
- Fontes.FObjet.AddElement('Name', Nom);
+ lName := TPdfName.CreateName('F' + IntToStr(NumFonte));
+ Fontes.FDict.AddElement('Name', lName);
// add font reference to all page dictionary
- for Cpt := 1 to Pred(FXRefObjets.Count) do
+ for Cpt := 1 to Pred(FGlobalXRefs.Count) do
begin
- Dictionaire := TPdfDictionary(TPdfXRef(FXRefObjets[Cpt]).FObjet);
+ Dictionaire := TPdfDictionary(TPdfXRef(FGlobalXRefs[Cpt]).FDict);
if Dictionaire.FElement.Count > 0 then
if TPdfName(TPdfDicElement(Dictionaire.FElement[0]).FValue).FValue = 'Page' then
begin
Dictionaire := TPdfDictionary(TPdfDicElement(Dictionaire.FElement[Dictionaire.ElementParCle('Resources')]).FValue);
Dictionaire := TPdfDictionary(TPdfDicElement(Dictionaire.FElement[Dictionaire.ElementParCle('Font')]).FValue);
- XRefObjets := TPdfReference.CreateReference(Pred(FXRefObjets.Count));
- Dictionaire.AddElement(TPdfName(Nom).FValue, XRefObjets);
+ XRefObjets := TPdfReference.CreateReference(Pred(FGlobalXRefs.Count));
+ Dictionaire.AddElement(TPdfName(lName).FValue, XRefObjets);
end;
end;
CreateFontDescriptor(NumFonte);
// add fontdescriptor reference to font dictionary
- XRefObjets := TPdfReference.CreateReference(FXRefObjets.Count - 2);
- Fontes.FObjet.AddElement('FontDescriptor', XRefObjets);
+ XRefObjets := TPdfReference.CreateReference(FGlobalXRefs.Count - 2);
+ Fontes.FDict.AddElement('FontDescriptor', XRefObjets);
CreateFontWidth;
// add fontwidth reference to font dictionary
- XRefObjets := TPdfReference.CreateReference(Pred(FXRefObjets.Count));
- Fontes.FObjet.AddElement('Widths', XRefObjets);
- SetLength(FontFiles, Succ(Length(FontFiles)));
- FontFiles[NumFonte] := FontDef.FFile;
+ XRefObjets := TPdfReference.CreateReference(Pred(FGlobalXRefs.Count));
+ Fontes.FDict.AddElement('Widths', XRefObjets);
+ SetLength(uFontFiles, Succ(Length(uFontFiles)));
+ uFontFiles[NumFonte] := uFontDef.FFile;
end;
procedure TPdfDocument.CreateTp1Font(const NumFonte: integer);
@@ -1552,56 +1461,56 @@ procedure TPdfDocument.CreateFontDescriptor(const NumFonte: integer);
var
FtDesc: TPdfXRef;
XRefObjets: TPdfReference;
- Nom: TPdfName;
+ lName: TPdfName;
Value: TPdfInteger;
Table: TPdfArray;
Dictionaire: TPdfDictionary;
begin
// add xref entry
FtDesc := TPdfXRef.CreateXRef;
- FXRefObjets.Add(FtDesc);
+ FGlobalXRefs.Add(FtDesc);
// add type element to fontdescriptor dictionary
- Nom := TPdfName.CreateName('FontDescriptor');
- FtDesc.FObjet.AddElement('Type', Nom);
+ lName := TPdfName.CreateName('FontDescriptor');
+ FtDesc.FDict.AddElement('Type', lName);
// add fontname element to fontdescriptor dictionary
- Nom := TPdfName.CreateName(FontDef.FName);
- FtDesc.FObjet.AddElement('FontName', Nom);
+ lName := TPdfName.CreateName(uFontDef.FName);
+ FtDesc.FDict.AddElement('FontName', lName);
// add ascent element to fontdescriptor dictionary
- Value := TPdfInteger.CreateInteger(StrToInt(FontDef.FAscent));
- FtDesc.FObjet.AddElement('Ascent', Value);
+ Value := TPdfInteger.CreateInteger(StrToInt(uFontDef.FAscent));
+ FtDesc.FDict.AddElement('Ascent', Value);
// add descent element to fontdescriptor dictionary
- Value := TPdfInteger.CreateInteger(StrToInt(FontDef.FDescent));
- FtDesc.FObjet.AddElement('Descent', Value);
+ Value := TPdfInteger.CreateInteger(StrToInt(uFontDef.FDescent));
+ FtDesc.FDict.AddElement('Descent', Value);
// add capheight element to fontdescriptor dictionary
- Value := TPdfInteger.CreateInteger(StrToInt(FontDef.FCapHeight));
- FtDesc.FObjet.AddElement('CapHeight', Value);
+ Value := TPdfInteger.CreateInteger(StrToInt(uFontDef.FCapHeight));
+ FtDesc.FDict.AddElement('CapHeight', Value);
// add flags element to fontdescriptor dictionary
- Value := TPdfInteger.CreateInteger(StrToInt(FontDef.FFlags));
- FtDesc.FObjet.AddElement('Flags', Value);
+ Value := TPdfInteger.CreateInteger(StrToInt(uFontDef.FFlags));
+ FtDesc.FDict.AddElement('Flags', Value);
// add fontbbox element to fontdescriptor dictionary
Table := TPdfArray.CreateArray;
- FtDesc.FObjet.AddElement('FontBBox', Table);
+ FtDesc.FDict.AddElement('FontBBox', Table);
// add coordinates in page fontbbox
- while Pos(' ', FontDef.FFontBBox) > 0 do
+ while Pos(' ', uFontDef.FFontBBox) > 0 do
begin
- Dictionaire := TPdfDictionary(TPdfXRef(FtDesc).FObjet);
- Value := TPdfInteger.CreateInteger(StrToInt(Copy(FontDef.FFontBBox, 1, Pred(Pos(' ', FontDef.FFontBBox)))));
+ Dictionaire := TPdfDictionary(TPdfXRef(FtDesc).FDict);
+ Value := TPdfInteger.CreateInteger(StrToInt(Copy(uFontDef.FFontBBox, 1, Pred(Pos(' ', uFontDef.FFontBBox)))));
TPdfArray(TPdfDicElement(Dictionaire.FElement[Dictionaire.ElementParCle('FontBBox')]).FValue).AddItem(Value);
- FontDef.FFontBBox := Copy(FontDef.FFontBBox, Succ(Pos(' ', FontDef.FFontBBox)), Length(FontDef.FFontBBox) - Pos(' ', FontDef.FFontBBox));
+ uFontDef.FFontBBox := Copy(uFontDef.FFontBBox, Succ(Pos(' ', uFontDef.FFontBBox)), Length(uFontDef.FFontBBox) - Pos(' ', uFontDef.FFontBBox));
end;
// add italicangle element to fontdescriptor dictionary
- Value := TPdfInteger.CreateInteger(StrToInt(FontDef.FItalicAngle));
- FtDesc.FObjet.AddElement('ItalicAngle', Value);
+ Value := TPdfInteger.CreateInteger(StrToInt(uFontDef.FItalicAngle));
+ FtDesc.FDict.AddElement('ItalicAngle', Value);
// add stemv element to fontdescriptor dictionary
- Value := TPdfInteger.CreateInteger(StrToInt(FontDef.FStemV));
- FtDesc.FObjet.AddElement('StemV', Value);
+ Value := TPdfInteger.CreateInteger(StrToInt(uFontDef.FStemV));
+ FtDesc.FDict.AddElement('StemV', Value);
// add missingwidth element to fontdescriptor dictionary
- Value := TPdfInteger.CreateInteger(StrToInt(FontDef.FMissingWidth));
- FtDesc.FObjet.AddElement('MissingWidth', Value);
+ Value := TPdfInteger.CreateInteger(StrToInt(uFontDef.FMissingWidth));
+ FtDesc.FDict.AddElement('MissingWidth', Value);
CreateFontFile(NumFonte);
// add fontfilereference to fontdescriptor dictionary
- XRefObjets := TPdfReference.CreateReference(Pred(FXRefObjets.Count));
- FtDesc.FObjet.AddElement('FontFile2', XRefObjets);
+ XRefObjets := TPdfReference.CreateReference(Pred(FGlobalXRefs.Count));
+ FtDesc.FDict.AddElement('FontFile2', XRefObjets);
end;
procedure TPdfDocument.CreateFontWidth;
@@ -1613,84 +1522,84 @@ var
begin
// add xref entry
FtDesc := TPdfXRef.CreateXRef;
- FXRefObjets.Add(FtDesc);
+ FGlobalXRefs.Add(FtDesc);
// add element to fontwidth dictionary
Table := TPdfArray.CreateArray;
- FtDesc.FObjet.AddElement('', Table);
+ FtDesc.FDict.AddElement('', Table);
// add width values in fontwidth array
- while Pos(' ', FontDef.FCharWidth) > 0 do
+ while Pos(' ', uFontDef.FCharWidth) > 0 do
begin
- Dictionaire := TPdfDictionary(TPdfXRef(FtDesc).FObjet);
- Value := TPdfInteger.CreateInteger(StrToInt(Copy(FontDef.FCharWidth, 1, Pred(Pos(' ', FontDef.FCharWidth)))));
+ Dictionaire := TPdfDictionary(TPdfXRef(FtDesc).FDict);
+ Value := TPdfInteger.CreateInteger(StrToInt(Copy(uFontDef.FCharWidth, 1, Pred(Pos(' ', uFontDef.FCharWidth)))));
TPdfArray(TPdfDicElement(Dictionaire.FElement[Dictionaire.ElementParCle('')]).FValue).AddItem(Value);
- FontDef.FCharWidth := Copy(FontDef.FCharWidth, Succ(Pos(' ', FontDef.FCharWidth)), Length(FontDef.FCharWidth) - Pos(' ', FontDef.FCharWidth));
+ uFontDef.FCharWidth := Copy(uFontDef.FCharWidth, Succ(Pos(' ', uFontDef.FCharWidth)), Length(uFontDef.FCharWidth) - Pos(' ', uFontDef.FCharWidth));
end;
end;
procedure TPdfDocument.CreateFontFile(const NumFonte: integer);
var
FtDesc: TPdfXRef;
- Nom: TPdfName;
+ lName: TPdfName;
Value: TPdfInteger;
begin
// add xref entry
FtDesc := TPdfXRef.CreateXRef;
- FXRefObjets.Add(FtDesc);
+ FGlobalXRefs.Add(FtDesc);
// add filter element to fontfile dictionary
- Nom := TPdfName.CreateName('FlateDecode');
- FtDesc.FObjet.AddElement('Filter', Nom);
+ lName := TPdfName.CreateName('FlateDecode');
+ FtDesc.FDict.AddElement('Filter', lName);
// add length1 element to fontfile dictionary
- Value := TPdfInteger.CreateInteger(StrToInt(FontDef.FOriginalSize));
- FtDesc.FObjet.AddElement('Length1 ' + IntToStr(NumFonte), Value);
+ Value := TPdfInteger.CreateInteger(StrToInt(uFontDef.FOriginalSize));
+ FtDesc.FDict.AddElement('Length1 ' + IntToStr(NumFonte), Value);
end;
-procedure TPdfDocument.CreateImage(ImgWidth, ImgHeight, NumImg: integer);
+procedure TPdfDocument.CreateImage(ImgWidth, ImgHeight, ImgNumber: integer);
var
Images: TPdfXRef;
XRefObjets: TPdfReference;
- Nom: TPdfName;
- Dictionaire: TPdfDictionary;
+ lName: TPdfName;
+ lDictionary: TPdfDictionary;
Long: TPdfInteger;
- Cpt: integer;
+ i: integer;
begin
// add xref entry
Images := TPdfXRef.CreateXRef;
- FXRefObjets.Add(Images);
+ FGlobalXRefs.Add(Images);
// add type element to image dictionary
- Nom := TPdfName.CreateName('XObject');
- Images.FObjet.AddElement('Type', Nom);
+ lName := TPdfName.CreateName('XObject');
+ Images.FDict.AddElement('Type', lName);
// add subtype element to image dictionary
- Nom := TPdfName.CreateName('Image');
- Images.FObjet.AddElement('Subtype', Nom);
+ lName := TPdfName.CreateName('Image');
+ Images.FDict.AddElement('Subtype', lName);
// add width element to image dictionary
Long := TPdfInteger.CreateInteger(ImgWidth);
- Images.FObjet.AddElement('Width', Long);
+ Images.FDict.AddElement('Width', Long);
// add height element to image dictionary
Long := TPdfInteger.CreateInteger(ImgHeight);
- Images.FObjet.AddElement('Height', Long);
+ Images.FDict.AddElement('Height', Long);
// add color space element to image dictionary
- Nom := TPdfName.CreateName('DeviceRGB');
- Images.FObjet.AddElement('ColorSpace', Nom);
+ lName := TPdfName.CreateName('DeviceRGB');
+ Images.FDict.AddElement('ColorSpace', lName);
// add bits per component element to image dictionary
Long := TPdfInteger.CreateInteger(8);
- Images.FObjet.AddElement('BitsPerComponent', Long);
+ Images.FDict.AddElement('BitsPerComponent', Long);
// add name element to image dictionary
- Nom := TPdfName.CreateName('I' + IntToStr(NumImg));
- Images.FObjet.AddElement('Name', Nom);
+ lName := TPdfName.CreateName('I' + IntToStr(ImgNumber));
+ Images.FDict.AddElement('Name', lName);
// add image reference to page dictionary
- for Cpt := 1 to Pred(FXRefObjets.Count) do
+ for i := 1 to Pred(FGlobalXRefs.Count) do
begin
- Dictionaire := TPdfDictionary(TPdfXRef(FXRefObjets[Cpt]).FObjet);
- if Dictionaire.FElement.Count > 0 then
+ lDictionary := TPdfDictionary(TPdfXRef(FGlobalXRefs[i]).FDict);
+ if lDictionary.FElement.Count > 0 then
begin
- if TPdfName(TPdfDicElement(Dictionaire.FElement[0]).FValue).FValue = 'Page' then
+ if TPdfName(TPdfDicElement(lDictionary.FElement[0]).FValue).FValue = 'Page' then
begin
- Dictionaire := TPdfDictionary(TPdfDicElement(Dictionaire.FElement[Dictionaire.ElementParCle('Resources')]).FValue);
- if Dictionaire.ElementParCle('XObject') > -1 then
+ lDictionary := TPdfDictionary(TPdfDicElement(lDictionary.FElement[lDictionary.ElementParCle('Resources')]).FValue);
+ if lDictionary.ElementParCle('XObject') > -1 then
begin
- Dictionaire := TPdfDictionary(TPdfDicElement(Dictionaire.FElement[Dictionaire.ElementParCle('XObject')]).FValue);
- XRefObjets := TPdfReference.CreateReference(Pred(FXRefObjets.Count));
- Dictionaire.AddElement(TPdfName(Nom).FValue, XRefObjets);
+ lDictionary := TPdfDictionary(TPdfDicElement(lDictionary.FElement[lDictionary.ElementParCle('XObject')]).FValue);
+ XRefObjets := TPdfReference.CreateReference(Pred(FGlobalXRefs.Count));
+ lDictionary.AddElement(TPdfName(lName).FValue, XRefObjets);
end;
end;
end;
@@ -1705,107 +1614,107 @@ var
begin
// add xref entry
Contents := TPdfXRef.CreateXRef;
- FXRefObjets.Add(Contents);
+ FGlobalXRefs.Add(Contents);
Stream := TPdfStream.CreateStream;
- TPdfXRef(FXRefObjets[Pred(FXRefObjets.Count)]).FStream := Stream;
+ TPdfXRef(FGlobalXRefs[Pred(FGlobalXRefs.Count)]).FStream := Stream;
// add contents reference to page dictionary
- XRefObjets := TPdfReference.CreateReference(Pred(FXRefObjets.Count));
- TPdfDictionary(TPdfXRef(FXRefObjets[Pred(Pred(FXRefObjets.Count))]).FObjet).AddElement('Contents', XRefObjets);
- Result := Pred(FXRefObjets.Count);
+ XRefObjets := TPdfReference.CreateReference(Pred(FGlobalXRefs.Count));
+ TPdfDictionary(TPdfXRef(FGlobalXRefs[Pred(Pred(FGlobalXRefs.Count))]).FDict).AddElement('Contents', XRefObjets);
+ Result := Pred(FGlobalXRefs.Count);
end;
procedure TPdfDocument.CreateStream(NumeroPage, PageNum: integer);
var
- Cpt: integer;
+ i: integer;
Txt: TPdfText;
Clr: TPdfColor;
- Fnt: TPdfFonte;
+ Fnt: TPdfEmbeddedFont;
Rct: TPdfRectangle;
- Lin: TPdfLigne;
+ Lin: TPdfLineSegment;
Srf: TPdfSurface;
Sty: TPdfLineStyle;
Img: TPdfImage;
begin
- for Cpt := 0 to Pred(PdfPage.Count) do
+ for i := 0 to Pred(PdfPage.Count) do
begin
- if TPdfElement(PdfPage[Cpt]) is TPdfTexte then
+ if TPdfElement(PdfPage[i]) is TPdfTexte then
begin
- if TPdfTexte(PdfPage[Cpt]).PageId = NumeroPage then
+ if TPdfTexte(PdfPage[i]).PageId = NumeroPage then
begin
- with TPdfTexte(PdfPage[Cpt]) do
+ with TPdfTexte(PdfPage[i]) do
begin
if FontName > -1 then
begin
- Fnt := TPdfFonte.CreateFonte(FontName, FontSize);
+ Fnt := TPdfEmbeddedFont.CreateFont(FontName, FontSize);
// adjust font size to display device
Fnt.FTxtSize := IntToStr(Round((StrToInt(FontSize) * fpgApplication.Screen_dpi_y) div 72));
- TPdfStream(TPdfXRef(FXRefObjets[PageNum]).FStream).AddItem(Fnt);
+ TPdfStream(TPdfXRef(FGlobalXRefs[PageNum]).FStream).AddItem(Fnt);
Clr := TPdfColor.CreateColor(True, Couleur);
- TPdfStream(TPdfXRef(FXRefObjets[PageNum]).FStream).AddItem(Clr);
+ TPdfStream(TPdfXRef(FGlobalXRefs[PageNum]).FStream).AddItem(Clr);
end;
Txt := TPdfText.CreateText(TextPosX, TextPosY, Writting);
- TPdfStream(TPdfXRef(FXRefObjets[PageNum]).FStream).AddItem(Txt);
+ TPdfStream(TPdfXRef(FGlobalXRefs[PageNum]).FStream).AddItem(Txt);
end;
end;
end;
- if TPdfElement(PdfPage[Cpt]) is TPdfRect then
+ if TPdfElement(PdfPage[i]) is TPdfRect then
begin
- if TPdfRect(PdfPage[Cpt]).PageId = NumeroPage then
+ if TPdfRect(PdfPage[i]).PageId = NumeroPage then
begin
- with TPdfRect(PdfPage[Cpt]) do
+ with TPdfRect(PdfPage[i]) do
begin
Clr := TPdfColor.CreateColor(True, RectColor);
- TPdfStream(TPdfXRef(FXRefObjets[PageNum]).FStream).AddItem(Clr);
+ TPdfStream(TPdfXRef(FGlobalXRefs[PageNum]).FStream).AddItem(Clr);
if RectStroke then
begin
Sty := TPdfLineStyle.CreateLineStyle(RectLineStyle, 0);
- TPdfStream(TPdfXRef(FXRefObjets[PageNum]).FStream).AddItem(Sty);
+ TPdfStream(TPdfXRef(FGlobalXRefs[PageNum]).FStream).AddItem(Sty);
end;
Rct := TPdfRectangle.CreateRectangle(RectThickness, RectLeft, RectBottom, RectWidth, RectHeight, RectFill, RectStroke);
- TPdfStream(TPdfXRef(FXRefObjets[PageNum]).FStream).AddItem(Rct);
+ TPdfStream(TPdfXRef(FGlobalXRefs[PageNum]).FStream).AddItem(Rct);
end;
end;
end;
- if TPdfElement(PdfPage[Cpt]) is TPdfLine then
+ if TPdfElement(PdfPage[i]) is TPdfLine then
begin
- if TPdfLine(PdfPage[Cpt]).PageId = NumeroPage then
+ if TPdfLine(PdfPage[i]).PageId = NumeroPage then
begin
- with TPdfLine(PdfPage[Cpt]) do
+ with TPdfLine(PdfPage[i]) do
begin
Clr := TPdfColor.CreateColor(False, LineColor);
- TPdfStream(TPdfXRef(FXRefObjets[PageNum]).FStream).AddItem(Clr);
+ TPdfStream(TPdfXRef(FGlobalXRefs[PageNum]).FStream).AddItem(Clr);
Sty := TPdfLineStyle.CreateLineStyle(LineStyle, 0);
- TPdfStream(TPdfXRef(FXRefObjets[PageNum]).FStream).AddItem(Sty);
- Lin := TPdfLigne.CreateLigne(LineThikness, LineBeginX, LineBeginY, LineEndX, LineEndY);
- TPdfStream(TPdfXRef(FXRefObjets[PageNum]).FStream).AddItem(Lin);
+ TPdfStream(TPdfXRef(FGlobalXRefs[PageNum]).FStream).AddItem(Sty);
+ Lin := TPdfLineSegment.CreateLineSegment(LineThikness, LineBeginX, LineBeginY, LineEndX, LineEndY);
+ TPdfStream(TPdfXRef(FGlobalXRefs[PageNum]).FStream).AddItem(Lin);
end;
end;
end;
- if TPdfElement(PdfPage[Cpt]) is TPdfSurf then
+ if TPdfElement(PdfPage[i]) is TPdfSurf then
begin
- if TPdfSurf(PdfPage[Cpt]).PageId = NumeroPage then
+ if TPdfSurf(PdfPage[i]).PageId = NumeroPage then
begin
- with TPdfSurf(PdfPage[Cpt]) do
+ with TPdfSurf(PdfPage[i]) do
begin
Clr := TPdfColor.CreateColor(True, SurfColor);
- TPdfStream(TPdfXRef(FXRefObjets[PageNum]).FStream).AddItem(Clr);
+ TPdfStream(TPdfXRef(FGlobalXRefs[PageNum]).FStream).AddItem(Clr);
Srf := TPdfSurface.CreateSurface(Points);
- TPdfStream(TPdfXRef(FXRefObjets[PageNum]).FStream).AddItem(Srf);
+ TPdfStream(TPdfXRef(FGlobalXRefs[PageNum]).FStream).AddItem(Srf);
end;
end;
end;
- if TPdfElement(PdfPage[Cpt]) is TPdfImg then
+ if TPdfElement(PdfPage[i]) is TPdfImg then
begin
- if TPdfImg(PdfPage[Cpt]).PageId = NumeroPage then
+ if TPdfImg(PdfPage[i]).PageId = NumeroPage then
begin
- with TPdfImg(PdfPage[Cpt]) do
+ with TPdfImg(PdfPage[i]) do
begin
Img := TPdfImage.CreateImage(ImgLeft, ImgBottom, ImgWidth, ImgHeight, ImgNumber);
- TPdfStream(TPdfXRef(FXRefObjets[PageNum]).FStream).AddItem(Img);
+ TPdfStream(TPdfXRef(FGlobalXRefs[PageNum]).FStream).AddItem(Img);
end;
end;
end;
- end; { for Cpt... }
+ end; { for i... }
end;
constructor TPdfDocument.CreateDocument(const ALayout: TPageLayout; const AZoom: string; const APreferences: Boolean);
@@ -1823,7 +1732,7 @@ begin
FZoomValue := AZoom;
CreateRefTable;
CreateTrailer;
- Catalogue := CreateCatalog;
+ uCatalogue := CreateCatalog;
CreateInfo;
CreatePreferences;
ParentPage := 0;
@@ -1834,11 +1743,11 @@ begin
begin
OutlineRoot := CreateOutlines;
// add outline reference to catalog dictionary
- XRefObjets := TPdfReference.CreateReference(Pred(FXRefObjets.Count));
- TPdfDictionary(TPdfXRef(FXRefObjets[Catalogue]).FObjet).AddElement('Outlines', XRefObjets);
+ XRefObjets := TPdfReference.CreateReference(Pred(FGlobalXRefs.Count));
+ TPdfDictionary(TPdfXRef(FGlobalXRefs[uCatalogue]).FDict).AddElement('Outlines', XRefObjets);
// add useoutline element to catalog dictionary
Nom := TPdfName.CreateName('UseOutlines');
- TPdfDictionary(TPdfXRef(FXRefObjets[Catalogue]).FObjet).AddElement('PageMode', Nom);
+ TPdfDictionary(TPdfXRef(FGlobalXRefs[uCatalogue]).FDict).AddElement('PageMode', Nom);
end;
TreeRoot := CreatePages(ParentPage);
end;
@@ -1850,29 +1759,29 @@ begin
if Outline then
begin
ParentOutline := CreateOutline(OutlineRoot, Succ(CptSect), -1, T_Section(Sections[CptSect]).Title);
- Dictionaire := TPdfDictionary(TPdfXRef(FXRefObjets[OutlineRoot]).FObjet);
+ Dictionaire := TPdfDictionary(TPdfXRef(FGlobalXRefs[OutlineRoot]).FDict);
TPdfInteger(TPdfDicElement(Dictionaire.FElement[Dictionaire.ElementParCle('Count')]).FValue).IncrementeInteger;
if CptSect = 0 then
begin
- XRefObjets := TPdfReference.CreateReference(Pred(FXRefObjets.Count));
- TPdfDictionary(TPdfXRef(FXRefObjets[OutlineRoot]).FObjet).AddElement('First', XRefObjets);
+ XRefObjets := TPdfReference.CreateReference(Pred(FGlobalXRefs.Count));
+ TPdfDictionary(TPdfXRef(FGlobalXRefs[OutlineRoot]).FDict).AddElement('First', XRefObjets);
NextSect := ParentOutline;
- PrevSect := Pred(FXRefObjets.Count);
+ PrevSect := Pred(FGlobalXRefs.Count);
end
else
begin
- XRefObjets := TPdfReference.CreateReference(Pred(FXRefObjets.Count));
- TPdfDictionary(TPdfXRef(FXRefObjets[NextSect]).FObjet).AddElement('Next', XRefObjets);
+ XRefObjets := TPdfReference.CreateReference(Pred(FGlobalXRefs.Count));
+ TPdfDictionary(TPdfXRef(FGlobalXRefs[NextSect]).FDict).AddElement('Next', XRefObjets);
XRefObjets := TPdfReference.CreateReference(PrevSect);
- TPdfDictionary(TPdfXRef(FXRefObjets[ParentOutline]).FObjet).AddElement('Prev', XRefObjets);
+ TPdfDictionary(TPdfXRef(FGlobalXRefs[ParentOutline]).FDict).AddElement('Prev', XRefObjets);
NextSect := ParentOutline;
if CptSect < Pred(Sections.Count) then
- PrevSect := Pred(FXRefObjets.Count);
+ PrevSect := Pred(FGlobalXRefs.Count);
end;
if CptSect = Pred(Sections.Count) then
begin
- XRefObjets := TPdfReference.CreateReference(Pred(FXRefObjets.Count));
- TPdfDictionary(TPdfXRef(FXRefObjets[OutlineRoot]).FObjet).AddElement('Last', XRefObjets);
+ XRefObjets := TPdfReference.CreateReference(Pred(FGlobalXRefs.Count));
+ TPdfDictionary(TPdfXRef(FGlobalXRefs[OutlineRoot]).FDict).AddElement('Last', XRefObjets);
end;
end;
ParentPage := CreatePages(TreeRoot);
@@ -1886,8 +1795,8 @@ begin
// add zoom factor to catalog dictionary
if (CptSect = 0) and (CptPage = 0) then
begin
- XRefObjets := TPdfReference.CreateReference(Pred(FXRefObjets.Count));
- Dictionaire := TPdfDictionary(TPdfXRef(FXRefObjets[ElementParNom('Catalog')]).FObjet);
+ XRefObjets := TPdfReference.CreateReference(Pred(FGlobalXRefs.Count));
+ Dictionaire := TPdfDictionary(TPdfXRef(FGlobalXRefs[ElementParNom('Catalog')]).FDict);
TPdfArray(TPdfDicElement(Dictionaire.FElement[Dictionaire.ElementParCle('OpenAction')]).FValue).AddItem(XRefObjets);
Nom := TPdfName.CreateName('XYZ null null ' + FormatFloat('0.##', StrToInt(FZoomValue) / 100));
TPdfArray(TPdfDicElement(Dictionaire.FElement[Dictionaire.ElementParCle('OpenAction')]).FValue).AddItem(Nom);
@@ -1898,10 +1807,10 @@ begin
if (Sections.Count > 1) and Outline then
begin
PageOutline := CreateOutline(ParentOutline, Succ(CptSect), Succ(Cptpage), T_Section(Sections[CptSect]).Title);
- Dictionaire := TPdfDictionary(TPdfXRef(FXRefObjets[ParentOutline]).FObjet);
+ Dictionaire := TPdfDictionary(TPdfXRef(FGlobalXRefs[ParentOutline]).FDict);
TPdfInteger(TPdfDicElement(Dictionaire.FElement[Dictionaire.ElementParCle('Count')]).FValue).IncrementeInteger;
// add page reference to outline destination
- Dictionaire := TPdfDictionary(TPdfXRef(FXRefObjets[PageOutline]).FObjet);
+ Dictionaire := TPdfDictionary(TPdfXRef(FGlobalXRefs[PageOutline]).FDict);
XRefObjets := TPdfReference.CreateReference(NewPage);
TPdfArray(TPdfDicElement(Dictionaire.FElement[Dictionaire.ElementParCle('Dest')]).FValue).AddItem(XRefObjets);
// add display control name to outline destination
@@ -1909,12 +1818,12 @@ begin
TPdfArray(TPdfDicElement(Dictionaire.FElement[Dictionaire.ElementParCle('Dest')]).FValue).AddItem(Nom);
if CptPage = 0 then
begin
- XRefObjets := TPdfReference.CreateReference(Pred(FXRefObjets.Count));
- TPdfDictionary(TPdfXRef(FXRefObjets[ParentOutline]).FObjet).AddElement('First', XRefObjets);
+ XRefObjets := TPdfReference.CreateReference(Pred(FGlobalXRefs.Count));
+ TPdfDictionary(TPdfXRef(FGlobalXRefs[ParentOutline]).FDict).AddElement('First', XRefObjets);
NextOutline := PageOutline;
- PrevOutline := Pred(FXRefObjets.Count);
+ PrevOutline := Pred(FGlobalXRefs.Count);
// add page reference to parent outline destination
- Dictionaire := TPdfDictionary(TPdfXRef(FXRefObjets[ParentOutline]).FObjet);
+ Dictionaire := TPdfDictionary(TPdfXRef(FGlobalXRefs[ParentOutline]).FDict);
XRefObjets := TPdfReference.CreateReference(NewPage);
TPdfArray(TPdfDicElement(Dictionaire.FElement[Dictionaire.ElementParCle('Dest')]).FValue).AddItem(XRefObjets);
// add display control name to outline destination
@@ -1923,18 +1832,18 @@ begin
end
else
begin
- XRefObjets := TPdfReference.CreateReference(Pred(FXRefObjets.Count));
- TPdfDictionary(TPdfXRef(FXRefObjets[NextOutline]).FObjet).AddElement('Next', XRefObjets);
+ XRefObjets := TPdfReference.CreateReference(Pred(FGlobalXRefs.Count));
+ TPdfDictionary(TPdfXRef(FGlobalXRefs[NextOutline]).FDict).AddElement('Next', XRefObjets);
XRefObjets := TPdfReference.CreateReference(PrevOutline);
- TPdfDictionary(TPdfXRef(FXRefObjets[PageOutline]).FObjet).AddElement('Prev', XRefObjets);
+ TPdfDictionary(TPdfXRef(FGlobalXRefs[PageOutline]).FDict).AddElement('Prev', XRefObjets);
NextOutline := PageOutline;
if CptPage < Pred(T_Section(Sections[CptSect]).Pages.Count) then
- PrevOutline := Pred(FXRefObjets.Count);
+ PrevOutline := Pred(FGlobalXRefs.Count);
end;
if CptPage = Pred(T_Section(Sections[CptSect]).Pages.Count) then
begin
- XRefObjets := TPdfReference.CreateReference(Pred(FXRefObjets.Count));
- TPdfDictionary(TPdfXRef(FXRefObjets[ParentOutline]).FObjet).AddElement('Last', XRefObjets);
+ XRefObjets := TPdfReference.CreateReference(Pred(FGlobalXRefs.Count));
+ TPdfDictionary(TPdfXRef(FGlobalXRefs[ParentOutline]).FDict).AddElement('Last', XRefObjets);
end;
end;
end;
@@ -1942,7 +1851,7 @@ begin
if Sections.Count > 1 then
begin
// update count in root parent pages dictionary
- Dictionaire := TPdfDictionary(TPdfXRef(FXRefObjets[TreeRoot]).FObjet);
+ Dictionaire := TPdfDictionary(TPdfXRef(FGlobalXRefs[TreeRoot]).FDict);
TPdfInteger(TPdfDicElement(Dictionaire.FElement[Dictionaire.ElementParCle('Count')]).FValue).Value := T_Section(Sections[CptSect]).TotPages;
end;
if FontDirectory = '' then
@@ -1973,46 +1882,46 @@ begin
if Images.Count > 0 then
for Cpt := 0 to Pred(Images.Count) do
CreateImage(TfpgImage(Images[Cpt]).Width, TfpgImage(Images[Cpt]).Height, Cpt);
- TPdfInteger(TPdfDicElement(Trailer.FElement[Trailer.ElementParCle('Size')]).FValue).FValue := FXRefObjets.Count;
+ TPdfInteger(TPdfDicElement(uDictionary.FElement[uDictionary.ElementParCle('Size')]).FValue).FValue := FGlobalXRefs.Count;
end;
destructor TPdfDocument.Destroy;
var
Cpt: integer;
begin
- Trailer.Free;
- if FXRefObjets.Count > 0 then
- for Cpt := 0 to Pred(FXRefObjets.Count) do
- TPdfXRef(FXRefObjets[Cpt]).Free;
- FXRefObjets.Free;
+ uDictionary.Free;
+ if FGlobalXRefs.Count > 0 then
+ for Cpt := 0 to Pred(FGlobalXRefs.Count) do
+ TPdfXRef(FGlobalXRefs[Cpt]).Free;
+ FGlobalXRefs.Free;
inherited;
end;
-procedure TPdfDocument.WriteDocument(const AFlux: TStream);
+procedure TPdfDocument.WriteDocument(const AStream: TStream);
var
Cpt, XRefPos: integer;
begin
- AFlux.Position := 0;
- WriteChaine(PDF_VERSION + CRLF, AFlux);
+ AStream.Position := 0;
+ WriteString(PDF_VERSION + CRLF, AStream);
// write numbered indirect objects
- for Cpt := 1 to Pred(FXRefObjets.Count) do
+ for Cpt := 1 to Pred(FGlobalXRefs.Count) do
begin
- XRefPos := AFlux.Position;
- WriteObjet(Cpt, AFlux);
- TPdfXRef(FXRefObjets[Cpt]).Offset := XRefPos;
+ XRefPos := AStream.Position;
+ WriteObject(Cpt, AStream);
+ TPdfXRef(FGlobalXRefs[Cpt]).Offset := XRefPos;
end;
- XRefPos := AFlux.Position;
+ XRefPos := AStream.Position;
// write xref table
- WriteChaine('xref' + CRLF + '0 ' + IntToStr(FXRefObjets.Count) + CRLF, AFlux);
- with TPdfXRef(FXRefObjets[0]) do
- WriteChaine(IntToChaine(Offset, 10) + ' ' + IntToChaine(PDF_MAX_GEN_NUM, 5) + ' f' + CRLF, AFlux);
- WriteXRefTable(AFlux);
- // write trailer
- WriteChaine('trailer' + CRLF, AFlux);
- Trailer.WriteDictionary(-1, AFlux);
+ WriteString('xref' + CRLF + '0 ' + IntToStr(FGlobalXRefs.Count) + CRLF, AStream);
+ with TPdfXRef(FGlobalXRefs[0]) do
+ WriteString(IntToString(Offset, 10) + ' ' + IntToString(PDF_MAX_GEN_NUM, 5) + ' f' + CRLF, AStream);
+ WriteXRefTable(AStream);
+ // write uDictionary
+ WriteString('trailer' + CRLF, AStream);
+ uDictionary.WriteDictionary(-1, AStream);
// write offset of last xref table
- WriteChaine(CRLF + 'startxref' + CRLF + IntToStr(XRefPos) + CRLF, AFlux);
- WriteChaine(PDF_FILE_END, AFlux);
+ WriteString(CRLF + 'startxref' + CRLF + IntToStr(XRefPos) + CRLF, AStream);
+ WriteString(PDF_FILE_END, AStream);
end;
end.
diff --git a/src/reportengine/u_report.pas b/src/reportengine/u_report.pas
index 0a6a8a3e..0dfee3d6 100644
--- a/src/reportengine/u_report.pas
+++ b/src/reportengine/u_report.pas
@@ -1,7 +1,7 @@
{
fpGUI - Free Pascal GUI Toolkit
- Copyright (C) 2006 - 2012 See the file AUTHORS.txt, included in this
+ Copyright (C) 2006 - 2015 See the file AUTHORS.txt, included in this
distribution, for details of the copyright.
See the file COPYING.modifiedLGPL, included in this distribution,
@@ -465,8 +465,8 @@ type
var
Infos: record
- Titre: string;
- Auteur: string;
+ Title: string;
+ Author: string;
end;
PdfPage: TList;