Browse Source

Addition of SuperSpinner and related

sganz 7 months ago
parent
commit
5bae3737a2

+ 3277 - 35
Makefile

@@ -1,35 +1,3277 @@
-ifeq ($(OS),Windows_NT)     # true for Windows_NT or later
-  COPY := winmake\copyfile
-  REMOVE := winmake\remove
-  REMOVEDIR := winmake\removedir
-  THEN := &
-  RUN :=
-else
-  COPY := cp
-  REMOVE := rm -f
-  REMOVEDIR := rm -rf
-  THEN := ;
-  RUN := ./
-  RUN := $(strip $(RUN))
-endif
-
-all: compile
-
-install: not_installable
-uninstall: not_installable
-
-not_installable:
-	echo "The library cannot be installed on the system but statically linked to another Lazarus package or application."
-
-clean: clean_bgracontrols
-
-clean_bgracontrols:
-	$(REMOVEDIR) "lib"
-	$(REMOVEDIR) "backup"
-
-compile: BGRAControls
-lazbuild:
-	#lazbuild will determine what to recompile
-BGRAControls: lazbuild bgracontrols.lpk
-	lazbuild bgracontrols.lpk
-
+#
+# Don't edit, this file is generated by FPCMake Version 2.0.0
+#
+default: all
+MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android i386-aros m68k-linux m68k-netbsd m68k-amiga m68k-atari m68k-palmos m68k-macosclassic m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macosclassic powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-haiku x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded x86_64-iphonesim x86_64-android x86_64-aros x86_64-dragonfly arm-linux arm-netbsd arm-palmos arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android arm-aros arm-ios powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux mipsel-embedded mipsel-android jvm-java jvm-android i8086-embedded i8086-msdos i8086-win16 aarch64-linux aarch64-darwin aarch64-android aarch64-ios wasm-wasm sparc64-linux
+BSDs = freebsd netbsd openbsd darwin dragonfly
+UNIXs = linux $(BSDs) solaris qnx haiku aix
+LIMIT83fs = go32v2 os2 emx watcom msdos win16 atari
+OSNeedsComspecToRunBatch = go32v2 watcom
+FORCE:
+.PHONY: FORCE
+override PATH:=$(patsubst %/,%,$(subst \,/,$(PATH)))
+ifneq ($(findstring darwin,$(OSTYPE)),)
+inUnix=1 #darwin
+SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
+else
+ifeq ($(findstring ;,$(PATH)),)
+inUnix=1
+SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
+else
+SEARCHPATH:=$(subst ;, ,$(PATH))
+endif
+endif
+SEARCHPATH+=$(patsubst %/,%,$(subst \,/,$(dir $(MAKE))))
+PWD:=$(strip $(wildcard $(addsuffix /pwd.exe,$(SEARCHPATH))))
+ifeq ($(PWD),)
+PWD:=$(strip $(wildcard $(addsuffix /pwd,$(SEARCHPATH))))
+ifeq ($(PWD),)
+$(error You need the GNU utils package to use this Makefile)
+else
+PWD:=$(firstword $(PWD))
+SRCEXEEXT=
+endif
+else
+PWD:=$(firstword $(PWD))
+SRCEXEEXT=.exe
+endif
+ifndef inUnix
+ifeq ($(OS),Windows_NT)
+inWinNT=1
+else
+ifdef OS2_SHELL
+inOS2=1
+endif
+endif
+else
+ifneq ($(findstring cygdrive,$(PATH)),)
+inCygWin=1
+endif
+endif
+ifdef inUnix
+SRCBATCHEXT=.sh
+else
+ifdef inOS2
+SRCBATCHEXT=.cmd
+else
+SRCBATCHEXT=.bat
+endif
+endif
+ifdef COMSPEC
+ifneq ($(findstring $(OS_SOURCE),$(OSNeedsComspecToRunBatch)),)
+ifndef RUNBATCH
+RUNBATCH=$(COMSPEC) /C
+endif
+endif
+endif
+ifdef inUnix
+PATHSEP=/
+else
+PATHSEP:=$(subst /,\,/)
+ifdef inCygWin
+PATHSEP=/
+endif
+endif
+ifdef PWD
+BASEDIR:=$(subst \,/,$(shell $(PWD)))
+ifdef inCygWin
+ifneq ($(findstring /cygdrive/,$(BASEDIR)),)
+BASENODIR:=$(patsubst /cygdrive%,%,$(BASEDIR))
+BASEDRIVE:=$(firstword $(subst /, ,$(BASENODIR)))
+BASEDIR:=$(subst /cygdrive/$(BASEDRIVE)/,$(BASEDRIVE):/,$(BASEDIR))
+endif
+endif
+else
+BASEDIR=.
+endif
+ifdef inOS2
+ifndef ECHO
+ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO=echo
+else
+ECHO:=$(firstword $(ECHO))
+endif
+else
+ECHO:=$(firstword $(ECHO))
+endif
+endif
+export ECHO
+endif
+ifndef FPC
+ifdef PP
+FPC=$(PP)
+endif
+endif
+ifndef FPC
+FPCPROG:=$(strip $(wildcard $(addsuffix /fpc$(SRCEXEEXT),$(SEARCHPATH))))
+ifneq ($(FPCPROG),)
+FPCPROG:=$(firstword $(FPCPROG))
+ifneq ($(CPU_TARGET),)
+FPC:=$(shell $(FPCPROG) -P$(CPU_TARGET) -PB)
+else
+FPC:=$(shell $(FPCPROG) -PB)
+endif
+ifneq ($(findstring Error,$(FPC)),)
+override FPC=$(firstword $(strip $(wildcard $(addsuffix /ppc386$(SRCEXEEXT),$(SEARCHPATH)))))
+else
+ifeq ($(strip $(wildcard $(FPC))),)
+FPC:=$(firstword $(FPCPROG))
+endif
+endif
+else
+override FPC=$(firstword $(strip $(wildcard $(addsuffix /ppc386$(SRCEXEEXT),$(SEARCHPATH)))))
+endif
+endif
+override FPC:=$(subst $(SRCEXEEXT),,$(FPC))
+override FPC:=$(subst \,/,$(FPC))$(SRCEXEEXT)
+FOUNDFPC:=$(strip $(wildcard $(FPC)))
+ifeq ($(FOUNDFPC),)
+FOUNDFPC=$(strip $(wildcard $(addsuffix /$(FPC),$(SEARCHPATH))))
+ifeq ($(FOUNDFPC),)
+$(error Compiler $(FPC) not found)
+endif
+endif
+ifndef FPC_COMPILERINFO
+FPC_COMPILERINFO:=$(shell $(FPC) -iVSPTPSOTO)
+endif
+ifndef FPC_VERSION
+FPC_VERSION:=$(word 1,$(FPC_COMPILERINFO))
+endif
+export FPC FPC_VERSION FPC_COMPILERINFO
+unexport CHECKDEPEND ALLDEPENDENCIES
+ifndef CPU_TARGET
+ifdef CPU_TARGET_DEFAULT
+CPU_TARGET=$(CPU_TARGET_DEFAULT)
+endif
+endif
+ifndef OS_TARGET
+ifdef OS_TARGET_DEFAULT
+OS_TARGET=$(OS_TARGET_DEFAULT)
+endif
+endif
+ifndef CPU_SOURCE
+CPU_SOURCE:=$(word 2,$(FPC_COMPILERINFO))
+endif
+ifndef CPU_TARGET
+CPU_TARGET:=$(word 3,$(FPC_COMPILERINFO))
+endif
+ifndef OS_SOURCE
+OS_SOURCE:=$(word 4,$(FPC_COMPILERINFO))
+endif
+ifndef OS_TARGET
+OS_TARGET:=$(word 5,$(FPC_COMPILERINFO))
+endif
+FULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)
+FULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)
+ifeq ($(CPU_TARGET),armeb)
+ARCH=arm
+override FPCOPT+=-Cb
+else
+ifeq ($(CPU_TARGET),armel)
+ARCH=arm
+override FPCOPT+=-CaEABI
+else
+ARCH=$(CPU_TARGET)
+endif
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+ifeq ($(SUBARCH),)
+$(error When compiling for arm-embedded, a sub-architecture (e.g. SUBARCH=armv4t or SUBARCH=armv7m) must be defined)
+endif
+override FPCOPT+=-Cp$(SUBARCH)
+endif
+ifeq ($(FULL_TARGET),avr-embedded)
+ifeq ($(SUBARCH),)
+$(error When compiling for avr-embedded, a sub-architecture (e.g. SUBARCH=avr25 or SUBARCH=avr35) must be defined)
+endif
+override FPCOPT+=-Cp$(SUBARCH)
+endif
+ifeq ($(FULL_TARGET),mipsel-embedded)
+ifeq ($(SUBARCH),)
+$(error When compiling for mipsel-embedded, a sub-architecture (e.g. SUBARCH=pic32mx) must be defined)
+endif
+override FPCOPT+=-Cp$(SUBARCH)
+endif
+ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
+TARGETSUFFIX=$(OS_TARGET)
+SOURCESUFFIX=$(OS_SOURCE)
+else
+ifneq ($(findstring $(OS_TARGET),$(LIMIT83fs)),)
+TARGETSUFFIX=$(OS_TARGET)
+else
+TARGETSUFFIX=$(FULL_TARGET)
+endif
+SOURCESUFFIX=$(FULL_SOURCE)
+endif
+ifneq ($(FULL_TARGET),$(FULL_SOURCE))
+CROSSCOMPILE=1
+endif
+ifeq ($(findstring makefile,$(MAKECMDGOALS)),)
+ifeq ($(findstring $(FULL_TARGET),$(MAKEFILETARGETS)),)
+$(error The Makefile doesn't support target $(FULL_TARGET), please run fpcmake first)
+endif
+endif
+ifneq ($(findstring $(OS_TARGET),$(BSDs)),)
+BSDhier=1
+endif
+ifeq ($(OS_TARGET),linux)
+linuxHier=1
+endif
+ifndef CROSSCOMPILE
+BUILDFULLNATIVE=1
+export BUILDFULLNATIVE
+endif
+ifdef BUILDFULLNATIVE
+BUILDNATIVE=1
+export BUILDNATIVE
+endif
+export OS_TARGET OS_SOURCE ARCH CPU_TARGET CPU_SOURCE FULL_TARGET FULL_SOURCE TARGETSUFFIX SOURCESUFFIX CROSSCOMPILE
+ifdef FPCDIR
+override FPCDIR:=$(subst \,/,$(FPCDIR))
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl)),)
+override FPCDIR=wrong
+endif
+else
+override FPCDIR=wrong
+endif
+ifdef DEFAULT_FPCDIR
+ifeq ($(FPCDIR),wrong)
+override FPCDIR:=$(subst \,/,$(DEFAULT_FPCDIR))
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl)),)
+override FPCDIR=wrong
+endif
+endif
+endif
+ifeq ($(FPCDIR),wrong)
+ifdef inUnix
+override FPCDIR=/usr/local/lib/fpc/$(FPC_VERSION)
+ifeq ($(wildcard $(FPCDIR)/units),)
+override FPCDIR=/usr/lib/fpc/$(FPC_VERSION)
+endif
+else
+override FPCDIR:=$(subst /$(FPC),,$(firstword $(strip $(wildcard $(addsuffix /$(FPC),$(SEARCHPATH))))))
+override FPCDIR:=$(FPCDIR)/..
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl)),)
+override FPCDIR:=$(FPCDIR)/..
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl)),)
+override FPCDIR:=$(BASEDIR)
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl)),)
+override FPCDIR=c:/pp
+endif
+endif
+endif
+endif
+endif
+ifndef CROSSBINDIR
+CROSSBINDIR:=$(wildcard $(FPCDIR)/bin/$(TARGETSUFFIX))
+endif
+ifneq ($(findstring $(OS_TARGET),darwin iphonesim ios),)
+ifneq ($(findstring $(OS_SOURCE),darwin ios),)
+DARWIN2DARWIN=1
+endif
+endif
+ifndef BINUTILSPREFIX
+ifndef CROSSBINDIR
+ifdef CROSSCOMPILE
+ifneq ($(OS_TARGET),msdos)
+ifndef DARWIN2DARWIN
+ifneq ($(CPU_TARGET),jvm)
+BINUTILSPREFIX=$(CPU_TARGET)-$(OS_TARGET)-
+ifeq ($(OS_TARGET),android)
+ifeq ($(CPU_TARGET),arm)
+BINUTILSPREFIX=arm-linux-androideabi-
+else
+ifeq ($(CPU_TARGET),i386)
+BINUTILSPREFIX=i686-linux-android-
+else
+BINUTILSPREFIX=$(CPU_TARGET)-linux-android-
+endif
+endif
+endif
+endif
+endif
+else
+BINUTILSPREFIX=$(OS_TARGET)-
+endif
+endif
+endif
+endif
+UNITSDIR:=$(wildcard $(FPCDIR)/units/$(TARGETSUFFIX))
+ifeq ($(UNITSDIR),)
+UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET))
+endif
+PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages)
+ifndef FPCFPMAKE
+ifdef CROSSCOMPILE
+ifeq ($(strip $(wildcard $(addsuffix /compiler/ppc$(SRCEXEEXT),$(FPCDIR)))),)
+FPCPROG:=$(strip $(wildcard $(addsuffix /fpc$(SRCEXEEXT),$(SEARCHPATH))))
+ifneq ($(FPCPROG),)
+FPCPROG:=$(firstword $(FPCPROG))
+FPCFPMAKE:=$(shell $(FPCPROG) -PB)
+ifeq ($(strip $(wildcard $(FPCFPMAKE))),)
+FPCFPMAKE:=$(firstword $(FPCPROG))
+endif
+else
+override FPCFPMAKE=$(firstword $(strip $(wildcard $(addsuffix /ppc386$(SRCEXEEXT),$(SEARCHPATH)))))
+endif
+else
+FPCFPMAKE=$(strip $(wildcard $(addsuffix /compiler/ppc$(SRCEXEEXT),$(FPCDIR))))
+FPMAKE_SKIP_CONFIG=-n
+export FPCFPMAKE
+export FPMAKE_SKIP_CONFIG
+endif
+else
+FPMAKE_SKIP_CONFIG=-n
+FPCFPMAKE=$(FPC)
+endif
+endif
+override PACKAGE_NAME=bgracontrols
+override PACKAGE_VERSION=9.0.1.6
+ifndef LCL_PLATFORM
+ifeq ($(OS_TARGET),win32)
+LCL_PLATFORM=win32
+else
+ifeq ($(OS_TARGET),win64)
+LCL_PLATFORM=win32
+else
+ifeq ($(OS_TARGET),darwin)
+LCL_PLATFORM=cocoa
+else
+LCL_PLATFORM=gtk2
+endif
+endif
+endif
+endif
+export LCL_PLATFORM
+DBG_OPTIONS=
+ifeq ($(OS_TARGET),darwin)
+DBG_OPTIONS=-gw
+endif
+ifeq ($(FULL_TARGET),i386-linux)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),i386-haiku)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),i386-nativent)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),i386-iphonesim)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),i386-android)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),i386-aros)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),m68k-macosclassic)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),powerpc-macosclassic)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),powerpc-wii)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),powerpc-aix)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),x86_64-haiku)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),x86_64-netbsd)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),x86_64-solaris)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),x86_64-openbsd)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),x86_64-iphonesim)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),x86_64-android)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),x86_64-aros)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),x86_64-dragonfly)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),arm-netbsd)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),arm-android)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),arm-aros)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),arm-ios)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),powerpc64-aix)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),avr-embedded)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),armeb-linux)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),armeb-embedded)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),mips-linux)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),mipsel-linux)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),mipsel-embedded)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),mipsel-android)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),jvm-java)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),jvm-android)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),i8086-embedded)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),i8086-msdos)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),i8086-win16)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),aarch64-linux)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),aarch64-darwin)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),aarch64-android)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),aarch64-ios)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),wasm-wasm)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),sparc64-linux)
+override TARGET_UNITS+=bgracontrols.pas
+endif
+ifeq ($(FULL_TARGET),i386-linux)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),i386-haiku)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),i386-nativent)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),i386-iphonesim)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),i386-android)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),i386-aros)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),m68k-macosclassic)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),powerpc-macosclassic)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),powerpc-wii)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),powerpc-aix)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),x86_64-haiku)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),x86_64-netbsd)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),x86_64-solaris)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),x86_64-openbsd)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),x86_64-iphonesim)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),x86_64-android)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),x86_64-aros)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),x86_64-dragonfly)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),arm-netbsd)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),arm-android)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),arm-aros)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),arm-ios)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),powerpc64-aix)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),avr-embedded)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),armeb-linux)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),armeb-embedded)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),mips-linux)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),mipsel-linux)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),mipsel-embedded)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),mipsel-android)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),jvm-java)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),jvm-android)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),i8086-embedded)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),i8086-msdos)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),i8086-win16)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),aarch64-linux)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),aarch64-darwin)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),aarch64-android)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),aarch64-ios)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),wasm-wasm)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),sparc64-linux)
+override CLEAN_FILES+=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+endif
+ifeq ($(FULL_TARGET),i386-linux)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),i386-haiku)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),i386-nativent)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),i386-iphonesim)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),i386-android)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),i386-aros)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),m68k-macosclassic)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),powerpc-macosclassic)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),powerpc-wii)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),powerpc-aix)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),x86_64-haiku)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),x86_64-netbsd)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),x86_64-solaris)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),x86_64-openbsd)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),x86_64-iphonesim)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),x86_64-android)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),x86_64-aros)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),x86_64-dragonfly)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),arm-netbsd)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),arm-android)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),arm-aros)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),arm-ios)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),powerpc64-aix)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),avr-embedded)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),armeb-linux)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),armeb-embedded)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),mips-linux)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),mipsel-linux)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),mipsel-embedded)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),mipsel-android)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),jvm-java)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),jvm-android)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),i8086-embedded)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),i8086-msdos)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),i8086-win16)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),aarch64-linux)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),aarch64-darwin)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),aarch64-android)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),aarch64-ios)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),wasm-wasm)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),sparc64-linux)
+override COMPILER_OPTIONS+=-MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+endif
+ifeq ($(FULL_TARGET),i386-linux)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),i386-haiku)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),i386-nativent)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),i386-iphonesim)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),i386-android)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),i386-aros)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),m68k-macosclassic)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),powerpc-macosclassic)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),powerpc-wii)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),powerpc-aix)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),x86_64-haiku)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),x86_64-netbsd)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),x86_64-solaris)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),x86_64-openbsd)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),x86_64-iphonesim)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),x86_64-android)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),x86_64-aros)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),x86_64-dragonfly)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),arm-netbsd)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),arm-android)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),arm-aros)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),arm-ios)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),powerpc64-aix)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),avr-embedded)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),armeb-linux)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),armeb-embedded)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),mips-linux)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),mipsel-linux)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),mipsel-embedded)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),mipsel-android)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),jvm-java)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),jvm-android)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),i8086-embedded)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),i8086-msdos)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),i8086-win16)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),aarch64-linux)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),aarch64-darwin)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),aarch64-android)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),aarch64-ios)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),wasm-wasm)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),sparc64-linux)
+override COMPILER_UNITDIR+=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+endif
+ifeq ($(FULL_TARGET),i386-linux)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),i386-haiku)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),i386-nativent)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),i386-iphonesim)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),i386-android)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),i386-aros)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),m68k-macosclassic)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),powerpc-macosclassic)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),powerpc-wii)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),powerpc-aix)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),x86_64-haiku)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),x86_64-netbsd)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),x86_64-solaris)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),x86_64-openbsd)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),x86_64-iphonesim)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),x86_64-android)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),x86_64-aros)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),x86_64-dragonfly)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),arm-netbsd)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),arm-android)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),arm-aros)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),arm-ios)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),powerpc64-aix)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),avr-embedded)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),armeb-linux)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),armeb-embedded)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),mips-linux)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),mipsel-linux)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),mipsel-embedded)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),mipsel-android)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),jvm-java)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),jvm-android)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),i8086-embedded)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),i8086-msdos)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),i8086-win16)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),aarch64-linux)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),aarch64-darwin)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),aarch64-android)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),aarch64-ios)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),wasm-wasm)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifeq ($(FULL_TARGET),sparc64-linux)
+override COMPILER_UNITTARGETDIR+=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+endif
+ifdef REQUIRE_UNITSDIR
+override UNITSDIR+=$(REQUIRE_UNITSDIR)
+endif
+ifdef REQUIRE_PACKAGESDIR
+override PACKAGESDIR+=$(REQUIRE_PACKAGESDIR)
+endif
+ifdef ZIPINSTALL
+ifneq ($(findstring $(OS_TARGET),$(UNIXs)),)
+UNIXHier=1
+endif
+else
+ifneq ($(findstring $(OS_SOURCE),$(UNIXs)),)
+UNIXHier=1
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef PREFIX
+INSTALL_PREFIX=$(PREFIX)
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef UNIXHier
+INSTALL_PREFIX=/usr/local
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_BASEDIR:=/pp
+else
+INSTALL_BASEDIR:=/$(PACKAGE_NAME)
+endif
+endif
+endif
+export INSTALL_PREFIX
+ifdef INSTALL_FPCSUBDIR
+export INSTALL_FPCSUBDIR
+endif
+ifndef DIST_DESTDIR
+DIST_DESTDIR:=$(BASEDIR)
+endif
+export DIST_DESTDIR
+ifndef COMPILER_UNITTARGETDIR
+ifdef PACKAGEDIR_MAIN
+COMPILER_UNITTARGETDIR=$(PACKAGEDIR_MAIN)/units/$(TARGETSUFFIX)
+else
+COMPILER_UNITTARGETDIR=units/$(TARGETSUFFIX)
+endif
+endif
+ifndef COMPILER_TARGETDIR
+COMPILER_TARGETDIR=.
+endif
+ifndef INSTALL_BASEDIR
+ifdef UNIXHier
+ifdef INSTALL_FPCPACKAGE
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/fpc/$(FPC_VERSION)
+else
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/$(PACKAGE_NAME)
+endif
+else
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)
+endif
+endif
+ifndef INSTALL_BINDIR
+ifdef UNIXHier
+INSTALL_BINDIR:=$(INSTALL_PREFIX)/bin
+else
+INSTALL_BINDIR:=$(INSTALL_BASEDIR)/bin
+ifdef INSTALL_FPCPACKAGE
+ifdef CROSSCOMPILE
+ifdef CROSSINSTALL
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(SOURCESUFFIX)
+else
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX)
+endif
+else
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX)
+endif
+endif
+endif
+endif
+ifndef INSTALL_UNITDIR
+INSTALL_UNITDIR:=$(INSTALL_BASEDIR)/units/$(TARGETSUFFIX)
+ifdef INSTALL_FPCPACKAGE
+ifdef PACKAGE_NAME
+INSTALL_UNITDIR:=$(INSTALL_UNITDIR)/$(PACKAGE_NAME)
+endif
+endif
+endif
+ifndef INSTALL_LIBDIR
+ifdef UNIXHier
+INSTALL_LIBDIR:=$(INSTALL_PREFIX)/lib
+else
+INSTALL_LIBDIR:=$(INSTALL_UNITDIR)
+endif
+endif
+ifndef INSTALL_SOURCEDIR
+ifdef UNIXHier
+ifdef BSDhier
+SRCPREFIXDIR=share/src
+else
+ifdef linuxHier
+SRCPREFIXDIR=share/src
+else
+SRCPREFIXDIR=src
+endif
+endif
+ifdef INSTALL_FPCPACKAGE
+ifdef INSTALL_FPCSUBDIR
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
+else
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+endif
+else
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+ifdef INSTALL_FPCSUBDIR
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
+else
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(PACKAGE_NAME)
+endif
+else
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source
+endif
+endif
+endif
+ifndef INSTALL_DOCDIR
+ifdef UNIXHier
+ifdef BSDhier
+DOCPREFIXDIR=share/doc
+else
+ifdef linuxHier
+DOCPREFIXDIR=share/doc
+else
+DOCPREFIXDIR=doc
+endif
+endif
+ifdef INSTALL_FPCPACKAGE
+INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+else
+INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc/$(PACKAGE_NAME)
+else
+INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc
+endif
+endif
+endif
+ifndef INSTALL_EXAMPLEDIR
+ifdef UNIXHier
+ifdef INSTALL_FPCPACKAGE
+ifdef BSDhier
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+else
+ifdef linuxHier
+INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/fpc-$(FPC_VERSION)/examples/$(PACKAGE_NAME)
+endif
+endif
+else
+ifdef BSDhier
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+else
+ifdef linuxHier
+INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+endif
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples/$(PACKAGE_NAME)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples
+endif
+endif
+endif
+ifndef INSTALL_DATADIR
+INSTALL_DATADIR=$(INSTALL_BASEDIR)
+endif
+ifndef INSTALL_SHAREDDIR
+INSTALL_SHAREDDIR=$(INSTALL_PREFIX)/lib
+endif
+ifdef CROSSCOMPILE
+ifndef CROSSBINDIR
+CROSSBINDIR:=$(wildcard $(CROSSTARGETDIR)/bin/$(SOURCESUFFIX))
+ifeq ($(CROSSBINDIR),)
+CROSSBINDIR:=$(wildcard $(INSTALL_BASEDIR)/cross/$(TARGETSUFFIX)/bin/$(FULL_SOURCE))
+endif
+endif
+else
+CROSSBINDIR=
+endif
+BATCHEXT=.bat
+LOADEREXT=.as
+EXEEXT=.exe
+PPLEXT=.ppl
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.so
+SHAREDLIBPREFIX=libfp
+STATICLIBPREFIX=libp
+IMPORTLIBPREFIX=libimp
+RSTEXT=.rst
+EXEDBGEXT=.dbg
+ifeq ($(OS_TARGET),go32v1)
+STATICLIBPREFIX=
+SHORTSUFFIX=v1
+endif
+ifeq ($(OS_TARGET),go32v2)
+STATICLIBPREFIX=
+SHORTSUFFIX=dos
+IMPORTLIBPREFIX=
+endif
+ifeq ($(OS_TARGET),watcom)
+STATICLIBPREFIX=
+OEXT=.obj
+ASMEXT=.asm
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=wat
+IMPORTLIBPREFIX=
+endif
+ifneq ($(CPU_TARGET),jvm)
+ifeq ($(OS_TARGET),android)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=lnx
+endif
+endif
+ifeq ($(OS_TARGET),linux)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=lnx
+endif
+ifeq ($(OS_TARGET),dragonfly)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=df
+endif
+ifeq ($(OS_TARGET),freebsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=fbs
+endif
+ifeq ($(OS_TARGET),netbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=nbs
+endif
+ifeq ($(OS_TARGET),openbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=obs
+endif
+ifeq ($(OS_TARGET),win32)
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=w32
+endif
+ifeq ($(OS_TARGET),os2)
+BATCHEXT=.cmd
+AOUTEXT=.out
+STATICLIBPREFIX=
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=os2
+ECHO=echo
+IMPORTLIBPREFIX=
+endif
+ifeq ($(OS_TARGET),emx)
+BATCHEXT=.cmd
+AOUTEXT=.out
+STATICLIBPREFIX=
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=emx
+ECHO=echo
+IMPORTLIBPREFIX=
+endif
+ifeq ($(OS_TARGET),amiga)
+EXEEXT=
+SHAREDLIBEXT=.library
+SHORTSUFFIX=amg
+endif
+ifeq ($(OS_TARGET),aros)
+EXEEXT=
+SHAREDLIBEXT=.library
+SHORTSUFFIX=aros
+endif
+ifeq ($(OS_TARGET),morphos)
+EXEEXT=
+SHAREDLIBEXT=.library
+SHORTSUFFIX=mos
+endif
+ifeq ($(OS_TARGET),atari)
+EXEEXT=.ttp
+SHORTSUFFIX=ata
+endif
+ifeq ($(OS_TARGET),beos)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=be
+endif
+ifeq ($(OS_TARGET),haiku)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=hai
+endif
+ifeq ($(OS_TARGET),solaris)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=sun
+endif
+ifeq ($(OS_TARGET),qnx)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=qnx
+endif
+ifeq ($(OS_TARGET),netware)
+EXEEXT=.nlm
+STATICLIBPREFIX=
+SHORTSUFFIX=nw
+IMPORTLIBPREFIX=imp
+endif
+ifeq ($(OS_TARGET),netwlibc)
+EXEEXT=.nlm
+STATICLIBPREFIX=
+SHORTSUFFIX=nwl
+IMPORTLIBPREFIX=imp
+endif
+ifeq ($(OS_TARGET),macosclassic)
+BATCHEXT=
+EXEEXT=
+DEBUGSYMEXT=.xcoff
+SHORTSUFFIX=mac
+IMPORTLIBPREFIX=imp
+endif
+ifneq ($(findstring $(OS_TARGET),darwin iphonesim ios),)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=dwn
+EXEDBGEXT=.dSYM
+endif
+ifeq ($(OS_TARGET),gba)
+EXEEXT=.gba
+SHAREDLIBEXT=.so
+SHORTSUFFIX=gba
+endif
+ifeq ($(OS_TARGET),symbian)
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=symbian
+endif
+ifeq ($(OS_TARGET),NativeNT)
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=nativent
+endif
+ifeq ($(OS_TARGET),wii)
+EXEEXT=.dol
+SHAREDLIBEXT=.so
+SHORTSUFFIX=wii
+endif
+ifeq ($(OS_TARGET),aix)
+BATCHEXT=.sh
+EXEEXT=
+SHAREDLIBEXT=.a
+SHORTSUFFIX=aix
+endif
+ifeq ($(OS_TARGET),java)
+OEXT=.class
+ASMEXT=.j
+SHAREDLIBEXT=.jar
+SHORTSUFFIX=java
+endif
+ifeq ($(CPU_TARGET),jvm)
+ifeq ($(OS_TARGET),android)
+OEXT=.class
+ASMEXT=.j
+SHAREDLIBEXT=.jar
+SHORTSUFFIX=android
+endif
+endif
+ifeq ($(OS_TARGET),msdos)
+STATICLIBPREFIX=
+STATICLIBEXT=.a
+SHORTSUFFIX=d16
+endif
+ifeq ($(OS_TARGET),embedded)
+ifeq ($(CPU_TARGET),i8086)
+STATICLIBPREFIX=
+STATICLIBEXT=.a
+else
+EXEEXT=.bin
+endif
+SHORTSUFFIX=emb
+endif
+ifeq ($(OS_TARGET),win16)
+STATICLIBPREFIX=
+STATICLIBEXT=.a
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=w16
+endif
+ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
+FPCMADE=fpcmade.$(SHORTSUFFIX)
+ZIPSUFFIX=$(SHORTSUFFIX)
+ZIPCROSSPREFIX=
+ZIPSOURCESUFFIX=src
+ZIPEXAMPLESUFFIX=exm
+else
+FPCMADE=fpcmade.$(TARGETSUFFIX)
+ZIPSOURCESUFFIX=.source
+ZIPEXAMPLESUFFIX=.examples
+ifdef CROSSCOMPILE
+ZIPSUFFIX=.$(SOURCESUFFIX)
+ZIPCROSSPREFIX=$(TARGETSUFFIX)-
+else
+ZIPSUFFIX=.$(TARGETSUFFIX)
+ZIPCROSSPREFIX=
+endif
+endif
+ifndef ECHO
+ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO= __missing_command_ECHO
+else
+ECHO:=$(firstword $(ECHO))
+endif
+else
+ECHO:=$(firstword $(ECHO))
+endif
+endif
+export ECHO
+ifndef DATE
+DATE:=$(strip $(wildcard $(addsuffix /gdate$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(DATE),)
+DATE:=$(strip $(wildcard $(addsuffix /date$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(DATE),)
+DATE= __missing_command_DATE
+else
+DATE:=$(firstword $(DATE))
+endif
+else
+DATE:=$(firstword $(DATE))
+endif
+endif
+export DATE
+ifndef GINSTALL
+GINSTALL:=$(strip $(wildcard $(addsuffix /ginstall$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(GINSTALL),)
+GINSTALL:=$(strip $(wildcard $(addsuffix /install$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(GINSTALL),)
+GINSTALL= __missing_command_GINSTALL
+else
+GINSTALL:=$(firstword $(GINSTALL))
+endif
+else
+GINSTALL:=$(firstword $(GINSTALL))
+endif
+endif
+export GINSTALL
+ifndef CPPROG
+CPPROG:=$(strip $(wildcard $(addsuffix /cp$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(CPPROG),)
+CPPROG= __missing_command_CPPROG
+else
+CPPROG:=$(firstword $(CPPROG))
+endif
+endif
+export CPPROG
+ifndef RMPROG
+RMPROG:=$(strip $(wildcard $(addsuffix /rm$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(RMPROG),)
+RMPROG= __missing_command_RMPROG
+else
+RMPROG:=$(firstword $(RMPROG))
+endif
+endif
+export RMPROG
+ifndef MVPROG
+MVPROG:=$(strip $(wildcard $(addsuffix /mv$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MVPROG),)
+MVPROG= __missing_command_MVPROG
+else
+MVPROG:=$(firstword $(MVPROG))
+endif
+endif
+export MVPROG
+ifndef MKDIRPROG
+MKDIRPROG:=$(strip $(wildcard $(addsuffix /gmkdir$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MKDIRPROG),)
+MKDIRPROG:=$(strip $(wildcard $(addsuffix /mkdir$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MKDIRPROG),)
+MKDIRPROG= __missing_command_MKDIRPROG
+else
+MKDIRPROG:=$(firstword $(MKDIRPROG))
+endif
+else
+MKDIRPROG:=$(firstword $(MKDIRPROG))
+endif
+endif
+export MKDIRPROG
+ifndef ECHOREDIR
+ifndef inUnix
+ECHOREDIR=echo
+else
+ECHOREDIR=$(ECHO)
+endif
+endif
+ifndef COPY
+COPY:=$(CPPROG) -fp
+endif
+ifndef COPYTREE
+COPYTREE:=$(CPPROG) -Rfp
+endif
+ifndef MKDIRTREE
+MKDIRTREE:=$(MKDIRPROG) -p
+endif
+ifndef MOVE
+MOVE:=$(MVPROG) -f
+endif
+ifndef DEL
+DEL:=$(RMPROG) -f
+endif
+ifndef DELTREE
+DELTREE:=$(RMPROG) -rf
+endif
+ifndef INSTALL
+ifdef inUnix
+INSTALL:=$(GINSTALL) -c -m 644
+else
+INSTALL:=$(COPY)
+endif
+endif
+ifndef INSTALLEXE
+ifdef inUnix
+INSTALLEXE:=$(GINSTALL) -c -m 755
+else
+INSTALLEXE:=$(COPY)
+endif
+endif
+ifndef MKDIR
+MKDIR:=$(GINSTALL) -m 755 -d
+endif
+export ECHOREDIR COPY COPYTREE MOVE DEL DELTREE INSTALL INSTALLEXE MKDIR
+ifndef PPUMOVE
+PPUMOVE:=$(strip $(wildcard $(addsuffix /ppumove$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(PPUMOVE),)
+PPUMOVE= __missing_command_PPUMOVE
+else
+PPUMOVE:=$(firstword $(PPUMOVE))
+endif
+endif
+export PPUMOVE
+ifndef FPCMAKE
+FPCMAKE:=$(strip $(wildcard $(addsuffix /fpcmake$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(FPCMAKE),)
+FPCMAKE= __missing_command_FPCMAKE
+else
+FPCMAKE:=$(firstword $(FPCMAKE))
+endif
+endif
+export FPCMAKE
+ifndef ZIPPROG
+ZIPPROG:=$(strip $(wildcard $(addsuffix /zip$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ZIPPROG),)
+ZIPPROG= __missing_command_ZIPPROG
+else
+ZIPPROG:=$(firstword $(ZIPPROG))
+endif
+endif
+export ZIPPROG
+ifndef TARPROG
+TARPROG:=$(strip $(wildcard $(addsuffix /gtar$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(TARPROG),)
+TARPROG:=$(strip $(wildcard $(addsuffix /tar$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(TARPROG),)
+TARPROG= __missing_command_TARPROG
+else
+TARPROG:=$(firstword $(TARPROG))
+endif
+else
+TARPROG:=$(firstword $(TARPROG))
+endif
+endif
+export TARPROG
+ASNAME=$(BINUTILSPREFIX)as
+LDNAME=$(BINUTILSPREFIX)ld
+ARNAME=$(BINUTILSPREFIX)ar
+RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
+ifndef ASPROG
+ifdef CROSSBINDIR
+ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
+else
+ASPROG=$(ASNAME)
+endif
+endif
+ifndef LDPROG
+ifdef CROSSBINDIR
+LDPROG=$(CROSSBINDIR)/$(LDNAME)$(SRCEXEEXT)
+else
+LDPROG=$(LDNAME)
+endif
+endif
+ifndef RCPROG
+ifdef CROSSBINDIR
+RCPROG=$(CROSSBINDIR)/$(RCNAME)$(SRCEXEEXT)
+else
+RCPROG=$(RCNAME)
+endif
+endif
+ifndef ARPROG
+ifdef CROSSBINDIR
+ARPROG=$(CROSSBINDIR)/$(ARNAME)$(SRCEXEEXT)
+else
+ARPROG=$(ARNAME)
+endif
+endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
+AS=$(ASPROG)
+LD=$(LDPROG)
+RC=$(RCPROG)
+AR=$(ARPROG)
+NASM=$(NASMPROG)
+ifdef inUnix
+PPAS=./ppas$(SRCBATCHEXT)
+else
+PPAS=ppas$(SRCBATCHEXT)
+endif
+ifdef inUnix
+LDCONFIG=ldconfig
+else
+LDCONFIG=
+endif
+ifdef DATE
+DATESTR:=$(shell $(DATE) +%Y%m%d)
+else
+DATESTR=
+endif
+ZIPOPT=-9
+ZIPEXT=.zip
+ifeq ($(USETAR),bz2)
+TAROPT=vj
+TAREXT=.tar.bz2
+else
+TAROPT=vz
+TAREXT=.tar.gz
+endif
+override REQUIRE_PACKAGES=rtl 
+ifeq ($(FULL_TARGET),i386-linux)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-haiku)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-nativent)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-iphonesim)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-android)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-aros)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),m68k-macosclassic)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc-macosclassic)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc-wii)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc-aix)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),x86_64-haiku)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),x86_64-netbsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),x86_64-solaris)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),x86_64-openbsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),x86_64-iphonesim)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),x86_64-android)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),x86_64-aros)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),x86_64-dragonfly)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),arm-netbsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),arm-android)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),arm-aros)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),arm-ios)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc64-aix)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),avr-embedded)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),armeb-linux)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),armeb-embedded)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),mips-linux)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),mipsel-linux)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),mipsel-embedded)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),mipsel-android)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),jvm-java)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),jvm-android)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i8086-embedded)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i8086-msdos)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i8086-win16)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),aarch64-linux)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),aarch64-darwin)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),aarch64-android)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),aarch64-ios)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),wasm-wasm)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),sparc64-linux)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifdef REQUIRE_PACKAGES_RTL
+PACKAGEDIR_RTL:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /rtl/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_RTL),)
+ifneq ($(wildcard $(PACKAGEDIR_RTL)/units/$(TARGETSUFFIX)),)
+UNITDIR_RTL=$(PACKAGEDIR_RTL)/units/$(TARGETSUFFIX)
+else
+UNITDIR_RTL=$(PACKAGEDIR_RTL)
+endif
+ifneq ($(wildcard $(PACKAGEDIR_RTL)/units/$(SOURCESUFFIX)),)
+UNITDIR_FPMAKE_RTL=$(PACKAGEDIR_RTL)/units/$(SOURCESUFFIX)
+else
+ifneq ($(wildcard $(PACKAGEDIR_RTL)/units_bs/$(SOURCESUFFIX)),)
+UNITDIR_FPMAKE_RTL=$(PACKAGEDIR_RTL)/units_bs/$(SOURCESUFFIX)
+else
+UNITDIR_FPMAKE_RTL=$(PACKAGEDIR_RTL)
+endif
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_RTL)/$(OS_TARGET)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_RTL)/$(OS_TARGET) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_RTL)/$(OS_TARGET)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_RTL=
+UNITDIR_RTL:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /rtl/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_RTL),)
+UNITDIR_RTL:=$(firstword $(UNITDIR_RTL))
+else
+UNITDIR_RTL=
+endif
+endif
+ifdef UNITDIR_RTL
+override COMPILER_UNITDIR+=$(UNITDIR_RTL)
+endif
+ifdef UNITDIR_FPMAKE_RTL
+override COMPILER_FPMAKE_UNITDIR+=$(UNITDIR_FPMAKE_RTL)
+endif
+endif
+ifndef NOCPUDEF
+override FPCOPTDEF=$(ARCH)
+endif
+ifneq ($(OS_TARGET),$(OS_SOURCE))
+override FPCOPT+=-T$(OS_TARGET)
+endif
+ifneq ($(CPU_TARGET),$(CPU_SOURCE))
+override FPCOPT+=-P$(ARCH)
+endif
+ifeq ($(OS_SOURCE),openbsd)
+override FPCOPT+=-FD$(NEW_BINUTILS_PATH)
+override FPCMAKEOPT+=-FD$(NEW_BINUTILS_PATH)
+override FPMAKE_BUILD_OPT+=-FD$(NEW_BINUTILS_PATH)
+endif
+ifndef CROSSBOOTSTRAP
+ifneq ($(BINUTILSPREFIX),)
+override FPCOPT+=-XP$(BINUTILSPREFIX)
+endif
+ifneq ($(BINUTILSPREFIX),)
+override FPCOPT+=-Xr$(RLINKPATH)
+endif
+endif
+ifndef CROSSCOMPILE
+ifneq ($(BINUTILSPREFIX),)
+override FPCMAKEOPT+=-XP$(BINUTILSPREFIX)
+override FPMAKE_BUILD_OPT+=-XP$(BINUTILSPREFIX)
+endif
+endif
+ifdef UNITDIR
+override FPCOPT+=$(addprefix -Fu,$(UNITDIR))
+endif
+ifdef LIBDIR
+override FPCOPT+=$(addprefix -Fl,$(LIBDIR))
+endif
+ifdef OBJDIR
+override FPCOPT+=$(addprefix -Fo,$(OBJDIR))
+endif
+ifdef INCDIR
+override FPCOPT+=$(addprefix -Fi,$(INCDIR))
+endif
+ifdef LINKSMART
+override FPCOPT+=-XX
+endif
+ifdef CREATESMART
+override FPCOPT+=-CX
+endif
+ifdef DEBUG
+override FPCOPT+=-gl
+override FPCOPTDEF+=DEBUG
+endif
+ifdef RELEASE
+FPCCPUOPT:=-O2
+override FPCOPT+=-Ur -Xs $(FPCCPUOPT) -n
+override FPCOPTDEF+=RELEASE
+endif
+ifdef STRIP
+override FPCOPT+=-Xs
+endif
+ifdef OPTIMIZE
+override FPCOPT+=-O2
+endif
+ifdef VERBOSE
+override FPCOPT+=-vwni
+endif
+ifdef COMPILER_OPTIONS
+override FPCOPT+=$(COMPILER_OPTIONS)
+endif
+ifdef COMPILER_UNITDIR
+override FPCOPT+=$(addprefix -Fu,$(COMPILER_UNITDIR))
+endif
+ifdef COMPILER_LIBRARYDIR
+override FPCOPT+=$(addprefix -Fl,$(COMPILER_LIBRARYDIR))
+endif
+ifdef COMPILER_OBJECTDIR
+override FPCOPT+=$(addprefix -Fo,$(COMPILER_OBJECTDIR))
+endif
+ifdef COMPILER_INCLUDEDIR
+override FPCOPT+=$(addprefix -Fi,$(COMPILER_INCLUDEDIR))
+endif
+ifdef CROSSBINDIR
+override FPCOPT+=-FD$(CROSSBINDIR)
+endif
+ifdef COMPILER_TARGETDIR
+override FPCOPT+=-FE$(COMPILER_TARGETDIR)
+ifeq ($(COMPILER_TARGETDIR),.)
+override TARGETDIRPREFIX=
+else
+override TARGETDIRPREFIX=$(COMPILER_TARGETDIR)/
+endif
+endif
+ifdef COMPILER_UNITTARGETDIR
+override FPCOPT+=-FU$(COMPILER_UNITTARGETDIR)
+ifeq ($(COMPILER_UNITTARGETDIR),.)
+override UNITTARGETDIRPREFIX=
+else
+override UNITTARGETDIRPREFIX=$(COMPILER_UNITTARGETDIR)/
+endif
+else
+ifdef COMPILER_TARGETDIR
+override COMPILER_UNITTARGETDIR=$(COMPILER_TARGETDIR)
+override UNITTARGETDIRPREFIX=$(TARGETDIRPREFIX)
+endif
+endif
+ifdef CREATESHARED
+override FPCOPT+=-Cg
+endif
+ifneq ($(findstring $(OS_TARGET),dragonfly freebsd openbsd netbsd linux solaris),)
+ifneq ($(findstring $(CPU_TARGET),x86_64 mips mipsel),)
+override FPCOPT+=-Cg
+endif
+endif
+ifdef LINKSHARED
+endif
+ifdef OPT
+override FPCOPT+=$(OPT)
+endif
+ifdef FPMAKEBUILDOPT
+override FPMAKE_BUILD_OPT+=$(FPMAKEBUILDOPT)
+endif
+ifdef FPCOPTDEF
+override FPCOPT+=$(addprefix -d,$(FPCOPTDEF))
+endif
+ifdef CFGFILE
+override FPCOPT+=@$(CFGFILE)
+endif
+ifdef USEENV
+override FPCEXTCMD:=$(FPCOPT)
+override FPCOPT:=!FPCEXTCMD
+export FPCEXTCMD
+endif
+override AFULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)
+override AFULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)
+ifneq ($(AFULL_TARGET),$(AFULL_SOURCE))
+override ACROSSCOMPILE=1
+endif
+ifdef ACROSSCOMPILE
+override FPCOPT+=$(CROSSOPT)
+endif
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
+ifneq (,$(findstring -sh ,$(COMPILER)))
+UseEXECPPAS=1
+endif
+ifneq (,$(findstring -s ,$(COMPILER)))
+ifeq ($(FULL_SOURCE),$(FULL_TARGET))
+UseEXECPPAS=1
+endif
+endif
+ifneq ($(UseEXECPPAS),1)
+EXECPPAS=
+else
+ifdef RUNBATCH
+EXECPPAS:=@$(RUNBATCH) $(PPAS)
+else
+EXECPPAS:=@$(PPAS)
+endif
+endif
+.PHONY: fpc_units
+ifneq ($(TARGET_UNITS)$(TARGET_IMPLICITUNITS),)
+override ALLTARGET+=fpc_units
+override UNITPPUFILES=$(addsuffix $(PPUEXT),$(TARGET_UNITS))
+override IMPLICITUNITPPUFILES=$(addsuffix $(PPUEXT),$(TARGET_IMPLICITUNITS))
+override INSTALLPPUFILES+=$(UNITPPUFILES) $(IMPLICITUNITPPUFILES)
+override CLEANPPUFILES+=$(UNITPPUFILES) $(IMPLICITUNITPPUFILES)
+endif
+fpc_units: $(COMPILER_UNITTARGETDIR) $(UNITPPUFILES)
+ifdef TARGET_RSTS
+override RSTFILES=$(addsuffix $(RSTEXT),$(TARGET_RSTS))
+override CLEANRSTFILES+=$(RSTFILES)
+endif
+.PHONY: fpc_all fpc_smart fpc_debug fpc_release fpc_shared
+$(FPCMADE): $(ALLDEPENDENCIES) $(ALLTARGET)
+	@$(ECHOREDIR) Compiled > $(FPCMADE)
+fpc_all: $(FPCMADE)
+fpc_smart:
+	$(MAKE) all LINKSMART=1 CREATESMART=1
+fpc_debug:
+	$(MAKE) all DEBUG=1
+fpc_release:
+	$(MAKE) all RELEASE=1
+.SUFFIXES: $(EXEEXT) $(PPUEXT) $(OEXT) .pas .lpr .dpr .pp .rc .res
+$(COMPILER_UNITTARGETDIR):
+	$(MKDIRTREE) $(COMPILER_UNITTARGETDIR)
+$(COMPILER_TARGETDIR):
+	$(MKDIRTREE) $(COMPILER_TARGETDIR)
+%$(PPUEXT): %.pp
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(PPUEXT): %.pas
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(EXEEXT): %.pp
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(EXEEXT): %.pas
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(EXEEXT): %.lpr
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(EXEEXT): %.dpr
+	$(COMPILER) $<
+	$(EXECPPAS)
+%.res: %.rc
+	windres -i $< -o $@
+vpath %.pp $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.pas $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.lpr $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.dpr $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.inc $(COMPILER_INCLUDEDIR)
+vpath %$(OEXT) $(COMPILER_UNITTARGETDIR)
+vpath %$(PPUEXT) $(COMPILER_UNITTARGETDIR)
+.PHONY: fpc_shared
+override INSTALLTARGET+=fpc_shared_install
+ifndef SHARED_LIBVERSION
+SHARED_LIBVERSION=$(FPC_VERSION)
+endif
+ifndef SHARED_LIBNAME
+SHARED_LIBNAME=$(PACKAGE_NAME)
+endif
+ifndef SHARED_FULLNAME
+SHARED_FULLNAME=$(SHAREDLIBPREFIX)$(SHARED_LIBNAME)-$(SHARED_LIBVERSION)$(SHAREDLIBEXT)
+endif
+ifndef SHARED_LIBUNITS
+SHARED_LIBUNITS:=$(TARGET_UNITS) $(TARGET_IMPLICITUNITS)
+override SHARED_LIBUNITS:=$(filter-out $(INSTALL_BUILDUNIT),$(SHARED_LIBUNITS))
+endif
+fpc_shared:
+ifdef HASSHAREDLIB
+	$(MAKE) all CREATESHARED=1 LINKSHARED=1 CREATESMART=1
+ifneq ($(SHARED_BUILD),n)
+	$(PPUMOVE) -q $(SHARED_LIBUNITS) -i$(COMPILER_UNITTARGETDIR) -o$(SHARED_FULLNAME) -d$(COMPILER_UNITTARGETDIR)
+endif
+else
+	@$(ECHO) Shared Libraries not supported
+endif
+fpc_shared_install:
+ifneq ($(SHARED_BUILD),n)
+ifneq ($(SHARED_LIBUNITS),)
+ifneq ($(wildcard $(COMPILER_UNITTARGETDIR)/$(SHARED_FULLNAME)),)
+	$(INSTALL) $(COMPILER_UNITTARGETDIR)/$(SHARED_FULLNAME) $(INSTALL_SHAREDDIR)
+endif
+endif
+endif
+.PHONY: fpc_install fpc_sourceinstall fpc_exampleinstall
+ifdef INSTALL_UNITS
+override INSTALLPPUFILES+=$(addsuffix $(PPUEXT),$(INSTALL_UNITS))
+endif
+ifdef INSTALL_BUILDUNIT
+override INSTALLPPUFILES:=$(filter-out $(INSTALL_BUILDUNIT)$(PPUEXT),$(INSTALLPPUFILES))
+endif
+ifdef INSTALLPPUFILES
+ifneq ($(IMPORTLIBPREFIX)-$(STATICLIBEXT),$(STATICLIBPREFIX)-$(STATICLIBEXT))
+override INSTALLPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(INSTALLPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES))) $(addprefix $(IMPORTLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES)))
+else
+override INSTALLPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(INSTALLPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES)))
+endif
+ifneq ($(UNITTARGETDIRPREFIX),)
+override INSTALLPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(notdir $(INSTALLPPUFILES)))
+override INSTALLPPULINKFILES:=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(notdir $(INSTALLPPULINKFILES))))
+endif
+override INSTALL_CREATEPACKAGEFPC=1
+endif
+ifdef INSTALLEXEFILES
+ifneq ($(TARGETDIRPREFIX),)
+override INSTALLEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(notdir $(INSTALLEXEFILES)))
+endif
+endif
+fpc_install: all $(INSTALLTARGET)
+ifdef INSTALLEXEFILES
+	$(MKDIR) $(INSTALL_BINDIR)
+	$(INSTALLEXE) $(INSTALLEXEFILES) $(INSTALL_BINDIR)
+endif
+ifdef INSTALL_CREATEPACKAGEFPC
+ifdef FPCMAKE
+ifdef PACKAGE_VERSION
+ifneq ($(wildcard Makefile.fpc),)
+	$(FPCMAKE) -p -T$(CPU_TARGET)-$(OS_TARGET) Makefile.fpc
+	$(MKDIR) $(INSTALL_UNITDIR)
+	$(INSTALL) Package.fpc $(INSTALL_UNITDIR)
+endif
+endif
+endif
+endif
+ifdef INSTALLPPUFILES
+	$(MKDIR) $(INSTALL_UNITDIR)
+	$(INSTALL) $(INSTALLPPUFILES) $(INSTALL_UNITDIR)
+ifneq ($(INSTALLPPULINKFILES),)
+	$(INSTALL) $(INSTALLPPULINKFILES) $(INSTALL_UNITDIR)
+endif
+ifneq ($(wildcard $(LIB_FULLNAME)),)
+	$(MKDIR) $(INSTALL_LIBDIR)
+	$(INSTALL) $(LIB_FULLNAME) $(INSTALL_LIBDIR)
+ifdef inUnix
+	ln -sf $(LIB_FULLNAME) $(INSTALL_LIBDIR)/$(LIB_NAME)
+endif
+endif
+endif
+ifdef INSTALL_FILES
+	$(MKDIR) $(INSTALL_DATADIR)
+	$(INSTALL) $(INSTALL_FILES) $(INSTALL_DATADIR)
+endif
+fpc_sourceinstall: distclean
+	$(MKDIR) $(INSTALL_SOURCEDIR)
+	$(COPYTREE) $(BASEDIR)/* $(INSTALL_SOURCEDIR)
+fpc_exampleinstall: $(EXAMPLEINSTALLTARGET) $(addsuffix _distclean,$(TARGET_EXAMPLEDIRS))
+ifdef HASEXAMPLES
+	$(MKDIR) $(INSTALL_EXAMPLEDIR)
+endif
+ifdef EXAMPLESOURCEFILES
+	$(COPY) $(EXAMPLESOURCEFILES) $(INSTALL_EXAMPLEDIR)
+endif
+ifdef TARGET_EXAMPLEDIRS
+	$(COPYTREE) $(addsuffix /*,$(TARGET_EXAMPLEDIRS)) $(INSTALL_EXAMPLEDIR)
+endif
+.PHONY: fpc_distinstall
+fpc_distinstall: install exampleinstall
+.PHONY: fpc_zipinstall fpc_zipsourceinstall fpc_zipexampleinstall
+ifndef PACKDIR
+ifndef inUnix
+PACKDIR=$(BASEDIR)/../fpc-pack
+else
+PACKDIR=/tmp/fpc-pack
+endif
+endif
+ifndef ZIPNAME
+ifdef DIST_ZIPNAME
+ZIPNAME=$(DIST_ZIPNAME)
+else
+ZIPNAME=$(PACKAGE_NAME)
+endif
+endif
+ifndef FULLZIPNAME
+FULLZIPNAME=$(ZIPCROSSPREFIX)$(ZIPPREFIX)$(ZIPNAME)$(ZIPSUFFIX)
+endif
+ifndef ZIPTARGET
+ifdef DIST_ZIPTARGET
+ZIPTARGET=DIST_ZIPTARGET
+else
+ZIPTARGET=install
+endif
+endif
+ifndef USEZIP
+ifdef inUnix
+USETAR=1
+endif
+endif
+ifndef inUnix
+USEZIPWRAPPER=1
+endif
+ifdef USEZIPWRAPPER
+ZIPPATHSEP=$(PATHSEP)
+ZIPWRAPPER=$(subst /,$(PATHSEP),$(DIST_DESTDIR)/fpczip$(SRCBATCHEXT))
+else
+ZIPPATHSEP=/
+endif
+ZIPCMD_CDPACK:=cd $(subst /,$(ZIPPATHSEP),$(PACKDIR))
+ZIPCMD_CDBASE:=cd $(subst /,$(ZIPPATHSEP),$(BASEDIR))
+ifdef USETAR
+ZIPDESTFILE:=$(DIST_DESTDIR)/$(FULLZIPNAME)$(TAREXT)
+ZIPCMD_ZIP:=$(TARPROG) c$(TAROPT)f $(ZIPDESTFILE) *
+else
+ZIPDESTFILE:=$(DIST_DESTDIR)/$(FULLZIPNAME)$(ZIPEXT)
+ZIPCMD_ZIP:=$(subst /,$(ZIPPATHSEP),$(ZIPPROG)) -Dr $(ZIPOPT) $(ZIPDESTFILE) *
+endif
+fpc_zipinstall:
+	$(MAKE) $(ZIPTARGET) INSTALL_PREFIX=$(PACKDIR) ZIPINSTALL=1
+	$(MKDIR) $(DIST_DESTDIR)
+	$(DEL) $(ZIPDESTFILE)
+ifdef USEZIPWRAPPER
+ifneq ($(ECHOREDIR),echo)
+	$(ECHOREDIR) -e "$(subst \,\\,$(ZIPCMD_CDPACK))" > $(ZIPWRAPPER)
+	$(ECHOREDIR) -e "$(subst \,\\,$(ZIPCMD_ZIP))" >> $(ZIPWRAPPER)
+	$(ECHOREDIR) -e "$(subst \,\\,$(ZIPCMD_CDBASE))" >> $(ZIPWRAPPER)
+else
+	echo $(ZIPCMD_CDPACK) > $(ZIPWRAPPER)
+	echo $(ZIPCMD_ZIP) >> $(ZIPWRAPPER)
+	echo $(ZIPCMD_CDBASE) >> $(ZIPWRAPPER)
+endif
+ifdef inUnix
+	/bin/sh $(ZIPWRAPPER)
+else
+ifdef RUNBATCH
+	$(RUNBATCH) $(ZIPWRAPPER)
+else
+	$(ZIPWRAPPER)
+endif
+endif
+	$(DEL) $(ZIPWRAPPER)
+else
+	$(ZIPCMD_CDPACK) ; $(ZIPCMD_ZIP) ; $(ZIPCMD_CDBASE)
+endif
+	$(DELTREE) $(PACKDIR)
+fpc_zipsourceinstall:
+	$(MAKE) fpc_zipinstall ZIPTARGET=sourceinstall ZIPSUFFIX=$(ZIPSOURCESUFFIX)
+fpc_zipexampleinstall:
+ifdef HASEXAMPLES
+	$(MAKE) fpc_zipinstall ZIPTARGET=exampleinstall ZIPSUFFIX=$(ZIPEXAMPLESUFFIX)
+endif
+fpc_zipdistinstall:
+	$(MAKE) fpc_zipinstall ZIPTARGET=distinstall
+.PHONY: fpc_clean fpc_cleanall fpc_distclean
+ifdef EXEFILES
+override CLEANEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(CLEANEXEFILES))
+override CLEANEXEDBGFILES:=$(addprefix $(TARGETDIRPREFIX),$(CLEANEXEDBGFILES))
+endif
+ifdef CLEAN_PROGRAMS
+override CLEANEXEFILES+=$(addprefix $(TARGETDIRPREFIX),$(addsuffix $(EXEEXT), $(CLEAN_PROGRAMS)))
+override CLEANEXEDBGFILES+=$(addprefix $(TARGETDIRPREFIX),$(addsuffix $(EXEDBGEXT), $(CLEAN_PROGRAMS)))
+endif
+ifdef CLEAN_UNITS
+override CLEANPPUFILES+=$(addsuffix $(PPUEXT),$(CLEAN_UNITS))
+endif
+ifdef CLEANPPUFILES
+override CLEANPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(CLEANPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES))) $(addprefix $(IMPORTLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES)))
+ifdef DEBUGSYMEXT
+override CLEANPPULINKFILES+=$(subst $(PPUEXT),$(DEBUGSYMEXT),$(CLEANPPUFILES))
+endif
+override CLEANPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPUFILES))
+override CLEANPPULINKFILES:=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPULINKFILES)))
+endif
+fpc_clean: $(CLEANTARGET)
+ifdef CLEANEXEFILES
+	-$(DEL) $(CLEANEXEFILES)
+endif
+ifdef CLEANEXEDBGFILES
+	-$(DELTREE) $(CLEANEXEDBGFILES)
+endif
+ifdef CLEANPPUFILES
+	-$(DEL) $(CLEANPPUFILES)
+endif
+ifneq ($(CLEANPPULINKFILES),)
+	-$(DEL) $(CLEANPPULINKFILES)
+endif
+ifdef CLEANRSTFILES
+	-$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES))
+endif
+ifdef CLEAN_FILES
+	-$(DEL) $(CLEAN_FILES)
+endif
+ifdef LIB_NAME
+	-$(DEL) $(LIB_NAME) $(LIB_FULLNAME)
+endif
+	-$(DEL) $(FPCMADE) Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE)
+	-$(DEL) *$(ASMEXT) *_ppas$(BATCHEXT) ppas$(BATCHEXT) ppaslink$(BATCHEXT)
+fpc_cleanall: $(CLEANTARGET)
+ifdef CLEANEXEFILES
+	-$(DEL) $(CLEANEXEFILES)
+endif
+ifdef COMPILER_UNITTARGETDIR
+ifdef CLEANPPUFILES
+	-$(DEL) $(CLEANPPUFILES)
+endif
+ifneq ($(CLEANPPULINKFILES),)
+	-$(DEL) $(CLEANPPULINKFILES)
+endif
+ifdef CLEANRSTFILES
+	-$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES))
+endif
+endif
+ifdef CLEAN_FILES
+	-$(DEL) $(CLEAN_FILES)
+endif
+	-$(DELTREE) units
+	-$(DELTREE) bin
+	-$(DEL) *$(OEXT) *$(PPUEXT) *$(RSTEXT) *$(ASMEXT) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT)
+ifneq ($(PPUEXT),.ppu)
+	-$(DEL) *.o *.ppu *.a
+endif
+	-$(DELTREE) *$(SMARTEXT)
+	-$(DEL) fpcmade.* Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE)
+	-$(DEL) *_ppas$(BATCHEXT) ppas$(BATCHEXT) ppaslink$(BATCHEXT)
+ifdef AOUTEXT
+	-$(DEL) *$(AOUTEXT)
+endif
+ifdef DEBUGSYMEXT
+	-$(DEL) *$(DEBUGSYMEXT)
+endif
+ifdef LOCALFPMAKEBIN
+	-$(DEL) $(LOCALFPMAKEBIN)
+	-$(DEL) $(FPMAKEBINOBJ)
+endif
+fpc_distclean: cleanall
+.PHONY: fpc_baseinfo
+override INFORULES+=fpc_baseinfo
+fpc_baseinfo:
+	@$(ECHO)
+	@$(ECHO)  == Package info ==
+	@$(ECHO)  Package Name..... $(PACKAGE_NAME)
+	@$(ECHO)  Package Version.. $(PACKAGE_VERSION)
+	@$(ECHO)
+	@$(ECHO)  == Configuration info ==
+	@$(ECHO)
+	@$(ECHO)  FPC.......... $(FPC)
+	@$(ECHO)  FPC Version.. $(FPC_VERSION)
+	@$(ECHO)  Source CPU... $(CPU_SOURCE)
+	@$(ECHO)  Target CPU... $(CPU_TARGET)
+	@$(ECHO)  Source OS.... $(OS_SOURCE)
+	@$(ECHO)  Target OS.... $(OS_TARGET)
+	@$(ECHO)  Full Source.. $(FULL_SOURCE)
+	@$(ECHO)  Full Target.. $(FULL_TARGET)
+	@$(ECHO)  SourceSuffix. $(SOURCESUFFIX)
+	@$(ECHO)  TargetSuffix. $(TARGETSUFFIX)
+	@$(ECHO)  FPC fpmake... $(FPCFPMAKE)
+	@$(ECHO)
+	@$(ECHO)  == Directory info ==
+	@$(ECHO)
+	@$(ECHO)  Required pkgs... $(REQUIRE_PACKAGES)
+	@$(ECHO)
+	@$(ECHO)  Basedir......... $(BASEDIR)
+	@$(ECHO)  FPCDir.......... $(FPCDIR)
+	@$(ECHO)  CrossBinDir..... $(CROSSBINDIR)
+	@$(ECHO)  UnitsDir........ $(UNITSDIR)
+	@$(ECHO)  PackagesDir..... $(PACKAGESDIR)
+	@$(ECHO)
+	@$(ECHO)  GCC library..... $(GCCLIBDIR)
+	@$(ECHO)  Other library... $(OTHERLIBDIR)
+	@$(ECHO)
+	@$(ECHO)  == Tools info ==
+	@$(ECHO)
+	@$(ECHO)  As........ $(AS)
+	@$(ECHO)  Ld........ $(LD)
+	@$(ECHO)  Ar........ $(AR)
+	@$(ECHO)  Rc........ $(RC)
+	@$(ECHO)
+	@$(ECHO)  Mv........ $(MVPROG)
+	@$(ECHO)  Cp........ $(CPPROG)
+	@$(ECHO)  Rm........ $(RMPROG)
+	@$(ECHO)  GInstall.. $(GINSTALL)
+	@$(ECHO)  Echo...... $(ECHO)
+	@$(ECHO)  Shell..... $(SHELL)
+	@$(ECHO)  Date...... $(DATE)
+	@$(ECHO)  FPCMake... $(FPCMAKE)
+	@$(ECHO)  PPUMove... $(PPUMOVE)
+	@$(ECHO)  Zip....... $(ZIPPROG)
+	@$(ECHO)
+	@$(ECHO)  == Object info ==
+	@$(ECHO)
+	@$(ECHO)  Target Loaders........ $(TARGET_LOADERS)
+	@$(ECHO)  Target Units.......... $(TARGET_UNITS)
+	@$(ECHO)  Target Implicit Units. $(TARGET_IMPLICITUNITS)
+	@$(ECHO)  Target Programs....... $(TARGET_PROGRAMS)
+	@$(ECHO)  Target Dirs........... $(TARGET_DIRS)
+	@$(ECHO)  Target Examples....... $(TARGET_EXAMPLES)
+	@$(ECHO)  Target ExampleDirs.... $(TARGET_EXAMPLEDIRS)
+	@$(ECHO)
+	@$(ECHO)  Clean Units......... $(CLEAN_UNITS)
+	@$(ECHO)  Clean Files......... $(CLEAN_FILES)
+	@$(ECHO)
+	@$(ECHO)  Install Units....... $(INSTALL_UNITS)
+	@$(ECHO)  Install Files....... $(INSTALL_FILES)
+	@$(ECHO)
+	@$(ECHO)  == Install info ==
+	@$(ECHO)
+	@$(ECHO)  DateStr.............. $(DATESTR)
+	@$(ECHO)  ZipName.............. $(ZIPNAME)
+	@$(ECHO)  ZipPrefix............ $(ZIPPREFIX)
+	@$(ECHO)  ZipCrossPrefix....... $(ZIPCROSSPREFIX)
+	@$(ECHO)  ZipSuffix............ $(ZIPSUFFIX)
+	@$(ECHO)  FullZipName.......... $(FULLZIPNAME)
+	@$(ECHO)  Install FPC Package.. $(INSTALL_FPCPACKAGE)
+	@$(ECHO)
+	@$(ECHO)  Install base dir..... $(INSTALL_BASEDIR)
+	@$(ECHO)  Install binary dir... $(INSTALL_BINDIR)
+	@$(ECHO)  Install library dir.. $(INSTALL_LIBDIR)
+	@$(ECHO)  Install units dir.... $(INSTALL_UNITDIR)
+	@$(ECHO)  Install source dir... $(INSTALL_SOURCEDIR)
+	@$(ECHO)  Install doc dir...... $(INSTALL_DOCDIR)
+	@$(ECHO)  Install example dir.. $(INSTALL_EXAMPLEDIR)
+	@$(ECHO)  Install data dir..... $(INSTALL_DATADIR)
+	@$(ECHO)
+	@$(ECHO)  Dist destination dir. $(DIST_DESTDIR)
+	@$(ECHO)  Dist zip name........ $(DIST_ZIPNAME)
+	@$(ECHO)
+.PHONY: fpc_info
+fpc_info: $(INFORULES)
+.PHONY: fpc_makefile fpc_makefiles fpc_makefile_sub1 fpc_makefile_sub2 \
+	fpc_makefile_dirs
+fpc_makefile:
+	$(FPCMAKE) -w -T$(OS_TARGET) Makefile.fpc
+fpc_makefile_sub1:
+ifdef TARGET_DIRS
+	$(FPCMAKE) -w -T$(OS_TARGET) $(addsuffix /Makefile.fpc,$(TARGET_DIRS))
+endif
+ifdef TARGET_EXAMPLEDIRS
+	$(FPCMAKE) -w -T$(OS_TARGET) $(addsuffix /Makefile.fpc,$(TARGET_EXAMPLEDIRS))
+endif
+fpc_makefile_sub2: $(addsuffix _makefile_dirs,$(TARGET_DIRS) $(TARGET_EXAMPLEDIRS))
+fpc_makefile_dirs: fpc_makefile_sub1 fpc_makefile_sub2
+fpc_makefiles: fpc_makefile fpc_makefile_dirs
+debug: fpc_debug
+smart: fpc_smart
+release: fpc_release
+units: fpc_units
+examples:
+shared: fpc_shared
+install: fpc_install
+sourceinstall: fpc_sourceinstall
+exampleinstall: fpc_exampleinstall
+distinstall: fpc_distinstall
+zipinstall: fpc_zipinstall
+zipsourceinstall: fpc_zipsourceinstall
+zipexampleinstall: fpc_zipexampleinstall
+zipdistinstall: fpc_zipdistinstall
+clean: fpc_clean
+cleanall: fpc_cleanall
+info: fpc_info
+makefiles: fpc_makefiles
+.PHONY: debug smart release units examples shared install sourceinstall exampleinstall distinstall zipinstall zipsourceinstall zipexampleinstall zipdistinstall clean cleanall info makefiles
+ifneq ($(wildcard fpcmake.loc),)
+include fpcmake.loc
+endif
+.PHONY: cleartarget compiled all
+cleartarget:
+	-$(DEL) $(COMPILER_UNITTARGETDIR)/bgracontrols$(PPUEXT)
+compiled:
+	$(CPPROG) -f Makefile.compiled $(COMPILER_UNITTARGETDIR)/bgracontrols.compiled
+all: cleartarget $(COMPILER_UNITTARGETDIR) bgracontrols$(PPUEXT) compiled
+distclean: clean
+	${DELTREE} lib/*

+ 64 - 0
Makefile.fpc

@@ -0,0 +1,64 @@
+#   File generated automatically by Lazarus Package Manager
+#
+#   Makefile.fpc for bgracontrols 9.0.1.6
+#
+#   This file was generated on 4/14/2025
+
+[package]
+name=bgracontrols
+version=9.0.1.6
+
+[compiler]
+unittargetdir=lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2
+unitdir=mouseandkeyinput bgrasvgimagelistform C:/lazarus/packager/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/buildintf/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/components/freetype/lib/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET) C:/lazarus/lcl/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) ../bgrabitmap/bgrabitmap/lib/$(CPU_TARGET)-$(OS_TARGET)-$(LCL_PLATFORM)-3.2.2 C:/lazarus/components/lazcontrols/lib/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) C:/lazarus/components/ideintf/units/$(CPU_TARGET)-$(OS_TARGET)/$(LCL_PLATFORM) .
+options= -MDelphi -OoREGVAR -g -gl -gh -l -vewnhibq -dLCL -dLCL$(LCL_PLATFORM) $(DBG_OPTIONS)
+
+[target]
+units=bgracontrols.pas
+
+[clean]
+files=$(wildcard $(COMPILER_UNITTARGETDIR)/*$(OEXT)) \
+      $(wildcard $(COMPILER_UNITTARGETDIR)/*$(PPUEXT)) \
+      $(wildcard $(COMPILER_UNITTARGETDIR)/*$(RSTEXT)) \
+      $(wildcard $(COMPILER_UNITTARGETDIR)/*.lfm) \
+      $(wildcard $(COMPILER_UNITTARGETDIR)/*.res) \
+      $(wildcard $(COMPILER_UNITTARGETDIR)/*.compiled) \
+      $(wildcard *$(OEXT)) $(wildcard *$(PPUEXT)) $(wildcard *$(RSTEXT))
+
+[prerules]
+# LCL Platform
+ifndef LCL_PLATFORM
+ifeq ($(OS_TARGET),win32)
+LCL_PLATFORM=win32
+else
+ifeq ($(OS_TARGET),win64)
+LCL_PLATFORM=win32
+else
+ifeq ($(OS_TARGET),darwin)
+LCL_PLATFORM=cocoa
+else
+LCL_PLATFORM=gtk2
+endif
+endif
+endif
+endif
+export LCL_PLATFORM
+
+DBG_OPTIONS=
+ifeq ($(OS_TARGET),darwin)
+DBG_OPTIONS=-gw
+endif
+
+[rules]
+.PHONY: cleartarget compiled all
+
+cleartarget:
+        -$(DEL) $(COMPILER_UNITTARGETDIR)/bgracontrols$(PPUEXT)
+
+compiled:
+        $(CPPROG) -f Makefile.compiled $(COMPILER_UNITTARGETDIR)/bgracontrols.compiled
+
+all: cleartarget $(COMPILER_UNITTARGETDIR) bgracontrols$(PPUEXT) compiled
+
+distclean: clean
+        ${DELTREE} lib/*

+ 3 - 0
README.md

@@ -226,6 +226,9 @@ Updated and Enhanced Analog Gauge. Many new features, faster drawing, additonal
 
 Author: Sandy Ganz
 
+### TSuperSpinner
+Spinner Knob, many visual settings and options.
+
 ### TPSImport_BGRAPascalScript
 
 A component to load BGRABitmap pascal script utilities.

+ 11 - 2
bgracontrols.lpk

@@ -21,7 +21,7 @@
       </Parsing>
       <CodeGeneration>
         <Optimizations>
-          <OptimizationLevel Value="2"/>
+          <OptimizationLevel Value="0"/>
           <VariablesInRegisters Value="True"/>
         </Optimizations>
       </CodeGeneration>
@@ -34,7 +34,7 @@
     <Description Value="BGRA Controls is a set of graphical UI elements that you can use with Lazarus LCL applications."/>
     <License Value="Modified LGPL"/>
     <Version Major="9" Release="1" Build="6"/>
-    <Files Count="81">
+    <Files Count="83">
       <Item1>
         <Filename Value="atshapelinebgra.pas"/>
         <HasRegisterProc Value="True"/>
@@ -431,6 +431,15 @@
         <HasRegisterProc Value="True"/>
         <UnitName Value="BGRADialogs"/>
       </Item81>
+      <Item82>
+        <Filename Value="superspinnercommon.pas"/>
+        <UnitName Value="superspinnercommon"/>
+      </Item82>
+      <Item83>
+        <Filename Value="superspinner.pas"/>
+        <HasRegisterProc Value="True"/>
+        <UnitName Value="superspinner"/>
+      </Item83>
     </Files>
     <CompatibilityMode Value="True"/>
     <LazDoc Paths="fpdoc"/>

+ 23 - 13
bgracontrols.pas

@@ -8,17 +8,24 @@ unit bgracontrols;
 interface
 
 uses
-  atshapelinebgra, BCButton, BCButtonFocus, BCCheckComboBox, BCComboBox, BCEffect, BCExpandPanels, bcfilters, 
-  BCFluentProgressRing, BCFluentSlider, BCGameGrid, BCGradientButton, BCImageButton, BCLabel, BCListBox, BCListBoxEx, 
-  BCMaterialDesignButton, BCMaterialEdit, BCMaterialFloatSpinEdit, BCMaterialProgressBarMarquee, BCMaterialSpinEdit, 
-  BCMDButton, BCMDButtonFocus, BCPanel, BCRadialProgressBar, BCRoundedImage, BCRTTI, BCSamples, BCStylesForm, 
-  BCSVGButton, BCSVGViewer, BCToolBar, BCTrackbarUpdown, BGRAColorTheme, bgracontrolsinfo, BGRACustomDrawn, 
-  BGRAFlashProgressBar, BGRAGraphicControl, BGRAImageList, BGRAImageManipulation, BGRAImageTheme, BGRAKnob, 
-  BGRAResizeSpeedButton, BGRAShape, BGRASpeedButton, BGRASpriteAnimation, BGRASVGImageList, BGRASVGTheme, BGRATheme, 
-  BGRAThemeButton, BGRAThemeCheckBox, BGRAThemeRadioButton, BGRAVirtualScreen, ColorSpeedButton, DTAnalogClock, 
-  DTAnalogCommon, DTAnalogGauge, dtthemedclock, dtthemedgauge, MaterialColors, bgrasvgimagelistform, BCLeaLCDDisplay, 
-  BCLeaLED, BCLeaQLED, BCLeaRingSlider, BCLeaSelector, BCLeaTheme, BCLeaLCDDisplay_EditorRegister, BCLeaBoard, 
-  BCLeaEngrave, supergauge, supergaugecommon, BGRADialogs, LazarusPackageIntf;
+  atshapelinebgra, BCButton, BCButtonFocus, BCCheckComboBox, BCComboBox, 
+  BCEffect, BCExpandPanels, bcfilters, BCFluentProgressRing, BCFluentSlider, 
+  BCGameGrid, BCGradientButton, BCImageButton, BCLabel, BCListBox, 
+  BCListBoxEx, BCMaterialDesignButton, BCMaterialEdit, 
+  BCMaterialFloatSpinEdit, BCMaterialProgressBarMarquee, BCMaterialSpinEdit, 
+  BCMDButton, BCMDButtonFocus, BCPanel, BCRadialProgressBar, BCRoundedImage, 
+  BCRTTI, BCSamples, BCStylesForm, BCSVGButton, BCSVGViewer, BCToolBar, 
+  BCTrackbarUpdown, BGRAColorTheme, bgracontrolsinfo, BGRACustomDrawn, 
+  BGRAFlashProgressBar, BGRAGraphicControl, BGRAImageList, 
+  BGRAImageManipulation, BGRAImageTheme, BGRAKnob, BGRAResizeSpeedButton, 
+  BGRAShape, BGRASpeedButton, BGRASpriteAnimation, BGRASVGImageList, 
+  BGRASVGTheme, BGRATheme, BGRAThemeButton, BGRAThemeCheckBox, 
+  BGRAThemeRadioButton, BGRAVirtualScreen, ColorSpeedButton, DTAnalogClock, 
+  DTAnalogCommon, DTAnalogGauge, dtthemedclock, dtthemedgauge, MaterialColors, 
+  bgrasvgimagelistform, BCLeaLCDDisplay, BCLeaLED, BCLeaQLED, BCLeaRingSlider, 
+  BCLeaSelector, BCLeaTheme, BCLeaLCDDisplay_EditorRegister, BCLeaBoard, 
+  BCLeaEngrave, supergauge, supergaugecommon, BGRADialogs, superspinnercommon, 
+  superspinner, LazarusPackageIntf;
 
 implementation
 
@@ -40,7 +47,8 @@ begin
   RegisterUnit('BCMaterialDesignButton', @BCMaterialDesignButton.Register);
   RegisterUnit('BCMaterialEdit', @BCMaterialEdit.Register);
   RegisterUnit('BCMaterialFloatSpinEdit', @BCMaterialFloatSpinEdit.Register);
-  RegisterUnit('BCMaterialProgressBarMarquee', @BCMaterialProgressBarMarquee.Register);
+  RegisterUnit('BCMaterialProgressBarMarquee', 
+    @BCMaterialProgressBarMarquee.Register);
   RegisterUnit('BCMaterialSpinEdit', @BCMaterialSpinEdit.Register);
   RegisterUnit('BCMDButton', @BCMDButton.Register);
   RegisterUnit('BCMDButtonFocus', @BCMDButtonFocus.Register);
@@ -81,11 +89,13 @@ begin
   RegisterUnit('BCLeaRingSlider', @BCLeaRingSlider.Register);
   RegisterUnit('BCLeaSelector', @BCLeaSelector.Register);
   RegisterUnit('BCLeaTheme', @BCLeaTheme.Register);
-  RegisterUnit('BCLeaLCDDisplay_EditorRegister', @BCLeaLCDDisplay_EditorRegister.Register);
+  RegisterUnit('BCLeaLCDDisplay_EditorRegister', 
+    @BCLeaLCDDisplay_EditorRegister.Register);
   RegisterUnit('BCLeaBoard', @BCLeaBoard.Register);
   RegisterUnit('BCLeaEngrave', @BCLeaEngrave.Register);
   RegisterUnit('supergauge', @supergauge.Register);
   RegisterUnit('BGRADialogs', @BGRADialogs.Register);
+  RegisterUnit('superspinner', @superspinner.Register);
 end;
 
 initialization

BIN
docs/img/SuperSpinner-V100.png


+ 232 - 0
fpmake.pp

@@ -0,0 +1,232 @@
+{
+   File generated automatically by Lazarus Package Manager
+
+   fpmake.pp for bgracontrols 9.0.1.6
+
+   This file was generated on 4/14/2025
+}
+
+{$ifndef ALLPACKAGES} 
+{$mode objfpc}{$H+}
+program fpmake;
+
+uses fpmkunit;
+{$endif ALLPACKAGES}
+
+procedure add_bgracontrols(const ADirectory: string);
+
+var
+  P : TPackage;
+  T : TTarget;
+  D : TDependency;
+
+begin
+  with Installer do
+    begin
+    P:=AddPackage('bgracontrols');
+    P.Version:='9.0.1-6';
+
+    P.Directory:=ADirectory;
+
+    P.Author:='Dibo, Circular, Lainz and others';
+    P.License:='Modified LGPL';
+    P.Description:='BGRA Controls is a set of graphical UI elements that you can use with Lazarus LCL applications.';
+
+    P.Flags.Add('LazarusDsgnPkg');
+
+    D := P.Dependencies.Add('bgrabitmappack');
+    D := P.Dependencies.Add('ideintf');
+    P.Options.Add('-MDelphi');
+    P.Options.Add('-OoREGVAR');
+    P.Options.Add('-g');
+    P.Options.Add('-gl');
+    P.Options.Add('-gh');
+    P.Options.Add('-l');
+    P.Options.Add('-vewnhibq');
+    P.Options.Add('-dLCL');
+    P.Options.Add('-dLCL$(LCLWidgetType)');
+    P.UnitPath.Add('mouseandkeyinput');
+    P.UnitPath.Add('bgrasvgimagelistform');
+    P.UnitPath.Add('.');
+    T:=P.Targets.AddUnit('bgracontrols.pas');
+    t.Dependencies.AddUnit('atshapelinebgra');
+    t.Dependencies.AddUnit('bcbasectrls');
+    t.Dependencies.AddUnit('bcbrightandcontrast');
+    t.Dependencies.AddUnit('bcbutton');
+    t.Dependencies.AddUnit('bcbuttonfocus');
+    t.Dependencies.AddUnit('bccheckcombobox');
+    t.Dependencies.AddUnit('bccombobox');
+    t.Dependencies.AddUnit('bcdefaultthememanager');
+    t.Dependencies.AddUnit('bceffect');
+    t.Dependencies.AddUnit('BCExpandPanels');
+    t.Dependencies.AddUnit('bcfilters');
+    t.Dependencies.AddUnit('bcfluentprogressring');
+    t.Dependencies.AddUnit('bcfluentslider');
+    t.Dependencies.AddUnit('bcgamegrid');
+    t.Dependencies.AddUnit('bcgradientbutton');
+    t.Dependencies.AddUnit('bcimagebutton');
+    t.Dependencies.AddUnit('bckeyboard');
+    t.Dependencies.AddUnit('bclabel');
+    t.Dependencies.AddUnit('bclistbox');
+    t.Dependencies.AddUnit('bclistboxex');
+    t.Dependencies.AddUnit('bcmaterialdesignbutton');
+    t.Dependencies.AddUnit('bcmaterialedit');
+    t.Dependencies.AddUnit('bcmaterialfloatspinedit');
+    t.Dependencies.AddUnit('bcmaterialprogressbarmarquee');
+    t.Dependencies.AddUnit('bcmaterialspinedit');
+    t.Dependencies.AddUnit('bcmdbutton');
+    t.Dependencies.AddUnit('bcmdbuttonfocus');
+    t.Dependencies.AddUnit('bcnumerickeyboard');
+    t.Dependencies.AddUnit('bcpanel');
+    t.Dependencies.AddUnit('bcradialprogressbar');
+    t.Dependencies.AddUnit('bcroundedimage');
+    t.Dependencies.AddUnit('bcrtti');
+    t.Dependencies.AddUnit('bcsamples');
+    t.Dependencies.AddUnit('bcstylesform');
+    t.Dependencies.AddUnit('bcsvgbutton');
+    t.Dependencies.AddUnit('bcsvgviewer');
+    t.Dependencies.AddUnit('bcthememanager');
+    t.Dependencies.AddUnit('bctoolbar');
+    t.Dependencies.AddUnit('bctools');
+    t.Dependencies.AddUnit('bctrackbarupdown');
+    t.Dependencies.AddUnit('bctypes');
+    t.Dependencies.AddUnit('bgracolortheme');
+    t.Dependencies.AddUnit('bgracontrolsinfo');
+    t.Dependencies.AddUnit('bgracustomdrawn');
+    t.Dependencies.AddUnit('bgraflashprogressbar');
+    t.Dependencies.AddUnit('bgragraphiccontrol');
+    t.Dependencies.AddUnit('bgraimagelist');
+    t.Dependencies.AddUnit('bgraimagemanipulation');
+    t.Dependencies.AddUnit('bgraimagetheme');
+    t.Dependencies.AddUnit('bgraknob');
+    t.Dependencies.AddUnit('bgraresizespeedbutton');
+    t.Dependencies.AddUnit('bgrashape');
+    t.Dependencies.AddUnit('bgraspeedbutton');
+    t.Dependencies.AddUnit('bgraspriteanimation');
+    t.Dependencies.AddUnit('bgrasvgimagelist');
+    t.Dependencies.AddUnit('bgrasvgtheme');
+    t.Dependencies.AddUnit('bgratheme');
+    t.Dependencies.AddUnit('bgrathemebutton');
+    t.Dependencies.AddUnit('bgrathemecheckbox');
+    t.Dependencies.AddUnit('bgrathemeradiobutton');
+    t.Dependencies.AddUnit('bgravirtualscreen');
+    t.Dependencies.AddUnit('colorspeedbutton');
+    t.Dependencies.AddUnit('dtanalogclock');
+    t.Dependencies.AddUnit('dtanalogcommon');
+    t.Dependencies.AddUnit('dtanaloggauge');
+    t.Dependencies.AddUnit('dtthemedclock');
+    t.Dependencies.AddUnit('dtthemedgauge');
+    t.Dependencies.AddUnit('materialcolors');
+    t.Dependencies.AddUnit('bgrasvgimagelistform');
+    t.Dependencies.AddUnit('bclealcddisplay');
+    t.Dependencies.AddUnit('bclealed');
+    t.Dependencies.AddUnit('bcleaqled');
+    t.Dependencies.AddUnit('bclearingslider');
+    t.Dependencies.AddUnit('bcleaselector');
+    t.Dependencies.AddUnit('bcleatheme');
+    t.Dependencies.AddUnit('bclealcddisplay_editorregister');
+    t.Dependencies.AddUnit('bcleaboard');
+    t.Dependencies.AddUnit('bcleaengrave');
+    t.Dependencies.AddUnit('supergauge');
+    t.Dependencies.AddUnit('supergaugecommon');
+    t.Dependencies.AddUnit('bgradialogs');
+    t.Dependencies.AddUnit('superspinnercommon');
+    t.Dependencies.AddUnit('superspinner');
+
+    T:=P.Targets.AddUnit('atshapelinebgra.pas');
+    P.Targets.AddImplicitUnit('bcbasectrls.pas');
+    P.Targets.AddImplicitUnit('bcbrightandcontrast.pas');
+    T:=P.Targets.AddUnit('bcbutton.pas');
+    T:=P.Targets.AddUnit('bcbuttonfocus.pas');
+    T:=P.Targets.AddUnit('bccheckcombobox.pas');
+    T:=P.Targets.AddUnit('bccombobox.pas');
+    P.Targets.AddImplicitUnit('bcdefaultthememanager.pas');
+    T:=P.Targets.AddUnit('bceffect.pas');
+    T:=P.Targets.AddUnit('BCExpandPanels.pas');
+    T:=P.Targets.AddUnit('bcfilters.pas');
+    T:=P.Targets.AddUnit('bcfluentprogressring.pas');
+    T:=P.Targets.AddUnit('bcfluentslider.pas');
+    T:=P.Targets.AddUnit('bcgamegrid.pas');
+    T:=P.Targets.AddUnit('bcgradientbutton.pas');
+    T:=P.Targets.AddUnit('bcimagebutton.pas');
+    P.Targets.AddImplicitUnit('bckeyboard.pas');
+    T:=P.Targets.AddUnit('bclabel.pas');
+    T:=P.Targets.AddUnit('bclistbox.pas');
+    T:=P.Targets.AddUnit('bclistboxex.pas');
+    T:=P.Targets.AddUnit('bcmaterialdesignbutton.pas');
+    T:=P.Targets.AddUnit('bcmaterialedit.pas');
+    T:=P.Targets.AddUnit('bcmaterialfloatspinedit.pas');
+    T:=P.Targets.AddUnit('bcmaterialprogressbarmarquee.pas');
+    T:=P.Targets.AddUnit('bcmaterialspinedit.pas');
+    T:=P.Targets.AddUnit('bcmdbutton.pas');
+    T:=P.Targets.AddUnit('bcmdbuttonfocus.pas');
+    P.Targets.AddImplicitUnit('bcnumerickeyboard.pas');
+    T:=P.Targets.AddUnit('bcpanel.pas');
+    T:=P.Targets.AddUnit('bcradialprogressbar.pas');
+    T:=P.Targets.AddUnit('bcroundedimage.pas');
+    T:=P.Targets.AddUnit('bcrtti.pas');
+    T:=P.Targets.AddUnit('bcsamples.pas');
+    T:=P.Targets.AddUnit('bcstylesform.pas');
+    T:=P.Targets.AddUnit('bcsvgbutton.pas');
+    T:=P.Targets.AddUnit('bcsvgviewer.pas');
+    P.Targets.AddImplicitUnit('bcthememanager.pas');
+    T:=P.Targets.AddUnit('bctoolbar.pas');
+    P.Targets.AddImplicitUnit('bctools.pas');
+    T:=P.Targets.AddUnit('bctrackbarupdown.pas');
+    P.Targets.AddImplicitUnit('bctypes.pas');
+    T:=P.Targets.AddUnit('bgracolortheme.pas');
+    T:=P.Targets.AddUnit('bgracontrolsinfo.pas');
+    T:=P.Targets.AddUnit('bgracustomdrawn.pas');
+    T:=P.Targets.AddUnit('bgraflashprogressbar.pas');
+    T:=P.Targets.AddUnit('bgragraphiccontrol.pas');
+    T:=P.Targets.AddUnit('bgraimagelist.pas');
+    T:=P.Targets.AddUnit('bgraimagemanipulation.pas');
+    T:=P.Targets.AddUnit('bgraimagetheme.pas');
+    T:=P.Targets.AddUnit('bgraknob.pas');
+    T:=P.Targets.AddUnit('bgraresizespeedbutton.pas');
+    T:=P.Targets.AddUnit('bgrashape.pas');
+    T:=P.Targets.AddUnit('bgraspeedbutton.pas');
+    T:=P.Targets.AddUnit('bgraspriteanimation.pas');
+    T:=P.Targets.AddUnit('bgrasvgimagelist.pas');
+    T:=P.Targets.AddUnit('bgrasvgtheme.pas');
+    T:=P.Targets.AddUnit('bgratheme.pas');
+    T:=P.Targets.AddUnit('bgrathemebutton.pas');
+    T:=P.Targets.AddUnit('bgrathemecheckbox.pas');
+    P.Targets.AddImplicitUnit('bgrathemeradiobutton.pas');
+    T:=P.Targets.AddUnit('bgravirtualscreen.pas');
+    T:=P.Targets.AddUnit('colorspeedbutton.pas');
+    T:=P.Targets.AddUnit('dtanalogclock.pas');
+    T:=P.Targets.AddUnit('dtanalogcommon.pas');
+    P.Targets.AddImplicitUnit('dtanaloggauge.pas');
+    T:=P.Targets.AddUnit('dtthemedclock.pas');
+    T:=P.Targets.AddUnit('dtthemedgauge.pas');
+    T:=P.Targets.AddUnit('materialcolors.pas');
+    T:=P.Targets.AddUnit('bgrasvgimagelistform\bgrasvgimagelistform.pas');
+    T:=P.Targets.AddUnit('bclealcddisplay.pas');
+    T:=P.Targets.AddUnit('bclealed.pas');
+    T:=P.Targets.AddUnit('bcleaqled.pas');
+    T:=P.Targets.AddUnit('bclearingslider.pas');
+    T:=P.Targets.AddUnit('bcleaselector.pas');
+    T:=P.Targets.AddUnit('bcleatheme.pas');
+    T:=P.Targets.AddUnit('bclealcddisplay_editorregister.pas');
+    T:=P.Targets.AddUnit('bcleaboard.pas');
+    T:=P.Targets.AddUnit('bcleaengrave.pas');
+    T:=P.Targets.AddUnit('supergauge.pas');
+    T:=P.Targets.AddUnit('supergaugecommon.pas');
+    T:=P.Targets.AddUnit('bgradialogs.pas');
+    T:=P.Targets.AddUnit('superspinnercommon.pas');
+    T:=P.Targets.AddUnit('superspinner.pas');
+
+    // copy the compiled file, so the IDE knows how the package was compiled
+    P.Sources.AddSrc('bgracontrols.compiled');
+    P.InstallFiles.Add('bgracontrols.compiled',AllOSes,'$(unitinstalldir)');
+
+    end;
+end;
+
+{$ifndef ALLPACKAGES}
+begin
+  add_bgracontrols('');
+  Installer.Run;
+end.
+{$endif ALLPACKAGES}

+ 53 - 0
icons/superspinner.lrs

@@ -0,0 +1,53 @@
+LazarusResources.Add('tsuperspinner','PNG',[
+  #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#3#0#0#0#215#169#205
+  +#202#0#0#3#0'PLTE'#255#255#255#0#0#0#2#2#2#3#3#3#4#4#4#5#5#5#6#6#6#7#7#7#8#8
+  +#8#9#9#9#10#10#10#11#11#11#12#12#12#13#13#13#14#14#14#15#15#15#16#16#16#17#17
+  +#17#18#18#18#19#19#19#20#20#20#21#21#21#22#22#22#23#23#23#24#24#24#25#25#25
+  +#26#26#26#27#27#27#28#28#28#29#29#29#30#30#30#31#31#31'   !!!"""###$$$%%%&&&'
+  +'''''''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>'
+  +'???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWW'
+  +'XXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnoooppp'
+  +'qqqrrrssstttuuuvvvwwwxxxyyyzzz{{{|||}}}~~~'#127#127#127#128#128#128#129#129
+  +#129#130#130#130#131#131#131#132#132#132#133#133#133#134#134#134#135#135#135
+  +#136#136#136#137#137#137#138#138#138#139#139#139#140#140#140#141#141#141#142
+  +#142#142#143#143#143#144#144#144#145#145#145#146#146#146#147#147#147#148#148
+  +#148#149#149#149#150#150#150#151#151#151#152#152#152#153#153#153#154#154#154
+  +#155#155#155#156#156#156#157#157#157#158#158#158#159#159#159#160#160#160#161
+  +#161#161#162#162#162#163#163#163#164#164#164#165#165#165#166#166#166#167#167
+  +#167#168#168#168#169#169#169#170#170#170#171#171#171#172#172#172#173#173#173
+  +#174#174#174#175#175#175#176#176#176#177#177#177#178#178#178#179#179#179#180
+  +#180#180#181#181#181#182#182#182#183#183#183#184#184#184#185#185#185#186#186
+  +#186#187#187#187#188#188#188#189#189#189#190#190#190#191#191#191#192#192#192
+  +#193#193#193#194#194#194#195#195#195#196#196#196#197#197#197#198#198#198#199
+  +#199#199#200#200#200#201#201#201#202#202#202#203#203#203#204#204#204#205#205
+  +#205#206#206#206#207#207#207#208#208#208#209#209#209#210#210#210#211#211#211
+  +#212#212#212#213#213#213#214#214#214#215#215#215#216#216#216#217#217#217#218
+  +#218#218#219#219#219#220#220#220#221#221#221#222#222#222#223#223#223#224#224
+  +#224#225#225#225#226#226#226#227#227#227#228#228#228#229#229#229#230#230#230
+  +#231#231#231#232#232#232#233#233#233#234#234#234#235#235#235#236#236#236#237
+  +#237#237#238#238#238#239#239#239#240#240#240#241#241#241#242#242#242#243#243
+  +#243#244#244#244#245#245#245#246#246#246#247#247#247#248#248#248#249#249#249
+  +#250#250#250#251#251#251#252#252#252#253#253#253#254#254#254#255#255#255#149
+  +'q'#226'^'#0#0#0#1'tRNS'#0'@'#230#216'f'#0#0#0#1'bKGD'#255#165#7#242#197#0#0
+  +#0#9'pHYs'#0#2#207#188#0#2#207#188#1#135#151#213#247#0#0#1#182'IDAT('#207#133
+  +#146'K/'#3'a'#20#134'u'#22'm'#19#162'Z?@'#196#198']4'#169#223'bS'#137#216#147
+  +#16#183#141#149#127#192'B'#244#162#165#170'b'#162'S'#237#136'"'#8')'#162#243
+  +#205'M;'#230'k'#205#152#152'1*'#238#151'DB'#168#25#165#196#198'Y'#190'O'#206
+  +#251#157's'#222#175#164#228#223#178#153','#22#147#237#175#234'@'#236#253#129
+  +#249'P'#160#223#142'8~'#235#230#218#5'Y9'#15#6'r'#138#140#214#153#127't'#131
+  +'S'#21#1#224#189'n'#8#8#241#218'i'#248#214#145#246'4'#197#2#146#247#184'  33'
+  +'\'#145'T'#221#4#135#216'Cp'#228#243#242'$'#28#31#161'.'#170#155#10'F'#243#2
+  +#156#30#216'e'#153'd'#146#225#198'FyZ@'#11'-'#245#10#1#178'A'#140']'#143#199
+  +#183#168'8K'#3#226#172'Y'#215#173#189#10#0#128#163'c'#145'h'#20'[MQ'#128#4
+  +#202#128'E'#3'&'#159#10'!O'#175'Gp'#173#176#29#154#135#25'y'#198#168#129#178
+  +#232#162#219'3M'#172'Du'#16#217'$|'#158#201#229#181'R'#29#196#208'I'#151#143
+  +#136#235#29'1l'#139#240#186'&'#240'O`'#242'kV'#16'l'#224#225#165'p'#12#223
+  +#166#160'f'#21#208#173'*'#250#20'@&'#211'7'#167#185#189#132'r'#246#4#15#180
+  +#199#7#203#245#177#26#180'q'#147'/'#15#9#21'>K'#251'*'#145#210#198'm),'#184
+  +' pks'#239#249';N'#205#231#133'A'#20#30'/'#22#22'l'#170#190#218#232'N'#156'0'
+  +'o'#144#225#248#188#216#19#186#173'i'#248':n'#7#131#191'<'#138#175#203#217'{'
+  +#233'9{'#144#234'('#158#215#208'y)0'#130#232#158#146#4'*'#147#235'2'#252#4'b'
+  +'l'#12#203#146'2'#235'W%'#25'k4'#254#142#208#142#180#13#135'P44'#220#134#180
+  +#254#141#189#210'l'#181#154'+'#255#255'4'#31#25#151#245#196'f'#148'n'#243#0#0
+  +#0#0'IEND'#174'B`'#130
+]);

BIN
images/bgracontrols_images.res


+ 3 - 0
images/bgracontrols_images_list.txt

@@ -146,6 +146,9 @@ TBCLeaEngrave_200.png
 tsupergauge.png
 tsupergauge_150.png
 tsupergauge_200.png
+tsuperspinner.png
+tsuperspinner_150.png
+tsuperspinner_200.png
 tbcroundedimage.png
 tbcroundedimage_150.png
 tbcroundedimage_200.png

+ 21 - 0
images/svg/tsuperspinner.svg

@@ -0,0 +1,21 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!--Generator: Xara Designer (www.xara.com), SVG filter version: 6.7.0.0-->
+<svg fill="none" fill-rule="evenodd" stroke="black" stroke-width="0.501" stroke-linejoin="bevel" stroke-miterlimit="10" font-family="Times New Roman" font-size="16" style="font-variant-ligatures:none" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" version="1.1" overflow="visible" width="18pt" height="18pt" viewBox="0 -18 18 18">
+ <defs>
+	</defs>
+ <g id="Layer 1" transform="scale(1 -1)">
+  <ellipse cx="9" cy="8.999" rx="7.5" ry="7.5" fill="#cccccc" fill-rule="nonzero" stroke-linejoin="miter" stroke-width="0.75" stroke="#000000"/>
+  <ellipse rx="2.465" ry="2.465" transform="translate(8.907 9.093) rotate(136.512)" stroke="#b2b2b2" fill="#b2b2b2" stroke-width="0.475" stroke-linejoin="miter"/>
+  <rect x="-8.9995" y="-8.9995" width="17.999" height="17.999" rx="0" ry="0" transform="matrix(1 0 0 1 8.999 8.998)" fill-rule="nonzero" stroke-linejoin="miter" stroke-width="0.75" stroke="none"/>
+  <path d="M 9,12.763 L 9,15.422" fill="none" stroke="#666666" stroke-width="0.5" stroke-linecap="round" stroke-linejoin="round"/>
+  <path d="M 9,2.58 L 9,4.982" fill="none" stroke="#666666" stroke-width="0.5" stroke-linecap="round" stroke-linejoin="round"/>
+  <path d="M 12.764,9 L 15.045,9" fill="none" stroke="#666666" stroke-width="0.5" stroke-linecap="round" stroke-linejoin="round"/>
+  <path d="M 5.204,9 L 2.804,9" fill="none" stroke="#666666" stroke-width="0.5" stroke-linecap="round" stroke-linejoin="round"/>
+  <path d="M 11.859,6.156 L 13.497,4.73" fill="none" stroke="#666666" stroke-width="0.5" stroke-linecap="round" stroke-linejoin="round"/>
+  <path d="M 6.176,11.678 L 4.503,13.264" fill="none" stroke="#666666" stroke-width="0.5" stroke-linecap="round" stroke-linejoin="round"/>
+  <path d="M 4.625,4.625 L 6.322,6.177" fill="none" stroke="#666666" stroke-width="0.5" stroke-linecap="round" stroke-linejoin="round"/>
+  <path d="M 11.569,11.942 L 13.266,13.494" fill="none" stroke="#666666" stroke-width="0.5" stroke-linecap="round" stroke-linejoin="round"/>
+  <text xml:space="preserve" transform="translate(5.475 3.941) scale(1 -1)" kerning="auto" fill="#ffffff" font-size="5.189" stroke="none" stroke-width="0.162" stroke-linecap="round" stroke-linejoin="round" font-family="Clarendon"><tspan x="0" y="0">SS</tspan></text>
+ </g>
+</svg>

BIN
images/tsuperspinner.png


BIN
images/tsuperspinner_150.png


BIN
images/tsuperspinner_200.png


BIN
project1.ico


+ 84 - 0
project1.lpi

@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<CONFIG>
+  <ProjectOptions>
+    <Version Value="12"/>
+    <PathDelim Value="\"/>
+    <General>
+      <SessionStorage Value="InProjectDir"/>
+      <Title Value="project1"/>
+      <Scaled Value="True"/>
+      <ResourceType Value="res"/>
+      <UseXPManifest Value="True"/>
+      <XPManifest>
+        <DpiAware Value="True"/>
+      </XPManifest>
+      <Icon Value="0"/>
+    </General>
+    <BuildModes>
+      <Item Name="Default" Default="True"/>
+    </BuildModes>
+    <PublishOptions>
+      <Version Value="2"/>
+      <UseFileFilters Value="True"/>
+    </PublishOptions>
+    <RunParams>
+      <FormatVersion Value="2"/>
+    </RunParams>
+    <RequiredPackages>
+      <Item>
+        <PackageName Value="bgracontrols"/>
+      </Item>
+      <Item>
+        <PackageName Value="LCL"/>
+      </Item>
+    </RequiredPackages>
+    <Units>
+      <Unit>
+        <Filename Value="project1.lpr"/>
+        <IsPartOfProject Value="True"/>
+      </Unit>
+      <Unit>
+        <Filename Value="unit1.pas"/>
+        <IsPartOfProject Value="True"/>
+        <ComponentName Value="Form1"/>
+        <HasResources Value="True"/>
+        <ResourceBaseClass Value="Form"/>
+        <UnitName Value="Unit1"/>
+      </Unit>
+    </Units>
+  </ProjectOptions>
+  <CompilerOptions>
+    <Version Value="11"/>
+    <PathDelim Value="\"/>
+    <Target>
+      <Filename Value="project1"/>
+    </Target>
+    <SearchPaths>
+      <IncludeFiles Value="$(ProjOutDir)"/>
+      <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
+    </SearchPaths>
+    <Linking>
+      <Debugging>
+        <DebugInfoType Value="dsDwarf3"/>
+      </Debugging>
+      <Options>
+        <Win32>
+          <GraphicApplication Value="True"/>
+        </Win32>
+      </Options>
+    </Linking>
+  </CompilerOptions>
+  <Debugging>
+    <Exceptions>
+      <Item>
+        <Name Value="EAbort"/>
+      </Item>
+      <Item>
+        <Name Value="ECodetoolError"/>
+      </Item>
+      <Item>
+        <Name Value="EFOpenError"/>
+      </Item>
+    </Exceptions>
+  </Debugging>
+</CONFIG>

+ 25 - 0
project1.lpr

@@ -0,0 +1,25 @@
+program project1;
+
+{$mode objfpc}{$H+}
+
+uses
+  {$IFDEF UNIX}
+  cthreads,
+  {$ENDIF}
+  {$IFDEF HASAMIGA}
+  athreads,
+  {$ENDIF}
+  Interfaces, // this includes the LCL widgetset
+  Forms, unit1
+  { you can add units after this };
+
+{$R *.res}
+
+begin
+  RequireDerivedFormResource:=True;
+  Application.Scaled:=True;
+  Application.Initialize;
+  Application.CreateForm(TForm1, Form1);
+  Application.Run;
+end.
+

+ 1654 - 0
superspinner.pas

@@ -0,0 +1,1654 @@
+// SPDX-License-Identifier: LGPL-3.0-linking-exception
+{
+  The BGRASpinner is basically a spinner that just spins like an encoder pulse
+  wheel. You can set many specific details to render and operate this control.
+
+  Remeber you capture the pulses as the knob spins, it does retain the angular
+  position, but typically that is not really used. Events for key operations
+  including movement, wrapping, etc.
+
+  In addition specific events for clicking on the center button (if enabled) or
+  the spinner area if desired.
+
+  When using these controls it best to have the form scaling set to FALSE, since
+  some aspects of the compoent reference SIZE of the client area and scaling
+  will update your sizes of Width and Height, good luck.
+
+  Lastly the Resolution of the spinner can be controled, but since angular control
+  or trying to set it for all conditions became a problem, the settings are
+  from Higest to Lowest. Highest being maximum resolution of the mouse movements
+  and Lowest makes it more like an old iPod with larger movements (clicks).
+}
+{******************************* CONTRIBUTOR(S) ******************************
+- Sandy Ganz | [email protected]
+  02/20/2025 - Begat conversion from BGRASpinner, loads of changes to support
+               the way a Spinner works, new events and props. Updated code style
+               to be more similar to SuperGauge.
+***************************** END CONTRIBUTOR(S) *****************************}
+
+unit superspinner;
+
+{$I bgracontrols.inc}
+
+interface
+
+uses
+  Classes, SysUtils, {$IFDEF FPC}LResources,{$ENDIF} Forms, Controls, Graphics,
+  {$IFNDEF FPC}BGRAGraphics, GraphType, FPImage, {$ENDIF}
+  BCBaseCtrls, BGRAGradients, BGRABitmap, BGRABitmapTypes, SuperSpinnerCommon;
+
+const
+  VERSIONSTR = '1.00';          // spinner version
+  WHEEL_SPEED_FACTOR = 0.005;   // used to calculate mouse wheel speed
+
+  RESOLUTION_HIGHEST = 1;       // used for setting spinners resolution
+  RESOLUTION_HIGH = 2;          // Keeps the number of position somewhat hidden
+  RESOLUTION_HIGH_MEDIUM = 3;
+  RESOLUTION_MEDIUM = 4;
+  RESOLUTION_MEDIUM_LOW = 5;
+  RESOLUTION_LOW = 10;
+  RESOLUTION_LOWEST = 20;
+
+type
+  TSSHitType = (shtNone, shtCap, shtKnob); // for sub component hit test
+  TSSResolution = (srHighest, srHigh, srHighMedium, srMedium, srMediumLow, srLow, srLowest);
+
+  TSSpinnerPosChangedEvent = procedure(Sender: TObject; Shift: TShiftState; Value: single; MoveDir : TSSDirection) of object;
+  TSSpinnerCapClickEvent = procedure(Sender: TObject; Button: TMouseButton; Shift: TShiftState) of object;
+  TSSpinnerKnobClickEvent = procedure(Sender: TObject; Button: TMouseButton; Shift: TShiftState) of object;
+  TSSpinnerWrappedEvent = procedure(Sender: TObject; Shift: TShiftState; OldAngle, NewAngle: single; MoveDir : TSSDirection) of object;
+  TSSpinnerCapEnterEvent = procedure(Sender: TObject; Shift: TShiftState; X,Y: Integer) of object;
+  TSSpinnerCapLeaveEvent = procedure(Sender: TObject; Shift: TShiftState; X,Y: Integer) of object;
+  TSSpinnerKnobEnterEvent = procedure(Sender: TObject; Shift: TShiftState;X,Y: Integer) of object;
+  TSSpinnerKnobLeaveEvent = procedure(Sender: TObject; Shift: TShiftState; X,Y: Integer) of object;
+
+  TResolveSizes = Record
+    MinRadius: integer;
+    MinWH: integer;
+    FrameBorderWidth: integer;
+    CapRadius: integer;
+    CapEdgeThickness: integer;
+    PositionRadius: integer;
+    PositionMargin: integer;
+    PositionCenterMargin: integer;
+    PositionLineWidth: integer;
+    KnobEdgeThickness: integer;
+
+    // add anything here that might need autosize
+    // also initialize these in the constructor
+  end;
+
+  { TCustomSuperSpinner }
+
+  TCustomSuperSpinner = class(TBGRAGraphicCtrl)
+  private
+    { Private declarations }
+    FDirty: boolean;
+
+    // Settings
+
+    FAutoScale: boolean;
+    FResolvedSizes: TResolveSizes;
+    FPositionSettings: TSSPositionSettings;
+    FCapSettings: TSSCapSettings;
+    FFrameSettings: TSSFrameSettings;
+    FKnobSettings: TSSKnobSettings;
+    FMouseDownAnglePos: single;
+    FMouseDownExistingPos : single;
+    FCapMouseDown: boolean;
+    FKnobMouseDown: boolean;
+    FInCap: boolean;
+    FInKnob: boolean;
+    FSpinnerBmp: TBGRABitmap;  // Main assembled image
+    FFrameBmp: TBGRABitmap;    // Draws just the frame
+    FKnobBmp: TBGRABitmap;     // Draws just the knob
+    FCapBmp: TBGRABitmap;      // Draws just the cap that sits in the middle of the knob
+    FPositionBmp: TBGRABitmap; // Draws just the position (lines, finger hole)
+    FAngularPos: single;       // In RADIANS
+    FCWSkipCounter: integer;
+    FCCWSkipCounter: integer;
+    FSpinnerResolution: TSSResolution;
+    FSpinnerResolutionCount: integer;
+    FSettingAngularPos: boolean;
+    FPositionSnap: boolean;
+    FOnSpinnerPosChange: TSSpinnerPosChangedEvent;
+    FOnCapClick: TSSpinnerCapClickEvent;
+    FOnKnobClick: TSSpinnerKnobClickEvent;
+    FOnWrapped: TSSpinnerWrappedEvent;
+    FOnMouseCapEnter: TSSpinnerCapEnterEvent;
+    FOnMouseCapLeave: TSSpinnerCapLeaveEvent;
+    FOnMouseKnobEnter: TSSpinnerKnobEnterEvent;
+    FOnMouseKnobLeave: TSSpinnerKnobLeaveEvent;
+    FLocked: boolean;     // Keeps Mouse from doing most things
+    FWheelSpeed: byte;    // 0 : no wheel, 1 slowest, 255 fastest
+    FMinRadius: integer;  // Computed minimum dimension for radius of spinner including Margin
+
+    function GetAngle: single;
+    function RadPosToDeg(RadPos: single): single;
+    function DegPosToAngular(DegPos: single): single;
+    procedure SetAngle(AValue: single);
+    procedure SetPositionSnap(const AValue: boolean);
+    function CalcAngularPos(X, Y: integer) : single;
+    procedure UpdateAngularPos(Shift: TShiftState; AngularPos: single);
+    function CapHitTest(X, Y: integer): boolean;
+    function KnobHitTest(X, Y: integer): boolean;
+    function HitTest(X, Y: integer): TSSHitType;
+    procedure SetAutoScale(AValue: boolean);
+    procedure SetWheelSpeed(AValue: byte);
+    procedure SetLocked(AValue: boolean);
+    procedure SetPositionSettings(AValue: TSSPositionSettings);
+    procedure SetCapSettings(AValue: TSSCapSettings);
+    procedure SetFrameSettings(AValue: TSSFrameSettings);
+    procedure SetKnobSettings(AValue: TSSKnobSettings);
+    procedure SetResolution(const AValue: TSSResolution);
+
+  protected
+    { Protected declarations }
+
+    class function GetControlClassDefaultSize: TSize; override;
+    procedure DoChange({%H-}Sender: TObject);
+    procedure DoSetBounds(ALeft, ATop, AWidth, AHeight: Integer); override;
+    procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: integer); override;
+    procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: integer); override;
+    procedure MouseMove(Shift: TShiftState; X, Y: integer); override;
+    function GetMinSize: integer;
+    procedure ResolveSizes;
+    procedure Paint; override;
+    procedure DrawFrame;
+    procedure DrawKnob;
+    procedure DrawCap;
+    procedure DrawPosition;
+
+    function DoMouseWheel(Shift: TShiftState; WheelDelta: integer; MousePos: TPoint): boolean; override;
+    procedure MouseWheelPos({%H-}Shift: TShiftState; WheelDelta: integer); virtual;
+
+  public
+    { Public declarations }
+
+    constructor Create(AOwner: TComponent); override;
+    destructor Destroy; override;
+
+  public
+    { Streaming }
+
+    {$IFDEF FPC}
+    procedure SaveToFile(AFileName: string);
+    procedure LoadFromFile(AFileName: string);
+    {$ENDIF}
+    procedure OnFindClass({%H-}Reader: TReader; const AClassName: string; var ComponentClass: TComponentClass);
+    procedure Bump(Direction: TSSDirection; Degrees: single);
+    procedure Spin(Direction: TSSDirection; Degrees: single; Count: integer; ProcessMessages: Boolean = True);
+
+  published
+    { Published declarations }
+
+    property AutoScale: boolean read FAutoScale write SetAutoScale default False;
+    property PositionSettings: TSSPositionSettings read FPositionSettings write SetPositionSettings;
+    property CapSettings: TSSCapSettings read FCapSettings write SetCapSettings;
+    property FrameSettings: TSSFrameSettings read FFrameSettings write SetFrameSettings;
+    property KnobSettings: TSSKnobSettings read FKnobSettings write SetKnobSettings;
+    property PositionSnap: boolean read FPositionSnap write SetPositionSnap default False;
+    property Angle: single read GetAngle write SetAngle nodefault;
+    property SpinResolution: TSSResolution read FSpinnerResolution write SetResolution default srHighest;
+    property WheelSpeed: byte read FWheelSpeed write SetWheelSpeed default 0;
+    property Locked: boolean read FLocked write SetLocked default False; // TODO : Check if we need to cancel mouse movement, etc
+    property OnPosChanged: TSSpinnerPosChangedEvent read FOnSpinnerPosChange write FOnSpinnerPosChange;
+    property OnCapClick: TSSpinnerCapClickEvent read FOnCapClick write FOnCapClick;
+    property OnKnobClick: TSSpinnerKnobClickEvent read FOnKnobClick write FOnKnobClick;
+    property OnWrapped: TSSpinnerWrappedEvent read FOnWrapped write FOnWrapped;
+    property OnMouseCapEnter: TSSpinnerCapEnterEvent read FOnMouseCapEnter write FOnMouseCapEnter;
+    property OnMouseCapLeave: TSSpinnerCapLeaveEvent read FOnMouseCapLeave write FOnMouseCapLeave;
+    property OnMouseKnobEnter: TSSpinnerKnobEnterEvent read FOnMouseKnobEnter write FOnMouseKnobEnter;
+    property OnMouseKnobLeave: TSSpinnerKnobLeaveEvent read FOnMouseKnobLeave write FOnMouseKnobLeave;
+    property OnMouseWheel;
+    property OnClick;
+    property OnDblClick;
+    property OnMouseDown;
+    property OnMouseUp;
+    property OnMouseMove;
+    property OnMouseEnter;
+    property OnMouseLeave;
+    property Visible;
+  end;
+
+  { TSuperSpinner }
+
+  TSuperSpinner = class(TCustomSuperSpinner)
+  private
+    { Private declarations }
+  protected
+    { Protected declarations }
+  public
+    { Public declarations }
+  published
+    { Published declarations }
+
+    property Anchors;
+    property Color default clNone;
+    property Hint;
+    property ShowHint;
+  end;
+
+  {$IFDEF FPC}
+        procedure Register;
+  {$ENDIF}
+
+implementation
+
+uses Math;
+
+{$IFDEF FPC}
+procedure Register;
+begin
+  RegisterComponents('BGRA Controls', [TSuperSpinner]);
+end;
+{$ENDIF}
+
+{ TCustomSuperSpinner }
+
+constructor TCustomSuperSpinner.Create(AOwner: TComponent);
+begin
+  inherited Create(AOwner);
+
+  // remember if form is scaled CX, CY values will be too!
+  // this may not do anything!!!
+
+  with GetControlClassDefaultSize do
+    SetInitialBounds(0, 0, CX, CY);
+
+  // Position Settings
+
+  FPositionSettings := TSSPositionSettings.Create;
+  FPositionSettings.OnChange := DoChange;
+
+  // Spinner Cap Settings
+
+  FCapSettings := TSSCapSettings.Create;
+  FCapSettings.OnChange := DoChange;
+
+  // Frame Settings
+
+  FFrameSettings := TSSFrameSettings.Create;
+  FFrameSettings.OnChange := DoChange;
+
+  // Knob Settings
+
+  FKnobSettings := TSSKnobSettings.Create;
+  FKnobSettings.OnChange := DoChange;
+
+  // Bitmaps
+
+  FFrameBmp := TBGRABitmap.Create;
+  FKnobBmp := TBGRABitmap.Create;
+  FCapBmp := TBGRABitmap.Create;
+  FPositionBmp := TBGRABitmap.Create;
+  FSpinnerBmp := TBGRABitmap.Create;
+
+  // General Inits
+
+  FOnSpinnerPosChange := nil;
+  FOnCapClick := nil;
+  FOnKnobClick := nil;
+  FOnWrapped := nil;
+  FPositionSnap := False;
+  FWheelSpeed := 0;        // 0, no wheel, 1 slowest, 255 fastest
+  FLocked := False;
+  FMouseDownAnglePos := 0;
+  FMouseDownExistingPos := 0;
+  FCapMouseDown := False;
+  FKnobMouseDown := False;
+  FSettingAngularPos := False;
+  FInCap := False;
+  Color := clNone;
+  FCWSkipCounter := 0;
+  FCCWSkipCounter := 0;
+  FSpinnerResolutionCount := RESOLUTION_HIGHEST;  // how many clicks it takes to make a revolution
+  SetAngle(0);      // Does NOT call any events
+  FMinRadius := 0;  // Can't know just yet
+
+  // set up baseline values from the defaults, good starting point any-a-ways
+
+  FResolvedSizes.MinRadius := 0;  // can't know MinRadius or MinWH yet, not resolved
+  FResolvedSizes.MinWH := 0;
+  FResolvedSizes.FrameBorderWidth := FFrameSettings.BorderWidth;
+  FResolvedSizes.CapRadius := FCapSettings.Radius;
+  FResolvedSizes.CapEdgeThickness := FCapSettings.EdgeThickness;
+  FResolvedSizes.PositionRadius := FPositionSettings.Radius;
+  FResolvedSizes.PositionMargin := FPositionSettings.Margin;
+  FResolvedSizes.PositionCenterMargin := FPositionSettings.CenterMargin;
+  FResolvedSizes.PositionLineWidth := FPositionSettings.LineWidth;
+  FResolvedSizes.KnobEdgeThickness := FKnobSettings.EdgeThickness;
+
+  FDirty := True;   // Always force initial paint/draw on everything!
+end;
+
+destructor TCustomSuperSpinner.Destroy;
+begin
+  // Free up the bitmaps
+
+  FSpinnerBmp.Free;
+  FPositionBmp.Free;
+  FFrameBmp.Free;
+  FKnobBmp.Free;
+  FCapBmp.Free;
+
+  // Handlers (May not be needed, but good idea)
+
+  FOnSpinnerPosChange := nil;
+  FOnCapClick := nil;
+  FOnKnobClick := nil;
+  FOnWrapped := nil;
+
+  // Position Settings
+
+  FPositionSettings.OnChange := nil;
+  FPositionSettings.Free;
+
+  // Cap Settings
+
+  FCapSettings.OnChange := nil;
+  FCapSettings.Free;
+
+  // Frame Settings
+
+  FFrameSettings.OnChange := nil;
+  FFrameSettings.Free;
+
+  // Knob Settings
+
+  FKnobSettings.OnChange := nil;
+  FKnobSettings.Free;
+
+  inherited Destroy;
+end;
+
+// Override the base class which has a rectangular dimension
+
+class function TCustomSuperSpinner.GetControlClassDefaultSize: TSize;
+begin
+  // Note the preferred size for the control is 150x150, however in highdpi modes
+  // on windows (maybe others) the control is scaled since the by default the forms
+  // scale will affect the actual value on creation. So as an example, Windows 11,
+  // 4k monitor, 150% scaling (windows settings), will cause the component to be
+  // created and rendered with the size of 150x150. So these numbers get scaled
+  // UP in this instance. If you run the scaling on Windows 11 at 100%, settings
+  // after LCL does it's business is 100x100. This is tricky since some spinner
+  // setting are NOT referenced by the size of the component but by pixels. So
+  // the Cap for example is in non-scaled pixels, lines for the position is
+  // based on component width so kinda' works OK, but not the cap. I remember
+  // when pixels were just pixels...
+
+  Result.CX := 100;
+  Result.CY := 100;
+end;
+
+function TCustomSuperSpinner.GetMinSize: integer;
+begin
+  // Take the smallest width or height so we can use for max size spinner
+
+  if ClientWidth < ClientHeight then
+    Exit(ClientWidth)
+  else
+    Exit(ClientHeight);
+end;
+
+procedure TCustomSuperSpinner.ResolveSizes;
+var
+  scale: single;
+
+begin
+  // Compute the size of the drawing elements of the spinner based
+  // on the FMinRadius size. If AutoScale is enabled for the control
+  // will calculate the drawing elements needed. If not will return
+  // the correct properties so all the testing for the AutoScale
+  // option setting is done here.
+
+  // Drawing sized based on proportions of the DEFAULT component values and
+  // may not always look right based on settings of cap, position, borders, etc.
+
+  // Get the minimum size for the drawing of the spinner
+
+  // Todo : Not sure if FMinRadius belongs here...
+
+  FResolvedSizes.MinWH := GetMinSize;
+  FResolvedSizes.MinRadius := FResolvedSizes.MinWH div 2;
+  FMinRadius := FResolvedSizes.MinRadius;
+  scale := FResolvedSizes.MinWH / 150.0;
+
+  if FAutoScale then
+  begin
+    // AutoScale based on 150x150 spinner size. Computes ratios from that to any size
+    // Will it always look good? Hard to say, but can use break points on sizes to
+    // also help with some edge cases like tiny and large if needed
+
+    FResolvedSizes.FrameBorderWidth := Round(FFrameSettings.BorderWidth * scale);
+    FResolvedSizes.CapRadius := Round(FCapSettings.Radius * scale);
+    FResolvedSizes.CapEdgeThickness := Round(FCapSettings.EdgeThickness * scale);
+    FResolvedSizes.PositionRadius := Round(FPositionSettings.Radius * scale);
+    FResolvedSizes.PositionMargin := Round(FPositionSettings.Margin * scale);
+    FResolvedSizes.PositionCenterMargin := Round(FPositionSettings.CenterMargin * scale);
+    FResolvedSizes.PositionLineWidth := Round(FPositionSettings.LineWidth * scale);
+    FResolvedSizes.KnobEdgeThickness := Round(FKnobSettings.EdgeThickness * scale);
+  end
+    else
+      begin
+        // Easy, not scaling
+
+        FResolvedSizes.FrameBorderWidth := FFrameSettings.BorderWidth;
+        FResolvedSizes.CapRadius := FCapSettings.Radius;
+        FResolvedSizes.CapEdgeThickness := FCapSettings.EdgeThickness;
+        FResolvedSizes.PositionRadius := FPositionSettings.Radius;
+        FResolvedSizes.PositionMargin := FPositionSettings.Margin;
+        FResolvedSizes.PositionCenterMargin := FPositionSettings.CenterMargin;
+        FResolvedSizes.PositionLineWidth := FPositionSettings.LineWidth;
+        FResolvedSizes.KnobEdgeThickness := FKnobSettings.EdgeThickness
+      end;
+end;
+
+procedure TCustomSuperSpinner.SetAutoScale(AValue: boolean);
+begin
+  if FAutoScale = AValue then
+    Exit;
+
+  FAutoScale := AValue;
+  FDirty := True;
+  DoChange(self);
+end;
+
+procedure TCustomSuperSpinner.SetPositionSettings(AValue: TSSPositionSettings);
+begin
+  if FPositionSettings = AValue then
+    Exit;
+
+  FPositionSettings := AValue;
+  FPositionSettings.Dirty := True;
+  DoChange(self);
+end;
+
+procedure TCustomSuperSpinner.SetCapSettings(AValue: TSSCapSettings);
+begin
+  if FCapSettings = AValue then
+    Exit;
+
+  FCapSettings := AValue;
+  FCapSettings.Dirty := True;
+  DoChange(self);
+end;
+
+procedure TCustomSuperSpinner.SetFrameSettings(AValue: TSSFrameSettings);
+begin
+  if FFrameSettings = AValue then
+    Exit;
+
+  FFrameSettings := AValue;
+  FFrameSettings.Dirty := True;
+  DoChange(self);
+end;
+
+procedure TCustomSuperSpinner.SetKnobSettings(AValue: TSSKnobSettings);
+begin
+  if FKnobSettings = AValue then
+    Exit;
+
+  FKnobSettings := AValue;
+  FKnobSettings.Dirty := True;
+  DoChange(self);
+end;
+
+procedure TCustomSuperSpinner.DoChange(Sender: TObject);
+begin
+  Invalidate;
+end;
+
+// Handler to force redraw when in design mode
+
+procedure TCustomSuperSpinner.DoSetBounds(ALeft, ATop, AWidth, AHeight: Integer);
+begin
+  inherited;
+  FDirty := true; // Called on Resize of component
+end;
+
+function TCustomSuperSpinner.RadPosToDeg(RadPos: single): single;
+begin
+  // helper to convert AnglePos in radians to degrees, wraps as needed
+
+  Result := RadPos * 180 / Pi;
+
+  if Result < 0 then
+    Result := Result + 360;
+
+  Result := 270 - Result;  // adjusts for screen coords
+
+  if Result < 0 then
+    Result := Result + 360;
+
+  if Result > 360 then
+    Result := Result - 360;
+
+end;
+
+function TCustomSuperSpinner.DegPosToAngular(DegPos: single): single;
+begin
+  // helper to convert Angle in degrees to radians, wraps as needed
+  // 3 * pi/2 = 270 degrees, degs to radians = degs * pi/180
+
+  Result := 3 * Pi / 2 - DegPos * Pi / 180;
+
+  if Result > Pi then
+    Result := Result - (2 * Pi);
+
+  if Result < -Pi then
+    Result := Result + (2 * Pi);
+end;
+
+procedure TCustomSuperSpinner.SetWheelSpeed(AValue: byte);
+begin
+  // Sets the mouse wheel speed
+
+  FWheelSpeed := AValue;
+end;
+
+procedure TCustomSuperSpinner.SetLocked(AValue: boolean);
+begin
+  // If we are locking, this may cause some issues as we are disabling
+  // some of the mouse control. So reset back to a clean state if needed
+
+  if AValue = FLocked then
+    Exit;
+
+  FLocked := AValue;
+
+  // if we are not locked now we should reset stuff to a clean state.
+  // this MIGHT be needed if the lock happens while clicking or moving
+  // in the spinner. The user should be starting fresh if this happens
+  // (Or so I think)
+
+  if not FLocked then
+    begin
+
+      // Reset Skip Counters
+
+      FCWSkipCounter := 0;
+      FCCWSkipCounter := 0;
+
+      // If mouse was down in cap or knob reset too, we lose that tracking
+
+      FCapMouseDown := False;
+      FKnobMouseDown := False;
+      FInCap := False;
+      FInKnob := False;
+
+      // Finally stop any mouse tracking
+
+      FSettingAngularPos := False;
+
+    end;
+end;
+
+procedure TCustomSuperSpinner.SetAngle(AValue: single);
+begin
+  // Sets the angle (in Degrees) of the Knobs position. This
+  // will NOT call the OnPosChange event, and not affected by
+  // the spinners resolution
+
+  if DegPosToAngular(AValue) = FAngularPos then
+    Exit;
+
+  FAngularPos := DegPosToAngular(AValue);
+  DoChange(self);
+end;
+
+function TCustomSuperSpinner.GetAngle: single;
+begin
+  Result := RadPosToDeg(FAngularPos);
+end;
+
+// Sets if the spinner position should snap to the mouse when clicked
+// otherwise will allow the mouse to spin the knob without first 'snapping'
+// to the mouse down position
+
+procedure TCustomSuperSpinner.SetPositionSnap(const AValue: boolean);
+begin
+  if FPositionSnap = AValue then
+    exit;
+
+  FPositionSnap := AValue;
+  DoChange(self);
+end;
+
+procedure TCustomSuperSpinner.SetResolution(const AValue: TSSResolution);
+begin
+  if AValue = FSpinnerResolution then
+    Exit;
+
+  FSpinnerResolution := AValue;
+
+  // In general It's best to have it at srHighest. If you want it more like
+  // an old iPod spinner try Low or Lowest. These are essentially
+  // messing with the number of clicks per revolution, but I decided
+  // not to try to calculate an exact value so these are just abstracting
+  // that
+
+  case AValue of
+    srHighest: FSpinnerResolutionCount := RESOLUTION_HIGHEST;
+    srHigh: FSpinnerResolutionCount := RESOLUTION_HIGH;
+    srHighMedium: FSpinnerResolutionCount := RESOLUTION_HIGH_MEDIUM;
+    srMedium: FSpinnerResolutionCount :=RESOLUTION_MEDIUM;
+    srMediumLow: FSpinnerResolutionCount := RESOLUTION_MEDIUM_LOW;
+    srLow: FSpinnerResolutionCount := RESOLUTION_LOW;
+    srLowest: FSpinnerResolutionCount := RESOLUTION_LOWEST;
+  end;
+end;
+
+function TCustomSuperSpinner.CalcAngularPos(X, Y: integer) : single;
+begin
+  // returns -pi to pi based on the XY of the mouse in the client box
+
+  Result := ArcTan2(-1 * (Y - ClientHeight / 2) / ClientHeight, (X - ClientWidth / 2) / ClientWidth);
+end;
+
+procedure TCustomSuperSpinner.Bump(Direction: TSSDirection; Degrees: single);
+var
+  Offset: single;
+
+begin
+  if (Degrees < 0) or (Degrees > 359.99999) then
+    Exit;
+
+  Offset := GetAngle();
+
+  if Direction = sdCW then
+    Offset := Offset + Degrees
+  else
+    Offset := Offset - Degrees;
+
+  // Force move, since UpdateAngularPos() PRE-Increments the Skip counters we
+  // Must be one less or this trick won't work
+  //
+  // Since we may be forcing a specific degree move here, it can
+  // shift the position of the spinner to an off increment angle than
+  // the mouse is moving since that angle to bump to is arbitrary.
+  // In general Spin and Bump are not great to use for this reason unless needed.
+
+  // Must invalidate both as we don't know the current direction it's moving
+  // so one will get reset, the other will trigger, so always works.
+
+  FCWSkipCounter := FSpinnerResolutionCount - 1;
+  FCCWSkipCounter := FCWSkipCounter;
+
+  UpdateAngularPos([], DegPosToAngular(Offset));
+end;
+
+procedure TCustomSuperSpinner.Spin(Direction: TSSDirection; Degrees: single; Count: integer; ProcessMessages: Boolean = True);
+var
+  i, processRate: integer;
+
+begin
+  // This is something that likely should not be used more so then bump. It is easy to animate
+  // a movement to a number of events triggered. This is tricky as you need to
+  // call ProcessMessages or the update of the spinner will/could show up just
+  // at the finish point since it will just do it fast if no movement will be shown.
+  // Some tricky-ness can be done, for example if you want to do a Count of 100 at
+  // 1 Degree per, that will be quickly animated, if you want to slow it down
+  // you can try 0.1 Degrees per, and 1000 for the Count and only process
+  // 1 out of 10 movement events to make it the same, the spinner will go slower
+  // as it's rendering at a higher resolution, this is a hack for sure.
+
+  // Degrees will be validated in Bump()
+
+  if (Count < 1) then
+    Exit;
+
+  // Super Hack
+  //
+  // Try to keep fast for fine moves or moves with a lot of steps so looks nice
+  // Tries to keep down calls to ProcessMessages, but Still update the display
+  // As the Count goes up or the Degree granularity goes up (smaller Degree) the
+  // processRate is smaller to have more screen updated UNLESS the count is
+  // just too large, and then it slows down a lot. This is all testing
+  // on a fast machine, fast video, Low or high res, lower speed CPU or Video
+  // would totally impact this code.
+  //
+  // SUPER HACK
+
+  if (Degrees < 1.0) or (Count < 25) then
+    processRate := 2  // process a lot of screen updates
+  else
+    processRate := 4; // Less
+
+  // If we have a lot of resolution can turn down the process rate a lot
+
+  if (Count / Degrees) > 500 then
+    processRate := 16;  // A lot less since movement is very small, not worth a lot of updates
+
+  for i := 0 to Count - 1  do
+  begin
+
+    // Bump will call the event handler for movement for each
+
+    Bump(Direction, Degrees);
+
+    // Call ProcessMessages at a slower rate for small Degrees or large Count
+    // Not sure if their is a better way to move and update the visuals. This
+    // may not be needed IF the PosChanged event handler actually does a lot of
+    // stuff, but I think (on Windows) the drawing of the spinners are all
+    // coalesced until the message loop is caught up and only the last update
+    // to the screen is seen. Application. ProcessMessages an optional call
+    // and can let the handler deal with it as needed.
+
+    if (i mod processRate = 0) and ProcessMessages then
+      Application.ProcessMessages;
+  end;
+end;
+
+procedure TCustomSuperSpinner.UpdateAngularPos(Shift: TShiftState; AngularPos: single);
+var
+  Direction: TSSDirection;
+  currAngle, newAngle: single;
+
+begin
+  // AngularPos is in Rads, Wrap range if needed (Radians wrap)
+
+  if AngularPos > Pi then
+    AngularPos := AngularPos - (2 * Pi);
+
+  if AngularPos < -Pi then
+    AngularPos := AngularPos + (2 * Pi);
+
+  // See which direction we are going, check start (Current)
+  // is less than the new. This will give us the direction
+  // This works EXCEPT at wrap around from 359 to 0 and 0 to 359
+  // so either bring in the X, Y and do it sector by sector or
+  // hack and say that if in the lower 2 sectors and track around
+  // that. The 270 is a big delta, and unlikely, so unless a very large
+  // update it works great. Remember that setting the position by
+  // Angle does NOT cause the handler to be called ONLY this update method.
+
+  currAngle := GetAngle();  // Degs
+  newAngle := RadPosToDeg(AngularPos); // Degs
+
+  // need this for skipping first
+
+  if newAngle - currAngle > 270 then // crossing CCW over 359 to 0
+    Direction := sdCCw
+  else
+      if currAngle - newAngle > 270 then // crossing CW over 0 to 359
+        Direction := sdCW
+      else
+          if currAngle < newAngle then
+            Direction := sdCW
+          else
+            Direction := sdCCW;
+
+  // Must take into account direction changes so we can
+  // have fresh counts in the correct direction or it
+  // would have an inconsistant value if moving back and forth!
+
+  if Direction = sdCW then
+  begin
+    Inc(FCWSkipCounter);
+    FCCWSkipCounter := 0;
+  end
+  else
+    begin
+      Inc(FCCWSkipCounter);
+      FCWSkipCounter := 0;
+    end;
+
+  // 1 is never skip since we pre-inc the numbers above, 2 is skip every other and so on
+
+  if (FCWSkipCounter = FSpinnerResolutionCount) or (FCCWSkipCounter = FSpinnerResolutionCount) then
+  begin
+
+    // We are moving, so can reset BOTH, and set the new position, then update
+
+    FCWSkipCounter := 0;
+    FCCWSkipCounter := 0;
+
+    // Need to check wrap here before we update the positions
+
+    if newAngle - currAngle > 270 then // crossing CCW over 359 to 0
+    begin
+      if Assigned(FOnWrapped) then
+        FOnWrapped(Self, Shift, currAngle, newAngle, sdCCW);
+    end
+      else
+        if currAngle - newAngle > 270 then // crossing CW over 0 to 359
+        begin
+          if Assigned(FOnWrapped) then
+            FOnWrapped(Self, Shift, currAngle, newAngle, sdCW);
+        end;
+
+    FAngularPos := AngularPos;
+
+    if Assigned(FOnSpinnerPosChange) then
+      FOnSpinnerPosChange(Self, Shift, Angle, Direction);
+
+    DoChange(self);
+  end;
+end;
+
+procedure TCustomSuperSpinner.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: integer);
+var
+  hitIn: TSSHitType;
+
+begin
+  inherited MouseDown(Button, Shift, X, Y);
+
+  if FLocked then
+    Exit;
+
+  // See if anything clicked on the cap, and then the knob
+  // If we do have a Cap hit and it's enabled, then we
+  // do not need to check the Knob, as it can't be in it!
+
+  // HEADS UP : If the knob porting is not clicked on, ie, blank client area,
+  // the border, the cap (and future stuff) the state of FSettingAngularPos
+  // will NOT change. Mouse movement once started does NOT look at any boundries
+
+  hitIn := HitTest(X, Y);
+
+  if hitIn = shtCap then
+    FCapMouseDown := True
+  else
+    if hitIn = shtKnob then
+      FKnobMouseDown := True;
+
+  // if user has pressed the left mouse button, then start tracking
+  // skip any movement if mouse down in the cap (button enabled)
+
+  if (Button = mbLeft) and (not FCapMouseDown) and (FKnobMouseDown) then
+  begin
+    FSettingAngularPos := True; // start of dragging the spinner, update the state
+
+    // save the angle of the mouse down, this will later
+    // be used to offset to the current position with existing angle
+    // to allow the user to grab anywhere on the knob and spin
+
+    FMouseDownAnglePos := CalcAngularPos(X, Y);
+
+    if FPositionSnap then
+    begin
+
+      // If we have position snap enabled, when the mouse clicks on it, will spin
+      // the spinners angle to it, position to it, but will NOT update anything
+      // else or call the handler for movement
+
+      FAngularPos := FMouseDownAnglePos;
+      DoChange(self);
+    end;
+
+    FMouseDownExistingPos := FAngularPos; // after update always set this
+  end;
+end;
+
+procedure TCustomSuperSpinner.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: integer);
+var
+  hitIn: TSSHitType;
+
+begin
+  inherited MouseUp(Button, Shift, X, Y);
+
+  if FLocked then
+    Exit;
+
+  if Button = mbLeft then
+    FSettingAngularPos := False;  // Change state to not moving
+
+  // can have different mouse buttons click on the cap, catch then all I guess
+  // let the OnClicks sort it out if needed
+
+  // see if we are still in the cap, if so call back as this is a OnClick
+  // style event. Always clear the state in anycase as a left mouse up
+  // should stop tracking the down events
+
+  hitIn := HitTest(X, Y);
+
+  if FCapMouseDown and (hitIn = shtCap) then
+  begin
+    if Assigned(FOnCapClick) then
+      FOnCapClick(Self, Button, Shift);
+  end
+    else
+      if FKnobMouseDown and (hitIn = shtKnob) then
+      begin
+        if Assigned(FOnKnobClick) then
+          FOnKnobClick(Self, Button, Shift);
+      end;
+
+  FCapMouseDown := False; // wipes all potential mouse downs
+  FKnobMouseDown := False;
+end;
+
+procedure TCustomSuperSpinner.MouseMove(Shift: TShiftState; X, Y: integer);
+var
+  hitIn: TSSHitType;
+
+begin
+  inherited MouseMove(Shift, X, Y);
+
+  if FLocked then
+    Exit;
+
+  // being nice, here is a specific event for the cap/knob enter/exit
+  // can do some nice stuff with it like highlight when over them
+
+  hitIn := HitTest(X, Y);
+
+  // See what's cooking with the cap first. If cap disabled always False
+
+  if FInCap <> (hitIn = shtCap) then
+  begin
+    if FInCap then
+    begin
+      // we are in the cap, then exiting
+
+      FInCap := False;
+      if Assigned(FOnMouseCapLeave) then
+          FOnMouseCapLeave(Self, Shift, X, Y);
+    end
+    else
+      begin
+        // Out of the cap, then entering
+
+        FInCap := True;
+        if Assigned(FOnMouseCapEnter) then
+            FOnMouseCapEnter(Self, Shift, X, Y);
+      end;
+  end;
+
+  // now the Knob part
+
+  if FInKnob <> (hitIn = shtKnob) then
+  begin
+    if FInKnob then
+    begin
+      // we are in the cap, then exiting
+
+      FInKnob := False;
+      if Assigned(FOnMouseKnobLeave) then
+          FOnMouseKnobLeave(Self, Shift, X, Y);
+    end
+    else
+      begin
+        // Out of the cap, then entering
+
+        FInKnob := True;
+        if Assigned(FOnMouseKnobEnter) then
+            FOnMouseKnobEnter(Self, Shift, X, Y);
+      end;
+
+  end;
+
+  if FSettingAngularPos then
+  begin
+
+    // Move the spinner, takes into account the MouseDown values
+    // to either snap the wheels angle to the mouse or ignore. This
+    // is all done in MouseDown based on the PositionSnap setting.
+
+    FKnobMouseDown := False; // Cancel KnobMouseDown so we don't allow click if moving
+    UpdateAngularPos(Shift, FMouseDownExistingPos + CalcAngularPos(X, Y) - FMouseDownAnglePos);
+  end;
+end;
+
+function TCustomSuperSpinner.CapHitTest(X, Y: integer) : boolean;
+begin
+  // Easy check, if mouse distance from center of client is
+  // within center radius (also at center of client) we can
+  // hit test the cap circle
+
+  // see if we need to even do anything, also prevents error if radius is 0
+
+  if FCapSettings.Style = csNone then   // safe-tee
+    Exit(False);
+
+  // If the distance of the mouse to center is less than the radius of the cap
+  // and the edge we are in the cap, remember dealing with the RADIUS not Diameter
+  // The center of the measure is not 0,0 but half the the min size. So if the
+  // size of the MinRadius is 75, the line is measured from 75,75 to the Mouse
+  // X,Y which is in terms of the client area. Tricky but works. Similar for
+  // the Knob. We need to use the client sizes for width and height here to get the center!
+
+Result := Sqrt(((FSpinnerBmp.Width div 2 - X)** 2 + (FSpinnerBmp.Height div 2 - Y)** 2))
+      <= (FResolvedSizes.CapRadius + FResolvedSizes.CapEdgeThickness - 1);
+end;
+
+function TCustomSuperSpinner.KnobHitTest(X, Y: integer) : boolean;
+begin
+  // if are using the cap as a button, and it's a hit,
+  // get out, we don't count that as a knob hit as
+  // it's excluded in this case, so a bit slower to call this first
+  // but what can you do unless you want to do more math below...
+
+  if CapHitTest(X, Y) then
+   Exit(False);
+
+  // Get the current Radius of the knob, GetMinRadius returns the smaller of
+  // width/height of the client and less the frame width.
+
+  // Todo : May just use FMinRadius as it must be calculated if we had
+  // a paint event done. So might not need to recompute
+  // shortRadius := FMinRadius - FFrameSettings.BorderWidth;
+
+
+  // Test if the distance from the mouse to the center is less then the short radius
+  // we are in the knob. Remeber we tested for cap and if in that we are not here
+  // as the radius must be longer then the cap! We need to use the client sizes
+  // for width and height here to get the center!
+
+    Result := Sqrt(((FSpinnerBmp.Width div 2 - X)** 2 + (FSpinnerBmp.Height div 2 - Y)** 2))
+          <= (FResolvedSizes.MinRadius - FResolvedSizes.FrameBorderWidth);
+end;
+
+// This done for future expansion of sub items in a spinner, for now simple
+
+function TCustomSuperSpinner.HitTest(X, Y: integer) : TSSHitType;
+begin
+  // if are using the cap as a button, and it's a hit all done, only one
+  // can be hit at a time
+
+  if CapHitTest(X, Y) then
+    Exit(shtCap);
+
+  // now on with the knob
+
+  if KnobHitTest(X, Y) then
+    Exit(shtknob);
+
+  Result := shtNone;
+end;
+
+procedure TCustomSuperSpinner.Paint;
+var
+  offsetX, offsetY: integer;
+
+begin
+  if (ClientWidth = 0) or (ClientHeight = 0) then
+    exit;
+
+  // Generally all objects should draw in the center of the client area, so
+  // the spinner is ALWAYS square. IF the initializebitmap routine is used
+  // it also has min size for width and height, but you still need to div/2
+  // to get the radius, this can save a bit of calcs in loops if it can be used.
+
+  // ResolveSizes calculates a bunch of sizes for the component based on the
+  // setting of the AutoScale. It MUST be called prior to paint so all needed
+  // sizes and dimensions for drawing the elements are resolved!
+
+  ResolveSizes;
+
+  // IF the component is resized OR moved (this is safer) we
+  // need to make sure EVERYTHING redraws. The base class will
+  // also do it's own thing to invalidate and redraw it all.
+
+  if FDirty then
+  begin
+    FPositionSettings.Dirty := True;  // sjg - this is ALWAYS dirty for drawing
+    FCapSettings.Dirty := True;
+    FFrameSettings.Dirty := True;
+    FKnobSettings.Dirty := True;
+
+    FDirty := False;  // everything here marked, so can reset
+  end;
+
+  // no cost on SetSize if same sizes!
+
+  FSpinnerBmp.SetSize(Width, Height);
+
+  // If the spinner color is clNone then we start with a transparent background,
+  // Otherwise we start with the users color.
+
+  if Color = clNone then
+    FSpinnerBmp.Fill(BGRA(0, 0, 0, 0))  // fill transparent
+  else
+    FSpinnerBmp.Fill(ColorToBGRA(Color, 255));  // fill solid color
+
+  // If the frame changes we must dirty the knob as the frame
+  // changes could impact size of the knob
+
+  if FFrameSettings.Dirty then
+    FKnobSettings.Dirty := True;
+
+  DrawFrame;
+  FSpinnerBmp.BlendImage(0, 0, FFrameBmp, boLinearBlend);
+
+  DrawKnob;
+  offsetX := FSpinnerBmp.Width div 2  - FKnobBmp.Width div 2;
+  offsetY := FSpinnerBmp.Height div 2 - FKnobBmp.Height div 2;
+  FSpinnerBmp.BlendImage(offsetX, offsetY, FKnobBmp, boLinearBlend);
+
+  // Position is most always rendered and drawn. Could optimize
+  // by drawing the position and moving around the spinnerbmp
+  // by getting the correct position. Left as an exercise for the
+  // coder...
+
+  DrawPosition;
+  FSpinnerBmp.BlendImage(0, 0, FPositionBmp, boLinearBlend);
+
+  // Draw Cap last as it can be a nice look over lines if needed
+
+  if FCapSettings.Style <> csNone then
+  begin
+    DrawCap;
+    offsetX := FSpinnerBmp.Width div 2  - FCapBmp.Width div 2;
+    offsetY := FSpinnerBmp.Height div 2 - FCapBmp.Height div 2;
+    FSpinnerBmp.BlendImage(offsetX, offsetY, FCapBmp, boLinearBlend);
+  end;
+
+  // draw other stuff as needed here before the canvas draw
+
+  FSpinnerBmp.Draw(Canvas, 0, 0, False);
+end;
+
+procedure TCustomSuperSpinner.DrawFrame;
+var
+  Origin: TSSOrigin;
+  r: integer;
+
+begin
+  if not FFrameSettings.Dirty then
+    Exit;
+
+  FFrameSettings.Dirty := False;
+
+  // Origin has the correct Max size the radius can be!
+
+  Origin := Initializebitmap(FFrameBmp, Width, Height);
+
+  // skip doing anything further if border is 0
+
+  if FResolvedSizes.FrameBorderWidth < 1 then
+    Exit;
+
+  // Get the radius of the frame, less border so we can fit
+
+  r := FResolvedSizes.MinRadius - FResolvedSizes.FrameBorderWidth div 2 - 1;
+
+  // Draw thin antialiased border to smooth against background
+
+  FFrameBmp.EllipseAntialias(Origin.CenterPoint.x, Origin.CenterPoint.y,
+    r, r,
+    FFrameSettings.BorderColor,
+    FResolvedSizes.FrameBorderWidth);
+end;
+
+procedure TCustomSuperSpinner.DrawKnob;
+var
+  xy: integer;
+  h: single;
+  d2: single;
+  v: TPointF;
+  p: PBGRAPixel;
+  Center: TPointF;
+  yb: integer;
+  xb: integer;
+  mask: TBGRABitmap;
+  Map: TBGRABitmap;
+
+begin
+  if not FKnobSettings.Dirty then
+    Exit;
+
+  FKnobSettings.Dirty := False;
+
+  // set the knob size less the radius
+
+  xy := FResolvedSizes.MinWH;
+
+  FKnobBmp.SetSize(xy, xy);
+
+  // Clear bitmap to transparent
+
+  FKnobBmp.Fill(BGRA(0, 0, 0, 0));
+  Center := PointF(xy / 2, xy / 2);
+
+  case FKnobSettings.Style of
+  ssFlat:
+    begin // draw flat knob
+
+      // This will draw it filled with an edge, must remove both
+      // the knob's edge and the frames edge thickness to get the right size
+
+        FKnobBmp.EllipseAntialias(Center.x, Center.y,
+        FResolvedSizes.MinRadius - FResolvedSizes.FrameBorderWidth - FResolvedSizes.KnobEdgeThickness div 2,
+        FResolvedSizes.MinRadius - FResolvedSizes.FrameBorderWidth - FResolvedSizes.KnobEdgeThickness div 2,
+          FKnobSettings.EdgeColor,
+          FResolvedSizes.KnobEdgeThickness,
+          FKnobSettings.FillColor);
+    end;
+
+  ssShaded:
+    begin   // shaded knob
+
+      FKnobBmp.FillEllipseLinearColorAntialias(Center.x, Center.y,
+        FResolvedSizes.MinRadius - FResolvedSizes.FrameBorderWidth,
+        FResolvedSizes.MinRadius - FResolvedSizes.FrameBorderWidth,
+        FKnobSettings.EdgeColor,
+        FKnobSettings.FillColor);
+
+      FKnobBmp.EllipseAntialias(Center.x, Center.y,
+        FResolvedSizes.MinRadius - FResolvedSizes.FrameBorderWidth - FResolvedSizes.KnobEdgeThickness div 2,
+        FResolvedSizes.MinRadius - FResolvedSizes.FrameBorderWidth - FResolvedSizes.KnobEdgeThickness div 2,
+        FKnobSettings.EdgeColor,
+        FResolvedSizes.KnobEdgeThickness);
+    end;
+
+  ssPhong:
+    begin // Phong shaded knob
+
+      // compute spinner height map
+
+      Map := TBGRABitmap.Create(xy, xy);
+
+      for yb := 0 to xy - 1 do
+      begin
+        p := map.ScanLine[yb];
+        for xb := 0 to xy - 1 do
+        begin
+
+          // compute vector between center and current pixel
+
+          v := PointF(xb, yb) - Center;
+
+          // scale down to unit circle (with 1 pixel margin for soft border)
+
+          v.x := v.x / (xy / 2 + 1);
+          v.y := v.y / (xy / 2 + 1);
+
+          // compute squared distance with scalar product
+
+          d2 := v {$if FPC_FULLVERSION < 30203}*{$ELSE}**{$ENDIF} v;
+
+          // interpolate as quadratic curve and apply power function
+
+          if d2 > 1 then
+            h := 0
+          else
+            h := power(1 - d2, FKnobSettings.CurveExponent);
+          p^ := MapHeightToBGRA(h, 255);
+          Inc(p);
+        end;
+      end;
+
+    mask := TBGRABitmap.Create(xy, xy, BGRABlack);
+
+    // Adjust Size for frame AND knob edge. Note this is a FILL so no div 2
+
+    Mask.FillEllipseAntialias(Center.x, Center.y,
+     FResolvedSizes.MinRadius - FResolvedSizes.FrameBorderWidth - FResolvedSizes.KnobEdgeThickness +1,
+     FResolvedSizes.MinRadius - FResolvedSizes.FrameBorderWidth - FResolvedSizes.KnobEdgeThickness +1,
+     BGRAWhite);
+
+      map.ApplyMask(mask);
+      Mask.Free;
+
+      KnobSettings.FPhong.Draw(FKnobBmp, Map, 30, 0, 0, FKnobSettings.FillColor);
+      Map.Free;
+
+    // Fill the edge now
+
+    FKnobBmp.EllipseAntialias(Center.x, Center.y,
+      FResolvedSizes.MinRadius - FResolvedSizes.FrameBorderWidth - FResolvedSizes.KnobEdgeThickness div 2,
+      FResolvedSizes.MinRadius - FResolvedSizes.FrameBorderWidth - FResolvedSizes.KnobEdgeThickness div 2,
+         FKnobSettings.EdgeColor,
+        FResolvedSizes.KnobEdgeThickness);
+    end;
+  end;
+end;
+
+procedure TCustomSuperSpinner.DrawCap;
+var
+  Origin: TSSOrigin;
+  sizeWH : integer;
+  pCapEdge : integer;
+  xy: integer;
+  xyFDiv2: single;
+  h: single;
+  d2: single;
+  v: TPointF;
+  p: PBGRAPixel;
+  Center: TPointF;
+  yb: integer;
+  xb: integer;
+  mask: TBGRABitmap;
+  Map: TBGRABitmap;
+
+begin
+  // skip drawing if nothing changed
+
+  if not FCapSettings.Dirty then
+    Exit;
+
+  FCapSettings.Dirty := False;
+
+  // drawing is the size of the cap, not of the entire knob!
+
+  sizeWH := (FResolvedSizes.CapRadius + FResolvedSizes.CapEdgeThickness) * 2 + 2;
+  Origin := Initializebitmap(FCapBmp, SizeWH, SizeWH);
+
+  // can skip drawing if nothing to draw, but still needed to init the bmp
+
+  if FCapSettings.Style = csNone then
+    Exit;
+
+  pCapEdge := FResolvedSizes.CapRadius + FResolvedSizes.CapEdgeThickness div 2;
+
+  case FCapSettings.Style of
+
+    csFlat:
+      begin
+
+        // Draw the flat cap, but make sure size is similar to the shaded below or will be odd
+
+        FCapBmp.EllipseAntialias(Origin.CenterPoint.x, Origin.CenterPoint.y,
+          pCapEdge,
+          pCapEdge,
+          FCapSettings.EdgeColor,
+          FResolvedSizes.CapEdgeThickness,
+          FCapSettings.FillColor);
+      end;
+
+    csShaded:
+      begin
+
+        // Regular shading
+
+         FCapBmp.FillEllipseLinearColorAntialias(Origin.CenterPoint.x, Origin.CenterPoint.y,
+           pCapEdge,
+           pCapEdge,
+           FCapSettings.FillColor,
+           FCapSettings.EdgeColor);
+
+         // draw edge since the shading is backwards ending on fill color not Edge
+
+         FCapBmp.EllipseAntialias(Origin.CenterPoint.x, Origin.CenterPoint.y,
+           pCapEdge,
+           pCapEdge,
+           FCapSettings.EdgeColor,
+           FResolvedSizes.CapEdgeThickness);
+      end;
+
+    csPhong:
+      begin
+
+        // Phong shaded cap
+
+        // Draw a flat radius around the cap if set, must be alpha 0 or will not
+        // be an outline. Draw First, fixes some issues with Phong drawing
+
+        xy := FResolvedSizes.CapRadius * 2 ;
+        xyFDiv2 := FResolvedSizes.CapRadius;
+
+        if xy = 0 then
+          Exit;
+
+         if FResolvedSizes.CapEdgeThickness > 0 then
+           FCapBmp.EllipseAntialias(Origin.CenterPoint.x, Origin.CenterPoint.y,
+             pCapEdge - 1,  // suck in a little to make sure we are under it all
+             pCapEdge - 1,
+             FCapSettings.EdgeColor,
+             FResolvedSizes.CapEdgeThickness);
+
+          // compute knob height map
+
+          Center := PointF(xyFDiv2 , xyFDiv2);
+          Map := TBGRABitmap.Create(xy, xy);
+
+          for yb := 0 to xy - 1 do
+          begin
+            p := map.ScanLine[yb];
+            for xb := 0 to xy - 1 do
+            begin
+
+              // compute vector between center and current pixel
+
+              v := PointF(xb, yb) - Center;
+
+              // scale down to unit circle (with 1 pixel margin for soft border)
+
+              v.x := v.x / (xyFDiv2 + 1);
+              v.y := v.y / (xyFDiv2 + 1);
+
+              // compute squared distance with scalar product
+
+              d2 := v {$if FPC_FULLVERSION < 30203}*{$ELSE}**{$ENDIF} v;
+
+              // interpolate as quadratic curve and apply power function
+
+              if d2 > 1 then
+                h := 0
+              else
+                h := power(1 - d2, FCapSettings.CurveExponent);
+              p^ := MapHeightToBGRA(h, 255);
+              Inc(p);
+            end;
+          end;
+
+          // mask image round with and antialiased border
+
+          mask := TBGRABitmap.Create(xy, xy, BGRABlack);
+
+          // Shrink the size by one as the antialias gets chopped on the right edge
+          // if the image is full size. Looks nicer too.
+
+          Mask.FillEllipseAntialias(Center.x, Center.y, xyFDiv2 - 1, xyFDiv2 - 1 , BGRAWhite);
+          map.ApplyMask(mask);
+          Mask.Free;
+
+          // now draw it all
+
+          FCapSettings.FPhong.Draw(FCapBmp, Map, 30,
+                  Origin.CenterPoint.x - xy div 2, Origin.CenterPoint.y - xy div 2,
+                  FCapSettings.FillColor);
+          Map.Free;
+      end;
+
+    csOutline:
+      begin
+
+        // Just an outline
+
+        if FResolvedSizes.CapEdgeThickness > 0 then
+          FCapBmp.EllipseAntialias(Origin.CenterPoint.x, Origin.CenterPoint.y,
+            pCapEdge,
+            pCapEdge,
+            FCapSettings.EdgeColor,
+            FResolvedSizes.CapEdgeThickness);
+      end;
+  end;
+end;
+
+procedure TCustomSuperSpinner.DrawPosition;
+var
+  Center, Pos: TPointF;
+  PosColor: TBGRAPixel;
+  PosLen, x,y,xt,yt: single;
+  i, n : integer;
+
+begin
+  // Note this is mostly always be dirty, if the knob moves or a setting
+  // changes it's dirty so always, no need to currently check dirty flag
+
+  // Do some magic since we can adjust opacity with an additional property
+  // This sometimes draws different color in design vs. runtime BGRA issue??
+
+  PosColor := ColorToBGRA(ColorToRGB(FPositionSettings.FillColor), FPositionSettings.Opacity);
+
+  // set up positions for position indicator
+
+  Center := PointF(ClientWidth / 2, ClientHeight / 2);
+  Pos.X := Cos(FAngularPos) * (ClientWidth / 2);
+  Pos.Y := -Sin(FAngularPos) * (ClientHeight / 2);
+  PosLen := VectLen(Pos);
+  Pos := Pos * ((PosLen - FResolvedSizes.PositionMargin - FResolvedSizes.PositionRadius) / PosLen);
+  Pos := Center + Pos;
+
+  // Size and Clear bitmap to transparent
+
+  FPositionBmp.SetSize(ClientWidth, ClientHeight);
+  FPositionBmp.Fill(BGRA(0, 0, 0, 0));
+
+  case PositionSettings.Style of
+    psFilledCircle:
+      begin
+        FPositionBmp.FillEllipseAntialias(Pos.X, Pos.Y,
+            FResolvedSizes.PositionRadius, FResolvedSizes.PositionRadius,
+            PosColor);
+      end;
+
+    psHollowCircle:
+      begin
+        FPositionBmp.EllipseAntialias( Pos.X, Pos.Y,
+            FResolvedSizes.PositionRadius, FResolvedSizes.PositionRadius,
+            PosColor, FPositionSettings.LineWidth);
+      end;
+    psShaded:
+      begin
+        // Regular shading similar to Cap
+
+         FPositionBmp.FillEllipseLinearColorAntialias(Pos.X, Pos.Y,
+         FResolvedSizes.PositionRadius, FResolvedSizes.PositionRadius,
+           Poscolor,
+           FPositionSettings.EdgeColor);
+      end;
+
+    psIndentCircle:
+      begin
+        // hack to give some indented depth, Doing colors
+        // backwards to make it look nicer.
+
+        FPositionBmp.FillEllipseLinearColorAntialias(Pos.X, Pos.Y,
+            FResolvedSizes.PositionRadius, FResolvedSizes.PositionRadius,
+             PosColor, FKnobSettings.EdgeColor);
+
+        FPositionBmp.EllipseAntialias(Pos.X, Pos.Y,
+            FResolvedSizes.PositionRadius, FResolvedSizes.PositionRadius,
+             PosColor, 1);
+      end;
+
+    psLines:
+      begin
+        FPositionBmp.LineCap := pecRound; // ensure correct cap mode
+        n := FPositionSettings.LineCount;
+
+        // Skip if number of lines is 0
+
+        if n > 0 then
+          for i := 0 to n - 1 do
+          begin
+            // Center Point
+
+            x := Center.x - FResolvedSizes.PositionCenterMargin * cos((i * 360 / n) * Pi / 180 - FAngularPos - PI);
+            y := Center.y - FResolvedSizes.PositionCenterMargin * sin((i * 360 / n) * Pi / 180 - FAngularPos - PI);
+
+            // Draw to Outer Point
+
+            xt := Center.x - (FResolvedSizes.MinRadius - FResolvedSizes.PositionMargin) * cos((i * 360 / n) * Pi / 180 - FAngularPos - PI);
+            yt := Center.y - (FResolvedSizes.MinRadius - FResolvedSizes.PositionMargin)* sin((i * 360 / n) * Pi / 180 - FAngularPos - PI);
+
+            FPositionBmp.DrawLineAntialias(x, y, xt, yt, PosColor, FResolvedSizes.PositionLineWidth);
+          end;
+    end;
+  end;
+
+  // Draw outer circle border if desired, only for circle types
+
+  if (FPositionSettings.EdgeThickness > 0) and (FPositionSettings.Style <> psLines)
+        and (FPositionSettings.Style <> psNone) then
+  begin
+    FPositionBmp.EllipseAntialias(Pos.X, Pos.Y,
+          FResolvedSizes.PositionRadius + FPositionSettings.EdgeThickness div 2,
+          FResolvedSizes.PositionRadius + FPositionSettings.EdgeThickness div 2,
+          FPositionSettings.EdgeColor, FPositionSettings.EdgeThickness);
+  end;
+end;
+
+{$IFDEF FPC}
+procedure TCustomSuperSpinner.SaveToFile(AFileName: string);
+var
+  AStream: TMemoryStream;
+
+begin
+  AStream := TMemoryStream.Create;
+  try
+    WriteComponentAsTextToStream(AStream, Self);
+    AStream.SaveToFile(AFileName);
+  finally
+    AStream.Free;
+  end;
+end;
+
+procedure TCustomSuperSpinner.LoadFromFile(AFileName: string);
+var
+  AStream: TMemoryStream;
+
+begin
+  AStream := TMemoryStream.Create;
+  try
+    AStream.LoadFromFile(AFileName);
+    ReadComponentFromTextStream(AStream, TComponent(Self), OnFindClass);
+  finally
+    AStream.Free;
+  end;
+end;
+{$ENDIF}
+
+procedure TCustomSuperSpinner.OnFindClass(Reader: TReader; const AClassName: string;
+  var ComponentClass: TComponentClass);
+begin
+
+  if CompareText(AClassName, 'TCustomSuperSpinner') = 0 then
+    ComponentClass := TCustomSuperSpinner;
+end;
+
+function TCustomSuperSpinner.DoMouseWheel(Shift: TShiftState; WheelDelta: integer;
+  MousePos: TPoint): boolean;
+begin
+
+  Result := inherited DoMouseWheel(Shift, WheelDelta, MousePos);
+  MouseWheelPos(Shift, WheelDelta);
+end;
+
+procedure TCustomSuperSpinner.MouseWheelPos(Shift: TShiftState; WheelDelta: integer);
+var
+  newValue: single;
+
+begin
+  if FLocked then
+    Exit;
+
+  // WheelSpeed is a Base Value and a factor to slow or speed up the wheel affect.
+  // FWheelSpeed = 0 then no wheel, 1 slowest movement, 255 fastest movement
+  // Wheel speed still just does one step no matter what the wheel angle is set to
+  // so the WheelSpeed just really adjust the look of how fast the knob spins
+
+  if FWheelSpeed > 0 then
+  begin
+
+    // WheelDelta should just catch direction, negative or positive
+    // not sure if 0 is ever possible????
+
+    if WheelDelta >= 0 then
+      newValue := -1.0
+    else
+      newValue := 1.0;
+
+    // Must invalidate both as we don't know the current direction it's moving
+    // so one will get reset, the other will trigger, so always works.
+    // This is used in UpdateAngularPos to help with direction changes
+
+    FCWSkipCounter := FSpinnerResolutionCount - 1;
+    FCCWSkipCounter := FCWSkipCounter;
+
+    // Scale the Wheel rate so 1-255 will give good dynamic range of really slow to really fast
+
+    // TIP : To make the mouse movement sorta' match the Resolution you can change
+    // the Wheel speed to make it more closely match if resolution is not the highest
+
+    UpdateAngularPos(Shift, FAngularPos + WHEEL_SPEED_FACTOR * newValue * FWheelSpeed);
+
+  end; // wheel speed enabled
+end;
+
+end.

+ 628 - 0
superspinnercommon.pas

@@ -0,0 +1,628 @@
+// SPDX-License-Identifier: LGPL-3.0-linking-exception
+{
+  Part of BGRA Controls. Made by third party.
+  For detailed information see readme.txt
+
+  Site: https://sourceforge.net/p/bgra-controls/
+  Wiki: http://wiki.lazarus.freepascal.org/BGRAControls
+  Forum: http://forum.lazarus.freepascal.org/index.php/board,46.0.html
+
+}
+{******************************* CONTRIBUTOR(S) ******************************
+- Sandy Ganz | [email protected]
+  Evolved from BGRAKnob and SuperGauge, changed style to be more inline with
+  SuperGauge settings and related. Mostly support classes
+***************************** END CONTRIBUTOR(S) *****************************}
+unit superspinnercommon;
+
+{$I bgracontrols.inc}
+
+interface
+uses
+  Classes, SysUtils, {$IFDEF FPC}LResources,{$ELSE}Types, {$ENDIF} Forms, Controls, Graphics, Dialogs,
+  BGRABitmap, BGRABitmapTypes, BGRAGradients, BCTypes;
+
+type
+  TSSPositionStyle = (psNone, psFilledCircle, psHollowCircle, psShaded, psIndentCircle, psLines);
+  TSSStyle = (ssFlat, ssShaded, ssPhong);
+  TSSCapStyle = (csNone, csFlat, csShaded, csPhong, csOutline);
+  TSSDirection = (sdCW, sdCCW);
+
+  { TSSOrigin }
+
+  TSSOrigin = packed record
+    CenterPoint: TPoint;
+    Radius: integer;
+  end;
+
+  { TSSFrameSettings }
+
+  TSSFrameSettings = class(TPersistent)
+  private
+    FBorderColor: TColor;
+    FBorderWidth: integer;
+    FOnChange: TNotifyEvent;
+    FDirty: boolean;
+
+    procedure SetBorderWidth(AValue: integer);
+    procedure SetBorderColor(AValue: TColor);
+    procedure SetOnChange(AValue: TNotifyEvent);
+    procedure DirtyOnChange;
+  protected
+  public
+    constructor Create;
+    destructor Destroy; override;
+    property OnChange: TNotifyEvent read FOnChange write SetOnChange;
+    property Dirty: boolean read FDirty write FDirty;
+
+  published
+    property BorderWidth: integer read FBorderWidth write SetBorderWidth default 5;
+    property BorderColor: TColor read FBorderColor write SetBorderColor default clGray;
+  end;
+
+  { TSSPositionSettings }
+
+  TSSPositionSettings = class(TPersistent)
+  private
+    FEdgeColor: TColor;
+    FEdgeThickness: integer;
+    FFillColor: TColor;
+    FStyle:TSSPositionStyle;
+    FMargin: integer;
+    FCenterMargin: integer;
+    FLineWidth: integer;  // total width of position
+    FLineCount: integer;  // Number of lines to be draw
+    FRadius: integer;
+    FOpacity: byte;
+    FDirty: boolean;
+    FOnChange: TNotifyEvent;
+
+    procedure SetEdgeColor(AValue: TColor);
+    procedure SetEdgeThickness(AValue: integer);
+    procedure SetColor(AValue: TColor);
+    procedure SetStyle(const AValue: TSSPositionStyle);
+    procedure SetMargin(const AValue: integer);
+    procedure SetCenterMargin(const AValue: integer);
+    procedure SetLineWidth(const AValue: integer);
+    procedure SetLineCount(const AValue: integer);
+    procedure SetRadius(const AValue: integer);
+    procedure SetOpacity(const AValue: byte);
+    procedure SetOnChange(AValue: TNotifyEvent);
+    procedure DirtyOnChange;
+
+  protected
+  public
+
+    property Dirty: boolean read FDirty write FDirty;
+    constructor Create;
+    destructor Destroy; override;
+    property OnChange: TNotifyEvent read FOnChange write SetOnChange;
+
+  published
+    property FillColor: TColor read FFillColor write SetColor default clBlack;
+    property Style: TSSPositionStyle read FStyle write SetStyle default psLines;
+    property Margin: integer read FMargin write SetMargin default 15;
+    property CenterMargin: integer read FCenterMargin write SetCenterMargin default 20;
+    property LineWidth: integer read FLineWidth write SetLineWidth default 4;
+    property LineCount: integer read FLineCount write SetLineCount default 10;
+    property Radius: integer read FRadius write SetRadius default 20;
+    property Opacity: byte  read FOpacity write SetOpacity default 192;
+    property EdgeColor: TColor read FEdgeColor write SetEdgeColor default clGray;
+    property EdgeThickness: integer read FEdgeThickness write SetEdgeThickness default 2;
+  end;
+
+  { TSSCapSettings }
+
+  TSSCapSettings = class(TPersistent)
+    private
+      FEdgeColor: TColor;
+      FEdgeThickness: integer;
+      FFillColor: TColor;
+      FOnChange: TNotifyEvent;
+      FRadius: integer;
+      FCurveExponent: single;
+      FStyle: TSSCapStyle;
+      FDirty: boolean;
+
+      procedure SetEdgeColor(AValue: TColor);
+      procedure SetEdgeThickness(AValue: integer);
+      procedure SetFillColor(AValue: TColor);
+      procedure SetOnChange(AValue: TNotifyEvent);
+      procedure SetRadius(AValue: integer);
+      procedure SetLightIntensity(const AValue: integer);
+      function GetLightIntensity: integer;
+      procedure SetCurveExponent(const AValue: single);
+      procedure SetStyle(const AValue: TSSCapStyle);
+      procedure DirtyOnChange;
+
+    protected
+
+    public
+      FPhong: TPhongShading;
+      property Dirty: boolean read FDirty write FDirty;
+      constructor Create;
+      destructor Destroy; override;
+      property OnChange: TNotifyEvent read FOnChange write SetOnChange;
+
+    published
+      property EdgeColor: TColor read FEdgeColor write SetEdgeColor default clGray;
+      property FillColor: TColor read FFillColor write SetFillColor default clWhite;
+      property Radius: integer read FRadius write SetRadius default 20;
+      property EdgeThickness: integer read FEdgeThickness write SetEdgeThickness default 2;
+      property LightIntensity: integer read GetLightIntensity write SetLightIntensity default 300;
+      property CurveExponent: single read FCurveExponent write SetCurveExponent default 0.05;
+      property Style: TSSCapStyle read FStyle write SetStyle default csPhong;
+
+    end;
+
+    { TSSKnobSettings }
+
+    TSSKnobSettings = class(TPersistent)
+      private
+        FEdgeColor: TColor;
+        FEdgeThickness: integer;
+        FFillColor: TColor;
+        FOnChange: TNotifyEvent;
+        FCurveExponent: single;
+        FStyle: TSSStyle;
+        FDirty: boolean;
+
+        procedure SetEdgeColor(AValue: TColor);
+        procedure SetEdgeThickness(AValue: integer);
+        procedure SetFillColor(AValue: TColor);
+        procedure SetOnChange(AValue: TNotifyEvent);
+        procedure SetLightIntensity(const AValue: integer);
+        function GetLightIntensity: integer;
+        procedure SetCurveExponent(const AValue: single);
+        procedure SetStyle(const AValue: TSSStyle);
+        procedure DirtyOnChange;
+
+      protected
+
+      public
+        FPhong: TPhongShading;
+        property Dirty: boolean read FDirty write FDirty;
+        constructor Create;
+        destructor Destroy; override;
+        property OnChange: TNotifyEvent read FOnChange write SetOnChange;
+
+      published
+        property EdgeColor: TColor read FEdgeColor write SetEdgeColor default clMedGray;
+        property FillColor: TColor read FFillColor write SetFillColor default clWhite;
+        property EdgeThickness: integer read FEdgeThickness write SetEdgeThickness default 2;
+        property LightIntensity: integer read GetLightIntensity write SetLightIntensity default 300;
+        property CurveExponent: single read FCurveExponent write SetCurveExponent default 0.05;
+        property Style: TSSStyle read FStyle write SetStyle default ssPhong;
+      end;
+
+  function Initializebitmap(var Bitmap: TBGRABitmap; Width, Height: integer): TSSOrigin;
+
+implementation
+
+// Helper for all bitmap setup
+
+function Initializebitmap(var Bitmap: TBGRABitmap; Width, Height: integer): TSSOrigin;
+begin
+  Bitmap.SetSize(Width, Height);
+
+  // Clear bitmap to transparent
+
+  BitMap.Fill(BGRA(0, 0, 0, 0));
+
+  // Get origin information
+
+  Result.CenterPoint.x := Width div 2;
+  Result.CenterPoint.y := Height div 2;
+
+  // Take the smallest so radius will always fit
+
+  if Result.CenterPoint.x < Result.CenterPoint.y then
+    Result.Radius := Result.CenterPoint.x
+  else
+    Result.Radius := Result.CenterPoint.y;
+end;
+
+{ TSSFrameSettings }
+
+constructor TSSFrameSettings.Create;
+begin
+
+  FBorderColor := clGray;
+  FBorderWidth := 5;
+  FDirty := True;
+end;
+
+destructor TSSFrameSettings.Destroy;
+begin
+  inherited Destroy;
+end;
+
+procedure TSSFrameSettings.SetBorderWidth(AValue: integer);
+begin
+  if (FBorderWidth = AValue) or (AValue < 0) then
+    Exit;
+
+  FBorderWidth := AValue;
+  DirtyOnChange;
+end;
+
+
+procedure TSSFrameSettings.SetBorderColor(AValue: TColor);
+begin
+  if FBorderColor = AValue then
+    Exit;
+
+  FBorderColor := AValue;
+  DirtyOnChange;
+end;
+
+procedure TSSFrameSettings.SetOnChange(AValue: TNotifyEvent);
+begin
+  FOnChange := AValue;
+
+  if Assigned(FOnChange) then
+    FOnChange(Self);
+end;
+
+procedure TSSFrameSettings.DirtyOnChange;
+begin
+  FDirty := True;   // if we get here a prop must have changed, mark dirty
+
+  if Assigned(FOnChange) then
+    FOnChange(Self);
+end;
+
+{ TSSPositionSettings }
+
+constructor TSSPositionSettings.Create;
+begin
+  FOpacity := 192;
+  FStyle := psLines;
+  FEdgeColor := clGray;
+  FFillColor := clBlack;
+  FMargin := 15;
+  FCenterMargin := 40;
+  FLineWidth := 4;
+  FLineCount := 10;
+  FRadius := 20;
+  FEdgeThickness := 2;
+  FDirty := True;
+end;
+
+destructor TSSPositionSettings.Destroy;
+begin
+  inherited Destroy;
+end;
+procedure TSSPositionSettings.SetStyle(const AValue: TSSPositionStyle);
+begin
+  if FStyle = AValue then
+    Exit;
+
+  FStyle := AValue;
+  DirtyOnChange;
+end;
+
+procedure TSSPositionSettings.SetOpacity(const AValue: byte);
+begin
+  if FOpacity = AValue then
+    Exit;
+
+  FOpacity := AValue;
+  DirtyOnChange;
+end;
+
+procedure TSSPositionSettings.SetEdgeColor(AValue: TColor);
+begin
+  if FEdgeColor = AValue then
+    Exit;
+
+  FEdgeColor := AValue;
+  DirtyOnChange;
+end;
+
+procedure TSSPositionSettings.SetEdgeThickness(AValue: integer);
+begin
+  if (FEdgeThickness = AValue) or (AValue < 0) then
+    Exit;
+
+  FEdgeThickness := AValue;
+  DirtyOnChange;
+end;
+
+procedure TSSPositionSettings.SetColor(AValue: TColor);
+begin
+  if FFillColor = AValue then
+    Exit;
+
+  FFillColor := AValue;
+  DirtyOnChange;
+end;
+
+procedure TSSPositionSettings.SetOnChange(AValue: TNotifyEvent);
+begin
+  FOnChange := AValue;
+
+  // no dirty needed possibly, call directly
+
+  if Assigned(FOnChange) then
+    FOnChange(Self);
+end;
+
+// Diameter of the the spinner circle, ignored for lines
+procedure TSSPositionSettings.SetRadius(const AValue: integer);
+begin
+  if FRadius = AValue then
+    Exit;
+
+  FRadius := AValue;
+  DirtyOnChange;
+end;
+
+// Line width for hollow circle, and lines types. Ignored for others
+procedure TSSPositionSettings.SetLineWidth(const AValue: integer);
+begin
+  if FLineWidth = AValue then
+    Exit;
+
+  FLineWidth := AValue;
+  DirtyOnChange;
+end;
+
+// Line count, for lines, Ignored for others
+procedure TSSPositionSettings.SetLineCount(const AValue: integer);
+begin
+  if FLineCount = AValue then
+    Exit;
+
+  FLineCount := AValue;
+  DirtyOnChange;
+end;
+
+// Offset from the edge of the knob
+procedure TSSPositionSettings.SetMargin(const AValue: integer);
+begin
+  if FMargin = AValue then
+    Exit;
+
+  FMargin := AValue;
+  DirtyOnChange;
+end;
+
+// Offset from the center of the knob
+procedure TSSPositionSettings.SetCenterMargin(const AValue: integer);
+begin
+  if FCenterMargin = AValue then
+    Exit;
+
+  FCenterMargin := AValue;
+  DirtyOnChange;
+end;
+
+procedure TSSPositionSettings.DirtyOnChange;
+begin
+  FDirty := True;   // if we get here some props must have changed, mark dirty
+
+  if Assigned(FOnChange) then
+    FOnChange(Self);
+end;
+
+{ TSSSpinnerCapSettings }
+
+constructor TSSCapSettings.Create;
+begin
+  // create a phong shader, will need to delete on clean up
+
+  FPhong := TPhongShading.Create;
+  FPhong.LightPositionZ := 100;
+  FPhong.LightSourceIntensity := 300;
+  FPhong.NegativeDiffusionFactor := 0.8;
+  FPhong.AmbientFactor := 0.5;
+  FPhong.DiffusionFactor := 0.6;
+  FCurveExponent := 0.05;
+  FStyle := csPhong;
+  FEdgeColor := clGray;
+  FFillColor := clWhite;
+  FRadius := 20;
+  FEdgeThickness := 2;
+
+  FDirty := True;
+end;
+
+destructor TSSCapSettings.Destroy;
+begin
+  FPhong.Free;
+  inherited Destroy;
+end;
+
+procedure TSSCapSettings.SetStyle(const AValue: TSSCapStyle);
+begin
+  if FStyle = AValue then
+    Exit;
+
+  FStyle := AValue;
+  DirtyOnChange;
+end;
+
+procedure TSSCapSettings.SetLightIntensity(const AValue: integer);
+begin
+  if AValue = FPhong.LightSourceIntensity then
+    Exit;
+
+  FPhong.LightSourceIntensity := AValue;
+  DirtyOnChange;
+end;
+
+function TSSCapSettings.GetLightIntensity: integer;
+begin
+  Result := round(FPhong.LightSourceIntensity);
+end;
+
+procedure TSSCapSettings.SetCurveExponent(const AValue: single);
+begin
+  if FCurveExponent = AValue then
+    Exit;
+
+  FCurveExponent := AValue;
+  DirtyOnChange;
+end;
+
+procedure TSSCapSettings.SetEdgeColor(AValue: TColor);
+begin
+  if FEdgeColor = AValue then
+    Exit;
+
+  FEdgeColor := AValue;
+  DirtyOnChange;
+end;
+
+procedure TSSCapSettings.SetEdgeThickness(AValue: integer);
+begin
+  if (FEdgeThickness = AValue) or (AValue < 0) then
+    Exit;
+
+  FEdgeThickness := AValue;
+  DirtyOnChange;
+end;
+
+procedure TSSCapSettings.SetFillColor(AValue: TColor);
+begin
+  if FFillColor = AValue then
+    Exit;
+
+  FFillColor := AValue;
+  DirtyOnChange;
+end;
+
+procedure TSSCapSettings.SetOnChange(AValue: TNotifyEvent);
+begin
+  FOnChange := AValue;
+
+  // no dirty needed possibly, call directly
+
+  if Assigned(FOnChange) then
+    FOnChange(Self);
+end;
+
+procedure TSSCapSettings.SetRadius(AValue: integer);
+begin
+  if FRadius = AValue then
+    Exit;
+
+  FRadius := AValue;
+  DirtyOnChange;
+end;
+
+procedure TSSCapSettings.DirtyOnChange;
+begin
+  FDirty := True;   // if we get here some props must have changed, mark dirty
+
+  if Assigned(FOnChange) then
+    FOnChange(Self);
+end;
+
+{ TSSKnobSettings }
+
+constructor TSSKnobSettings.Create;
+begin
+  // create a phong shader, will need to delete on clean up
+
+  FPhong := TPhongShading.Create;
+  FPhong.LightPositionZ := 100;
+  FPhong.LightSourceIntensity := 300;
+  FPhong.NegativeDiffusionFactor := 0.8;
+  FPhong.AmbientFactor := 0.5;
+  FPhong.DiffusionFactor := 0.6;
+
+  FCurveExponent := 0.2;
+  FStyle := ssPhong;
+  FEdgeColor := clMedGray;
+  FFillColor := clWhite;
+  FEdgeThickness := 2;
+  FDirty := True;
+end;
+
+destructor TSSKnobSettings.Destroy;
+begin
+  FPhong.Free;
+  inherited Destroy;
+end;
+
+procedure TSSKnobSettings.SetStyle(const AValue: TSSStyle);
+begin
+  if FStyle = AValue then
+    Exit;
+
+  FStyle := AValue;
+  DirtyOnChange;
+end;
+
+procedure TSSKnobSettings.SetLightIntensity(const AValue: integer);
+begin
+  if AValue = FPhong.LightSourceIntensity then
+    Exit;
+
+  FPhong.LightSourceIntensity := AValue;
+  DirtyOnChange;
+end;
+
+function TSSKnobSettings.GetLightIntensity: integer;
+begin
+  Result := round(FPhong.LightSourceIntensity);
+end;
+
+procedure TSSKnobSettings.SetCurveExponent(const AValue: single);
+begin
+  if FCurveExponent = AValue then
+    Exit;
+
+  FCurveExponent := AValue;
+  DirtyOnChange;
+end;
+
+procedure TSSKnobSettings.SetEdgeColor(AValue: TColor);
+begin
+  if FEdgeColor = AValue then
+    Exit;
+
+  FEdgeColor := AValue;
+  DirtyOnChange;
+end;
+
+procedure TSSKnobSettings.SetEdgeThickness(AValue: integer);
+begin
+  if (FEdgeThickness = AValue) or (AValue < 0) then
+    Exit;
+
+  FEdgeThickness := AValue;
+  DirtyOnChange;
+end;
+
+procedure TSSKnobSettings.SetFillColor(AValue: TColor);
+begin
+  if FFillColor = AValue then
+    Exit;
+
+  FFillColor := AValue;
+  DirtyOnChange;
+end;
+
+procedure TSSKnobSettings.SetOnChange(AValue: TNotifyEvent);
+begin
+  FOnChange := AValue;
+
+  // no dirty needed possibly, call directly
+
+  if Assigned(FOnChange) then
+    FOnChange(Self);
+end;
+
+procedure TSSKnobSettings.DirtyOnChange;
+begin
+  FDirty := True;   // if we get here some props must have changed, mark dirty
+
+  if Assigned(FOnChange) then
+    FOnChange(Self);
+end;
+
+end.
+

+ 2 - 2
test/test_bgraknob/unit1.lfm

@@ -1,7 +1,7 @@
 object Form1: TForm1
-  Left = 592
+  Left = 577
   Height = 503
-  Top = 516
+  Top = 189
   Width = 1269
   Caption = 'BGRAKnob Test'
   ClientHeight = 503

BIN
test/test_spinner.ico


+ 95 - 0
test/test_spinner.lpi

@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<CONFIG>
+  <ProjectOptions>
+    <Version Value="12"/>
+    <PathDelim Value="\"/>
+    <General>
+      <SessionStorage Value="InProjectDir"/>
+      <Title Value="test_spinner"/>
+      <Scaled Value="True"/>
+      <ResourceType Value="res"/>
+      <UseXPManifest Value="True"/>
+      <XPManifest>
+        <DpiAware Value="True"/>
+      </XPManifest>
+      <Icon Value="0"/>
+    </General>
+    <BuildModes>
+      <Item Name="Default" Default="True"/>
+    </BuildModes>
+    <PublishOptions>
+      <Version Value="2"/>
+      <UseFileFilters Value="True"/>
+    </PublishOptions>
+    <RunParams>
+      <FormatVersion Value="2"/>
+    </RunParams>
+    <RequiredPackages>
+      <Item>
+        <PackageName Value="industrial"/>
+      </Item>
+      <Item>
+        <PackageName Value="uEControls"/>
+      </Item>
+      <Item>
+        <PackageName Value="bgracontrols"/>
+      </Item>
+      <Item>
+        <PackageName Value="LCL"/>
+      </Item>
+    </RequiredPackages>
+    <Units>
+      <Unit>
+        <Filename Value="test_spinner.lpr"/>
+        <IsPartOfProject Value="True"/>
+      </Unit>
+      <Unit>
+        <Filename Value="unit1.pas"/>
+        <IsPartOfProject Value="True"/>
+        <ComponentName Value="Form1"/>
+        <HasResources Value="True"/>
+        <ResourceBaseClass Value="Form"/>
+        <UnitName Value="Unit1"/>
+      </Unit>
+    </Units>
+  </ProjectOptions>
+  <CompilerOptions>
+    <Version Value="11"/>
+    <PathDelim Value="\"/>
+    <Target>
+      <Filename Value="test_spinner"/>
+    </Target>
+    <SearchPaths>
+      <IncludeFiles Value="$(ProjOutDir)"/>
+      <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
+    </SearchPaths>
+    <CodeGeneration>
+      <Optimizations>
+        <OptimizationLevel Value="0"/>
+      </Optimizations>
+    </CodeGeneration>
+    <Linking>
+      <Debugging>
+        <DebugInfoType Value="dsDwarf2Set"/>
+      </Debugging>
+      <Options>
+        <Win32>
+          <GraphicApplication Value="True"/>
+        </Win32>
+      </Options>
+    </Linking>
+  </CompilerOptions>
+  <Debugging>
+    <Exceptions>
+      <Item>
+        <Name Value="EAbort"/>
+      </Item>
+      <Item>
+        <Name Value="ECodetoolError"/>
+      </Item>
+      <Item>
+        <Name Value="EFOpenError"/>
+      </Item>
+    </Exceptions>
+  </Debugging>
+</CONFIG>

+ 24 - 0
test/test_spinner.lpr

@@ -0,0 +1,24 @@
+program test_spinner;
+
+{$mode objfpc}{$H+}
+
+uses
+  {$IFDEF UNIX}
+  cthreads,
+  {$ENDIF}
+  {$IFDEF HASAMIGA}
+  athreads,
+  {$ENDIF}
+  Interfaces, // this includes the LCL widgetset
+  Forms, uecontrols, unit1;
+
+{$R *.res}
+
+begin
+  RequireDerivedFormResource:=True;
+  Application.Scaled:=True;
+  Application.Initialize;
+  Application.CreateForm(TForm1, Form1);
+  Application.Run;
+end.
+

+ 2 - 2
test/test_supergauge/sgtest.lfm

@@ -1,7 +1,7 @@
 object SGTestFrm: TSGTestFrm
-  Left = 575
+  Left = 1428
   Height = 851
-  Top = 238
+  Top = 268
   Width = 1323
   Caption = 'Super Gauge Test Application Test v0.0'
   ClientHeight = 851

+ 1 - 1
test/test_supergauge/sgtest.pas

@@ -25,7 +25,7 @@ uses
   BGRAShape, BGRAImageList, SuperGaugeCommon, SuperGauge,about;
 
 const
-  VERSIONSTR = '1.02';            // SG TEST version, Should ALWAYS show as a delta when merging!
+  VERSIONSTR = '1.03';            // SG TEST version, Should ALWAYS show as a delta when merging!
 
 type
   { TSGTestFrm }

+ 276 - 0
test/test_superspinner/about.lfm

@@ -0,0 +1,276 @@
+object AboutFrm: TAboutFrm
+  Left = 1803
+  Height = 653
+  Top = 149
+  Width = 615
+  BorderStyle = bsSingle
+  Caption = 'About Super Spinner'
+  ClientHeight = 653
+  ClientWidth = 615
+  Color = clSkyBlue
+  DesignTimePPI = 144
+  FormStyle = fsStayOnTop
+  Icon.Data = {
+    9E09000000000100010018180000010020008809000016000000280000001800
+    0000300000000100200000000000000900006400000064000000000000000000
+    0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+    FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+    FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+    FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+    FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+    FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+    FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00F2F2
+    F2FF7B7B7BFF393939FF101010FF090909FF090909FF101010FF323232FF7373
+    73FFDEDEDEFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+    FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFF737373FF0909
+    09FF282828FF535353FF6C6C6CFF7B7B7BFF7B7B7BFF6C6C6CFF5A5A5AFF3232
+    32FF090909FF535353FFE7E7E7FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+    FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00F2F2F2FF323232FF212121FF6C6C
+    6CFF848484FF848484FF848484FF848484FF848484FF848484FF848484FF8484
+    84FF7B7B7BFF424242FF101010FFADADADFFFFFFFF00FFFFFF00FFFFFF00FFFF
+    FF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFF323232FF323232FF7B7B7BFFA4A4
+    A4FFCECECEFFD6D6D6FFD6D6D6FF959595FF8B8B8BFFD6D6D6FFDEDEDEFFCECE
+    CEFFC4C4C4FF848484FF646464FF101010FFADADADFFFFFFFF00FFFFFF00FFFF
+    FF00FFFFFF00FFFFFF00FFFFFF00737373FF212121FF7B7B7BFF848484FFB4B4
+    B4FFB4B4B4FF848484FFCECECEFFCECECEFFD6D6D6FFCECECEFF848484FFB4B4
+    B4FFDEDEDEFF848484FF848484FF6C6C6CFF101010FFCECECEFFFFFFFF00FFFF
+    FF00FFFFFF00FFFFFF00F2F2F2FF090909FF6C6C6CFF848484FF848484FF8B8B
+    8BFFDEDEDEFFFFFFFFFFF7F7F7FFA4A4A4FFF2F2F2FFADADADFF848484FFCECE
+    CEFFCECECEFF9E9E9EFF848484FF848484FF5A5A5AFF323232FFFFFFFFFFFFFF
+    FF00FFFFFF00FFFFFF00848484FF282828FF848484FF848484FF848484FFADAD
+    ADFFE7E7E7FF959595FF9E9E9EFFADADADFFD6D6D6FFCECECEFF848484FF9595
+    95FFCECECEFF848484FF848484FF848484FF848484FF282828FFBBBBBBFFFFFF
+    FF00FFFFFF00FFFFFF00323232FF535353FF848484FF848484FF848484FF8B8B
+    8BFFDEDEDEFFCECECEFFDEDEDEFFB4B4B4FF8B8B8BFFDEDEDEFFDEDEDEFFD6D6
+    D6FFCECECEFF848484FF848484FF848484FF848484FF646464FF646464FFFFFF
+    FF00FFFFFF00FFFFFF00101010FF6C6C6CFF848484FF848484FF848484FF8484
+    84FF848484FF848484FF848484FF737373FF6C6C6CFF848484FF848484FF8484
+    84FF848484FF848484FF6B6B95FF6978A7FF809393FF7B7B7BFF282828FFFFFF
+    FF00FFFFFF00FFFFFF00090909FF7C9E9EFF809B9BFF848484FF848484FF8484
+    84FF848484FF848484FF737373FF737373FF6C6C6CFF737373FF848484FF8484
+    84FF848484FF848484FF4C4CB4FF6287C3FF80A5A5FF7B7B7BFF090909FFFFFF
+    FF00FFFFFF00FFFFFF00090909FF7C9E9EFF80B5B5FF848484FF848484FF8484
+    84FF848484FF848484FF8B8B8BFF5B81B6FF4F75A9FF7B7B7BFF848484FF8484
+    84FF848484FF848484FF3131CEFF77B5C6FF809393FF7B7B7BFF090909FFFFFF
+    FF00FFFFFF00FFFFFF00101010FF728282FF7FC6C7FF848484FF848484FF8484
+    84FF848484FF848484FF848484FF5B81B6FF4D76AFFF848484FF848484FF8484
+    84FF848484FF7A7A86FF2929D6FF7FD6D7FF848484FF7B7B7BFF282828FFFFFF
+    FF00FFFFFF00FFFFFF00323232FF5A5A5AFF7FDCDCFF848484FF848484FF8484
+    84FF848484FF848484FF848484FF4777B9FF4777B9FF848484FF848484FF8484
+    84FF848484FF3939C6FF637AB4FF7FBFBFFF848484FF6C6C6CFF5A5A5AFFFFFF
+    FF00FFFFFF00FFFFFF00737373FF323232FF80AFAFFF80B5B5FF848484FF8484
+    84FF848484FF848484FF848484FF4777B9FF4777B9FF848484FF848484FF8484
+    84FF4F4FB0FF3E41C4FF7FDCDCFF848484FF848484FF323232FFB4B4B4FFFFFF
+    FF00FFFFFF00FFFFFF00DEDEDEFF090909FF7B7B7BFF7FD6D7FF809B9BFF8484
+    84FF848484FF848484FF848484FF4777B9FF4777B9FF848484FF70708FFF3131
+    CEFF3E41C4FF7FD6D7FF809B9BFF848484FF737373FF212121FFF7F7F7FFFFFF
+    FF00FFFFFF00FFFFFF00FFFFFF00535353FF424242FF848484FF7ECDD0FF80BD
+    BDFF848484FF848484FF848484FF4777B9FF2A5AD5FF2929D6FF3131CEFF6C8F
+    B8FF7FDCDCFF809393FF848484FF7B7B7BFF282828FFA4A4A4FFFFFFFF00FFFF
+    FF00FFFFFF00FFFFFF00FFFFFF00E7E7E7FF101010FF646464FF848484FF80A5
+    A5FF7FD6D7FF7FD1D2FF80BDBDFF4792D4FF3F8CDDFF7ECDD0FF7FD6D7FF80B5
+    B5FF848484FF848484FF848484FF424242FF5A5A5AFFFFFFFF00FFFFFF00FFFF
+    FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00B4B4B4FF101010FF6C6C6CFF8484
+    84FF848484FF848484FF809B9BFF4789CCFF4786C9FF808989FF848484FF8484
+    84FF848484FF7B7B7BFF424242FF393939FFF7F7F7FFFFFFFF00FFFFFF00FFFF
+    FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00ADADADFF101010FF5A5A
+    5AFF848484FF848484FF848484FF848484FF848484FF848484FF848484FF8484
+    84FF6C6C6CFF282828FF535353FFF7F7F7FFFFFFFF00FFFFFF00FFFFFF00FFFF
+    FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00CECECEFF3232
+    32FF282828FF646464FF7B7B7BFF7B7B7BFF7B7B7BFF7B7B7BFF6C6C6CFF3939
+    39FF212121FFA4A4A4FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+    FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+    FFFFB4B4B4FF646464FF282828FF101010FF101010FF282828FF5A5A5AFFADAD
+    ADFFF7F7F7FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+    FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+    FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+    FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+    FF00000000000000000000000000000000000000000000000000000000000000
+    0000000000000000000000000000000000000000000000000000000000000000
+    0000000000000000000000000000000000000000000000000000000000000000
+    0000
+  }
+  OnCreate = FormCreate
+  OnShow = FormShow
+  Position = poMainFormCenter
+  LCLVersion = '3.6.0.0'
+  object Panel1: TPanel
+    Left = 0
+    Height = 53
+    Top = 600
+    Width = 615
+    Align = alBottom
+    ClientHeight = 53
+    ClientWidth = 615
+    ParentBackground = False
+    TabOrder = 1
+    object CloseBtn: TBitBtn
+      Left = 480
+      Height = 45
+      Top = 3
+      Width = 113
+      Caption = 'Close'
+      ImageIndex = 6
+      OnClick = CloseBtnClick
+      TabOrder = 0
+    end
+  end
+  object SGVersionLbl: TLabel
+    Left = 16
+    Height = 45
+    Top = 208
+    Width = 185
+    Caption = 'SGVersionLbl'
+    Font.CharSet = ANSI_CHARSET
+    Font.Height = -32
+    Font.Pitch = fpVariable
+    Font.Quality = fqDraft
+    ParentFont = False
+  end
+  object NameLbl: TLabel
+    Left = 16
+    Height = 54
+    Top = 64
+    Width = 550
+    Caption = 'Super Spinner Test Program'
+    Font.CharSet = ANSI_CHARSET
+    Font.Height = -40
+    Font.Name = 'Segoe UI Black'
+    Font.Pitch = fpVariable
+    Font.Quality = fqDraft
+    Font.Style = [fsBold]
+    ParentFont = False
+  end
+  object NameLbl1: TLabel
+    Left = 16
+    Height = 54
+    Top = 160
+    Width = 433
+    Caption = 'Super Spinner Version'
+    Font.CharSet = ANSI_CHARSET
+    Font.Height = -40
+    Font.Name = 'Segoe UI Black'
+    Font.Pitch = fpVariable
+    Font.Quality = fqDraft
+    Font.Style = [fsBold]
+    ParentFont = False
+  end
+  object SGTestVersionLbl: TLabel
+    Left = 16
+    Height = 45
+    Top = 112
+    Width = 241
+    Caption = 'SGTestVersionLbl'
+    Font.CharSet = ANSI_CHARSET
+    Font.Height = -32
+    Font.Pitch = fpVariable
+    Font.Quality = fqDraft
+    ParentFont = False
+  end
+  object Memo1: TMemo
+    Left = 0
+    Height = 280
+    Top = 320
+    Width = 615
+    Align = alBottom
+    Lines.Strings = (
+      'Super SpinnerAbout '
+      ''
+      ''
+      '-- TO DO''s (Feel Free to do them and submit) --'
+      '* Code cleaning, always in need from an expert'
+      '* Linux Testing (ARM and x86)'
+    )
+    ReadOnly = True
+    ScrollBars = ssBoth
+    TabOrder = 0
+    TabStop = False
+  end
+  object Image1: TImage
+    Left = 16
+    Height = 50
+    Top = 22
+    Width = 54
+    Picture.Data = {
+      1754506F727461626C654E6574776F726B477261706869632808000089504E47
+      0D0A1A0A0000000D494844520000003000000030080300000060DC09B5000003
+      00504C5445FFFFFF000000020202030303040404050505060606070707080808
+      0909090A0A0A0B0B0B0C0C0C0D0D0D0E0E0E0F0F0F1010101111111212121313
+      131414141515151616161717171818181919191A1A1A1B1B1B1C1C1C1D1D1D1E
+      1E1E1F1F1F202020212121222222232323242424252525262626272727282828
+      2929292A2A2A2B2B2B2C2C2C2D2D2D2E2E2E2F2F2F3030303131313232323333
+      333434343535353636363737373838383939393A3A3A3B3B3B3C3C3C3D3D3D3E
+      3E3E3F3F3F404040414141424242434343444444454545464646474747484848
+      4949494A4A4A4B4B4B4C4C4C4D4D4D4E4E4E4F4F4F5050505151515252525353
+      535454545555555656565757575858585959595A5A5A5B5B5B5C5C5C5D5D5D5E
+      5E5E5F5F5F606060616161626262636363646464656565666666676767686868
+      6969696A6A6A6B6B6B6C6C6C6D6D6D6E6E6E6F6F6F7070707171717272727373
+      737474747575757676767777777878787979797A7A7A7B7B7B7C7C7C7D7D7D7E
+      7E7E7F7F7F808080818181828282838383848484858585868686878787888888
+      8989898A8A8A8B8B8B8C8C8C8D8D8D8E8E8E8F8F8F9090909191919292929393
+      939494949595959696969797979898989999999A9A9A9B9B9B9C9C9C9D9D9D9E
+      9E9E9F9F9FA0A0A0A1A1A1A2A2A2A3A3A3A4A4A4A5A5A5A6A6A6A7A7A7A8A8A8
+      A9A9A9AAAAAAABABABACACACADADADAEAEAEAFAFAFB0B0B0B1B1B1B2B2B2B3B3
+      B3B4B4B4B5B5B5B6B6B6B7B7B7B8B8B8B9B9B9BABABABBBBBBBCBCBCBDBDBDBE
+      BEBEBFBFBFC0C0C0C1C1C1C2C2C2C3C3C3C4C4C4C5C5C5C6C6C6C7C7C7C8C8C8
+      C9C9C9CACACACBCBCBCCCCCCCDCDCDCECECECFCFCFD0D0D0D1D1D1D2D2D2D3D3
+      D3D4D4D4D5D5D5D6D6D6D7D7D7D8D8D8D9D9D9DADADADBDBDBDCDCDCDDDDDDDE
+      DEDEDFDFDFE0E0E0E1E1E1E2E2E2E3E3E3E4E4E4E5E5E5E6E6E6E7E7E7E8E8E8
+      E9E9E9EAEAEAEBEBEBECECECEDEDEDEEEEEEEFEFEFF0F0F0F1F1F1F2F2F2F3F3
+      F3F4F4F4F5F5F5F6F6F6F7F7F7F8F8F8F9F9F9FAFAFAFBFBFBFCFCFCFDFDFDFE
+      FEFEFFFFFF9571E25E0000000174524E530040E6D86600000001624B4744FFA5
+      07F2C500000009704859730002CFBC0002CFBC018797D5F7000004B449444154
+      48C7C5565B6C145518EE4F6F782901312AC65E424A8988696DBC34F24480A845
+      892962C048628DE1454385D06E4313342AC1AA2424220F8DA62A3E808D6D77B7
+      DB36BD41B7DBEEEEEC9E33B333BB337B87EE05DBDA8B965AA4EA1ECFCCEECEEE
+      B6151EF99ECE9CF37DF39FFF3FFFF966B2B2EE014AF22081BC92BBB3B7C8C4FC
+      E28A1D3B2A8AF3E571E91DE94594515E77D128780301AF3072B1AE9C4E14FD2F
+      FD058035073B7D21BFCB21359F961C2E7FC8A73D940DF0FCEAFC4701AAFB235E
+      16218CC586E32E8C1162BD9181BD008FACC6CF8707BF0E7B643685D8A4712903
+      843CE1F3EB206F253F1B4A87C2384E4F1350090E5FDD0AB09C9F07DB1D417B92
+      9F214042942F879C4CFEC3B0990B381DAB081072777FEF17CA60433AFF597860
+      28DA5A8F5C2BB684B057F7FA0921605C07156902807311DE50F3BE4D4C26AD54
+      49E6FB2EEFD360CE1EBE909EC626D815C1481A3878C4925088CD9FC9025AD6D6
+      BD1F3B053A19AD4E2B2E64F7D37A22F7F0E15A9384E4F76296552A265C78E54B
+      8997A7A4AB796A8812A88922253D53EDDBFD7499E564058791D8F6F2790FA7C4
+      44D1B7E00935830E2F520A229ADF3B2361D63CD8DBDDD367441C67D2BAD87856
+      C86350B380277D6AC9919543033A9DBEAB4BAF358CB19CA89E250E3C03BB147E
+      297C10424905E740BDDA2E8302BDD6C4A9748C4227128D9B0F3FF853D3EC80D6
+      90845E6765D515ECBB94386EC8353AD559D69C7CBF0C5D3F9B0A2198EF8B2701
+      853C970A30980A4043E899540E9C589A105478784954E042A8479F26E8D29958
+      2C2680FD5509C18BA1BEC6934D14F5E7786448DB91C1A0353AF0170DF25AC359
+      EEDA4E55D07BBC5EA3D1347CF8158FBB332268471CF8F431BAA639D69C12D02D
+      89AE3830EED3656CC9CC6257724DDD52A1904A9A1BD6762537450FAF1BA527BD
+      055696155B3A7F69EFE86CA7256D6F6F6FBB62B7A595F57E48DCCE1FD583B333
+      C1A99949DBB0A3ABA3DB353D1B7206BCAAC27B19B215C16638AAB606334D96A6
+      6748ECAFF69E0532F9EB3F844C59D4D66880C244F33D958C60F592F931F31596
+      DCBC14242EFD9875924C33C9248295B033D9DE5A6FBCE72D136451B031C373B7
+      077E27539C6DCCBAE4B1C5AD01B97BD4F62E8203D1F87DE00442C8ADD971276B
+      9B2524B6301532BCF989D3A92C460FC3E3EA15CD1974CBF5F3B5BDC110197F5F
+      B7F3F3CAE8D6CFAFD6637AD19164CC8734577D29221BCA4FAF9DC2E2F8EC6D4A
+      B430A2149DFF978EB4078E8C8AD404F6C1C6749BF9268CF896EA8F66096BB2DA
+      FD31F2B98398CC0C9A204BDEA1770EF5F2A1960CB7AC8002E3F8D0FEB3C20D32
+      8F2CA38E1839C59288D532729D2C30A2A5EEBBC8D87AD89E6E7DEB61ABD33D28
+      305112237FCC1132ABF1D14CE66E92988741BCE013B7C1BAE5E65DE91C473677
+      90BDB1B038E3E34FB65E73FEB6F8E78493DE20BB5F7C0ED62CB76F806D23216C
+      63EC5686B132AEA6A3BC4D1ED9683142A34FAFB4FBACAC1CD8D01291A829D21A
+      26CC58799022DF6E4C34D1323C0450331CF128FD9C306384DD11E37EC8B4FA14
+      2A01D6D6F604433E8193CE7C2A72822F14EC79772D64187D2636D1AF6C55639B
+      450A048301C9D2D65845271EBBE397BA58FE98179455EDDE5D5556208F8BEFFA
+      2FB0A72437F9EB905BB2E71EFCBAFC07F609FDFF63C8E2BD0000000049454E44
+      AE426082
+    }
+  end
+  object AuthorLbl: TLabel
+    Left = 72
+    Height = 32
+    Top = 264
+    Width = 429
+    Caption = 'Author : Sandy Ganz, [email protected]'
+    Font.CharSet = ANSI_CHARSET
+    Font.Height = -24
+    Font.Pitch = fpVariable
+    Font.Quality = fqDraft
+    ParentFont = False
+  end
+end

+ 60 - 0
test/test_superspinner/about.pas

@@ -0,0 +1,60 @@
+unit about;
+
+{$mode ObjFPC}{$H+}
+
+interface
+
+uses
+  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls,
+  Buttons, SuperSpinner;
+
+type
+
+  { TAboutFrm }
+
+  TAboutFrm = class(TForm)
+    CloseBtn: TBitBtn;
+    Image1: TImage;
+    AuthorLbl: TLabel;
+    Memo1: TMemo;
+    NameLbl: TLabel;
+    NameLbl1: TLabel;
+    Panel1: TPanel;
+    SGVersionLbl: TLabel;
+    SGTestVersionLbl: TLabel;
+    procedure CloseBtnClick(Sender: TObject);
+    procedure FormCreate(Sender: TObject);
+    procedure FormShow(Sender: TObject);
+  private
+
+  public
+    VersionStr: string;
+  end;
+
+var
+  AboutFrm: TAboutFrm;
+
+implementation
+
+{$R *.lfm}
+
+{ TAboutFrm }
+
+procedure TAboutFrm.FormCreate(Sender: TObject);
+begin
+  SGTestVersionLbl.Caption := '??';
+end;
+
+procedure TAboutFrm.FormShow(Sender: TObject);
+begin
+  SGTestVersionLbl.Caption := VersionStr;
+    SGVersionLbl.Caption := SuperSpinner.VERSIONSTR;
+end;
+
+procedure TAboutFrm.CloseBtnClick(Sender: TObject);
+begin
+  Close;
+end;
+
+end.
+

BIN
test/test_superspinner/project1.ico


+ 99 - 0
test/test_superspinner/project1.lpi

@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<CONFIG>
+  <ProjectOptions>
+    <Version Value="12"/>
+    <PathDelim Value="\"/>
+    <General>
+      <SessionStorage Value="InProjectDir"/>
+      <Title Value="project1"/>
+      <Scaled Value="True"/>
+      <ResourceType Value="res"/>
+      <UseXPManifest Value="True"/>
+      <XPManifest>
+        <DpiAware Value="True"/>
+      </XPManifest>
+      <Icon Value="0"/>
+    </General>
+    <BuildModes>
+      <Item Name="Default" Default="True"/>
+    </BuildModes>
+    <PublishOptions>
+      <Version Value="2"/>
+      <UseFileFilters Value="True"/>
+    </PublishOptions>
+    <RunParams>
+      <FormatVersion Value="2"/>
+    </RunParams>
+    <RequiredPackages>
+      <Item>
+        <PackageName Value="LazControls"/>
+      </Item>
+      <Item>
+        <PackageName Value="LazControlDsgn"/>
+      </Item>
+      <Item>
+        <PackageName Value="uEControls"/>
+      </Item>
+      <Item>
+        <PackageName Value="bgracontrols"/>
+      </Item>
+      <Item>
+        <PackageName Value="LCL"/>
+      </Item>
+    </RequiredPackages>
+    <Units>
+      <Unit>
+        <Filename Value="project1.lpr"/>
+        <IsPartOfProject Value="True"/>
+      </Unit>
+      <Unit>
+        <Filename Value="sstest.pas"/>
+        <IsPartOfProject Value="True"/>
+        <ComponentName Value="SSTestFrm"/>
+        <HasResources Value="True"/>
+        <ResourceBaseClass Value="Form"/>
+      </Unit>
+      <Unit>
+        <Filename Value="about.pas"/>
+        <IsPartOfProject Value="True"/>
+        <ComponentName Value="AboutFrm"/>
+        <HasResources Value="True"/>
+        <ResourceBaseClass Value="Form"/>
+      </Unit>
+    </Units>
+  </ProjectOptions>
+  <CompilerOptions>
+    <Version Value="11"/>
+    <PathDelim Value="\"/>
+    <Target>
+      <Filename Value="project1"/>
+    </Target>
+    <SearchPaths>
+      <IncludeFiles Value="$(ProjOutDir)"/>
+      <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
+    </SearchPaths>
+    <Linking>
+      <Debugging>
+        <DebugInfoType Value="dsDwarf3"/>
+      </Debugging>
+      <Options>
+        <Win32>
+          <GraphicApplication Value="True"/>
+        </Win32>
+      </Options>
+    </Linking>
+  </CompilerOptions>
+  <Debugging>
+    <Exceptions>
+      <Item>
+        <Name Value="EAbort"/>
+      </Item>
+      <Item>
+        <Name Value="ECodetoolError"/>
+      </Item>
+      <Item>
+        <Name Value="EFOpenError"/>
+      </Item>
+    </Exceptions>
+  </Debugging>
+</CONFIG>

+ 26 - 0
test/test_superspinner/project1.lpr

@@ -0,0 +1,26 @@
+program project1;
+
+{$mode objfpc}{$H+}
+
+uses
+  {$IFDEF UNIX}
+  cthreads,
+  {$ENDIF}
+  {$IFDEF HASAMIGA}
+  athreads,
+  {$ENDIF}
+  Interfaces, // this includes the LCL widgetset
+  Forms, lazcontrols, uecontrols, sstest, about
+  { you can add units after this };
+
+{$R *.res}
+
+begin
+  RequireDerivedFormResource:=True;
+  Application.Scaled:=True;
+  Application.Initialize;
+  Application.CreateForm(TSSTestFrm, SSTestFrm);
+  Application.CreateForm(TAboutFrm, AboutFrm);
+  Application.Run;
+end.
+

+ 1923 - 0
test/test_superspinner/sstest.lfm

@@ -0,0 +1,1923 @@
+object SSTestFrm: TSSTestFrm
+  Left = 525
+  Height = 877
+  Top = 153
+  Width = 1247
+  Caption = 'SSTestFrm'
+  ClientHeight = 877
+  ClientWidth = 1247
+  DesignTimePPI = 144
+  Menu = MainMenu1
+  OnCreate = FormCreate
+  OnDestroy = FormDestroy
+  LCLVersion = '3.6.0.0'
+  Scaled = False
+  object GaugeTs: TPageControl
+    Left = 536
+    Height = 877
+    Top = 0
+    Width = 711
+    ActivePage = BasicTab
+    Align = alRight
+    HotTrack = True
+    TabIndex = 0
+    TabOrder = 0
+    object BasicTab: TTabSheet
+      Caption = 'Basic'
+      ClientHeight = 839
+      ClientWidth = 703
+      ParentShowHint = False
+      object GroupBox1: TGroupBox
+        Left = 8
+        Height = 280
+        Top = 16
+        Width = 248
+        Caption = 'Size'
+        ClientHeight = 250
+        ClientWidth = 244
+        ParentBackground = False
+        TabOrder = 0
+        object WidthAddBtn: TBitBtn
+          Left = 8
+          Height = 45
+          Hint = 'Increase Width'
+          Top = 40
+          Width = 113
+          Caption = 'Width'
+          Images = ImageList1
+          ImageIndex = 0
+          OnClick = WidthAddBtnClick
+          ParentShowHint = False
+          ShowHint = True
+          TabOrder = 0
+        end
+        object WidthSubBtn: TBitBtn
+          Left = 128
+          Height = 45
+          Hint = 'Decrease Width'
+          Top = 40
+          Width = 113
+          Caption = 'Width'
+          Images = ImageList1
+          ImageIndex = 1
+          OnClick = WidthSubBtnClick
+          ParentShowHint = False
+          ShowHint = True
+          TabOrder = 1
+        end
+        object HeightAddBtn: TBitBtn
+          Left = 8
+          Height = 45
+          Hint = 'Increase Height'
+          Top = 88
+          Width = 113
+          Caption = 'Height'
+          Images = ImageList1
+          ImageIndex = 0
+          OnClick = HeightAddBtnClick
+          ParentShowHint = False
+          ShowHint = True
+          TabOrder = 2
+        end
+        object HeightSubBtn: TBitBtn
+          Left = 128
+          Height = 45
+          Hint = 'Decrease Height'
+          Top = 88
+          Width = 113
+          Caption = 'Height'
+          Images = ImageList1
+          ImageIndex = 1
+          OnClick = HeightSubBtnClick
+          ParentShowHint = False
+          ShowHint = True
+          TabOrder = 3
+        end
+        object ResetSizeBtn: TBitBtn
+          Left = 9
+          Height = 45
+          Hint = 'Reset to Default'
+          Top = 192
+          Width = 232
+          Caption = 'Reset Size'
+          Images = ImageList1
+          ImageIndex = 7
+          OnClick = ResetSizeBtnClick
+          ParentShowHint = False
+          ShowHint = True
+          TabOrder = 4
+        end
+        object WidthLbl: TLabel
+          Left = 8
+          Height = 25
+          Top = 0
+          Width = 62
+          Caption = 'Width : '
+        end
+        object WidthValLbl: TLabel
+          Left = 72
+          Height = 25
+          Top = 0
+          Width = 35
+          Caption = 'N/A'
+          Font.Style = [fsBold]
+          ParentFont = False
+        end
+        object HeightLbl: TLabel
+          Left = 128
+          Height = 25
+          Top = 0
+          Width = 67
+          Caption = 'Height : '
+        end
+        object HeightValLbl: TLabel
+          Left = 192
+          Height = 25
+          Top = 0
+          Width = 35
+          Caption = 'N/A'
+          Font.Style = [fsBold]
+          ParentFont = False
+        end
+        object WidthHeightAddBtn: TBitBtn
+          Left = 9
+          Height = 45
+          Hint = 'Increase Size Width and Height, This is a SQUARE compoent '#13#10'so will alway fit the minimum sized Width or Height. This does'#13#10'them together.'
+          Top = 136
+          Width = 113
+          Caption = 'W&&H Size'
+          Images = ImageList1
+          ImageIndex = 0
+          OnClick = WidthHeightAddBtnClick
+          ParentShowHint = False
+          ShowHint = True
+          TabOrder = 5
+        end
+        object WidthHeightSubBtn: TBitBtn
+          Left = 128
+          Height = 45
+          Hint = 'Decrease Size Width and Height, This is a SQUARE compoent '#13#10'so will alway fit the minimum sized Width or Height. This does'#13#10'them together.'
+          Top = 136
+          Width = 113
+          Caption = 'W&&H Size'
+          Images = ImageList1
+          ImageIndex = 1
+          OnClick = WidthHeightSubBtnClick
+          ParentShowHint = False
+          ShowHint = True
+          TabOrder = 6
+        end
+      end
+      object GroupBox2: TGroupBox
+        Left = 264
+        Height = 280
+        Top = 16
+        Width = 248
+        Caption = 'Position'
+        ClientHeight = 250
+        ClientWidth = 244
+        ParentBackground = False
+        TabOrder = 1
+        object LeftAddBtn: TBitBtn
+          Left = 8
+          Height = 45
+          Hint = 'Increase Left'
+          Top = 40
+          Width = 113
+          Caption = 'Left'
+          Images = ImageList1
+          ImageIndex = 0
+          OnClick = LeftAddBtnClick
+          ParentShowHint = False
+          ShowHint = True
+          TabOrder = 0
+        end
+        object TopSubBtn: TBitBtn
+          Left = 120
+          Height = 45
+          Hint = 'Decrease Top'
+          Top = 88
+          Width = 113
+          Caption = 'Top'
+          Images = ImageList1
+          ImageIndex = 1
+          OnClick = TopSubBtnClick
+          ParentShowHint = False
+          ShowHint = True
+          TabOrder = 1
+        end
+        object TopAddBtn: TBitBtn
+          Left = 8
+          Height = 45
+          Hint = 'Increase Top'
+          Top = 88
+          Width = 113
+          Caption = 'Top'
+          Images = ImageList1
+          ImageIndex = 0
+          OnClick = TopAddBtnClick
+          ParentShowHint = False
+          ShowHint = True
+          TabOrder = 2
+        end
+        object LeftSubBtn: TBitBtn
+          Left = 120
+          Height = 45
+          Hint = 'Decrease Left'
+          Top = 40
+          Width = 113
+          Caption = 'Left'
+          Images = ImageList1
+          ImageIndex = 1
+          OnClick = LeftSubBtnClick
+          ParentShowHint = False
+          ShowHint = True
+          TabOrder = 3
+        end
+        object ResetPositionBtn: TBitBtn
+          Left = 8
+          Height = 45
+          Hint = 'Reset To Default'
+          Top = 192
+          Width = 232
+          Caption = 'Reset Position'
+          Images = ImageList1
+          ImageIndex = 7
+          OnClick = ResetPositionBtnClick
+          ParentShowHint = False
+          ShowHint = True
+          TabOrder = 4
+        end
+        object LeftLbl: TLabel
+          Left = 8
+          Height = 25
+          Top = 0
+          Width = 43
+          Caption = 'Left : '
+        end
+        object LeftValLbl: TLabel
+          Left = 72
+          Height = 25
+          Top = 0
+          Width = 35
+          Caption = 'N/A'
+          Font.Style = [fsBold]
+          ParentFont = False
+        end
+        object TopLbl: TLabel
+          Left = 128
+          Height = 25
+          Top = 0
+          Width = 43
+          Caption = 'Top : '
+        end
+        object TopValLbl: TLabel
+          Left = 192
+          Height = 25
+          Top = 0
+          Width = 35
+          Caption = 'N/A'
+          Font.Style = [fsBold]
+          ParentFont = False
+        end
+      end
+      object Memo2: TMemo
+        Left = 264
+        Height = 520
+        Top = 304
+        Width = 424
+        Lines.Strings = (
+          'Basic Settings'
+          ''
+          'Setting the color here is for the background'
+          'of the client area of the control.'
+          ''
+          'Spin Resolution is the number of detents '
+          'that it takes to move the spinner. These '
+          'are somewhat abstracted.'
+          ''
+          'Mouse Wheel Speed determines how many '
+          'degrees the mouse will move the wheel, but '
+          'one movement of any degrees is one event.'
+          ''
+          'Position Snap If ENABLED will snap the spinner'
+          'to the mouse position if clicked'
+          ''
+          'Spinner Locked will stop events for specific'
+          'Spinner functions, movement, in/out, etc.'
+          ''
+          'Auto Scale - Hover Over the Check Box!!'
+        )
+        TabOrder = 2
+      end
+      object GroupBox5: TGroupBox
+        Left = 8
+        Height = 320
+        Top = 312
+        Width = 248
+        Caption = 'Basic'
+        ClientHeight = 290
+        ClientWidth = 244
+        TabOrder = 3
+        object BackgroundColorLbl: TLabel
+          Left = 8
+          Height = 25
+          Top = 0
+          Width = 43
+          Caption = 'Color'
+        end
+        object BackgroundColorCb: TColorBox
+          Left = 64
+          Height = 26
+          Hint = 'Client Color'
+          Top = 0
+          Width = 171
+          Style = [cbStandardColors, cbExtendedColors, cbIncludeNone, cbCustomColor]
+          ItemHeight = 20
+          OnChange = BackgroundColorCbChange
+          ParentShowHint = False
+          ShowHint = True
+          TabOrder = 0
+        end
+        object SpinResolutionCb: TComboBox
+          Left = 8
+          Height = 33
+          Hint = 'Resolution of the spinner movements.'#13#10'srHighest - Maximum from mouse movements'#13#10'srHigh, '#13#10'srHighMedium, '#13#10'srMedium, '#13#10'srMediumLow'#13#10'srLow, '#13#10'srLowest - Slowest Like Old iPod, notchy'#13#10#13#10'These are really hiding the number of clicks per revolution since '#13#10'that might not always be the same and you should NOT rely'#13#10'on them for accuracy'
+          Top = 64
+          Width = 168
+          ItemHeight = 25
+          Items.Strings = (
+            'srHighest'
+            'srHigh'
+            'srHighMedium'
+            'srMedium'
+            'srMediumLow'
+            'srLow'
+            'srLowest'
+          )
+          ParentShowHint = False
+          ShowHint = True
+          TabOrder = 1
+          OnChange = SpinResolutionCbChange
+        end
+        object FaceFillStyleLbl1: TLabel
+          Left = 10
+          Height = 25
+          Top = 32
+          Width = 123
+          Caption = 'Spin Resolution'
+        end
+        object SpinnerLockedCb: TCheckBox
+          Left = 10
+          Height = 29
+          Hint = 'Locks movement and clicks on Cap and Knob. General component '#13#10'OnClick handlers will still fire.'#13#10#13#10'Typically this is to prevent movent and a few other actions including'#13#10'some Mouse Events specific to the Spinner but NOT the overall compoent'
+          Top = 224
+          Width = 146
+          Caption = 'Spinner Locked'
+          ParentShowHint = False
+          ShowHint = True
+          TabOrder = 2
+          OnChange = SpinnerLockedCbChange
+        end
+        object MouseWheelSpeedTB: TBCTrackbarUpdown
+          Left = 9
+          Height = 34
+          Hint = '0 - Mouse Wheel Disabled'#13#10'1 - Slowest/Highest Resolution'#13#10'255 - Fastest/Lowest Resolution'
+          Top = 143
+          Width = 85
+          AllowNegativeValues = False
+          BarExponent = 1
+          Increment = 1
+          LongTimeInterval = 400
+          MinValue = 0
+          MaxValue = 255
+          OnChange = MouseWheelSpeedTBChange
+          Value = 50
+          ShortTimeInterval = 100
+          Background.Color = clWindow
+          Background.Gradient1.StartColor = clWhite
+          Background.Gradient1.EndColor = clBlack
+          Background.Gradient1.GradientType = gtLinear
+          Background.Gradient1.Point1XPercent = 0
+          Background.Gradient1.Point1YPercent = 0
+          Background.Gradient1.Point2XPercent = 0
+          Background.Gradient1.Point2YPercent = 100
+          Background.Gradient2.StartColor = clWhite
+          Background.Gradient2.EndColor = clBlack
+          Background.Gradient2.GradientType = gtLinear
+          Background.Gradient2.Point1XPercent = 0
+          Background.Gradient2.Point1YPercent = 0
+          Background.Gradient2.Point2XPercent = 0
+          Background.Gradient2.Point2YPercent = 100
+          Background.Gradient1EndPercent = 35
+          Background.Style = bbsColor
+          ButtonBackground.Gradient1.StartColor = clBtnShadow
+          ButtonBackground.Gradient1.EndColor = clBtnFace
+          ButtonBackground.Gradient1.GradientType = gtLinear
+          ButtonBackground.Gradient1.Point1XPercent = 0
+          ButtonBackground.Gradient1.Point1YPercent = -50
+          ButtonBackground.Gradient1.Point2XPercent = 0
+          ButtonBackground.Gradient1.Point2YPercent = 50
+          ButtonBackground.Gradient2.StartColor = clBtnFace
+          ButtonBackground.Gradient2.EndColor = clBtnShadow
+          ButtonBackground.Gradient2.GradientType = gtLinear
+          ButtonBackground.Gradient2.Point1XPercent = 0
+          ButtonBackground.Gradient2.Point1YPercent = 50
+          ButtonBackground.Gradient2.Point2XPercent = 0
+          ButtonBackground.Gradient2.Point2YPercent = 150
+          ButtonBackground.Gradient1EndPercent = 50
+          ButtonBackground.Style = bbsGradient
+          ButtonDownBackground.Color = clBtnShadow
+          ButtonDownBackground.Gradient1.StartColor = clWhite
+          ButtonDownBackground.Gradient1.EndColor = clBlack
+          ButtonDownBackground.Gradient1.GradientType = gtLinear
+          ButtonDownBackground.Gradient1.Point1XPercent = 0
+          ButtonDownBackground.Gradient1.Point1YPercent = 0
+          ButtonDownBackground.Gradient1.Point2XPercent = 0
+          ButtonDownBackground.Gradient1.Point2YPercent = 100
+          ButtonDownBackground.Gradient2.StartColor = clWhite
+          ButtonDownBackground.Gradient2.EndColor = clBlack
+          ButtonDownBackground.Gradient2.GradientType = gtLinear
+          ButtonDownBackground.Gradient2.Point1XPercent = 0
+          ButtonDownBackground.Gradient2.Point1YPercent = 0
+          ButtonDownBackground.Gradient2.Point2XPercent = 0
+          ButtonDownBackground.Gradient2.Point2YPercent = 100
+          ButtonDownBackground.Gradient1EndPercent = 35
+          ButtonDownBackground.Style = bbsColor
+          Border.Color = clWindowText
+          Border.Style = bboSolid
+          Rounding.RoundX = 1
+          Rounding.RoundY = 1
+          Font.Color = clWindowText
+          Font.Name = 'Arial'
+          HasTrackBar = True
+          ArrowColor = clBtnText
+          ParentShowHint = False
+          ShowHint = True
+          TabOrder = 3
+          TabStop = True
+          UseDockManager = False
+        end
+        object Label14: TLabel
+          Left = 10
+          Height = 25
+          Top = 112
+          Width = 193
+          Caption = 'Set Mouse Wheel Speed'
+        end
+        object PositionSnapCb: TCheckBox
+          Left = 9
+          Height = 29
+          Hint = 'Position Snap if ENABLED will cause the Spinners position to Advance'#13#10'to the point where the Mouse Clicked to Move. This Will NOT call the '#13#10'position movement callback, just simply sets the indicator.'#13#10#13#10'IF Position Snap is DISABLED then the mouse pointer can grab the'#13#10'spinner at any point and spin without having the position jumping'#13#10'to the point where the mouse was clicked. You are Welcome.'
+          Top = 192
+          Width = 134
+          Caption = 'Position Snap'
+          ParentShowHint = False
+          ShowHint = True
+          TabOrder = 4
+          OnChange = PositionSnapCbChange
+        end
+        object MouseWheelDisabledLbl: TLabel
+          Left = 105
+          Height = 25
+          Hint = 'Set Mouse Wheel Speed > 0 to Enable'
+          Top = 152
+          Width = 132
+          Caption = 'Wheel Disabled'
+          Font.Color = clRed
+          Font.Style = [fsBold]
+          ParentFont = False
+          ParentShowHint = False
+          ShowHint = True
+          Visible = False
+        end
+        object AutoScaleCb: TCheckBox
+          Left = 10
+          Height = 29
+          Hint = 'Auto Scale causes the control to automatically scale many elements as the size '#13#10'changes.'#13#10#13#10'This can be helpful if the display system is in highDPI mode or scaling. '#13#10#13#10'Also if the component does change size at runtime due to the Form''s ''Scaled'' '#13#10'property being set, it''s better to have the Spinner enable ''Auto Scale''.'#13#10#13#10'To stop all scaling on the form, set the Forms property Scaled = False.'#13#10#13#10'If you don''t care or won''t any Spinner scaling, you can set the Auto Scale property of the '#13#10'Spinner to False.'#13#10#13#10'All scaling of the Spinner is based on a Nominal Width and Height of 150 '#13#10'Pixels.'
+          Top = 256
+          Width = 109
+          Caption = 'Auto Scale'
+          ParentShowHint = False
+          ShowHint = True
+          TabOrder = 5
+          OnChange = AutoScaleCbChange
+        end
+      end
+    end
+    object FrameTab: TTabSheet
+      Caption = 'Frame'
+      ClientHeight = 839
+      ClientWidth = 703
+      object FrameBorderColorLbl: TLabel
+        Left = 8
+        Height = 25
+        Top = 24
+        Width = 101
+        Caption = 'Border Color'
+      end
+      object FrameBorderColorCb: TColorBox
+        Left = 136
+        Height = 26
+        Hint = 'Sets the Frames Border Color which is around the spinner.'
+        Top = 23
+        Width = 171
+        Style = [cbStandardColors, cbExtendedColors, cbIncludeNone, cbCustomColor]
+        ItemHeight = 20
+        OnChange = FrameBorderColorCbChange
+        ParentShowHint = False
+        ShowHint = True
+        TabOrder = 0
+      end
+      object FrameRadiusSpe: TSpinEditEx
+        Left = 136
+        Height = 33
+        Hint = 'Sets the Border Width'
+        Top = 56
+        Width = 97
+        MaxLength = 0
+        ParentShowHint = False
+        ShowHint = True
+        TabOrder = 1
+        OnChange = FrameRadiusSpeChange
+        MaxValue = 1000
+        MinRepeatValue = 10
+        NullValue = 0
+        Value = 0
+      end
+      object FrameBorderWidthLbl: TLabel
+        Left = 8
+        Height = 25
+        Top = 64
+        Width = 106
+        Caption = 'Border Width'
+      end
+      object Memo3: TMemo
+        Left = 8
+        Height = 400
+        Top = 152
+        Width = 680
+        Lines.Strings = (
+          'The Frame is the circle around the spinner. Currently you can set this with the'
+          'Border Color Selector.'
+          ''
+          'You can also set the width of the border. This will correctly resize the Knob'
+          'portion of the control but not currently other aspects such as the '
+          'Position or Cap. '
+          ''
+          'The Frame can be useful by chaning the color to indicate things such as'
+          'errors, active control, clicked, etc.'
+        )
+        TabOrder = 2
+      end
+    end
+    object FaceTab: TTabSheet
+      Caption = 'Knob'
+      ClientHeight = 839
+      ClientWidth = 703
+      object KnobFillColorCb: TColorBox
+        Left = 120
+        Height = 26
+        Hint = 'Knobs Fill Color'
+        Top = 56
+        Width = 171
+        Style = [cbStandardColors, cbExtendedColors, cbCustomColor]
+        ItemHeight = 20
+        OnChange = KnobFillColorCbChange
+        ParentShowHint = False
+        ShowHint = True
+        TabOrder = 0
+      end
+      object KnobEdgeColorCb: TColorBox
+        Left = 120
+        Height = 26
+        Hint = 'Knobs Edge Color'
+        Top = 88
+        Width = 171
+        Style = [cbStandardColors, cbExtendedColors, cbCustomColor]
+        ItemHeight = 20
+        OnChange = KnobEdgeColorCbChange
+        ParentShowHint = False
+        ShowHint = True
+        TabOrder = 1
+      end
+      object KnobEdgeColorLbl: TLabel
+        Left = 8
+        Height = 25
+        Top = 89
+        Width = 88
+        Caption = 'Edge Color'
+      end
+      object KnobFillColorLbl: TLabel
+        Left = 8
+        Height = 25
+        Top = 57
+        Width = 69
+        Caption = 'Fill Color'
+      end
+      object KnobStyleLbl: TLabel
+        Left = 8
+        Height = 25
+        Top = 24
+        Width = 37
+        Caption = 'Style'
+      end
+      object KnobStyleCb: TComboBox
+        Left = 120
+        Height = 33
+        Hint = 'Shading Style of the Knob as   TSSStyle '#13#10#13#10'ssFlat - Solid Fill Color'#13#10'ssShaded - Shaded using Edge Color to Fill Color'#13#10'ssPhong - Phong Shading, more 3D'
+        Top = 16
+        Width = 157
+        ItemHeight = 25
+        Items.Strings = (
+          'ssFlat'
+          'ssShaded'
+          'ssPhong'
+        )
+        ParentShowHint = False
+        ShowHint = True
+        TabOrder = 2
+        OnChange = KnobStyleCbChange
+      end
+      object KnobCurveExponentSpe: TFloatSpinEditEx
+        Left = 191
+        Height = 33
+        Hint = 'Shader Curve, Typically for Phong shader'
+        Top = 208
+        Width = 97
+        MaxLength = 0
+        ParentShowHint = False
+        ShowHint = True
+        TabOrder = 3
+        OnChange = KnobCurveExponentSpeChange
+        Increment = 0.01
+        MaxValue = 10
+        MinValue = -10
+        MinRepeatValue = 10
+      end
+      object KnobCurveExponentLbl: TLabel
+        Left = 8
+        Height = 25
+        Top = 216
+        Width = 124
+        Caption = 'Curve Exponent'
+      end
+      object KnobLightIntensitySpe: TSpinEditEx
+        Left = 191
+        Height = 33
+        Hint = 'Light Intensity of the Shader'
+        Top = 168
+        Width = 97
+        MaxLength = 0
+        ParentShowHint = False
+        ShowHint = True
+        TabOrder = 4
+        OnChange = KnobLightIntensitySpeChange
+        MaxValue = 1000
+        MinValue = -1000
+        MinRepeatValue = 10
+        NullValue = 0
+        Value = 0
+      end
+      object KnobLightIntensityLbl: TLabel
+        Left = 9
+        Height = 25
+        Top = 176
+        Width = 111
+        Caption = 'Light Intensity'
+      end
+      object FaceMemo: TMemo
+        Left = 9
+        Height = 440
+        Top = 360
+        Width = 681
+        Lines.Strings = (
+          'Set up various face parameters. '
+          ''
+          'For shading, several options, Phong gives pleasing results.'
+          ''
+          'The Knob portion of the control (Excluding Frame, Client Area, and Cap) '
+          'can trigger specific Knob related events.'
+          ''
+          'The Curve Exponent is for the Phong Shader, and can'
+          'give some nice results. This only applies to the Phong '
+          'shader, values less that 1.0 give good results, Light Intensity'
+          'is basically brightness of the shade'
+          ''
+          'For Phong shading, it''s nice to follow the same settings'
+          'as the pointer cap. Also try using inner and outer colors'
+          'as the same with Phong shading as a start, clBlack/clBlack'
+          'to see the effect.'
+        )
+        TabOrder = 5
+      end
+      object KnobEdgeThicknessLbl: TLabel
+        Left = 8
+        Height = 25
+        Top = 136
+        Width = 120
+        Caption = 'Edge Thickness'
+      end
+      object KnobEdgeThicknessSpe: TSpinEditEx
+        Left = 191
+        Height = 33
+        Hint = 'Edge Thickness'
+        Top = 128
+        Width = 97
+        MaxLength = 0
+        ParentShowHint = False
+        ShowHint = True
+        TabOrder = 6
+        OnChange = KnobEdgeThicknessSpeChange
+        MaxValue = 1000
+        MinRepeatValue = 10
+        NullValue = 0
+        Value = 0
+      end
+    end
+    object PointerTab: TTabSheet
+      Caption = 'Position'
+      ClientHeight = 839
+      ClientWidth = 703
+      object PointerFillColorLbl: TLabel
+        Left = 8
+        Height = 25
+        Top = 57
+        Width = 69
+        Caption = 'Fill Color'
+      end
+      object PositionFillColorCb: TColorBox
+        Left = 120
+        Height = 26
+        Hint = 'Position Fill Color'
+        Top = 56
+        Width = 177
+        Style = [cbStandardColors, cbExtendedColors, cbCustomColor]
+        ItemHeight = 20
+        OnChange = PositionFillColorCbChange
+        ParentShowHint = False
+        ShowHint = True
+        TabOrder = 0
+      end
+      object PositionRadiusSpe: TSpinEditEx
+        Left = 200
+        Height = 33
+        Hint = 'Radiusof the Position Indicator, may not apply to Line type'
+        Top = 168
+        Width = 97
+        MaxLength = 0
+        ParentShowHint = False
+        ShowHint = True
+        TabOrder = 1
+        OnChange = PositionRadiusSpeChange
+        MaxValue = 1000
+        MinRepeatValue = 10
+        NullValue = 0
+        Value = 0
+      end
+      object PositionRadiusLbl: TLabel
+        Left = 8
+        Height = 25
+        Top = 176
+        Width = 72
+        Caption = 'Diameter'
+      end
+      object PositionMarginLbl: TLabel
+        Left = 8
+        Height = 25
+        Top = 256
+        Width = 56
+        Caption = 'Margin'
+      end
+      object PositionMarginSpe: TSpinEditEx
+        Left = 199
+        Height = 33
+        Hint = 'The Margin from the EDGE of the Knob for the '#13#10'chosen Position indicator including Line type'
+        Top = 248
+        Width = 97
+        MaxLength = 0
+        ParentShowHint = False
+        ShowHint = True
+        TabOrder = 2
+        OnChange = PositionMarginSpeChange
+        MaxValue = 1000
+        MinRepeatValue = 10
+        NullValue = 0
+        Value = 0
+      end
+      object PositonMemo: TMemo
+        Left = 24
+        Height = 336
+        Top = 480
+        Width = 647
+        Lines.Strings = (
+          'Position is where the wheel indicator is. This can be a couple of types or omitted.'
+          ''
+          'The Line style is similar to an old iPod style, color, count, margins are all '
+          'adjustable for a nice visual experience. '
+          ''
+          'Several Circular ''Finger'' hole styles are also available. Some Flat, Shaded, etc.'
+          ''
+          'Not some setttings do not affect the display depending on the Style.'
+          'For example Line Count and Line Width don''t affect any of the circular'
+          'style Position indicators.'
+        )
+        TabOrder = 3
+      end
+      object PositionStyleCb: TComboBox
+        Left = 120
+        Height = 33
+        Hint = 'Set the Style for the Positoin Indicator as TSSPositionStyle'#13#10#13#10'psFilledCircle - Solid Flat Circle'#13#10'psHollowCircle - Outline of a Circle, no Fill'#13#10'psShaded - Simple Shading'#13#10'psIndentCircle - Indented looking Finger Hole'#13#10'psLines - Radial Lines (like old iPod, etc)'#13#10'psNone - No indicator'
+        Top = 16
+        Width = 176
+        ItemHeight = 25
+        Items.Strings = (
+          'psNone'
+          'psFilledCircle'
+          'psHollowCircle'
+          'psShaded'
+          'psIndentCircle '
+          'psLines'
+          ''
+        )
+        ParentShowHint = False
+        ShowHint = True
+        TabOrder = 4
+        OnChange = PositionStyleCbChange
+      end
+      object PositionStyleLbl: TLabel
+        Left = 8
+        Height = 25
+        Top = 24
+        Width = 37
+        Caption = 'Style'
+      end
+      object KnobEdgeColorLbl1: TLabel
+        Left = 8
+        Height = 25
+        Top = 89
+        Width = 88
+        Caption = 'Edge Color'
+      end
+      object PositionEdgeColorCb: TColorBox
+        Left = 120
+        Height = 26
+        Hint = 'Position Edge Color'
+        Top = 88
+        Width = 176
+        Style = [cbStandardColors, cbExtendedColors, cbCustomColor]
+        ItemHeight = 20
+        OnChange = PositionEdgeColorCbChange
+        ParentShowHint = False
+        ShowHint = True
+        TabOrder = 5
+      end
+      object PositionEdgeThicknessLbl: TLabel
+        Left = 8
+        Height = 25
+        Top = 216
+        Width = 120
+        Caption = 'Edge Thickness'
+      end
+      object PositionEdgeThicknessSpe: TSpinEditEx
+        Left = 199
+        Height = 33
+        Hint = 'Edge Thickness around the Position indicator, may not apply to Line type of indicator'
+        Top = 208
+        Width = 97
+        MaxLength = 0
+        ParentShowHint = False
+        ShowHint = True
+        TabOrder = 6
+        OnChange = PositionEdgeThicknessSpeChange
+        MaxValue = 1000
+        MinRepeatValue = 10
+        NullValue = 0
+        Value = 0
+      end
+      object PositionCenterMarginLbl: TLabel
+        Left = 9
+        Height = 25
+        Top = 296
+        Width = 112
+        Caption = 'Center Margin'
+      end
+      object PositionCenterMarginSpe: TSpinEditEx
+        Left = 200
+        Height = 33
+        Hint = 'The Margin from the CENTER of the Knob, Typically for Line Type'
+        Top = 288
+        Width = 97
+        MaxLength = 0
+        ParentShowHint = False
+        ShowHint = True
+        TabOrder = 7
+        OnChange = PositionCenterMarginSpeChange
+        MaxValue = 1000
+        MinRepeatValue = 10
+        NullValue = 0
+        Value = 0
+      end
+      object PositionLineCountLbl: TLabel
+        Left = 9
+        Height = 25
+        Top = 336
+        Width = 84
+        Caption = 'Line Count'
+      end
+      object PositionLineCountSpe: TSpinEditEx
+        Left = 199
+        Height = 33
+        Hint = 'Length of the Radial Lines for Position Line type'
+        Top = 328
+        Width = 97
+        MaxLength = 0
+        ParentShowHint = False
+        ShowHint = True
+        TabOrder = 8
+        OnChange = PositionLineCountSpeChange
+        MaxValue = 1000
+        MinRepeatValue = 10
+        NullValue = 0
+        Value = 0
+      end
+      object PositonLineWidthLbl: TLabel
+        Left = 8
+        Height = 25
+        Top = 376
+        Width = 84
+        Caption = 'Line Width'
+      end
+      object PositionLineWidthSpe: TSpinEditEx
+        Left = 199
+        Height = 33
+        Hint = 'Width of the Radial Lines for  Position Line type'
+        Top = 368
+        Width = 97
+        MaxLength = 0
+        ParentShowHint = False
+        ShowHint = True
+        TabOrder = 9
+        OnChange = PositionLineWidthSpeChange
+        MaxValue = 1000
+        MinRepeatValue = 10
+        NullValue = 0
+        Value = 0
+      end
+      object PositonFillOpacityLbl: TLabel
+        Left = 8
+        Height = 25
+        Top = 136
+        Width = 135
+        Caption = 'Fill Color Opacity'
+      end
+      object PositionFillOpacitySpe: TSpinEditEx
+        Left = 200
+        Height = 33
+        Hint = 'Opacity of the Positions Fill Color'
+        Top = 128
+        Width = 97
+        MaxLength = 0
+        ParentShowHint = False
+        ShowHint = True
+        TabOrder = 10
+        OnChange = PositionFillOpacitySpeChange
+        MaxValue = 255
+        MinRepeatValue = 10
+        NullValue = 0
+        Value = 0
+      end
+      object Label2: TLabel
+        Left = 8
+        Height = 25
+        Top = 416
+        Width = 488
+        Caption = 'Center Margin, Line Count and Line Width are for psLines only'
+      end
+    end
+    object CapTab: TTabSheet
+      Caption = 'Cap'
+      ClientHeight = 839
+      ClientWidth = 703
+      object CapStyleLbl: TLabel
+        Left = 8
+        Height = 25
+        Top = 24
+        Width = 37
+        Caption = 'Style'
+      end
+      object CapStyleCb: TComboBox
+        Left = 120
+        Height = 33
+        Hint = 'Cap Style'
+        Top = 16
+        Width = 174
+        ItemHeight = 25
+        Items.Strings = (
+          'csNone'
+          'csFlat'
+          'csShaded'
+          'csPhong'
+          'csOutline'
+        )
+        ParentShowHint = False
+        ShowHint = True
+        TabOrder = 0
+        OnChange = CapStyleCbChange
+      end
+      object CapCurveExponentSpe: TFloatSpinEditEx
+        Left = 184
+        Height = 33
+        Hint = 'Shader Curve, Typically for Phong shader'
+        Top = 248
+        Width = 97
+        MaxLength = 0
+        ParentShowHint = False
+        ShowHint = True
+        TabOrder = 1
+        OnChange = CapCurveExponentSpeChange
+        Increment = 0.01
+        MaxValue = 10
+        MinValue = -10
+        MinRepeatValue = 10
+      end
+      object CapCurveExponentLbl: TLabel
+        Left = 8
+        Height = 25
+        Top = 256
+        Width = 124
+        Caption = 'Curve Exponent'
+      end
+      object CapEdgeColorLbl: TLabel
+        Left = 8
+        Height = 25
+        Top = 89
+        Width = 88
+        Caption = 'Edge Color'
+      end
+      object CapEdgeColorCb: TColorBox
+        Left = 120
+        Height = 26
+        Hint = 'Edge Color'
+        Top = 88
+        Width = 176
+        Style = [cbStandardColors, cbExtendedColors, cbCustomColor]
+        ItemHeight = 20
+        OnChange = CapEdgeColorCbChange
+        ParentShowHint = False
+        ShowHint = True
+        TabOrder = 2
+      end
+      object CapFillColorLbl: TLabel
+        Left = 8
+        Height = 25
+        Top = 57
+        Width = 69
+        Caption = 'Fill Color'
+      end
+      object CapFillColorCb: TColorBox
+        Left = 120
+        Height = 26
+        Hint = 'Fill Color'
+        Top = 56
+        Width = 176
+        Style = [cbStandardColors, cbExtendedColors, cbCustomColor]
+        ItemHeight = 20
+        OnChange = CapFillColorCbChange
+        ParentShowHint = False
+        ShowHint = True
+        TabOrder = 3
+      end
+      object CapLightIntensitySpe: TSpinEditEx
+        Left = 184
+        Height = 33
+        Hint = 'Light Intensity of the Shader'
+        Top = 208
+        Width = 97
+        MaxLength = 0
+        ParentShowHint = False
+        ShowHint = True
+        TabOrder = 4
+        OnChange = CapLightIntensitySpeChange
+        MaxValue = 1000
+        MinRepeatValue = 10
+        NullValue = 0
+        Value = 0
+      end
+      object CapLightIntensityLbl: TLabel
+        Left = 8
+        Height = 25
+        Top = 216
+        Width = 111
+        Caption = 'Light Intensity'
+      end
+      object CapRadiusLbl: TLabel
+        Left = 8
+        Height = 25
+        Top = 176
+        Width = 53
+        Caption = 'Radius'
+      end
+      object CapRadiusSpe: TSpinEditEx
+        Left = 184
+        Height = 33
+        Hint = 'Radius of the Cap'
+        Top = 168
+        Width = 97
+        MaxLength = 0
+        ParentShowHint = False
+        ShowHint = True
+        TabOrder = 5
+        OnChange = CapRadiusSpeChange
+        MaxValue = 1000
+        MinRepeatValue = 10
+        NullValue = 0
+        Value = 0
+      end
+      object CapMemo: TMemo
+        Left = 8
+        Height = 488
+        Top = 328
+        Width = 657
+        Lines.Strings = (
+          'Various settings for the Cap'
+          ''
+          'If the Cap is enabled it can also act as a Button and events related can be'
+          'captured.'
+          ''
+          'Use the Dropdown Style selector to see various types of center Caps.'
+          ''
+          'The Curve Exponent is for the Phong Shader, and can'
+          'give some nice results. This only applies to the Phong '
+          'shader, values less that 1.0 give good results, Light Intensity'
+          'is basically brightness of the shade'
+          ''
+          'Again, play and experiment!'
+        )
+        TabOrder = 6
+      end
+      object CapEdgeThicknessSpe: TSpinEditEx
+        Left = 184
+        Height = 33
+        Hint = 'Thickness of the outer edge, 0 for none'
+        Top = 128
+        Width = 97
+        MaxLength = 0
+        ParentShowHint = False
+        ShowHint = True
+        TabOrder = 7
+        OnChange = CapEdgeThicknessSpeChange
+        MaxValue = 1000
+        MinRepeatValue = 10
+        NullValue = 0
+        Value = 0
+      end
+      object CapEdgeThicknessLbl: TLabel
+        Left = 8
+        Height = 25
+        Top = 136
+        Width = 120
+        Caption = 'Edge Thickness'
+      end
+    end
+  end
+  object SpinnerMovementGb: TGroupBox
+    Left = 8
+    Height = 260
+    Top = 328
+    Width = 493
+    Caption = 'Spinner Movement'
+    ClientHeight = 230
+    ClientWidth = 489
+    ParentBackground = False
+    TabOrder = 1
+    object PerfTestBtn: TBitBtn
+      Left = 0
+      Height = 38
+      Hint = 'Runs a performance test, always calls ProcessMesages()'
+      Top = 152
+      Width = 152
+      Caption = 'Perf Test'
+      Images = ImageList1
+      ImageIndex = 15
+      OnClick = PerfTestBtnClick
+      ParentShowHint = False
+      ShowHint = True
+      TabOrder = 0
+    end
+    object ValuePlus1Btn: TBitBtn
+      Left = 88
+      Height = 38
+      Hint = 'Bump 1 CW'
+      Top = 192
+      Width = 56
+      Caption = '1'
+      Images = ImageList1
+      ImageIndex = 0
+      OnClick = ValuePlus1BtnClick
+      ParentShowHint = False
+      ShowHint = True
+      TabOrder = 1
+    end
+    object ValueMinus1Btn: TBitBtn
+      Left = 144
+      Height = 38
+      Hint = 'Bump 1 CCW'
+      Top = 192
+      Width = 56
+      Caption = '1'
+      Images = ImageList1
+      ImageIndex = 1
+      OnClick = ValueMinus1BtnClick
+      ParentShowHint = False
+      ShowHint = True
+      TabOrder = 2
+    end
+    object ValueZeroBtn: TBitBtn
+      Left = 0
+      Height = 38
+      Hint = 'Runs a performance test.'
+      Top = 192
+      Width = 80
+      Caption = 'Zero'
+      ImageIndex = 6
+      OnClick = ValueZeroBtnClick
+      ParentShowHint = False
+      ShowHint = True
+      TabOrder = 3
+    end
+    object ValuePlus10Btn: TBitBtn
+      Left = 208
+      Height = 38
+      Hint = 'Spin 10 CW'
+      Top = 192
+      Width = 56
+      Caption = '10'
+      Images = ImageList1
+      ImageIndex = 0
+      OnClick = ValuePlus10BtnClick
+      ParentShowHint = False
+      ShowHint = True
+      TabOrder = 4
+    end
+    object ValueMinus10Btn: TBitBtn
+      Left = 264
+      Height = 38
+      Hint = 'Spin 10 CCW'
+      Top = 192
+      Width = 56
+      Caption = '10'
+      Images = ImageList1
+      ImageIndex = 1
+      OnClick = ValueMinus10BtnClick
+      ParentShowHint = False
+      ShowHint = True
+      TabOrder = 5
+    end
+    object UseProcessMsgCb: TCheckBox
+      Left = 192
+      Height = 29
+      Hint = 'Use ProcessMessages() for Spin Calls.'#13#10'Provides smooth movement'
+      Top = 160
+      Width = 250
+      Caption = 'Spin Uses Process Messages'
+      ParentShowHint = False
+      ShowHint = True
+      TabOrder = 6
+    end
+    object ValueMinus50Btn: TBitBtn
+      Left = 384
+      Height = 38
+      Hint = 'Spin 60 CCW'
+      Top = 192
+      Width = 56
+      Caption = '60'
+      Images = ImageList1
+      ImageIndex = 1
+      OnClick = ValueMinus50BtnClick
+      ParentShowHint = False
+      ShowHint = True
+      TabOrder = 7
+    end
+    object ValuePlus50Btn: TBitBtn
+      Left = 328
+      Height = 38
+      Hint = 'Spin 60 CW'
+      Top = 192
+      Width = 56
+      Caption = '60'
+      Images = ImageList1
+      ImageIndex = 0
+      OnClick = ValuePlus50BtnClick
+      ParentShowHint = False
+      ShowHint = True
+      TabOrder = 8
+    end
+    object Label1: TLabel
+      Left = 0
+      Height = 45
+      Top = -8
+      Width = 118
+      Caption = 'Totalizer'
+      Font.Height = -32
+      ParentFont = False
+    end
+    object TotalizerValueLbl: TLabel
+      Left = 168
+      Height = 45
+      Top = -8
+      Width = 17
+      Caption = '0'
+      Font.Height = -32
+      ParentFont = False
+    end
+    object AngleLbl: TLabel
+      Left = 0
+      Height = 45
+      Top = 32
+      Width = 83
+      Caption = 'Angle'
+      Font.Height = -32
+      ParentFont = False
+    end
+    object AngleValueLbl: TLabel
+      Left = 168
+      Height = 45
+      Top = 32
+      Width = 17
+      Caption = '0'
+      Font.Height = -32
+      ParentFont = False
+    end
+    object DirectionLbl: TLabel
+      Left = 0
+      Height = 45
+      Top = 72
+      Width = 129
+      Caption = 'Direction'
+      Font.Height = -32
+      ParentFont = False
+    end
+    object DirectionValueLbl: TLabel
+      Left = 168
+      Height = 45
+      Top = 72
+      Width = 57
+      Caption = 'N/A'
+      Font.Height = -32
+      ParentFont = False
+    end
+    object WrappedValueLbl: TLabel
+      Left = 0
+      Height = 25
+      Top = 120
+      Width = 120
+      Caption = 'Wrapped : N/A'
+      ParentFont = False
+    end
+    object AngleTb: TBCTrackbarUpdown
+      Left = 368
+      Height = 45
+      Hint = 'Set the Angle of the Spinner to 0-360 degrees. If 360 will wrap '#13#10'the spinner to 0.'#13#10#13#10'Note that this calls the Angle method on the spinner which'#13#10'does NOT fire any events, it simple changes the Angle of '#13#10'the spinner, that is all.'
+      Top = 40
+      Width = 113
+      AllowNegativeValues = False
+      BarExponent = 1
+      Increment = 1
+      LongTimeInterval = 400
+      MinValue = 0
+      MaxValue = 360
+      OnChange = AngleTbChange
+      Value = 0
+      ShortTimeInterval = 100
+      Background.Color = clWindow
+      Background.Gradient1.StartColor = clWhite
+      Background.Gradient1.EndColor = clBlack
+      Background.Gradient1.GradientType = gtLinear
+      Background.Gradient1.Point1XPercent = 0
+      Background.Gradient1.Point1YPercent = 0
+      Background.Gradient1.Point2XPercent = 0
+      Background.Gradient1.Point2YPercent = 100
+      Background.Gradient2.StartColor = clWhite
+      Background.Gradient2.EndColor = clBlack
+      Background.Gradient2.GradientType = gtLinear
+      Background.Gradient2.Point1XPercent = 0
+      Background.Gradient2.Point1YPercent = 0
+      Background.Gradient2.Point2XPercent = 0
+      Background.Gradient2.Point2YPercent = 100
+      Background.Gradient1EndPercent = 35
+      Background.Style = bbsColor
+      ButtonBackground.Gradient1.StartColor = clBtnShadow
+      ButtonBackground.Gradient1.EndColor = clBtnFace
+      ButtonBackground.Gradient1.GradientType = gtLinear
+      ButtonBackground.Gradient1.Point1XPercent = 0
+      ButtonBackground.Gradient1.Point1YPercent = -50
+      ButtonBackground.Gradient1.Point2XPercent = 0
+      ButtonBackground.Gradient1.Point2YPercent = 50
+      ButtonBackground.Gradient2.StartColor = clBtnFace
+      ButtonBackground.Gradient2.EndColor = clBtnShadow
+      ButtonBackground.Gradient2.GradientType = gtLinear
+      ButtonBackground.Gradient2.Point1XPercent = 0
+      ButtonBackground.Gradient2.Point1YPercent = 50
+      ButtonBackground.Gradient2.Point2XPercent = 0
+      ButtonBackground.Gradient2.Point2YPercent = 150
+      ButtonBackground.Gradient1EndPercent = 50
+      ButtonBackground.Style = bbsGradient
+      ButtonDownBackground.Color = clBtnShadow
+      ButtonDownBackground.Gradient1.StartColor = clWhite
+      ButtonDownBackground.Gradient1.EndColor = clBlack
+      ButtonDownBackground.Gradient1.GradientType = gtLinear
+      ButtonDownBackground.Gradient1.Point1XPercent = 0
+      ButtonDownBackground.Gradient1.Point1YPercent = 0
+      ButtonDownBackground.Gradient1.Point2XPercent = 0
+      ButtonDownBackground.Gradient1.Point2YPercent = 100
+      ButtonDownBackground.Gradient2.StartColor = clWhite
+      ButtonDownBackground.Gradient2.EndColor = clBlack
+      ButtonDownBackground.Gradient2.GradientType = gtLinear
+      ButtonDownBackground.Gradient2.Point1XPercent = 0
+      ButtonDownBackground.Gradient2.Point1YPercent = 0
+      ButtonDownBackground.Gradient2.Point2XPercent = 0
+      ButtonDownBackground.Gradient2.Point2YPercent = 100
+      ButtonDownBackground.Gradient1EndPercent = 35
+      ButtonDownBackground.Style = bbsColor
+      Border.Color = clWindowText
+      Border.Style = bboSolid
+      Rounding.RoundX = 1
+      Rounding.RoundY = 1
+      Font.Color = clWindowText
+      Font.Name = 'Arial'
+      HasTrackBar = True
+      ArrowColor = clBtnText
+      ParentShowHint = False
+      ShowHint = True
+      TabOrder = 9
+      TabStop = True
+      UseDockManager = False
+    end
+  end
+  object SuperSpinner: TSuperSpinner
+    Left = 50
+    Height = 150
+    Top = 50
+    Width = 150
+    PositionSettings.CenterMargin = 40
+    KnobSettings.CurveExponent = 0.200000002980232
+    Angle = 0
+    OnPosChanged = SuperSpinnerPosChanged
+    OnCapClick = SuperSpinnerCapClick
+    OnKnobClick = SuperSpinnerKnobClick
+    OnWrapped = SuperSpinnerWrapped
+    OnMouseCapEnter = SuperSpinnerMouseCapEnter
+    OnMouseCapLeave = SuperSpinnerMouseCapLeave
+    OnMouseKnobEnter = SuperSpinnerMouseKnobEnter
+    OnMouseKnobLeave = SuperSpinnerMouseKnobLeave
+    OnMouseWheel = SuperSpinnerMouseWheel
+    OnClick = SuperSpinnerClick
+    OnDblClick = SuperSpinnerDblClick
+    OnMouseDown = SuperSpinnerMouseDown
+    OnMouseUp = SuperSpinnerMouseUp
+    OnMouseMove = SuperSpinnerMouseMove
+    OnMouseEnter = SuperSpinnerMouseEnter
+    OnMouseLeave = SuperSpinnerMouseLeave
+  end
+  object GroupBox3: TGroupBox
+    Left = 8
+    Height = 264
+    Hint = 'Events will highlight in GREEN when they change. They will be reset by the '#13#10'time (Green LED will toggle).'#13#10#13#10'Some events are TComponent and are NOT affected if the Spinner is Locked.'#13#10#13#10'Holding down SHIFT while using the Mouse Wheel will 10x the counts.'
+    Top = 600
+    Width = 496
+    Caption = 'Spinner Click and Mouse Events'
+    ClientHeight = 234
+    ClientWidth = 492
+    ParentShowHint = False
+    ShowHint = True
+    TabOrder = 2
+    object OnClickValueLbl: TLabel
+      Left = 8
+      Height = 25
+      Top = 0
+      Width = 60
+      Caption = 'OnClick'
+      ParentFont = False
+    end
+    object OnCapClickValueLbl: TLabel
+      Left = 8
+      Height = 25
+      Top = 48
+      Width = 91
+      Caption = 'OnCapClick'
+    end
+    object OnKnobClickValueLbl: TLabel
+      Left = 8
+      Height = 25
+      Top = 72
+      Width = 102
+      Caption = 'OnKnobClick'
+    end
+    object OnDblClickValueLbl: TLabel
+      Left = 8
+      Height = 25
+      Top = 24
+      Width = 88
+      Caption = 'OnDblClick'
+    end
+    object OnMouseCapEnterValueLbl: TLabel
+      Left = 136
+      Height = 25
+      Top = 48
+      Width = 149
+      Caption = 'OnMouseCapEnter'
+      ParentFont = False
+    end
+    object OnMouseCapLeaveValueLbl: TLabel
+      Left = 136
+      Height = 25
+      Top = 72
+      Width = 153
+      Caption = 'OnMouseCapLeave'
+      ParentFont = False
+    end
+    object OnMouseKnobEnterValueLbl: TLabel
+      Left = 136
+      Height = 25
+      Top = 96
+      Width = 160
+      Caption = 'OnMouseKnobEnter'
+      ParentFont = False
+    end
+    object OnMouseKnobLeaveValueLbl: TLabel
+      Left = 136
+      Height = 25
+      Top = 120
+      Width = 164
+      Caption = 'OnMouseKnobLeave'
+      ParentFont = False
+    end
+    object OnMouseEnterValueLbl: TLabel
+      Left = 136
+      Height = 25
+      Top = 0
+      Width = 118
+      Caption = 'OnMouseEnter'
+      ParentFont = False
+    end
+    object OnMouseLeaveValueLbl: TLabel
+      Left = 136
+      Height = 25
+      Top = 24
+      Width = 122
+      Caption = 'OnMouseLeave'
+      ParentFont = False
+    end
+    object OnMouseDownValueLbl: TLabel
+      Left = 310
+      Height = 25
+      Top = 0
+      Width = 125
+      Caption = 'OnMouseDown'
+      ParentFont = False
+    end
+    object OnMouseUpValueLbl: TLabel
+      Left = 312
+      Height = 25
+      Top = 24
+      Width = 101
+      Caption = 'OnMouseUp'
+      ParentFont = False
+    end
+    object OnMouseMoveValueLbl: TLabel
+      Left = 312
+      Height = 25
+      Top = 48
+      Width = 123
+      Caption = 'OnMouseMove'
+      ParentFont = False
+    end
+    object MouseBtnValueLbl: TLabel
+      Left = 136
+      Height = 25
+      Top = 144
+      Width = 32
+      Caption = 'N/A'
+      ParentFont = False
+    end
+    object ShiftValueLbl: TLabel
+      Left = 56
+      Height = 25
+      Top = 168
+      Width = 32
+      Caption = 'N/A'
+      ParentFont = False
+    end
+    object ShiftLbl: TLabel
+      Left = 8
+      Height = 25
+      Top = 168
+      Width = 50
+      Caption = 'Shift : '
+    end
+    object MouseBtnLbl: TLabel
+      Left = 8
+      Height = 25
+      Top = 144
+      Width = 126
+      Caption = 'Mouse Button : '
+    end
+    object TimerLED: TuELED
+      Left = 448
+      Height = 36
+      Hint = 'Shows Clearing Event State Indicators and a few other things.'#13#10'Click to force reset'
+      Top = -11
+      Width = 36
+      Debug = False
+      Active = False
+      LedType = ledRound
+      Bright = True
+      Reflection = True
+      Color = clLime
+      ParentColor = False
+      ParentShowHint = False
+      ShowHint = True
+      OnClick = TimerLEDClick
+    end
+    object MouseWheelLbl: TLabel
+      Left = 8
+      Height = 25
+      Top = 192
+      Width = 63
+      Caption = 'Wheel : '
+    end
+    object MouseWheelValueLbl: TLabel
+      Left = 72
+      Height = 25
+      Top = 192
+      Width = 32
+      Caption = 'N/A'
+      ParentFont = False
+    end
+    object OnPosChangeValueLbl: TLabel
+      Left = 8
+      Height = 25
+      Top = 96
+      Width = 112
+      Caption = 'OnPosChange'
+    end
+  end
+  object ResetSpinnerLAFBtn: TBitBtn
+    Left = 352
+    Height = 45
+    Hint = 'Reset to Default'
+    Top = 272
+    Width = 157
+    Caption = 'Defaults'
+    Images = ImageList1
+    ImageIndex = 7
+    OnClick = ResetSpinnerLAFBtnClick
+    ParentShowHint = False
+    ShowHint = True
+    TabOrder = 3
+  end
+  object PresetsCb: TComboBox
+    Left = 352
+    Height = 33
+    Hint = 'Presets to try'
+    Top = 232
+    Width = 157
+    ItemHeight = 25
+    Items.Strings = (
+      'Default'
+      'Lines 1'
+      'Lines 2'
+      'Lines 3'
+      'Finger 1'
+      'Finger 2'
+    )
+    ParentShowHint = False
+    ShowHint = True
+    TabOrder = 4
+    Text = 'Try a Preset'
+    OnChange = PresetsCbChange
+  end
+  object AutoScaleEnabledLbl: TLabel
+    Left = 8
+    Height = 25
+    Top = 0
+    Width = 234
+    Caption = 'Spinner Auto Scale Enabled'
+    Font.Color = clRed
+    Font.Style = [fsBold]
+    ParentFont = False
+    Visible = False
+  end
+  object Timer1: TTimer
+    Interval = 2000
+    OnTimer = Timer1Timer
+    Left = 456
+    Top = 80
+  end
+  object ImageList1: TBGRAImageList
+    UseBGRADraw = False
+    Left = 456
+    Top = 152
+    Bitmap = {
+      4C7A100000001000000010000000611600000000000078DAED9B0B5C4ED9FAC7
+      776F737119628ECC8C199718CC08E18C19CC4C62189719D78663308C5B382E43
+      A4DC2A9752547289081DB98F4BA84C88123A2E6FE1AD7457E99E222AEA8D7EFF
+      E759ED376FAF423EFFCFE77FE67F667F3EBFCFDA7BADE7BBD6B3D77A9EB5F7EE
+      2249FF994790C3B832958F2D54BB972168F5CF65B5E555BB9703091781B810A8
+      BC17A3D6BCF712202608883E0DD5CE45B5E78941E429E0961F545E96AFE48356
+      8D2953EDB21163A9762C44EE1F9BCB71C317083F825C3FD772D5D6D9506D9905
+      95C74C04D90E2B7BD9781A0ED70F0157F703577C80306FE0D20E20741B549BA6
+      BDE08FCA6BC12B39847800E73742B561F20B7CD00AF332D5B6DFA0F29C0BF635
+      E7984325977BD8AE5CB571AAE054EE9310B4F48757AEA76AB3C54BC77B25BF71
+      0A10B41E38B30EAAF5136BCFBBFF0A043A01A71CA0721D5F6B3E68C9A032E654
+      AEE310B4646099F4D7F1D7518BFCE77C546D9F0FED9CFA33E5BFC657D5E6E934
+      9E05B4F3FFECD2C1E57FADF87FC601E0459516374261AE391EE52E90652EEAAA
+      B3ADCA1922236E1B526FA84B2FEFC1637F27149D74C493D05D284F8D50539B27
+      D934A9813546467472E9E9F578E8D4070FECBB237F5957E45A7740E6FC36489B
+      DF1605876D4136A964DBE1C571A3539FEC9F8FA235BD51ECDC07454EA678B8B2
+      87E823C7EA33A4CF6981640B4364BB8FA23EA252AAF8413E9704AE27A6374ADC
+      0640BDE1072ABF4791EB40A8A3CEE0D1E1A5C898678494191F20E1D706B87F60
+      31901EEB59395774BFEC338FCB6CF9D69150BB0FC6939DF40C918F8223B6C47F
+      88C45F1B226EF2FB284F0957136BC0735B7AD947DC6FD11A5394B87E2F582E8B
+      1CBF1573A839EE1F5C22C6BF3D461F8567B680D66824AFCF633F27BACF2E283E
+      4039FC548D971DD9DBA723FA1F0AE4EDB582667D8B4E388A797EB467EE2BF9AC
+      6D53113D4A42DEBE45CC5BA2F09E39AF6FE6FCD6C8B66A4FFD18E39E4D475166
+      2F6C8F8774DF40B960737D2C85EF51C4179E95FDA7F9E3D848B76C87F4B92DC4
+      3C67CE6B2DCA6CC77E325B4EEC7CC48C7D478C1D33B1A13C7F4506620D682D1E
+      1EB517EBCB6B944AF32CCA39AD5078F528B2BD6654B0A3253176FE7E1B5EBFAD
+      5AF1D3846382632381D687D788E7397E427DC48EAB237CE671994D5F3B946330
+      E58538E698CC884AE2358A9FD2A48219ADA8E4622634A471ADAB8FDFCA3E8A9A
+      B05FE529116A5EDFBC7D56423C575C277CAE297FAAFA6240EB3252AC4FC51A8D
+      1475AFE2FECAFFCAFC2F3BED8AB2DBE750E0608A5C1BE3DAE57FE876395BCAF1
+      C8E31F221F383F5E27FFCB823655E65AC969373CB0FB42E452C66FCFC7AF29FF
+      1F9F58F5D2DC45592932DCCC6BCCFFA2A3B62FC5CB894F7719FED2FC2FF45D59
+      69FFC87795C8E5BBB33E46F2B426944FEFBD56FE8B7596F33E73A59960F9BE6B
+      93FF79BB7F43D1B56348FE677324D0B87FE5FF7F5FFE733E704CBF51FE9F7B9E
+      8785271CDE30FF51EBE77F59A06B4DD92762FA65F9CFFB1DEF5962EF08747B9E
+      87C7560ABEE8FA3111D335E53FF751E0D85BEC59BCEF680ECEE1CC95BD913CAB
+      39E5C3BBAFFDFCD71CB5CD7FCDF35F73BC49FE73C9FB15EB4DF33FC3ED27A4B9
+      8CF82BFFFFA4F95F7C60A178A77DD3F77FF12E4CAAF5F35F7EFFD71CB579FE6B
+      BFFF6B8ED77DFE73FE17D337CB931DBF8ABE2ADFF9E93D3CDBF13BA4D0FBF0AB
+      F29FBF77F8781CB0B6927F78D44EEC1F85F43C7D55FEF3B752757B178BDFC36B
+      F7FC7FCED7F6FD3F7FFFA24A3A47C3D632FFB3BDA623CB73EA7F5DFE1717A351
+      6E2ECC490B649973DD6B70867171D876E346B97ACF9E223839E5C1D13117BB76
+      3D4044C43335B579924D931A58E3E86824AF5FFF087DFAA4A37BF71474ED9A88
+      0E1DA2D1A64D38DAB6BD025BDBBB209B54B2EDA03B2ED7CF9F7F1FBD7BE7109F
+      0753D31CF4E891467D24E0B3CF22D1A2C555181A0663D4A85B888A428AB61FEC
+      338FCBECA8518FE0E5552A4A53D36C7CF14532BEF9260E0E0E69D44F181A3408
+      C4E2C589888D85A766AEF87ED9671E97593E52529E61F8F03C0C1C988EC4C48A
+      3A3BBB24346C1888F7DFF74778F85335B1063CB73E3E45E27ED9671E3739F999
+      B0BF73A70C494915DFE3F1F18FF1F9E7FF16E3EBEB1FC3962D99207624AF0FCF
+      73972E09E27EB90F1E3729A9AC32FE13129EA05BB7703469128CFAF54F41A138
+      022BAB3868D6D7D13147CC33F7D1BD7B32060C48AF1C57C377EE7C158D1B9FC5
+      BBEF9E84241DC6A24582B7BC770FE6BCBEAD5B87A37D7B9598AB848452D9E727
+      888B7B22CE63638BD0B26590F05D927EAFF49FE78F63A35DBBAB628D56AF4E13
+      F671718F69EDC2D1A9D335C4C41489BA850B2305DBB0E171317F45451031CD6B
+      616F9F46EB1B22D688E7B9438730B1DEEC338F6B651589BFFDED84E06D6CE279
+      FDB66AC54F138E098E0D5E1F16CF33CF559D3A27659F0F0B76E8D0AB1C8329BA
+      71CC31497D242D599244F31C20189E670DC73E5B5BC7571BBF1AD1FD3461BF22
+      229EAA797E788D587CCE75DC5653FEE8F86240EBC2B16129AF11CFF3EB3FFF65
+      65C546E8D796890CD8D5D57741FF5DD7772ECE8B3CE0F8ECE61EFBD2734E13C3
+      CEAD9F353B2736BC0EDBE4C4851B1C98F1D5656D2E2525440ADE346F69C2898D
+      65E5A937E8A5318292E83A25C11520F1321E5D3D5A7EC975CADD731BFE392270
+      F9F0ABE11E73A0CD5F18D56D75FA69AF677187D7A995DB173C507ACECF8DF259
+      569A1FECFD0C9101C0AD9340842FEE1E5EFD4C7D7937549ECFF9F3EBA70FF55F
+      3AF4D1F98D73EC6EF97B7DA2A98F3AE653DF6FCBF89FCFD80EBF92E7E7F20C97
+      ABFE0C5D63B77FE6577BAF9D716B59D39C441DF36C7C7AC9A08C8ADF47B90081
+      CE50AD9F80D799CF9C38A541E0A2FE57D5C7E999E84FEFF17EF6422AD7B1AFC7
+      C787F754F96DB7D355A49FD7328D0D5D2F25D9EA8AD81EAF3386F045F68B7D64
+      5F03ADFB5F25DF1BBD16EFF68B9813313734473C5711FE5B1AD7389FC7F7B4A4
+      39DF53C96FB2A8F8FD04AF0DAD513EAD15AF99BFC7F89F238FF9BC57199B7E5E
+      2D4236CCB60F583AB430C865FA8F953CC582FAD26E111BE277201C2BAA00DCA7
+      D889F2595EAADC669917EE6555107FC4459D767AFBD30B9BE7AFD0F687639163
+      926393623485639563164914BB294AD0FB2138A6E37D37A88337CDB541484895
+      FBE15CE09CE0F3ECB8F03A41EEB36605AD9970E9868F7D896ABF03AE7BD9E41E
+      B3ECEF1515B0B3536DF3F14D647FD3BE91FD757B73D20259E65CF72A2E2423C4
+      50F290B6499E925ADA23413A248BCFB9CE53F2249B6AF72FB3CB66C6D2162959
+      D89F2385E8E8BCDCD71629D56C9F598717C6A57AE944359CAE4E883E52B4FD10
+      3E1F7A3957EF62BDE7D787C4FD6CD5CC95B8B77335B3866186882C8AC4EAD4D5
+      15756CBB5552136BC0732BE6A786B1342C1F5CD6BF58BFA28D186247F2FA68FB
+      6E9F628FE8E2687C10F6411596EB9A8635AD720F9AF5D5F0DCB7F658DAE7DC57
+      95FBAAE02D75FDD71EB34696E523FB5FCDFC69FA78C1678DCE55C493FD657B91
+      33D266BA3AF4E29C573B2EEB20699BB4552B7E9A704CBC69FCC8F1DB81EA936A
+      8CDF73F2B81CBF97CD3AD4903F4D38473836AAE48F4F45BC704B4DF953257F2F
+      8BB81A29AF8FA5380FB3AFF5F3DFDEBEDC88F5A6FB88425F7D86F5BAF62121E5
+      CDF5F4D5417A8AD24D321FC2E273AEA3B6B36C53134BB6774905667DCB86EBF2
+      5CC76D6C43B69F5465A97F7D75B060CDCA3B6AF95FC98B3ECCCA3BD1F543B23D
+      AFCDAF58F1CC8CEAE9FD5F6DA173FF5578569F3E6533D876C58A72534D9D9EE2
+      A9BB42A12E0A097956E7553CF95E876C8B8971ABB453949D22BB6BBA73D2B76F
+      D94C5635EBA224264087BF5E8B75255EEDAFE5FFFA0AFFCBEBBEC61AD7655B66
+      B4E6CFB462FECAA6BF8AAF6EFE840FFAEA73BC36B4469D6B62B98DD7986D79CD
+      75FCFA58133F34C64CEDB5E073AED38A9F6635DCDB27B21F2015F39CCAE27354
+      8C5B35F65EECA3623E787D695DFC597CCE75BA3EFF7F919E9E5E47D2112DFD83
+      24BD4A5ABC832C3E5F4D3A5E4B5EA3FE2467D2A95AF21F92F691F6925C4941B5
+      E47F272D96EB2791426BC95F23D9F1DF7350E9295F3793EDDE268D2679C9D2CC
+      75254FC75CD21D594348274807647E28693FA993ACFD9AF9D5F0D6FDFE2EE5AC
+      9A3478E6976DA58EEFD795C6B76D22756FDA40E327FBB354CBEFA59AF9D5F0F7
+      9D2C98F7BD32B56F77DF41EDA5C041ED113FAEA759AF8F1AB3FD1FA4A95AFC54
+      CDFCEAF0ED890F3F3AB0DD53E253888765D7566CEF23C784A4151FA1BAFE5BF5
+      ED2A4DED6624ADFAF21331BECF771DCC7A7ED488ED7F269D277D21EBBC3CBFDA
+      F327A69EA44F7A9B5487549F6440FA90B49474857495345C9E6783D7E4DF2719
+      923E207D446A466AAACDFF992599796C2329DF50DB24D38DCA3B77EEE04DC4AC
+      F4B59B3225250570E905B87E03B8F70136F507D6F706DCE811B3953E13BDE9FB
+      76377DAF07D0F76DC461407900CC302BF558A74C4B4B030ED263F6C86F6443DF
+      E9211B81934B803F56559C876C004ED127E3CDA3C0BD44204305669895BA3B2A
+      B3B2B270C96F1532948780187A5DBA7D9A4A52FA4D3A0F248EBE4923FD80840B
+      405634703F15CC302B755DA9BC77EF1E26ADE88D59CE83107486C6CAB8556177
+      2F01C88DAFB87E403EE6DD010AD281E2FB608659A9F372E583070FF0F52F1FE1
+      87D99F63FCB25ED87D74258243BD91181588FCBB1128CE8E212EAD827D7C1F28
+      7B026698953AD8280B0B0B317AE8FB183BA229268F6D8185B3BB60F9C29E70B2
+      ED87CDCEC3F12F8FF138BA7B26CE1EB341F4450F14C49E0233CC4AED2C954F9E
+      3CC1F6E95FE05F737AE1C0C23E3861FB03CEAD1B836BDBA723F6B00D32829C51
+      70DD132571FBF12CFD04DD57209861566A3D4759565656853FBE7C30CEACF909
+      97364CC08D1D33117F6021D24FD822FFCC1A1487AEC7D3AB5BC00CB392E12FCA
+      F2F272BC899895DEE9B9537A77B0F28DC4AC24BD23E773B35A8A9977FEAFF3B7
+      9DC25FD61FED49E34896A4C55AB2224D230D6AA738F511DBB6559C241D933E56
+      AC24EE24F3DF0DE91CB6719F7B5E4CF0D1E2C7174F3E066B9B5312AEFCF14CED
+      BFFB61D65ACBD40BFDDB863A93ED60E2EB32FFA9E228F573FCF31F3B5DF43873
+      F051D1E983F7F1C7FE3C5C3B5D8EC003F942DC075F9F39741F6453BCE0E7685F
+      627E21BE2EF39F2A8E4CF15E97151FB0370FFF3E5506FF3DF770787B7AE539EB
+      FCD1C2CAF3358B944FE78DBE7592B8619F2A0E4B6D14075604EC7DF0C4DB2D01
+      C7BD73C8EF12ECDD74074ED661D8EA1889DFB7A5C37757B668635FB8F4DB9DFF
+      D8CCE8D466629BB756F8AC3CB23DB7F08857163C564761A74B3C6CA69FC66EF7
+      3BE0BA9D2E09F05A1B87439EE9E29A75744736965B445E2376B49162E7D839A3
+      C22E72FD56C7DB983DCE17DB9D63E1609D8A0E9FDEC6FC699138B5EF01F9904B
+      F795855DAE89E45F2ABC5D52EF11BBCC48B1BDA191BEA7F5CF6681410B279DCF
+      FAE7185FF556E7088C1EB20BF6B4DD19B70FC61687DBB0B63803878561D4773C
+      7C36DCC5BECDE965C46D265E6AA5EF51AFA5FEA6012DF5372E6FFAC5AE133673
+      778AFC1C356423A68FBD287CDAB4329AC64E610E3BD6DD117D90BD77E33E3E52
+      63F3835223F303929ECF99DE6FB91C0D5B9CF904464D87DC6A5E67FEA996FAAE
+      FB36D8470AD675D94D9A8B3B3427C9586F7B0BDC26D91D92F4F69C15ACDED6E3
+      01CCEA2DF7086EF0ADD5F016FACE5D49235AE83BFDCE73CFB29D132A4AAEA3B6
+      6F04AFCDDA7A9C972C9DFB35F8668144ED2427A9B9FE6AD3E6FAAB7C357DF039
+      D7711BF19FEAB2528F7E55FEC6B6A9FE24E9137D5B7F66B9FC44DFAEB781A26F
+      45E302CFC57145209F37074B237E1D4C35F5480D488DB49FFD1FEB2F09649E4B
+      B9AE81FCAE00BD61338EE87DFD633FB9EE6FF27B424BD2A7A4CF499D1A2A4C27
+      34D3B73E4BE544B98E6DEA6AFB696464244D9B364D5AB76E1DE7959CA77E949F
+      015F51DE2D6DABF05F46D73DDA2A7C396F28F60F0AAE79F3E6D2F8F1E3257B7B
+      7BC9D1D15197277BBF6557039F893C6CAB38614B7C4F0D3F72E44869C18205D2
+      E2C58BABE37BB27D58C0538AE13CCAE78ADCA6BC5D41FCD7CCCF9E3DBB269ED8
+      E37697FCCAE0E7938B80BDF774FA38E448FCB7D5F16BD7AE35717272B2B870BC
+      54E4EBC9DD3955FAF05C9348797D1F6D14FBD6EAF20E0E0E26AB56ADB2282929
+      417171318EEDCCAED287C7EA38CAD304CAE77CB456EC76D5E6EDECEC4C962F5F
+      6EF1F8F1633C7AF4A8529A3E36AEB88DCDAB62B1DF2397586F77521F0D6F6363
+      63B268D1228BA2A222F16CD695DB7215DCEDA2B067631628EF371A2976F43552
+      EC12F367696969326FDE3C0B7E26E7E5E5BDA0888808DCBC7913DE6E69C47A79
+      50CE7F47BCC4FCAC59B34C66CE9C69F1F0E143E4E4E4BCA06BD7AE41A9542231
+      31115F7EF9A5452B7DCFFE468A6D92869F32658A454141013233335F50585818
+      AE5CB982D8D858B46FDFDEA24D9B3626ADF4B74ACC7FA4B0921AEB0D93C68C19
+      23787E9FD2566868282E5DBA84A8A828346BD6CCA269D3A626AD5AB5923ED49F
+      2FD5D16B5719F303070E34F9F6DB6F451FA9A9A942C1C1C108A18FED5BB76EC1
+      C0C0C0E2BDF7DE33A152AA53A7CE0B7F3FDFA85123A9458B16DCB7457272B298
+      2B8DDE7EFB6D0B854261427AD99FE03726B5AB5BB7EEC07AF5EA59C88C057D5F
+      5850BD19A9859CAB9CD70DE59CE5BCD7745A576E6B26DB7D28BF1B3491F70F03
+      795FE07DE55D99D597BF3774BF7F7B92B6E87C8B6BB4456EAFF2EDA9C36F9D3E
+      7D7A16E5102807E1EEEE0E373737383B3B8362248BDB6BE07D35A21C02C5243A
+      77EE0C5A3351F235D76BDBE9F07FA75B091F3E7C38287FD0AF5F3FD0BAE2B7DF
+      7E13255F733DB7B31DDBEBFA4F077FDBF92D59B204A6A6A69833670EACACAC44
+      C9D75CCFEDB25D4DF77FCADADA1A23468CC0E8D1A341B9214ABEE67AED9F2BE8
+      F0811AF1986C6F626282962D5B8A92AFB95EDB4E87FF8AFC8AEFDFBF3F2897D1
+      A74F1F0C183000B4978B92AFB99EDBD98EEDABB9FF1EFC6D3B77EE5CF4EDDB17
+      93274F06ADA528F99AEBB95DB6ABE9FE2FF03DB3BFB4AF63E2C489A2E46BAEE7
+      F61AEEFF9246142782E9D1A3078C8D8D45C9D75CAF6DA7C37F4D7EE5F6ECD913
+      161616F8FEFBEFD1725E4B18EE3614255F733DB7B31DDB5773FF5FF3773DED47
+      225E8C038D617CC958947CCDF5DC2EDB55FD86D5FA37AA499326E1C71F7F446F
+      FA7E1C143D48947CCDF5DC5EDDFFDDC8B9C9797B89C67A326AD4280C1D3A54F8
+      CD255F733DB7CB395E5F87E75CEF429A415292B2AB91526EEFCAFBC3FFE63700
+      F928516E49E6E6E6D24F3FFDD480FCFD8A644E9A2C8BCFBFE236B6615B66AAE1
+      3F9B3CF9D799DEDE5B7E8F895126E7E56594B0F89CEBB88D6D6AE03F9B31639A
+      4D4444705A5656021E3EBC870B17CE8B92C575DC468F2A1BB6D5E6870C19D2F0
+      975FC6CD0E0F0F4E4B49B98982821CC1B8B8B854F25CC76D376E84A64D98307E
+      36331A7EF0E0C1BDB66F773F9294A4A4E7567C25B37AF5EACA7316B725274760
+      E7CE2D4798D1F0B4CE63AF5F3F97CABCB6E89D0ABA752C95EADFA9CC3CFF397F
+      DF590909CA124DBB66BC61C3865519FFC1832CD17EF7EEED1266343CED6F7392
+      92224AB4D9EEDDBB8B3D8BF74F8E3FDE07780F3874E85FC8C8882B6146C3F7EA
+      D56B424444E85D6D3E393951E42E97CF9580B8382562626EDC6546C3D358BD37
+      6F76F3E3F9651FB5FBD0F5FFEEDD4878796DF36346C377EBD6AD51BF7EDF5947
+      455DCBCCCF4FAFC2682B3F3F03F1F1D199B40F5A33A3E1BB74E92275ECD8D1E4
+      871F063B737B61E1FD1758AEBB7327219372D9996D99D1CE7F7A764B868686DD
+      68BF5EE1EAEA72362E2E86FA79505A5858501A1F1F9B49CFC1B3C4AC601BB6D5
+      DE03E8784BFEF99EF15B6FBDF50DBD0B4CA0770E1BD21A59365CC76DFC2E2FEF
+      156F69F1FC2EF0DE6BFE1CE103D956C1ECFF0018A27FCF
+    }
+  end
+  object MainMenu1: TMainMenu
+    Left = 456
+    Top = 8
+    object FileMenu: TMenuItem
+      Caption = 'File'
+      object AboutSubMenu: TMenuItem
+        Caption = 'About'
+        OnClick = AboutSubMenuClick
+      end
+      object Separator1: TMenuItem
+        Caption = '-'
+      end
+      object ExitSubMenu: TMenuItem
+        Caption = 'Exit'
+        OnClick = ExitSubMenuClick
+      end
+    end
+  end
+end

+ 1469 - 0
test/test_superspinner/sstest.pas

@@ -0,0 +1,1469 @@
+unit sstest;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ComCtrls, StdCtrls,
+  ExtCtrls, Menus, Buttons, superspinner, ColorBox,
+  SpinEx, ueLED, BGRAImageList, BCTrackbarUpdown, superspinnercommon, about, Types;
+
+const
+  VERSIONSTR = '1.00';            // SG TEST version, Should ALWAYS show as a delta when merging!
+
+type
+  { TSSTestFrm }
+
+  TSSTestFrm = class(TForm)
+    AboutSubMenu: TMenuItem;
+    AngleTb: TBCTrackbarUpdown;
+    AutoScaleCb: TCheckBox;
+    DirectionLbl: TLabel;
+    GroupBox3: TGroupBox;
+    MouseWheelDisabledLbl: TLabel;
+    Memo3: TMemo;
+    AutoScaleEnabledLbl: TLabel;
+    PresetsCb: TComboBox;
+    Label2: TLabel;
+    OnPosChangeValueLbl: TLabel;
+    PositonFillOpacityLbl: TLabel;
+    PositionFillOpacitySpe: TSpinEditEx;
+    PositionLineCountLbl: TLabel;
+    PositonLineWidthLbl: TLabel;
+    PositionLineCountSpe: TSpinEditEx;
+    PositionLineWidthSpe: TSpinEditEx;
+    PositionEdgeThicknessLbl: TLabel;
+    PositionEdgeThicknessSpe: TSpinEditEx;
+    PositionEdgeColorCb: TColorBox;
+    KnobEdgeColorLbl1: TLabel;
+    KnobEdgeThicknessLbl: TLabel;
+    KnobEdgeThicknessSpe: TSpinEditEx;
+    PositionCenterMarginLbl: TLabel;
+    PositionCenterMarginSpe: TSpinEditEx;
+    PositionStyleCb: TComboBox;
+    PositionStyleLbl: TLabel;
+    MouseWheelLbl: TLabel;
+    MouseBtnLbl: TLabel;
+    ResetSpinnerLAFBtn: TBitBtn;
+    ShiftLbl: TLabel;
+    ShiftValueLbl: TLabel;
+    OnMouseCapEnterValueLbl: TLabel;
+    OnDblClickValueLbl: TLabel;
+    OnKnobClickValueLbl: TLabel;
+    OnClickValueLbl: TLabel;
+    OnCapClickValueLbl: TLabel;
+    MouseBtnValueLbl: TLabel;
+    OnMouseUpValueLbl: TLabel;
+    OnMouseEnterValueLbl: TLabel;
+    OnMouseDownValueLbl: TLabel;
+    OnMouseLeaveValueLbl: TLabel;
+    OnMouseKnobEnterValueLbl: TLabel;
+    OnMouseKnobLeaveValueLbl: TLabel;
+    OnMouseCapLeaveValueLbl: TLabel;
+    OnMouseMoveValueLbl: TLabel;
+    MouseWheelValueLbl: TLabel;
+    PositionSnapCb: TCheckBox;
+    TimerLED: TuELED;
+    WrappedValueLbl: TLabel;
+    DirectionValueLbl: TLabel;
+    AngleValueLbl: TLabel;
+    BackgroundColorCb: TColorBox;
+    BackgroundColorLbl: TLabel;
+    BasicTab: TTabSheet;
+    CapCurveExponentLbl: TLabel;
+    CapCurveExponentSpe: TFloatSpinEditEx;
+    CapEdgeColorCb: TColorBox;
+    CapEdgeColorLbl: TLabel;
+    CapEdgeThicknessLbl: TLabel;
+    CapEdgeThicknessSpe: TSpinEditEx;
+    CapFillColorCb: TColorBox;
+    CapFillColorLbl: TLabel;
+    CapLightIntensityLbl: TLabel;
+    CapLightIntensitySpe: TSpinEditEx;
+    CapMemo: TMemo;
+    CapRadiusLbl: TLabel;
+    CapRadiusSpe: TSpinEditEx;
+    CapStyleCb: TComboBox;
+    CapStyleLbl: TLabel;
+    CapTab: TTabSheet;
+    UseProcessMsgCb: TCheckBox;
+    Label1: TLabel;
+    Label14: TLabel;
+    AngleLbl: TLabel;
+    TotalizerValueLbl: TLabel;
+    MouseWheelSpeedTB: TBCTrackbarUpdown;
+    SpinnerLockedCb: TCheckBox;
+    ExitSubMenu: TMenuItem;
+    KnobCurveExponentLbl: TLabel;
+    KnobCurveExponentSpe: TFloatSpinEditEx;
+    KnobStyleCb: TComboBox;
+    SpinResolutionCb: TComboBox;
+    KnobStyleLbl: TLabel;
+    FaceFillStyleLbl1: TLabel;
+    KnobFillColorCb: TColorBox;
+    KnobFillColorLbl: TLabel;
+    KnobLightIntensityLbl: TLabel;
+    KnobLightIntensitySpe: TSpinEditEx;
+    FaceMemo: TMemo;
+    KnobEdgeColorCb: TColorBox;
+    KnobEdgeColorLbl: TLabel;
+    FaceTab: TTabSheet;
+    FileMenu: TMenuItem;
+    FrameBorderColorCb: TColorBox;
+    FrameBorderColorLbl: TLabel;
+    FrameBorderWidthLbl: TLabel;
+    FrameRadiusSpe: TSpinEditEx;
+    FrameTab: TTabSheet;
+    GaugeTs: TPageControl;
+    GroupBox1: TGroupBox;
+    GroupBox2: TGroupBox;
+    SpinnerMovementGb: TGroupBox;
+    GroupBox5: TGroupBox;
+    HeightAddBtn: TBitBtn;
+    WidthHeightAddBtn: TBitBtn;
+    HeightLbl: TLabel;
+    HeightSubBtn: TBitBtn;
+    WidthHeightSubBtn: TBitBtn;
+    HeightValLbl: TLabel;
+    ImageList1: TBGRAImageList;
+    LeftAddBtn: TBitBtn;
+    LeftLbl: TLabel;
+    LeftSubBtn: TBitBtn;
+    LeftValLbl: TLabel;
+    MainMenu1: TMainMenu;
+    Memo2: TMemo;
+    PerfTestBtn: TBitBtn;
+    PositionFillColorCb: TColorBox;
+    PointerFillColorLbl: TLabel;
+    PositionMarginLbl: TLabel;
+    PositionMarginSpe: TSpinEditEx;
+    PositionRadiusLbl: TLabel;
+    PositionRadiusSpe: TSpinEditEx;
+    PositonMemo: TMemo;
+    PointerTab: TTabSheet;
+    ResetPositionBtn: TBitBtn;
+    ResetSizeBtn: TBitBtn;
+    Separator1: TMenuItem;
+    SuperSpinner: TSuperSpinner;
+    Timer1: TTimer;
+    TopAddBtn: TBitBtn;
+    TopLbl: TLabel;
+    TopSubBtn: TBitBtn;
+    TopValLbl: TLabel;
+    ValueMinus10Btn: TBitBtn;
+    ValueMinus50Btn: TBitBtn;
+    ValueMinus1Btn: TBitBtn;
+    ValuePlus10Btn: TBitBtn;
+    ValuePlus50Btn: TBitBtn;
+    ValuePlus1Btn: TBitBtn;
+    ValueZeroBtn: TBitBtn;
+    WidthAddBtn: TBitBtn;
+    WidthLbl: TLabel;
+    WidthSubBtn: TBitBtn;
+    WidthValLbl: TLabel;
+    procedure AboutSubMenuClick(Sender: TObject);
+    procedure AutoScaleCbChange(Sender: TObject);
+    procedure BackgroundColorCbChange(Sender: TObject);
+    procedure AngleTbChange(Sender: TObject; {%H-}AByUser: boolean);
+    procedure CapCurveExponentSpeChange(Sender: TObject);
+    procedure CapEdgeColorCbChange(Sender: TObject);
+    procedure CapEdgeThicknessSpeChange(Sender: TObject);
+    procedure CapFillColorCbChange(Sender: TObject);
+    procedure CapLightIntensitySpeChange(Sender: TObject);
+    procedure CapRadiusSpeChange(Sender: TObject);
+    procedure CapStyleCbChange(Sender: TObject);
+    procedure ExitSubMenuClick(Sender: TObject);
+    procedure FormDestroy(Sender: TObject);
+    procedure FrameBorderColorCbChange(Sender: TObject);
+    procedure FrameRadiusSpeChange(Sender: TObject);
+    procedure KnobCurveExponentSpeChange(Sender: TObject);
+    procedure KnobEdgeColorCbChange(Sender: TObject);
+    procedure KnobEdgeThicknessSpeChange(Sender: TObject);
+    procedure KnobFillColorCbChange(Sender: TObject);
+    procedure KnobLightIntensitySpeChange(Sender: TObject);
+    procedure KnobStyleCbChange(Sender: TObject);
+    procedure MouseWheelSpeedTBChange(Sender: TObject; {%H-}AByUser: boolean);
+    procedure PerfTestBtnClick(Sender: TObject);
+    procedure PositionCenterMarginSpeChange(Sender: TObject);
+    procedure PositionRadiusSpeChange(Sender: TObject);
+    procedure PositionEdgeColorCbChange(Sender: TObject);
+    procedure PositionEdgeThicknessSpeChange(Sender: TObject);
+    procedure PositionFillColorCbChange(Sender: TObject);
+    procedure PositionLineCountSpeChange(Sender: TObject);
+    procedure PositionLineWidthSpeChange(Sender: TObject);
+    procedure PositionMarginSpeChange(Sender: TObject);
+    procedure PositionStyleCbChange(Sender: TObject);
+    procedure PositionFillOpacitySpeChange(Sender: TObject);
+    procedure PositionSnapCbChange(Sender: TObject);
+    procedure PresetsCbChange(Sender: TObject);
+    procedure ResetSpinnerLAFBtnClick(Sender: TObject);
+    procedure SpinnerLockedCbChange(Sender: TObject);
+    procedure SpinResolutionCbChange(Sender: TObject);
+    procedure FormCreate(Sender: TObject);
+    procedure SuperSpinnerCapClick(Sender: TObject; Button: TMouseButton;
+      Shift: TShiftState);
+    procedure SuperSpinnerClick(Sender: TObject);
+    procedure SuperSpinnerDblClick(Sender: TObject);
+    procedure SuperSpinnerKnobClick(Sender: TObject; {%H-}Button: TMouseButton;
+      Shift: TShiftState);
+    procedure SuperSpinnerMouseCapEnter(Sender: TObject; Shift: TShiftState; {%H-}X,
+      {%H-}Y: Integer);
+    procedure SuperSpinnerMouseCapLeave(Sender: TObject; Shift: TShiftState; {%H-}X,
+      {%H-}Y: Integer);
+    procedure SuperSpinnerMouseDown(Sender: TObject; Button: TMouseButton;
+      Shift: TShiftState; {%H-}X, {%H-}Y: Integer);
+    procedure SuperSpinnerMouseEnter(Sender: TObject);
+    procedure SuperSpinnerMouseKnobEnter(Sender: TObject; Shift: TShiftState;
+      {%H-}X, {%H-}Y: Integer);
+    procedure SuperSpinnerMouseKnobLeave(Sender: TObject; Shift: TShiftState;
+      {%H-}X, {%H-}Y: Integer);
+    procedure SuperSpinnerMouseLeave(Sender: TObject);
+    procedure SuperSpinnerMouseMove(Sender: TObject; Shift: TShiftState; {%H-}X,
+      {%H-}Y: Integer);
+    procedure SuperSpinnerMouseUp(Sender: TObject; Button: TMouseButton;
+      Shift: TShiftState; {%H-}X, {%H-}Y: Integer);
+    procedure SuperSpinnerMouseWheel(Sender: TObject; Shift: TShiftState;
+      WheelDelta: Integer; MousePos: TPoint; var {%H-}Handled: Boolean);
+    procedure SuperSpinnerPosChanged(Sender: TObject; Shift: TShiftState;
+      Value: single; MoveDir: TSSDirection);
+    procedure SuperSpinnerWrapped(Sender: TObject; {%H-}Shift: TShiftState;
+      OldAngle, NewAngle: single; {%H-}MoveDir: TSSDirection);
+    procedure Timer1Timer(Sender: TObject);
+    procedure TimerLEDClick(Sender: TObject);
+    procedure ValueMinus50BtnClick(Sender: TObject);
+    procedure ValueMinus10BtnClick(Sender: TObject);
+    procedure ValueMinus1BtnClick(Sender: TObject);
+    procedure ValuePlus50BtnClick(Sender: TObject);
+    procedure ValuePlus10BtnClick(Sender: TObject);
+    procedure ValuePlus1BtnClick(Sender: TObject);
+    procedure ValueZeroBtnClick(Sender: TObject);
+    procedure WidthHeightAddBtnClick(Sender: TObject);
+    procedure HeightAddBtnClick(Sender: TObject);
+    procedure HeightSubBtnClick(Sender: TObject);
+    procedure LeftAddBtnClick(Sender: TObject);
+    procedure LeftSubBtnClick(Sender: TObject);
+    procedure ResetPositionBtnClick(Sender: TObject);
+    procedure ResetSizeBtnClick(Sender: TObject);
+    procedure TopAddBtnClick(Sender: TObject);
+    procedure TopSubBtnClick(Sender: TObject);
+    procedure WidthAddBtnClick(Sender: TObject);
+    procedure WidthHeightSubBtnClick(Sender: TObject);
+    procedure WidthSubBtnClick(Sender: TObject);
+  private
+    FTotalizer: integer;
+    FSavedSpinner: TSuperSpinner;
+
+  public
+    procedure PresetDefault;
+    procedure PresetLines1;
+    procedure PresetLines2;
+    procedure PresetLines3;
+    procedure PresetFinger1;
+    procedure PresetFinger2;
+
+    procedure UpdateBasicStats;
+    procedure UpdateWHStats;
+    procedure UpdateLTStats;
+    procedure UpdateFrameStats;
+    procedure UpdateKnobStats;
+    procedure UpdatePositionStats;
+    procedure UpdateCapStats;
+    procedure UpdateSpinnerMovementStats; // only some
+
+    function MouseButtonToStr(Button: TMouseButton): string;
+    function MouseShiftToStr(Shift: TShiftState): string;
+    procedure SetShiftState(Highlight: boolean; Shift: TShiftState);
+    procedure SetMouseButtonState(Highlight: boolean; Button: TMouseButton);
+  end;
+
+var
+  SSTestFrm: TSSTestFrm;
+
+implementation
+
+{$R *.lfm}
+
+{ SSTestFrm }
+
+procedure TSSTestFrm.FormCreate(Sender: TObject);
+begin
+  Caption := 'Super Spinner Test Application ' + VERSIONSTR;
+
+  UpdateBasicStats;
+  UpdateWHStats;
+  UpdateLTStats;
+  UpdateFrameStats;
+  UpdateKnobStats;
+  UpdatePositionStats;
+  UpdateCapStats;
+  UpdateSpinnerMovementStats;
+
+  // Create a Spinner to have defaults, clean up in form destroy
+
+  FSavedSpinner := TSuperSpinner.Create(nil);
+
+  FTotalizer := 0;
+end;
+
+procedure TSSTestFrm.FormDestroy(Sender: TObject);
+begin
+  // Free anything created like the temp Spinner
+
+  FSavedSpinner.Free;
+end;
+
+function TSSTestFrm.MouseButtonToStr(Button: TMouseButton): string;
+begin
+  // Decode any mouse buttons that might be pushed. Only one at a time
+  // can be in the Button, not like Shift
+
+  case Button of
+    mbLeft:
+      Exit('mbLeft');
+    mbRight:
+      Exit('mbRight');
+    mbMiddle:
+      Exit('mbMiddle');
+    mbExtra1:
+      Exit('mbExtra1');
+    mbExtra2:
+      Exit('mbExtra2');
+  end;
+  Result := 'None';
+end;
+
+function TSSTestFrm.MouseShiftToStr(Shift: TShiftState): string;
+var
+  shiftStr: string;
+
+begin
+  // Decode the keyboard shift states, multiple can exist
+  // Also interesting is that Mouse Buttons will show up as
+  // ssLeft/ssRight/etc. Not sure why but seems like it's
+  // supposed to
+
+  shiftStr := '';
+
+  if ssShift in Shift then
+    shiftStr += 'ssShift ';
+
+  if ssAlt in Shift then
+    shiftStr += 'ssAlt ';
+
+  if ssCtrl in Shift then
+    shiftStr += 'ssCtrl ';
+
+  if ssLeft in Shift then
+    shiftStr += 'ssLeft ';
+
+  if ssRight in Shift then
+    shiftStr += 'ssRight ';
+
+  if ssMiddle in Shift then
+    shiftStr += 'ssMiddle ';
+
+  if ssDouble in Shift then
+    shiftStr += 'ssDouble ';
+
+  if ssMeta in Shift then
+    shiftStr += 'ssMeta ';
+
+  if ssSuper in Shift then
+    shiftStr += 'ssSuper ';
+
+  if ssHyper in Shift then
+    shiftStr += 'ssHyper ';
+
+  if ssAltGr in Shift then
+    ShiftStr += 'ssAltGr ';
+
+  if ssCaps in Shift then
+    ShiftStr += 'ssCaps ';
+
+  if ssNum in Shift then
+    ShiftStr += 'ssNum ';
+
+  if ssScroll in Shift then
+    ShiftStr += 'ssScroll ';
+
+  if ssTriple in Shift then
+    ShiftStr += 'ssTriple ';
+
+  if ssQuad in Shift then
+    ShiftStr += 'ssQuad ';
+
+  if ssExtra1 in Shift then
+    ShiftStr += 'ssExtra1 ';
+
+  if ssExtra2 in Shift then
+    ShiftStr += 'ssExtra2 ';
+
+  if Length(ShiftStr) = 0 then
+    ShiftStr := 'None';
+
+  Result := trim(ShiftStr);
+end;
+
+procedure TSSTestFrm.SetShiftState(Highlight: boolean; Shift: TShiftState);
+begin
+  // Helper to Set and Highlight Shift State Display
+
+  ShiftValueLbl.Caption := MouseShiftToStr(Shift);
+
+  if Highlight then
+  begin
+    ShiftValueLbl.Font.Color := clGreen;
+    ShiftValueLbl.Font.Style := [fsBold];
+  end
+    else
+      begin
+        ShiftValueLbl.Font.Color := clDefault;
+        ShiftValueLbl.Font.Style := [];
+      end;
+end;
+
+procedure TSSTestFrm.SetMouseButtonState(Highlight: boolean; Button: TMouseButton);
+begin
+  // Helper to Set and Hightlight Mouse Button State Display
+
+  MouseBtnValueLbl.Caption := MouseButtonToStr(Button);
+
+  if Highlight then
+  begin
+    MouseBtnValueLbl.Caption := MouseButtonToStr(Button);
+    MouseBtnValueLbl.Font.Color := clGreen;
+    MouseBtnValueLbl.Font.Style := [fsBold];
+  end
+    else
+      begin
+        MouseBtnValueLbl.Caption := 'None';
+        MouseBtnValueLbl.Font.Color := clDefault;
+        MouseBtnValueLbl.Font.Style := [];
+      end;
+end;
+
+procedure TSSTestFrm.SuperSpinnerCapClick(Sender: TObject;
+  Button: TMouseButton; Shift: TShiftState);
+begin
+  // If the Spinner Cap is visable it can have it's own Click Handler
+  // This is disabled if the Spinner is LOCKED
+
+  OnCapClickValueLbl.Font.Color := clGreen;
+  OnCapClickValueLbl.Font.Style := [fsBold];
+  SetMouseButtonState(True, Button);
+  SetShiftState(True, Shift);
+end;
+
+procedure TSSTestFrm.SuperSpinnerClick(Sender: TObject);
+begin
+  // Normal TControl type of click, it's NOT subjected to being controled
+  // by the spinners lock state since its a generic click
+
+  OnClickValueLbl.Font.Color := clGreen;
+  OnClickValueLbl.Font.Style := [fsBold];
+end;
+
+procedure TSSTestFrm.SuperSpinnerDblClick(Sender: TObject);
+begin
+  OnDblClickValueLbl.Font.Color := clGreen;
+  OnDblClickValueLbl.Font.Style := [fsBold];
+end;
+
+procedure TSSTestFrm.SuperSpinnerKnobClick(Sender: TObject;
+  Button: TMouseButton; Shift: TShiftState);
+begin
+  // This is another Spinner specific event, and only triggered
+  // when the KNOB portion is clicked. It will NOT trigger on the
+  // Cap if that is enabled, and will not trigger on the Frame of the
+  // Spinner or other parts of the client area
+
+  OnKnobClickValueLbl.Font.Color := clGreen;
+  OnKnobClickValueLbl.Font.Style := [fsBold];
+  SetShiftState(True, Shift);
+  UpdateSpinnerMovementStats;
+end;
+
+procedure TSSTestFrm.SuperSpinnerMouseCapEnter(Sender: TObject;
+  Shift: TShiftState; X, Y: Integer);
+begin
+  // Will track Mouse Entering the Cap if the Cap is enabled
+
+  OnMouseCapEnterValueLbl.Font.Color := clGreen;
+  OnMouseCapEnterValueLbl.Font.Style := [fsBold];
+  SetShiftState(True, Shift);
+end;
+
+procedure TSSTestFrm.SuperSpinnerMouseCapLeave(Sender: TObject;
+  Shift: TShiftState; X, Y: Integer);
+begin
+  // Will track Mouse Leaving the Cap if the Cap is Enabled
+
+  OnMouseCapLeaveValueLbl.Font.Color := clGreen;
+  OnMouseCapLeaveValueLbl.Font.Style := [fsBold];
+  SetShiftState(True, Shift);
+end;
+
+procedure TSSTestFrm.SuperSpinnerMouseDown(Sender: TObject;
+  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
+begin
+  // General Mouse Down event, will trigger anywhere in the control
+
+  OnMouseDownValueLbl.Font.Color := clGreen;
+  OnMouseDownValueLbl.Font.Style := [fsBold];
+  SetMouseButtonState(True, Button);
+  SetShiftState(True, Shift);
+end;
+
+procedure TSSTestFrm.SuperSpinnerMouseEnter(Sender: TObject);
+begin
+  // General Mouse Enter, will trigger anywhere in the control
+
+  OnMouseEnterValueLbl.Font.Color := clGreen;
+  OnMouseEnterValueLbl.Font.Style := [fsBold];
+end;
+
+procedure TSSTestFrm.SuperSpinnerMouseKnobEnter(Sender: TObject;
+  Shift: TShiftState; X, Y: Integer);
+begin
+  // Will trigger when the mouse enters the Knob, Spinner specific
+  // If the cap is enabled, and the mouse is in the Cap, and moves
+  // to the Knob, it will also trigger.
+
+  OnMouseKnobEnterValueLbl.Font.Color := clGreen;
+  OnMouseKnobEnterValueLbl.Font.Style := [fsBold];
+  SetShiftState(True, Shift);
+end;
+
+procedure TSSTestFrm.SuperSpinnerMouseKnobLeave(Sender: TObject;
+  Shift: TShiftState; X, Y: Integer);
+begin
+  // Triggers anytime the mouse leaves the knob portion of the spinner. This
+  // includes leaving the knob area into the Cap if that is enabled.
+
+  OnMouseKnobLeaveValueLbl.Font.Color := clGreen;
+  OnMouseKnobLeaveValueLbl.Font.Style := [fsBold];
+  SetShiftState(True, Shift);
+end;
+
+procedure TSSTestFrm.SuperSpinnerMouseLeave(Sender: TObject);
+begin
+  OnMouseLeaveValueLbl.Font.Color := clGreen;
+  OnMouseLeaveValueLbl.Font.Style := [fsBold];
+end;
+
+procedure TSSTestFrm.SuperSpinnerMouseMove(Sender: TObject; Shift: TShiftState;
+  X, Y: Integer);
+begin
+  // General mouse movement capture, will capture anywhere in the component
+
+  OnMouseMoveValueLbl.Font.Color := clGreen;
+  OnMouseMoveValueLbl.Font.Style := [fsBold];
+  SetShiftState(True, Shift);
+end;
+
+procedure TSSTestFrm.SuperSpinnerMouseUp(Sender: TObject; Button: TMouseButton;
+  Shift: TShiftState; X, Y: Integer);
+begin
+  // General mouse movement capture, will capture anywhere in the component
+
+  OnMouseUpValueLbl.Font.Color := clGreen;
+  OnMouseUpValueLbl.Font.Style := [fsBold];
+  SetMouseButtonState(True, Button);
+  SetShiftState(True, Shift);
+end;
+
+procedure TSSTestFrm.SuperSpinnerMouseWheel(Sender: TObject;
+  Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint;
+  var Handled: Boolean);
+begin
+  // General mouse movement capture, will capture anywhere in the component
+
+  MouseWheelValueLbl.Caption := 'Mouse: ' + MouseShiftToStr(Shift) + ', Delta:' + IntToStr(WheelDelta) + ', Mouse: '
+    + IntToStr(MousePos.X) + ',' + IntToStr(MousePos.Y);
+  MouseWheelValueLbl.Font.Color := clGreen;
+  MouseWheelValueLbl.Font.Style := [fsBold];
+end;
+
+// Rest stuff ever timer tick, this just flashes
+// stuff and not synced to anythings so flashes
+// may be short or longer depending when you click
+
+procedure TSSTestFrm.Timer1Timer(Sender: TObject);
+begin
+  // called every timer interval to reset the display
+
+  OnCapClickValueLbl.Font.Color := clDefault;
+  OnCapClickValueLbl.Font.Style := [];
+  OnClickValueLbl.Font.Color := clDefault;
+  OnClickValueLbl.Font.Style := [];
+  OnDblClickValueLbl.Font.Color := clDefault;
+  OnDblClickValueLbl.Font.Style := [];
+  OnKnobClickValueLbl.Font.Color := clDefault;
+  OnKnobClickValueLbl.Font.Style := [];
+  OnPosChangeValueLbl.Font.Color := clDefault;
+  OnPosChangeValueLbl.Font.Style := [];
+  OnMouseEnterValueLbl.Font.Color := clDefault;
+  OnMouseEnterValueLbl.Font.Style := [];
+  OnMouseLeaveValueLbl.Font.Color := clDefault;
+  OnMouseLeaveValueLbl.Font.Style := [];
+  OnMouseCapEnterValueLbl.Font.Color := clDefault;
+  OnMouseCapEnterValueLbl.Font.Style := [];
+  OnMouseCapLeaveValueLbl.Font.Color := clDefault;
+  OnMouseCapLeaveValueLbl.Font.Style := [];
+  OnMouseKnobEnterValueLbl.Font.Color := clDefault;
+  OnMouseKnobEnterValueLbl.Font.Style := [];
+  OnMouseKnobLeaveValueLbl.Font.Color := clDefault;
+  OnMouseKnobLeaveValueLbl.Font.Style := [];
+  OnMouseUpValueLbl.Font.Color := clDefault;
+  OnMouseUpValueLbl.Font.Style := [];
+  OnMouseDownValueLbl.Font.Color := clDefault;
+  OnMouseDownValueLbl.Font.Style := [];
+  OnMouseMoveValueLbl.Font.Color := clDefault;
+  OnMouseMoveValueLbl.Font.Style := [];
+  SetShiftState(False, []);
+  SetMouseButtonState(False, TMouseButton(0)); // fake out a mouse button, not used if False
+  MouseWheelValueLbl.Caption := '';
+  MouseWheelValueLbl.Font.Color := clDefault;
+  MouseWheelValueLbl.Font.Style := [];
+
+  WrappedValueLbl.Font.Style := [];
+
+  TimerLED.Active := not TimerLED.Active;
+end;
+
+procedure TSSTestFrm.TimerLEDClick(Sender: TObject);
+begin
+  // Click on the LED for a forced reset of the Event display
+
+  Timer1Timer(self);
+end;
+
+procedure TSSTestFrm.HeightAddBtnClick(Sender: TObject);
+begin
+  SuperSpinner.Height := SuperSpinner.Height + 10;
+  UpdateWHStats;
+end;
+
+procedure TSSTestFrm.BackgroundColorCbChange(Sender: TObject);
+begin
+  SuperSpinner.Color := BackgroundColorCb.Selected;
+end;
+
+procedure TSSTestFrm.AboutSubMenuClick(Sender: TObject);
+begin
+  AboutFrm.VersionStr := VERSIONSTR;
+  AboutFrm.show;
+end;
+
+procedure TSSTestFrm.AutoScaleCbChange(Sender: TObject);
+begin
+  SuperSpinner.AutoScale := AutoScaleCb.Checked;
+  AutoScaleEnabledLbl.Visible := SuperSpinner.AutoScale;
+end;
+
+procedure TSSTestFrm.AngleTbChange(Sender: TObject; AByUser: boolean);
+begin
+  SuperSpinner.Angle := AngleTb.Value;  // This will NOT call OnPosChanged internally to the spinner
+  AngleValueLbl.Caption := FloatToStrF(SuperSpinner.Angle, ffFixed, 3,3); // Update display
+  // again, setting the Angle will not do anything except reposition the spinner
+  // No events will be called
+end;
+
+procedure TSSTestFrm.CapCurveExponentSpeChange(Sender: TObject);
+begin
+  SuperSpinner.CapSettings.CurveExponent := CapCurveExponentSpe.Value;
+end;
+
+procedure TSSTestFrm.CapEdgeColorCbChange(Sender: TObject);
+begin
+  SuperSpinner.CapSettings.EdgeColor := CapEdgeColorCb.Selected;
+end;
+
+procedure TSSTestFrm.CapEdgeThicknessSpeChange(Sender: TObject);
+begin
+  SuperSpinner.CapSettings.EdgeThickness := CapEdgeThicknessSpe.Value;
+end;
+
+procedure TSSTestFrm.CapFillColorCbChange(Sender: TObject);
+begin
+  SuperSpinner.CapSettings.FillColor := CapFillColorCb.Selected;
+end;
+
+procedure TSSTestFrm.CapLightIntensitySpeChange(Sender: TObject);
+begin
+  SuperSpinner.CapSettings.LightIntensity := CapLightIntensitySpe.Value;
+end;
+
+procedure TSSTestFrm.CapRadiusSpeChange(Sender: TObject);
+begin
+  SuperSpinner.CapSettings.Radius := CapRadiusSpe.Value;
+end;
+
+procedure TSSTestFrm.CapStyleCbChange(Sender: TObject);
+begin
+  // csNone, csFlat, csShaded, csPhong, csOutline
+
+  case CapStyleCb.ItemIndex of
+    0 : {csNone}
+      SuperSpinner.CapSettings.Style := csNone;
+    1 : {csFlat}
+      SuperSpinner.CapSettings.Style := csFlat;
+    2: {csShaded}
+      SuperSpinner.CapSettings.Style := csShaded;
+    3: {csPhong}
+      SuperSpinner.CapSettings.Style := csPhong;
+    4: {csOutline}
+      SuperSpinner.CapSettings.Style := csOutline;
+  else
+    // Unknown type, warn somewhere...
+  end;
+
+  UpdateCapStats;
+end;
+
+procedure TSSTestFrm.ExitSubMenuClick(Sender: TObject);
+begin
+  Close;
+end;
+
+procedure TSSTestFrm.FrameBorderColorCbChange(Sender: TObject);
+begin
+  SuperSpinner.FrameSettings.BorderColor := FrameBorderColorCb.Selected;
+end;
+
+procedure TSSTestFrm.FrameRadiusSpeChange(Sender: TObject);
+begin
+  SuperSpinner.FrameSettings.BorderWidth := FrameRadiusSpe.Value;
+end;
+
+procedure TSSTestFrm.KnobCurveExponentSpeChange(Sender: TObject);
+begin
+  SuperSpinner.KnobSettings.CurveExponent := KnobCurveExponentSpe.Value;
+end;
+
+procedure TSSTestFrm.KnobEdgeColorCbChange(Sender: TObject);
+begin
+  SuperSpinner.KnobSettings.EdgeColor := KnobEdgeColorCb.Selected;
+end;
+
+procedure TSSTestFrm.KnobEdgeThicknessSpeChange(Sender: TObject);
+begin
+  SuperSpinner.KnobSettings.EdgeThickness := KnobEdgeThicknessSpe.Value;
+end;
+
+procedure TSSTestFrm.KnobFillColorCbChange(Sender: TObject);
+begin
+  SuperSpinner.KnobSettings.FillColor := KnobFillColorCb.Selected;
+end;
+
+procedure TSSTestFrm.KnobLightIntensitySpeChange(Sender: TObject);
+begin
+  SuperSpinner.KnobSettings.LightIntensity := KnobLightIntensitySpe.Value;
+end;
+
+procedure TSSTestFrm.KnobStyleCbChange(Sender: TObject);
+begin
+  // ssFlat, ssShaded, ssPhong
+
+  case KnobStyleCb.ItemIndex of
+    0 : {ssFlat}
+      SuperSpinner.KnobSettings.Style := ssFlat;
+    1 : {ssShaded}
+      SuperSpinner.KnobSettings.Style  := ssShaded;
+    2: {ssPhong}
+      SuperSpinner.KnobSettings.Style := ssPhong;
+  else
+    // Unknown type, warn somewhere...
+  end;
+
+  UpdateKnobStats;
+end;
+
+procedure TSSTestFrm.MouseWheelSpeedTBChange(Sender: TObject; AByUser: boolean);
+begin
+  SuperSpinner.WheelSpeed:= MouseWheelSpeedTB.Value;
+  MouseWheelDisabledLbl.Visible := (SuperSpinner.WheelSpeed = 0);
+end;
+
+procedure TSSTestFrm.PerfTestBtnClick(Sender: TObject);
+var
+  i, j : integer;
+begin
+  // Just move the knove, no event's, mainly for paint tests
+
+  for j := 0 to 10 do
+  begin
+      for i := 0 to 100 do
+      begin
+        SuperSpinner.Angle := i;
+        Application.ProcessMessages;
+      end;
+  end;
+  beep;
+end;
+
+procedure TSSTestFrm.PositionCenterMarginSpeChange(Sender: TObject);
+begin
+  SuperSpinner.PositionSettings.CenterMargin := PositionCenterMarginSpe.Value;
+end;
+
+procedure TSSTestFrm.PositionRadiusSpeChange(Sender: TObject);
+begin
+  SuperSpinner.PositionSettings.Radius := PositionRadiusSpe.Value;
+end;
+
+procedure TSSTestFrm.PositionEdgeColorCbChange(Sender: TObject);
+begin
+  SuperSpinner.PositionSettings.EdgeColor := PositionEdgeColorCb.Selected;
+end;
+
+procedure TSSTestFrm.PositionEdgeThicknessSpeChange(Sender: TObject);
+begin
+  SuperSpinner.PositionSettings.EdgeThickness := PositionEdgeThicknessSpe.Value;
+end;
+
+procedure TSSTestFrm.PositionFillColorCbChange(Sender: TObject);
+begin
+  SuperSpinner.PositionSettings.FillColor := PositionFillColorCb.Selected;
+end;
+
+procedure TSSTestFrm.PositionLineCountSpeChange(Sender: TObject);
+begin
+  SuperSpinner.PositionSettings.LineCount := PositionLineCountSpe.Value;
+end;
+
+procedure TSSTestFrm.PositionLineWidthSpeChange(Sender: TObject);
+begin
+  SuperSpinner.PositionSettings.LineWidth := PositionLineWidthSpe.Value;
+end;
+
+procedure TSSTestFrm.PositionMarginSpeChange(Sender: TObject);
+begin
+  SuperSpinner.PositionSettings.Margin := PositionMarginSpe.Value;
+end;
+
+procedure TSSTestFrm.PositionStyleCbChange(Sender: TObject);
+begin
+  // Update Position Style
+  // psNone, psFilledCircle, psHollowCircle, psIndentCircle, psLines
+
+  case PositionStyleCb.ItemIndex of
+    0 : {psNone}
+      SuperSpinner.PositionSettings.Style := psNone;
+    1 : {psFilledCircle}
+      SuperSpinner.PositionSettings.Style := psFilledCircle;
+    2 : {psHollowCircle}
+      SuperSpinner.PositionSettings.Style := psHollowCircle;
+    3 : {psShaded}
+      SuperSpinner.PositionSettings.Style := psShaded;
+    4 : {psIndentCircle}
+      SuperSpinner.PositionSettings.Style := psIndentCircle;
+    5 : {psLines}
+      SuperSpinner.PositionSettings.Style := psLines;
+
+  else
+    // Unknown type, Warn
+  end;
+end;
+
+procedure TSSTestFrm.PositionFillOpacitySpeChange(Sender: TObject);
+begin
+  SuperSpinner.PositionSettings.Opacity := PositionFillOpacitySpe.Value;
+end;
+
+procedure TSSTestFrm.PositionSnapCbChange(Sender: TObject);
+begin
+  SuperSpinner.PositionSnap := PositionSnapCb.Checked;
+  UpdateSpinnerMovementStats;
+end;
+
+procedure TSSTestFrm.PresetsCbChange(Sender: TObject);
+begin
+  case PresetsCb.ItemIndex of
+    0 : {default}
+      PresetDefault;
+    1 : {Lines 1}
+      PresetLines1;
+    2 : {Lines 2}
+      PresetLines2;
+    3 : {Lines 3}
+      PresetLines3;
+    4 : {Finger 1}
+      PresetFinger1;
+    5 : {Finger 2}
+      PresetFinger2;
+  end;
+end;
+
+procedure TSSTestFrm.PresetDefault;
+begin
+  // Resets mostly everything back to default Look and Feel
+  // If adding or removing props don't forget to fix here!
+
+  // Basic Settings
+
+  with FSavedSpinner do
+  begin
+    SuperSpinner.Angle := Angle;
+    SuperSpinner.Color := Color;
+    SuperSpinner.Locked := Locked;
+    SuperSpinner.PositionSnap := PositionSnap;
+    SuperSpinner.SpinResolution := SpinResolution;
+    SuperSpinner.WheelSpeed := WheelSpeed;
+  end;
+  UpdateBasicStats;
+
+  // Cap Settings
+
+  with FSavedSpinner.CapSettings do
+  begin
+    SuperSpinner.CapSettings.CurveExponent := CurveExponent;
+    SuperSpinner.CapSettings.EdgeColor := EdgeColor;
+    SuperSpinner.CapSettings.EdgeThickness := EdgeThickness;
+    SuperSpinner.CapSettings.FillColor := FillColor;
+    SuperSpinner.CapSettings.LightIntensity := LightIntensity;
+    SuperSpinner.CapSettings.Radius := Radius;
+    SuperSpinner.CapSettings.Style := Style;
+  end;
+  UpdateCapStats;
+
+  // Frame Settings
+
+  with FSavedSpinner.FrameSettings do
+  begin
+    SuperSpinner.FrameSettings.BorderColor := BorderColor;
+    SuperSpinner.FrameSettings.BorderWidth := BorderWidth;
+  end;
+  UpdateFrameStats;
+
+  // Knob Settings
+
+  with FSavedSpinner.KnobSettings do
+  begin
+    SuperSpinner.KnobSettings.CurveExponent := CurveExponent;
+    SuperSpinner.KnobSettings.EdgeColor := EdgeColor;
+    SuperSpinner.KnobSettings.EdgeThickness := EdgeThickness;
+    SuperSpinner.KnobSettings.FillColor := FillColor;
+    SuperSpinner.KnobSettings.LightIntensity := LightIntensity;
+    SuperSpinner.KnobSettings.Style := Style;
+  end;
+  UpdateKnobStats;
+
+  // Position Settings
+
+  with FSavedSpinner.PositionSettings do
+  begin
+    SuperSpinner.PositionSettings.CenterMargin := CenterMargin;
+    SuperSpinner.PositionSettings.Radius := Radius;  // This may need to be renamed to RADIUS for consistancy
+    SuperSpinner.PositionSettings.EdgeColor := EdgeColor;
+    SuperSpinner.PositionSettings.EdgeThickness := EdgeThickness;
+    SuperSpinner.PositionSettings.FillColor := FillColor;
+    SuperSpinner.PositionSettings.LineCount := LineCount;
+    SuperSpinner.PositionSettings.LineWidth := LineWidth;
+    SuperSpinner.PositionSettings.Margin := Margin;
+    SuperSpinner.PositionSettings.Opacity := Opacity;
+    SuperSpinner.PositionSettings.Style := Style;
+  end;
+  UpdatePositionStats;
+
+end;
+procedure TSSTestFrm.PresetLines1;
+begin
+  // Lines 1 type, just different in a few aspects to show settings
+
+  with SuperSpinner.PositionSettings do
+  begin
+    Style := psLines;
+    FillColor := clGray;
+    LineCount := 6;
+    LineWidth := 3;
+    Margin := 15;
+    CenterMargin := 40;
+  end;
+
+  with SuperSpinner.CapSettings do
+  begin
+    Style := csShaded;
+    FillColor := clGray;
+    EdgeColor := clSilver;
+    EdgeThickness := 2;
+  end;
+
+  with SuperSpinner.KnobSettings do
+  begin
+    Style := ssFlat;
+    FillColor := clSilver;
+    EdgeColor := clMedGray;
+    EdgeThickness := 4;
+  end;
+
+  UpdatePositionStats;
+  UpdateCapStats;
+  UpdateKnobStats;
+end;
+
+procedure TSSTestFrm.PresetLines2;
+begin
+  // Lines 2 type, just different in a few aspects to show settings
+
+  with SuperSpinner.PositionSettings do
+  begin
+    Style := psLines;
+    FillColor := clRed;
+    LineCount := 5;
+    LineWidth := 6;
+    Margin := 15;
+    CenterMargin := 40;
+  end;
+
+  with SuperSpinner.CapSettings do
+  begin
+    Style := csFlat;
+    FillColor := clRed;
+    EdgeColor := clBlue;
+    EdgeThickness := 4;
+  end;
+
+  with SuperSpinner.KnobSettings do
+  begin
+    Style := ssFlat;
+    FillColor := clMedGray;
+    EdgeColor := clGray;
+    EdgeThickness := 4;
+  end;
+
+  UpdatePositionStats;
+  UpdateCapStats;
+  UpdateKnobStats;
+end;
+
+procedure TSSTestFrm.PresetLines3;
+begin
+  // Lines 3 type, just different in a few aspects to show settings
+
+  with SuperSpinner.PositionSettings do
+  begin
+    Style := psLines;
+    FillColor := clRed;
+    LineCount := 15;
+    LineWidth := 4;
+    CenterMargin := 0;
+  end;
+
+  with SuperSpinner.CapSettings do
+  begin
+    Style := csNone;
+    FillColor := clRed;
+    EdgeColor := clBlue;
+    EdgeThickness := 4;
+  end;
+
+  with SuperSpinner.KnobSettings do
+  begin
+    Style := ssShaded;
+    FillColor := clWhite;
+    EdgeColor := clSilver;
+    EdgeThickness := 4;
+  end;
+
+  UpdatePositionStats;
+  UpdateCapStats;
+  UpdateKnobStats;
+end;
+
+procedure TSSTestFrm.PresetFinger1;
+begin
+  // Finger Hole type of spinner
+
+  with SuperSpinner.PositionSettings do
+  begin
+    Style := psIndentCircle;
+    FillColor := clBlack;
+    EdgeColor := clGray;
+    Radius := 20;
+    EdgeThickness := 2;
+  end;
+
+  with SuperSpinner.CapSettings do
+  begin
+    Style := csNone;
+  end;
+
+  with SuperSpinner.KnobSettings do
+  begin
+    Style := ssPhong;
+    FillColor := clWhite;
+    EdgeColor := clMedGray;
+    EdgeThickness := 2;
+  end;
+
+  UpdatePositionStats;
+  UpdateCapStats;
+  UpdateKnobStats;
+end;
+
+procedure TSSTestFrm.PresetFinger2;
+begin
+  // Another Finger Hole type
+
+  with SuperSpinner.PositionSettings do
+  begin
+    Style := psHollowCircle;
+    FillColor := clBlack;
+    EdgeColor := clGray;
+    Radius := 20;
+    EdgeThickness := 2;
+    LineWidth := 2;
+  end;
+
+  with SuperSpinner.CapSettings do
+  begin
+    Style := csNone;
+  end;
+
+  with SuperSpinner.KnobSettings do
+  begin
+    Style := ssPhong;
+    FillColor := clWhite;
+    EdgeColor := clMedGray;
+    EdgeThickness := 2;
+  end;
+
+  UpdatePositionStats;
+  UpdateCapStats;
+  UpdateKnobStats;
+end;
+
+procedure TSSTestFrm.ResetSpinnerLAFBtnClick(Sender: TObject);
+begin
+  PresetDefault;
+  PresetsCb.ItemIndex := 0;
+end;
+
+procedure TSSTestFrm.SpinnerLockedCbChange(Sender: TObject);
+begin
+  // If we lock the spinner, set a few colors to Red, if unlocked
+  // restore to what the form has them set to. This is dumb as it
+  // just doesn't update the contols on the test page so can just be restored.
+  // So DON'T UpdateStats on these or you will have to save off the state
+  // and that's more work!
+
+  SuperSpinner.Locked := SpinnerLockedCb.Checked;
+
+  if SuperSpinner.Locked then
+  begin
+    SuperSpinner.KnobSettings.FillColor := clRed;
+    SuperSpinner.KnobSettings.EdgeColor := clRed;
+    SuperSpinner.CapSettings.FillColor := clRed;
+    SuperSpinner.CapSettings.EdgeColor := clBlack;
+    SuperSpinner.FrameSettings.BorderColor := clBlack;
+  end
+    else
+      begin
+        SuperSpinner.KnobSettings.FillColor := KnobFillColorCb.Selected;
+        SuperSpinner.KnobSettings.EdgeColor := KnobEdgeColorCb.Selected;
+        SuperSpinner.CapSettings.FillColor := CapFillColorCb.Selected;
+        SuperSpinner.CapSettings.EdgeColor := CapEdgeColorCb.Selected;
+        SuperSpinner.FrameSettings.BorderColor := FrameBorderColorCb.Selected;
+      end;
+end;
+
+procedure TSSTestFrm.SpinResolutionCbChange(Sender: TObject);
+begin
+  // SpinResolution
+  // TSSResolution = (srHighest = 0, srHigh = 1, srHighMedium =2, srMedium = 3,
+  //                  srMediumLow = 4, srLow = 5, srLowest = 6)
+  //
+  // These are abstracted to not get into any trouble with actual events per
+  // revolution of the spinner. srHighest is full resolution of the mouse movement
+  // and it gets more of a detent feel as you go to lower settings.
+  //
+  // Also an interesting note if using a Position type of lines it may not look
+  // like the spinner is moving, switch to a different style to see the movement.
+
+  case SpinResolutionCb.ItemIndex of
+    0 : {srHighest}
+      SuperSpinner.SpinResolution := srHighest;
+    1 : {srHigh}
+      SuperSpinner.SpinResolution := srHigh;
+    2: {srHighMedium}
+      SuperSpinner.SpinResolution := srHighMedium;
+    3: {srMedium}
+      SuperSpinner.SpinResolution := srMedium;
+    4: {srMediumLow}
+      SuperSpinner.SpinResolution := srMediumLow;
+    5: {srLow}
+      SuperSpinner.SpinResolution := srLow;
+    6: {srLowest}
+      SuperSpinner.SpinResolution := srLowest;
+  else
+    // Unknown type, warn somewhere...
+  end;
+
+  UpdateBasicStats;
+end;
+
+procedure TSSTestFrm.SuperSpinnerPosChanged(Sender: TObject;
+  Shift: TShiftState; Value: single; MoveDir: TSSDirection);
+var
+  Direction: integer;
+  DirectionStr: string;
+
+begin
+  // This gets called anytime the Spinner is moved by the user EXCEPT if the
+  // Angle() method is called as it do NOT call this event handler
+  //
+  // This handler is where you would, for example, increase/decrease a value
+  // as the user spins. Radio Frequency, Song Selection (like iPod), etc.
+  // Typically the Angle should NOT be used other than to set the Position
+  // Visually.
+
+  // See which way we are moving, get the direction string decoded as well
+
+  if MoveDir = sdCW then
+  begin
+      Direction := 1;
+      DirectionStr := 'sdCW';
+  end
+    else
+      begin
+        Direction := -1;
+        DirectionStr := 'sdCCW';
+      end;
+
+  // If moving the Spinner and the SHIFT is held down, it will just 10x the
+  // bump in the Totalizer. This is arbitrary and just to show some examples
+  // of a FAST way to move the spinner if needed.
+
+  if ssShift in Shift then
+  begin
+    Direction := Direction * 10; // if shifting just 10x the count
+  end;
+
+  DirectionValueLbl.Caption := DirectionStr;
+  AngleValueLbl.Caption := FloatToStrF(Value, ffFixed, 3,3);
+  AngleTb.Value := Round(Value);
+  FTotalizer := FTotalizer + Direction;
+  TotalizerValueLbl.Caption := IntToStr(FTotalizer);
+  ShiftValueLbl.Caption := MouseShiftToStr(Shift);
+  ShiftValueLbl.Font.Color := clGreen;
+  ShiftValueLbl.Font.Style := [fsBold];
+  OnPosChangeValueLbl.Font.Color := clGreen;
+  OnPosChangeValueLbl.Font.Style := [fsBold];
+end;
+
+procedure TSSTestFrm.SuperSpinnerWrapped(Sender: TObject; Shift: TShiftState;
+  OldAngle, NewAngle: single; MoveDir: TSSDirection);
+begin
+  // If the spinners angle passes over 0 degrees by any direction or step it
+  // trigger this. This could come in handy for something, but not sure what...
+
+  WrappedValueLbl.Caption := 'Last Wrap@ Old: ' + FloatToStrF(OldAngle, ffFixed, 3,3) + ' New: ' + FloatToStrF(NewAngle, ffFixed, 3,3);
+  WrappedValueLbl.Font.Style := [fsBold];
+end;
+
+procedure TSSTestFrm.ValueMinus50BtnClick(Sender: TObject);
+begin
+  SuperSpinner.Spin(sdCCW, 1, 60, UseProcessMsgCb.Checked);
+end;
+
+procedure TSSTestFrm.ValueMinus10BtnClick(Sender: TObject);
+begin
+  SuperSpinner.Spin(sdCCW, 1, 10, UseProcessMsgCb.Checked);
+end;
+
+procedure TSSTestFrm.ValueMinus1BtnClick(Sender: TObject);
+begin
+    SuperSpinner.Bump(sdCCW, 1);
+end;
+
+procedure TSSTestFrm.ValuePlus50BtnClick(Sender: TObject);
+begin
+  SuperSpinner.Spin(sdCW, 1, 60, UseProcessMsgCb.Checked);
+end;
+
+procedure TSSTestFrm.ValuePlus10BtnClick(Sender: TObject);
+begin
+  // Spin the wheel Clockwise 1 degree, 10 time. If UseProcessMsgCb is
+  // True, then between each step ProcessMessages will be called to let
+  // the screen update at each move. Otherwise it will just jump to the
+  // end position depening on how the O/S does screen updates.
+  //
+  // Will cause the OnPosChange Event to fire 10 times in this case as
+  // internally the Spin method will call bump as many times as needed.
+
+  // To change speed or smoothness you can change the Angle and count, for
+  // example you can have the Angle = 0.1 and the Step be 100. Will be slow
+  // and smooth. You will however get 100 calls to OnPosChange() but you
+  // can compensate by scaling your totalizer or other schemes. Play...
+
+    SuperSpinner.Spin(sdCW, 1, 10, UseProcessMsgCb.Checked);
+end;
+
+procedure TSSTestFrm.ValuePlus1BtnClick(Sender: TObject);
+begin
+  // Bump the wheel Clockwise 1 degree, Will cause the
+  // OnPosChange Event to fire
+
+  SuperSpinner.Bump(sdCW, 1);
+end;
+
+procedure TSSTestFrm.ValueZeroBtnClick(Sender: TObject);
+begin
+  SuperSpinner.Angle :=0;
+  FTotalizer := 0;
+  TotalizerValueLbl.Caption := '0';
+  AngleValueLbl.Caption := '0';
+  DirectionValueLbl.Caption := 'N/A';
+  WrappedValueLbl.Caption := 'Wrapped : N/A';
+  AngleTb.Value := 0;
+end;
+
+procedure TSSTestFrm.WidthHeightAddBtnClick(Sender: TObject);
+begin
+  SuperSpinner.Width := SuperSpinner.Width + 10;
+  SuperSpinner.Height := SuperSpinner.Height + 10;
+  UpdateWHStats;
+end;
+
+procedure TSSTestFrm.HeightSubBtnClick(Sender: TObject);
+begin
+  SuperSpinner.Height := SuperSpinner.Height - 10;
+  UpdateWHStats;
+end;
+
+procedure TSSTestFrm.LeftAddBtnClick(Sender: TObject);
+begin
+  SuperSpinner.Left := SuperSpinner.Left + 10;
+  UpdateLTStats;
+end;
+
+procedure TSSTestFrm.LeftSubBtnClick(Sender: TObject);
+begin
+  SuperSpinner.Left := SuperSpinner.Left - 10;
+  UpdateLTStats;
+end;
+
+procedure TSSTestFrm.ResetPositionBtnClick(Sender: TObject);
+begin
+  SuperSpinner.Top := 50;
+  SuperSpinner.Left := 50;
+  UpdateLTStats;
+end;
+
+procedure TSSTestFrm.ResetSizeBtnClick(Sender: TObject);
+begin
+    SuperSpinner.Width := 150;
+    SuperSpinner.Height := 150;
+    UpdateWHStats;
+end;
+
+procedure TSSTestFrm.TopAddBtnClick(Sender: TObject);
+begin
+    SuperSpinner.Top := SuperSpinner.Top + 10;
+    UpdateLTStats;
+end;
+
+procedure TSSTestFrm.TopSubBtnClick(Sender: TObject);
+begin
+  SuperSpinner.Top := SuperSpinner.Top - 10;
+  UpdateLTStats;
+end;
+
+procedure TSSTestFrm.WidthAddBtnClick(Sender: TObject);
+begin
+  SuperSpinner.Width := SuperSpinner.Width + 10;
+  UpdateWHStats;
+end;
+
+procedure TSSTestFrm.WidthHeightSubBtnClick(Sender: TObject);
+begin
+  SuperSpinner.Width := SuperSpinner.Width - 10;
+  SuperSpinner.Height := SuperSpinner.Height - 10;
+  UpdateWHStats;
+end;
+
+procedure TSSTestFrm.WidthSubBtnClick(Sender: TObject);
+begin
+  SuperSpinner.Width := SuperSpinner.Width - 10;
+  UpdateWHStats;
+end;
+
+procedure TSSTestFrm.UpdateSpinnerMovementStats;
+begin
+   // Only updates a few things since OnPosChange has more data
+
+   AngleValueLbl.Caption := FloatToStrF(SuperSpinner.Angle, ffFixed, 3,3);
+   AngleTb.Value := Round(SuperSpinner.Angle);
+   TotalizerValueLbl.Caption := IntToStr(FTotalizer);
+end;
+
+procedure TSSTestFrm.UpdateBasicStats;
+begin
+  BackgroundColorCb.Selected := SuperSpinner.Color;
+  SpinResolutionCb.ItemIndex := ord(SuperSpinner.SpinResolution);
+  MouseWheelSpeedTB.Value := SuperSpinner.WheelSpeed;
+  SpinnerLockedCb.Checked := SuperSpinner.Locked;
+  PositionSnapCb.Checked := SuperSpinner.PositionSnap;
+  AutoScaleCb.Checked := SuperSpinner.AutoScale;
+  AutoScaleEnabledLbl.Visible := SuperSpinner.AutoScale;
+  AngleTb.Value := Round(SuperSpinner.Angle);
+
+end;
+
+procedure TSSTestFrm.UpdateWHStats;
+begin
+    WidthValLbl.Caption := IntToStr(SuperSpinner.Width);
+    HeightValLbl.Caption := IntToStr(SuperSpinner.Height);
+end;
+
+procedure TSSTestFrm.UpdateLTStats;
+begin
+    LeftValLbl.Caption := IntToStr(SuperSpinner.Left);
+    TopValLbl.Caption := IntToStr(SuperSpinner.Top);
+end;
+
+procedure TSSTestFrm.UpdateFrameStats;
+begin
+  FrameBorderColorCb.Selected := SuperSpinner.FrameSettings.BorderColor;
+  FrameRadiusSpe.Value := SuperSpinner.FrameSettings.BorderWidth;
+end;
+
+procedure TSSTestFrm.UpdateKnobStats;
+begin
+  KnobStyleCb.ItemIndex := ord(SuperSpinner.KnobSettings.Style);
+  KnobFillColorCb.Selected := SuperSpinner.KnobSettings.FillColor;
+  KnobEdgeColorCb.Selected := SuperSpinner.KnobSettings.EdgeColor;
+  KnobEdgeThicknessSpe.Value := SuperSpinner.KnobSettings.EdgeThickness;
+  KnobLightIntensitySpe.Value := SuperSpinner.KnobSettings.LightIntensity;
+  KnobCurveExponentSpe.Value := SuperSpinner.KnobSettings.CurveExponent;
+end;
+
+procedure TSSTestFrm.UpdatePositionStats;
+begin
+  PositionStyleCb.ItemIndex := ord(SuperSpinner.PositionSettings.Style);
+  PositionFillColorCb.Selected := SuperSpinner.PositionSettings.FillColor;
+  PositionEdgeColorCb.Selected := SuperSpinner.PositionSettings.EdgeColor;
+  PositionFillOpacitySpe.Value := SuperSpinner.PositionSettings.Opacity;
+  PositionRadiusSpe.Value := SuperSpinner.PositionSettings.Radius;
+  PositionEdgeThicknessSpe.Value := SuperSpinner.PositionSettings.EdgeThickness;
+  PositionMarginSpe.Value := SuperSpinner.PositionSettings.Margin;
+  PositionCenterMarginSpe.Value := SuperSpinner.PositionSettings.CenterMargin;
+  PositionLineCountSpe.Value := SuperSpinner.PositionSettings.LineCount;
+  PositionLineWidthSpe.Value := SuperSpinner.PositionSettings.LineWidth;
+end;
+
+procedure TSSTestFrm.UpdateCapStats;
+begin
+  CapStyleCb.ItemIndex := ord(SuperSpinner.CapSettings.Style);
+  CapFillColorCb.Selected := SuperSpinner.CapSettings.FillColor;
+  CapEdgeColorCb.Selected := SuperSpinner.CapSettings.EdgeColor;
+  CapEdgeThicknessSpe.Value := SuperSpinner.CapSettings.EdgeThickness;
+  CapRadiusSpe.Value := SuperSpinner.CapSettings.Radius;
+  CapLightIntensitySpe.Value := SuperSpinner.CapSettings.LightIntensity;
+  CapCurveExponentSpe.Value := SuperSpinner.CapSettings.CurveExponent;
+end;
+
+end.
+

+ 165 - 0
test/unit1.lfm

@@ -0,0 +1,165 @@
+object Form1: TForm1
+  Left = 517
+  Height = 445
+  Top = 162
+  Width = 1045
+  Caption = 'Form1'
+  ClientHeight = 445
+  ClientWidth = 1045
+  DesignTimePPI = 144
+  OnCreate = FormCreate
+  LCLVersion = '3.6.0.0'
+  object Label2: TLabel
+    Left = 64
+    Height = 25
+    Top = 24
+    Width = 51
+    Caption = 'Label2'
+  end
+  object Label3: TLabel
+    Left = 352
+    Height = 25
+    Top = 352
+    Width = 51
+    Caption = 'Label3'
+  end
+  object Label4: TLabel
+    Left = 277
+    Height = 25
+    Top = 320
+    Width = 203
+    Caption = 'Direction 1=CW, -1=CCW'
+  end
+  object Label5: TLabel
+    Left = 416
+    Height = 65
+    Top = 56
+    Width = 26
+    Caption = '0'
+    Font.Height = -48
+    ParentFont = False
+  end
+  object BitBtn1: TBitBtn
+    Left = 568
+    Height = 45
+    Top = 304
+    Width = 113
+    Caption = 'Perf Test'
+    OnClick = BitBtn1Click
+    TabOrder = 0
+  end
+  object BGRASpinner1: TBGRASpinner
+    Left = 32
+    Height = 150
+    Hint = 'This is a super spinner knob'
+    Top = 80
+    Width = 150
+    PositionSettings.CenterMargin = 40
+    KnobSettings.CurveExponent = 0.200000002980232
+    CurveExponent = 0.200000002980232
+    Angle = 0
+    Resolution = srLowest
+    WheelSpeed = 10
+    OnPosChanged = BGRASpinner1PosChanged
+    OnCapClick = BGRASpinner1CapClick
+    OnKnobClick = BGRASpinner1KnobClick
+    ShowHint = True
+  end
+  object BGRASpinner2: TBGRASpinner
+    Left = 216
+    Height = 150
+    Top = 80
+    Width = 150
+    PositionSettings.Style = psIndentCircle
+    PositionSettings.CenterMargin = 40
+    PositionSettings.Opacity = 128
+    CapSettings.Radius = 10
+    CapSettings.CapStyle = csNone
+    FrameSettings.BorderWidth = 0
+    FrameSettings.BorderColor = clMedGray
+    KnobSettings.CurveExponent = 0.200000002980232
+    CurveExponent = 0.200000002980232
+    Angle = 0
+    WheelSpeed = 50
+    OnPosChanged = BGRASpinner2PosChanged
+    OnWrapped = BGRASpinner2Wrapped
+  end
+  object Label1: TLabel
+    Left = 24
+    Height = 25
+    Top = 264
+    Width = 61
+    Caption = 'DEBUG'
+    Font.Style = [fsBold]
+    ParentFont = False
+  end
+  object Label6: TLabel
+    Left = 416
+    Height = 65
+    Top = 128
+    Width = 26
+    Caption = '0'
+    Font.Height = -48
+    ParentFont = False
+  end
+  object Button1: TButton
+    Left = 705
+    Height = 38
+    Top = 304
+    Width = 128
+    Caption = 'Bump CCW 1'
+    TabOrder = 1
+    OnClick = Button1Click
+  end
+  object Button2: TButton
+    Left = 705
+    Height = 38
+    Top = 264
+    Width = 128
+    Caption = 'Bump CW 1'
+    TabOrder = 2
+    OnClick = Button2Click
+  end
+  object Button3: TButton
+    Left = 706
+    Height = 38
+    Top = 344
+    Width = 127
+    Caption = 'Spin CW 25'
+    TabOrder = 3
+    OnClick = Button3Click
+  end
+  object Button4: TButton
+    Left = 705
+    Height = 38
+    Top = 384
+    Width = 127
+    Caption = 'Spin CW 50'
+    TabOrder = 4
+    OnClick = Button4Click
+  end
+  object Button5: TButton
+    Left = 856
+    Height = 38
+    Top = 384
+    Width = 113
+    Caption = 'Button5'
+    TabOrder = 5
+  end
+  object Label7: TLabel
+    Left = 216
+    Height = 25
+    Top = 264
+    Width = 118
+    Caption = 'Wrap Indicator'
+  end
+  object Button6: TButton
+    Left = 706
+    Height = 38
+    Top = 176
+    Width = 128
+    Caption = 'Not Locked'
+    TabOrder = 6
+    OnClick = Button6Click
+  end
+end

+ 251 - 0
test/unit1.pas

@@ -0,0 +1,251 @@
+unit Unit1;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, Buttons,
+  superspinner, superspinnercommon;
+
+type
+
+  { TForm1 }
+
+  TForm1 = class(TForm)
+    BGRASpinner1: TBGRASpinner;
+    BGRASpinner2: TBGRASpinner;
+    BitBtn1: TBitBtn;
+    Button1: TButton;
+    Button2: TButton;
+    Button3: TButton;
+    Button4: TButton;
+    Button5: TButton;
+    Button6: TButton;
+    Label1: TLabel;
+    Label2: TLabel;
+    Label3: TLabel;
+    Label4: TLabel;
+    Label5: TLabel;
+    Label6: TLabel;
+    Label7: TLabel;
+    procedure BGRASpinner1CapClick(Sender: TObject; Button: TMouseButton; Shift: TShiftState);
+    procedure BGRASpinner1KnobClick(Sender: TObject; Button: TMouseButton;
+      Shift: TShiftState);
+    procedure BGRASpinner1PosChanged(Sender: TObject; Shift: TShiftState;
+      Value: single; MoveDir: TBGRASpinnerDirection);
+    procedure BGRASpinner2PosChanged(Sender: TObject; Shift: TShiftState;
+      Value: single; MoveDir: TBGRASpinnerDirection);
+    procedure BGRASpinner2SpinnerDebug(Sender: TObject; DbgStr: string);
+    procedure BGRASpinner2Wrapped(Sender: TObject; Shift: TShiftState;
+      OldAngle, NewAngle: single; MoveDir: TBGRASpinnerDirection);
+    procedure BitBtn1Click(Sender: TObject);
+    procedure Button1Click(Sender: TObject);
+    procedure Button2Click(Sender: TObject);
+    procedure Button3Click(Sender: TObject);
+    procedure Button4Click(Sender: TObject);
+    procedure Button6Click(Sender: TObject);
+    procedure FormCreate(Sender: TObject);
+  private
+    FCount: integer;
+
+  public
+
+  end;
+
+var
+  Form1: TForm1;
+
+implementation
+
+{$R *.lfm}
+
+{ TForm1 }
+
+procedure TForm1.BGRASpinner1CapClick(Sender: TObject; Button: TMouseButton;
+  Shift: TShiftState);
+begin
+  if Button = mbLeft then
+    begin
+
+      if BGRASpinner1.CapSettings.FillColor = clWhite then
+        BGRASpinner1.CapSettings.FillColor := clRed
+      else
+        BGRASpinner1.CapSettings.FillColor := clWhite;
+
+      BGRASPinner1.Bump(sdCCW, 1.0);
+    end;
+
+if Button = mbRight then
+  begin
+
+   if BGRASpinner1.CapSettings.FillColor = clWhite then
+     BGRASpinner1.CapSettings.FillColor := clGreen
+   else
+     BGRASpinner1.CapSettings.FillColor := clWhite;
+
+   BGRASPinner1.Bump(sdCW, 1.0);
+  end;
+
+end;
+
+procedure TForm1.BGRASpinner1KnobClick(Sender: TObject; Button: TMouseButton;
+  Shift: TShiftState);
+begin
+  if Button = mbLeft then
+    begin
+      if BGRASpinner1.KnobSettings.FillColor = clWhite then
+        BGRASpinner1.KnobSettings.FillColor := clYellow
+      else
+        BGRASpinner1.KnobSettings.FillColor := clWhite;
+    end;
+
+  if Button = mbRight then
+  begin
+
+    if BGRASpinner1.KnobSettings.FillColor = clWhite then
+      BGRASpinner1.KnobSettings.FillColor := clBlue
+    else
+      BGRASpinner1.KnobSettings.FillColor := clWhite;
+  end;
+end;
+
+procedure TForm1.BGRASpinner1PosChanged(Sender: TObject; Shift: TShiftState;
+  Value: single; MoveDir: TBGRASpinnerDirection);
+var
+  Direction: integer;
+  DirectionStr: string;
+
+begin
+  if MoveDir = sdCW then
+    begin
+      Direction := 1;
+      DirectionStr := 'sdCW';
+    end
+  else
+  begin
+    Direction := -1;
+    DirectionStr := 'sdCCW';
+  end;
+
+  if ssShift in Shift then
+  begin
+    Label1.Caption := 'Shift Down';
+    Direction := Direction * 10;
+    BGRASpinner1.WheelSpeed := 50;
+  end
+  else
+    begin
+      Label1.Caption := '';
+      BGRASpinner1.WheelSpeed := 10;
+    end;
+
+  Label2.Caption :=FloatToStr(value);
+  Label3.Caption := DirectionStr;
+  FCount := FCount + Direction;
+  Label5.Caption := IntToStr(FCount);
+  BGRASpinner2.Angle:=BgraSpinner1.Angle;
+  Label6.Caption := FloatToStr(BGRASpinner2.Angle);
+end;
+
+procedure TForm1.BGRASpinner2PosChanged(Sender: TObject; Shift: TShiftState;
+  Value: single; MoveDir: TBGRASpinnerDirection);
+var
+  Direction: integer;
+  DirectionStr: string;
+
+begin
+  if MoveDir = sdCW then
+    begin
+      Direction := 1;
+      DirectionStr := 'sdCW';
+    end
+  else
+  begin
+    Direction := -1;
+    DirectionStr := 'sdCCW';
+  end;
+
+  Label6.Caption:=FloatToStr(Value);
+  Label3.Caption := DirectionStr;
+  FCount := FCount+ Direction;
+  Label5.Caption := IntToStr(FCount);
+end;
+
+procedure TForm1.BGRASpinner2SpinnerDebug(Sender: TObject; DbgStr: string);
+begin
+  Label1.Caption := DbgStr;
+end;
+
+procedure TForm1.BGRASpinner2Wrapped(Sender: TObject; Shift: TShiftState;
+  OldAngle, NewAngle: single; MoveDir: TBGRASpinnerDirection);
+var
+  DirectionStr: string;
+
+begin
+
+  // make a method to decode
+
+  if MoveDir = sdCW then
+    begin
+      DirectionStr := 'sdCW';
+    end
+  else
+  begin
+    DirectionStr := 'sdCCW';
+  end;
+
+  Label7.Caption := 'Wrap@ Old: ' + FloatToStr(OldAngle) + ' New: ' + FloatToStr(NewAngle) + ' Dir: ' + DirectionStr;
+end;
+
+procedure TForm1.BitBtn1Click(Sender: TObject);
+var
+  i, j : integer;
+begin
+    for j := 0 to 10 do
+  begin
+      for i := 0 to 100 do
+      begin
+        BGRASpinner1.Angle := i;
+        Application.ProcessMessages;
+      end;
+  end;
+  beep;
+end;
+
+procedure TForm1.Button1Click(Sender: TObject);
+begin
+  BGRASpinner2.Bump(sdCCW, 1.0);
+end;
+
+procedure TForm1.Button2Click(Sender: TObject);
+begin
+  BGRASpinner2.Bump(sdCW, 1.0);
+end;
+
+procedure TForm1.Button3Click(Sender: TObject);
+begin
+  BGRASpinner2.Spin(sdCW, 0.1, 72);
+end;
+
+procedure TForm1.Button4Click(Sender: TObject);
+begin
+  BGRASpinner2.Spin(sdCW, 1.0, 71);
+end;
+
+procedure TForm1.Button6Click(Sender: TObject);
+begin
+  BGRASpinner1.Locked := not BGRASpinner1.Locked;
+  if(BGRASpinner1.Locked) then
+    Button6.Caption := 'Locked'
+  else
+    Button6.Caption := 'Not Locked';
+end;
+
+procedure TForm1.FormCreate(Sender: TObject);
+begin
+  FCount := 0;
+end;
+
+end.
+

+ 65 - 0
unit1.lfm

@@ -0,0 +1,65 @@
+object Form1: TForm1
+  Left = 520
+  Height = 588
+  Top = 156
+  Width = 674
+  Caption = 'Form1'
+  ClientHeight = 588
+  ClientWidth = 674
+  DesignTimePPI = 144
+  OnCreate = FormCreate
+  LCLVersion = '3.6.0.0'
+  Scaled = False
+  object SuperSpinner1: TSuperSpinner
+    Left = 24
+    Height = 159
+    Top = 32
+    Width = 280
+    PositionSettings.CenterMargin = 40
+    CapSettings.EdgeColor = clRed
+    KnobSettings.CurveExponent = 0.200000002980232
+    CurveExponent = 0.200000002980232
+    Angle = 0
+    OnCapClick = SuperSpinner1CapClick
+    OnKnobClick = SuperSpinner1KnobClick
+    OnMouseCapEnter = SuperSpinner1MouseCapEnter
+    OnMouseCapLeave = SuperSpinner1MouseCapLeave
+    OnMouseKnobEnter = SuperSpinner1MouseKnobEnter
+    OnMouseKnobLeave = SuperSpinner1MouseKnobLeave
+    OnClick = SuperSpinner1Click
+    OnDblClick = SuperSpinner1DblClick
+    OnMouseDown = SuperSpinner1MouseDown
+    OnMouseUp = SuperSpinner1MouseUp
+    OnMouseEnter = SuperSpinner1MouseEnter
+    OnMouseLeave = SuperSpinner1MouseLeave
+  end
+  object Label1: TLabel
+    Left = 288
+    Height = 25
+    Top = 472
+    Width = 107
+    Caption = 'Mouse in/out'
+  end
+  object Label2: TLabel
+    Left = 288
+    Height = 25
+    Top = 440
+    Width = 51
+    Caption = 'Label2'
+  end
+  object Label3: TLabel
+    Left = 288
+    Height = 25
+    Top = 504
+    Width = 51
+    Caption = 'Label3'
+  end
+  object Button1: TButton
+    Left = 24
+    Height = 38
+    Top = 360
+    Width = 113
+    Caption = 'Button1'
+    TabOrder = 0
+  end
+end

+ 131 - 0
unit1.pas

@@ -0,0 +1,131 @@
+unit Unit1;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, superspinner,
+  supergauge;
+
+type
+
+  { TForm1 }
+
+  TForm1 = class(TForm)
+    Button1: TButton;
+    Label1: TLabel;
+    Label2: TLabel;
+    Label3: TLabel;
+    SuperSpinner1: TSuperSpinner;
+    procedure FormCreate(Sender: TObject);
+    procedure SuperSpinner1CapClick(Sender: TObject; Button: TMouseButton;
+      Shift: TShiftState);
+    procedure SuperSpinner1Click(Sender: TObject);
+    procedure SuperSpinner1DblClick(Sender: TObject);
+    procedure SuperSpinner1KnobClick(Sender: TObject; Button: TMouseButton;
+      Shift: TShiftState);
+    procedure SuperSpinner1MouseCapEnter(Sender: TObject; Shift: TShiftState;
+      X, Y: Integer);
+    procedure SuperSpinner1MouseCapLeave(Sender: TObject; Shift: TShiftState;
+      X, Y: Integer);
+    procedure SuperSpinner1MouseDown(Sender: TObject; Button: TMouseButton;
+      Shift: TShiftState; X, Y: Integer);
+    procedure SuperSpinner1MouseEnter(Sender: TObject);
+    procedure SuperSpinner1MouseKnobEnter(Sender: TObject; Shift: TShiftState;
+      X, Y: Integer);
+    procedure SuperSpinner1MouseKnobLeave(Sender: TObject; Shift: TShiftState;
+      X, Y: Integer);
+    procedure SuperSpinner1MouseLeave(Sender: TObject);
+    procedure SuperSpinner1MouseUp(Sender: TObject; Button: TMouseButton;
+      Shift: TShiftState; X, Y: Integer);
+  private
+
+  public
+
+  end;
+
+var
+  Form1: TForm1;
+
+implementation
+
+{$R *.lfm}
+
+{ TForm1 }
+
+procedure TForm1.FormCreate(Sender: TObject);
+begin
+  //SS1.ParentFont := False;
+end;
+
+procedure TForm1.SuperSpinner1CapClick(Sender: TObject; Button: TMouseButton;
+  Shift: TShiftState);
+begin
+  Label1.Caption := 'Mouse CapClick';
+end;
+
+procedure TForm1.SuperSpinner1Click(Sender: TObject);
+begin
+    Label2.Caption := 'Click';
+end;
+
+procedure TForm1.SuperSpinner1DblClick(Sender: TObject);
+begin
+    Label2.Caption := 'DBL Click';
+end;
+
+procedure TForm1.SuperSpinner1KnobClick(Sender: TObject; Button: TMouseButton;
+  Shift: TShiftState);
+begin
+  Label1.Caption := 'Mouse KnobClick';
+end;
+
+procedure TForm1.SuperSpinner1MouseCapEnter(Sender: TObject;
+  Shift: TShiftState; X, Y: Integer);
+begin
+  Label2.Caption := 'Mouse Cap Enter';
+end;
+
+procedure TForm1.SuperSpinner1MouseCapLeave(Sender: TObject;
+  Shift: TShiftState; X, Y: Integer);
+begin
+  Label2.Caption := 'Mouse Cap Leave';
+end;
+
+procedure TForm1.SuperSpinner1MouseDown(Sender: TObject; Button: TMouseButton;
+  Shift: TShiftState; X, Y: Integer);
+begin
+    Label2.Caption := 'Mouse Down';
+end;
+
+procedure TForm1.SuperSpinner1MouseEnter(Sender: TObject);
+begin
+  Label2.Caption := 'IN';
+end;
+
+procedure TForm1.SuperSpinner1MouseKnobEnter(Sender: TObject;
+  Shift: TShiftState; X, Y: Integer);
+begin
+  Label1.Caption := 'Mouse Knob Enter';
+end;
+
+procedure TForm1.SuperSpinner1MouseKnobLeave(Sender: TObject;
+  Shift: TShiftState; X, Y: Integer);
+begin
+  Label1.Caption := 'Mouse Knob Leave';
+end;
+
+procedure TForm1.SuperSpinner1MouseLeave(Sender: TObject);
+begin
+  Label2.Caption := 'OUT';
+end;
+
+procedure TForm1.SuperSpinner1MouseUp(Sender: TObject; Button: TMouseButton;
+  Shift: TShiftState; X, Y: Integer);
+begin
+  Label2.Caption := 'Mouse Up';
+end;
+
+end.
+