Delete stuff that's been split into their own repos

This commit is contained in:
Thomas Goyne 2012-08-14 21:25:32 -07:00
parent 1f07735f6f
commit fd6652b345
380 changed files with 0 additions and 74308 deletions

View File

@ -1 +0,0 @@
SUBDIRS = src

View File

@ -1,473 +0,0 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="9.00"
Name="assdraw_2008"
ProjectGUID="{3BC75951-691C-4703-A29A-D29E298248AC}"
RootNamespace="assdraw"
Keyword="Win32Proj"
TargetFrameworkVersion="131072"
>
<Platforms>
<Platform
Name="Win32"
/>
<Platform
Name="x64"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
WarningLevel="3"
Detect64BitPortabilityProblems="true"
DebugInformationFormat="4"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
OutputFile="../bin/assdraw3_d.exe"
LinkIncremental="2"
GenerateDebugInformation="true"
SubSystem="2"
RandomizedBaseAddress="1"
DataExecutionPrevention="0"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Debug|x64"
OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
TargetEnvironment="3"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
WarningLevel="3"
Detect64BitPortabilityProblems="true"
DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
OutputFile="$(OutDir)\assdraw3_d_x64.exe"
LinkIncremental="2"
GenerateDebugInformation="true"
SubSystem="2"
RandomizedBaseAddress="1"
DataExecutionPrevention="0"
TargetMachine="17"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="1"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
RuntimeLibrary="2"
UsePrecompiledHeader="0"
WarningLevel="3"
Detect64BitPortabilityProblems="false"
DebugInformationFormat="0"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
OutputFile="../bin/assdraw3.exe"
LinkIncremental="1"
GenerateDebugInformation="true"
SubSystem="2"
OptimizeReferences="2"
EnableCOMDATFolding="2"
RandomizedBaseAddress="1"
DataExecutionPrevention="0"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Release|x64"
OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="1"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
TargetEnvironment="3"
/>
<Tool
Name="VCCLCompilerTool"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
RuntimeLibrary="2"
UsePrecompiledHeader="0"
WarningLevel="3"
Detect64BitPortabilityProblems="true"
DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
OutputFile="$(OutDir)\assdraw3_x64.exe"
LinkIncremental="1"
GenerateDebugInformation="true"
SubSystem="2"
OptimizeReferences="2"
EnableCOMDATFolding="2"
RandomizedBaseAddress="1"
DataExecutionPrevention="0"
TargetMachine="17"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="Source Files"
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
>
<File
RelativePath=".\src\agg_bcspline.cpp"
>
</File>
<File
RelativePath=".\src\agg_vcgen_bcspline.cpp"
>
</File>
<File
RelativePath=".\src\wxAGG\AGGWindow.cpp"
>
</File>
<File
RelativePath=".\src\assdraw.cpp"
>
</File>
<File
RelativePath=".\src\assdraw_settings.cpp"
>
</File>
<File
RelativePath=".\src\canvas.cpp"
>
</File>
<File
RelativePath=".\src\canvas_mouse.cpp"
>
</File>
<File
RelativePath=".\src\cmd.cpp"
>
</File>
<File
RelativePath=".\src\dlgctrl.cpp"
>
</File>
<File
RelativePath=".\src\engine.cpp"
>
</File>
<File
RelativePath=".\src\library.cpp"
>
</File>
<File
RelativePath=".\src\settings.cpp"
>
</File>
</Filter>
<Filter
Name="Header Files"
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
>
<File
RelativePath=".\src\_common.hpp"
>
</File>
<File
RelativePath=".\src\agg_bcspline.h"
>
</File>
<File
RelativePath=".\src\agg_conv_bcspline.h"
>
</File>
<File
RelativePath=".\src\agg_vcgen_bcspline.h"
>
</File>
<File
RelativePath=".\src\agghelper.hpp"
>
</File>
<File
RelativePath=".\src\wxAGG\AGGWindow.h"
>
</File>
<File
RelativePath=".\src\assdraw.hpp"
>
</File>
<File
RelativePath=".\src\canvas.hpp"
>
</File>
<File
RelativePath=".\src\canvas_mouse.hpp"
>
</File>
<File
RelativePath=".\src\cmd.hpp"
>
</File>
<File
RelativePath=".\src\dlgctrl.hpp"
>
</File>
<File
RelativePath=".\src\engine.hpp"
>
</File>
<File
RelativePath=".\src\enums.hpp"
>
</File>
<File
RelativePath=".\src\include_once.hpp"
>
</File>
<File
RelativePath=".\src\library.hpp"
>
</File>
<File
RelativePath=".\src\wxAGG\PixelFormatConvertor.h"
>
</File>
<File
RelativePath=".\src\resource.h"
>
</File>
<File
RelativePath=".\src\settings.hpp"
>
</File>
</Filter>
<Filter
Name="Resource Files"
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
>
<File
RelativePath=".\src\assdraw.rc"
>
</File>
</Filter>
</Files>
<Globals>
</Globals>
</VisualStudioProject>

File diff suppressed because it is too large Load Diff

View File

@ -1,74 +0,0 @@
AC_PREREQ(2.61)
#######
# Setup
#######
AC_INIT([assdraw], [1.0.0])
AC_CONFIG_SRCDIR([src/engine.cpp])
AC_CONFIG_HEADER([config.h])
AM_INIT_AUTOMAKE([foreign])
AC_CANONICAL_HOST
AC_CONFIG_MACRO_DIR([m4])
####################
# Check for programs
####################
AC_PROG_CC
AC_PROG_CXX
AC_LANG(C++)
AC_PROG_LIBTOOL
AC_PROG_INSTALL
PKG_PROG_PKG_CONFIG([0.20])
#################
# Developers only
#################
AM_MAINTAINER_MODE
AC_ARG_VAR([DEBUG_FLAGS], [Debug flag to use with --enable debug (default: -g)])
if test -z "$DEBUG_FLAGS"; then
DEBUG_FLAGS="-g";
fi
AC_MSG_CHECKING([whether to turn on debugging])
AC_ARG_ENABLE(debug, [ --enable-debug turn on debugging (default=no)])
if test "$enable_debug" = "yes"; then
AC_MSG_RESULT([yes ($DEBUG_FLAGS)])
CPPFLAGS="$DEBUG_FLAGS $CPPFLAGS"
else
AC_MSG_RESULT([no])
fi
AC_ARG_ENABLE(build-dist)
if test "$enable_build_dist" = "yes"; then
SVN_VERSION=`svnversion .`
PACKAGE_STRING="${PACKAGE_STRING}-r$SVN_VERSION"
PACKAGE_VERSION="${PACKAGE_VERSION}-r$SVN_VERSION"
VERSION="${VERSION}-r$SVN_VERSION"
fi
# Checks for header files.
# Checks for typedefs, structures, and compiler characteristics.
AM_OPTIONS_WXCONFIG
AM_PATH_WXCONFIG(2.8.1, [have_wxconfig=1], [have_wxconfig=0], [std,gl,stc,aui, propgrid])
if test "$have_wxconfig" != 1; then
AC_MSG_FAILURE([
wxWidgets detection failed, please set --with-wx* or add
the libraries to your LDFLAGS, CXX/CFLAGS.
])
fi
PKG_CHECK_MODULES(LIBAGG, libagg >= 2.5.0, [with_libagg=yes], [with_libagg=no])
if test "$with_libagg" != "yes"; then
AC_MSG_FAILURE([You must have AGG installed: http://vector-agg.sourceforge.net/])
fi
AC_OUTPUT([
Makefile
src/wxAGG/Makefile
src/xpm/Makefile
src/Makefile
])

File diff suppressed because it is too large Load Diff

View File

@ -1,41 +0,0 @@
#!/bin/sh
set -e
BUNDLE_ROOT="$(dirname $0)/Assdraw.app/"
SRC_DIR="$(dirname $0)"
if test -d "${BUNDLE_ROOT}"; then
rm -rf "${BUNDLE_ROOT}"
fi
mkdir -p "${BUNDLE_ROOT}/Contents/MacOS"
cp "${SRC_DIR}/src/assdraw" "${BUNDLE_ROOT}/Contents/MacOS/assdraw"
python ../../aegisub/tools/osx-fix-libs.py "${BUNDLE_ROOT}/Contents/MacOS/assdraw"
cat << 'EOF' > "${BUNDLE_ROOT}/Info.plist"
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>assdraw</string>
<key>CFBundleIdentifier</key>
<string>com.aegisub.assdraw</string>
<key>CFBundleName</key>
<string>ASSDraw3</string>
<key>CFBundleDisplayName</key>
<string>ASSDraw3</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>LSHasLocalizedDisplayName</key>
<false/>
</dict>
</plist>
EOF

View File

@ -1,323 +0,0 @@
[Project]
FileName=ASSDraw3.dev
Name=ASSDraw
UnitCount=26
Type=0
Ver=3
IsCpp=1
Folders=AGG
CommandLine=
CompilerSettings=0000000001001000000100
PchHead=-1
PchSource=-1
ProfilesCount=1
ProfileIndex=0
[Unit1]
FileName=assdraw.cpp
CompileCpp=1
Folder=
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[VersionInfo]
Major=3
Minor=0
Release=0
Build=0
LanguageID=1033
CharsetID=1252
CompanyName=ai-chan
FileVersion=3.0.0.0
FileDescription=A tool for designing shapes to be used in ASS subtitle
InternalName=ASSDraw3
LegalCopyright=
LegalTrademarks=
OriginalFilename=ASSDraw3.exe
ProductName=ASSDraw
ProductVersion=3
AutoIncBuildNrOnRebuild=0
AutoIncBuildNrOnCompile=0
UnitCount=20
[Unit3]
FileName=cmd.hpp
CompileCpp=1
Folder=
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit4]
FileName=engine.hpp
CompileCpp=1
Folder=
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit5]
FileName=assdraw.rc
CompileCpp=1
Folder=Resources
Compile=1
Link=0
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit7]
FileName=engine.cpp
Folder=
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
CompileCpp=1
[Unit9]
FileName=include_once.hpp
CompileCpp=1
Folder=
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit6]
FileName=assdraw.hpp
Folder=
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
CompileCpp=1
[Unit2]
FileName=cmd.cpp
CompileCpp=1
Folder=
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Profile1]
ProfileName=Default Profile
Type=0
ObjFiles=
Includes=E:\DEV;E:\DEV\agg-2.5\include;E:\DEV\wxTreeMultiCtrl\include
Libs=E:\DEV\agg-2.5;E:\DEV\wxTreeMultiCtrl
PrivateResource=E:\DEV\_projects\ASSDraw 3\Default Profile\ASSDraw_private.rc
ResourceIncludes=
MakeIncludes=
Compiler=
CppCompiler=-D__WXMSW__ -DNO_GCC_PRAGMA -fno-rtti -fno-exceptions_@@_ -Wno-deprecated_@@_
Linker=-lwxmsw28_propgrid_@@_-mwindows_@@_-lwxmsw28_@@_-lwxmsw28_gl_@@_-lwxtiff_@@_-lwxjpeg_@@_-lwxpng_@@_-lwxzlib_@@_-lwxregex_@@_-lwxexpat_@@_-lkernel32_@@_-luser32_@@_-lgdi32_@@_-lcomdlg32_@@_-lwinspool_@@_-lwinmm_@@_-lshell32_@@_-lcomctl32_@@_-lole32_@@_-loleaut32_@@_-luuid_@@_-lrpcrt4_@@_-ladvapi32_@@_-lwsock32_@@_-lodbc32_@@_-lopengl32_@@_-lagg_@@_
PreprocDefines=
CompilerSettings=0000000001001000000100
Icon=
ExeOutput=E:\DEV\_projects\ASSDraw 3\Default Profile\
ObjectOutput=E:\DEV\_projects\ASSDraw 3\Default Profile\
OverrideOutput=1
OverrideOutputName=ASSDraw3.exe
HostApplication=
CommandLine=
UseCustomMakefile=0
CustomMakefile=
IncludeVersionInfo=1
SupportXPThemes=1
CompilerSet=0
compilerType=0
[Unit8]
FileName=dlgctrl.cpp
CompileCpp=1
Folder=
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit10]
FileName=resource.h
CompileCpp=1
Folder=
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit15]
FileName=agg_bcspline.cpp
CompileCpp=1
Folder=AGG
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit16]
FileName=enums.hpp
CompileCpp=1
Folder=
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit18]
FileName=library.cpp
CompileCpp=1
Folder=
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit17]
FileName=library.hpp
CompileCpp=1
Folder=
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit13]
FileName=wxAGG\AGGWindow.cpp
CompileCpp=1
Folder=AGG
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit14]
FileName=agg_vcgen_bcspline.cpp
CompileCpp=1
Folder=AGG
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit11]
FileName=canvas.cpp
CompileCpp=1
Folder=
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit12]
FileName=canvas.hpp
CompileCpp=1
Folder=
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit20]
FileName=dlgctrl.hpp
CompileCpp=1
Folder=
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit19]
FileName=_common.hpp
CompileCpp=1
Folder=
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit21]
FileName=settings.cpp
CompileCpp=1
Folder=ASSDraw
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit22]
FileName=settings.hpp
CompileCpp=1
Folder=ASSDraw
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit23]
FileName=assdraw_settings.cpp
CompileCpp=1
Folder=
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit24]
FileName=agghelper.hpp
CompileCpp=1
Folder=
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit25]
FileName=canvas_mouse.hpp
CompileCpp=1
Folder=
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit26]
FileName=canvas_mouse.cpp
CompileCpp=1
Folder=
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=

View File

@ -1,185 +0,0 @@
[Editor_10]
CursorCol=32
CursorRow=553
TopLine=535
LeftChar=1
Open=1
Top=0
[Editor_7]
CursorCol=6
CursorRow=227
TopLine=197
LeftChar=1
Open=1
Top=1
[Editor_5]
CursorCol=11
CursorRow=19
TopLine=1
LeftChar=1
Open=1
Top=0
[Editor_18]
CursorCol=11
CursorRow=14
TopLine=1
LeftChar=1
Open=0
Top=0
[Editor_19]
CursorCol=12
CursorRow=3
TopLine=3
LeftChar=1
Open=0
Top=0
[Editor_11]
CursorCol=8
CursorRow=44
TopLine=31
LeftChar=1
Open=0
Top=0
[Editor_3]
CursorCol=1
CursorRow=268
TopLine=243
LeftChar=1
Open=1
Top=0
[Editor_15]
CursorCol=15
CursorRow=7
TopLine=1
LeftChar=1
Open=1
Top=0
[Editor_8]
CursorCol=1
CursorRow=69
TopLine=33
LeftChar=1
Open=0
Top=0
[Editor_16]
CursorCol=2
CursorRow=25
TopLine=1
LeftChar=1
Open=0
Top=0
[Editor_0]
CursorCol=39
CursorRow=212
TopLine=184
LeftChar=1
Open=1
Top=0
[Editors]
Focused=7
Order=5,0,10,17,3,6,7,22,21,20,15
[Editor_1]
Open=0
Top=0
CursorCol=21
CursorRow=63
TopLine=30
LeftChar=1
[Editor_2]
Open=0
Top=0
CursorCol=7
CursorRow=83
TopLine=50
LeftChar=1
[Editor_4]
Open=0
Top=0
CursorCol=19
CursorRow=21
TopLine=21
LeftChar=1
[Editor_6]
Open=1
Top=0
CursorCol=1
CursorRow=577
TopLine=556
LeftChar=1
[Editor_9]
Open=0
Top=0
CursorCol=1
CursorRow=1
TopLine=1
LeftChar=1
[Editor_12]
Open=0
Top=0
CursorCol=6
CursorRow=99
TopLine=91
LeftChar=1
[Editor_13]
Open=0
Top=0
CursorCol=1
CursorRow=204
TopLine=170
LeftChar=1
[Editor_14]
Open=0
Top=0
CursorCol=1
CursorRow=290
TopLine=256
LeftChar=1
[Editor_17]
Open=1
Top=0
CursorCol=68
CursorRow=133
TopLine=112
LeftChar=1
[Editor_20]
Open=1
Top=0
CursorCol=46
CursorRow=195
TopLine=163
LeftChar=1
[Editor_21]
Open=1
Top=0
CursorCol=2
CursorRow=58
TopLine=57
LeftChar=1
[Editor_22]
Open=1
Top=0
CursorCol=32
CursorRow=160
TopLine=129
LeftChar=1
[Editor_23]
Open=0
Top=0
CursorCol=2
CursorRow=6
TopLine=1
LeftChar=1
[Editor_24]
CursorCol=1
CursorRow=56
TopLine=25
LeftChar=1
Open=0
Top=0
[Editor_25]
Open=0
Top=0
CursorCol=18
CursorRow=8
TopLine=1
LeftChar=1

View File

@ -1,43 +0,0 @@
SUFFIXES = .cpp
SUBDIRS = wxAGG xpm
AM_CXXFLAGS = @WX_CPPFLAGS@ @LIBAGG_CFLAGS@
bin_PROGRAMS = assdraw
#assdraw_CPPFLAGS =
assdraw_LDFLAGS = @WX_LIBS@ @LIBAGG_LIBS@
assdraw_LDADD = wxAGG/libaggwindow.a xpm/libres.a
assdraw_SOURCES = \
agg_bcspline.cpp \
agg_vcgen_bcspline.cpp \
assdraw.cpp \
assdraw_settings.cpp \
canvas.cpp \
canvas_mouse.cpp \
cmd.cpp \
dlgctrl.cpp \
engine.cpp \
library.cpp \
settings.cpp
assdraw_SOURCES += \
agg_bcspline.h \
agg_conv_bcspline.h \
agg_vcgen_bcspline.h \
resource.h
EXTRA_DIST = \
_common.hpp \
agghelper.hpp
assdraw.hpp \
canvas.hpp \
canvas_mouse.hpp \
cmd.hpp \
dlgctrl.hpp \
engine.hpp \
enums.hpp \
include_once.hpp \
library.hpp \
settings.hpp

View File

@ -1,69 +0,0 @@
# Project: ASSDraw
# Compiler: Default GCC compiler
# Compiler Type: MingW 3
# Makefile created by wxDev-C++ 6.10.2 on 20/01/08 23:46
CPP = g++.exe
CC = gcc.exe
WINDRES = windres.exe
OBJ = ../Default\ Profile/assdraw.o ../Default\ Profile/cmd.o ../Default\ Profile/engine.o ../Default\ Profile/dlgctrl.o ../Default\ Profile/canvas.o ../Default\ Profile/AGGWindow.o ../Default\ Profile/agg_vcgen_bcspline.o ../Default\ Profile/agg_bcspline.o ../Default\ Profile/library.o ../Default\ Profile/settings.o ../Default\ Profile/assdraw_settings.o ../Default\ Profile/canvas_mouse.o ../Default\ Profile/ASSDraw3_private.res
LINKOBJ = "../Default Profile/assdraw.o" "../Default Profile/cmd.o" "../Default Profile/engine.o" "../Default Profile/dlgctrl.o" "../Default Profile/canvas.o" "../Default Profile/AGGWindow.o" "../Default Profile/agg_vcgen_bcspline.o" "../Default Profile/agg_bcspline.o" "../Default Profile/library.o" "../Default Profile/settings.o" "../Default Profile/assdraw_settings.o" "../Default Profile/canvas_mouse.o" "../Default Profile/ASSDraw3_private.res"
LIBS = -L"D:/Program Files/Dev-Cpp/Lib" -L"E:/DEV/agg-2.5" -L"E:/DEV/wxTreeMultiCtrl" -lwxmsw28_propgrid -mwindows -lwxmsw28 -lwxmsw28_gl -lwxtiff -lwxjpeg -lwxpng -lwxzlib -lwxregex -lwxexpat -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lwinspool -lwinmm -lshell32 -lcomctl32 -lole32 -loleaut32 -luuid -lrpcrt4 -ladvapi32 -lwsock32 -lodbc32 -lopengl32 -lagg -s
INCS = -I"include" -I"E:/DEV" -I"E:/DEV/agg-2.5/include" -I"E:/DEV/wxTreeMultiCtrl/include"
CXXINCS = -I"D:/Program Files/Dev-Cpp/lib/gcc/mingw32/3.4.2/include" -I"D:/Program Files/Dev-Cpp/include/c++/3.4.2/backward" -I"D:/Program Files/Dev-Cpp/include/c++/3.4.2/mingw32" -I"D:/Program Files/Dev-Cpp/include/c++/3.4.2" -I"D:/Program Files/Dev-Cpp/include" -I"D:/Program Files/Dev-Cpp/" -I"D:/Program Files/Dev-Cpp/include/common/wx/msw" -I"D:/Program Files/Dev-Cpp/include/common/wx/generic" -I"D:/Program Files/Dev-Cpp/include/common/wx/fl" -I"D:/Program Files/Dev-Cpp/include/common/wx/gizmos" -I"D:/Program Files/Dev-Cpp/include/common/wx/html" -I"D:/Program Files/Dev-Cpp/include/common/wx/mmedia" -I"D:/Program Files/Dev-Cpp/include/common/wx/net" -I"D:/Program Files/Dev-Cpp/include/common/wx/ogl" -I"D:/Program Files/Dev-Cpp/include/common/wx/plot" -I"D:/Program Files/Dev-Cpp/include/common/wx/protocol" -I"D:/Program Files/Dev-Cpp/include/common/wx/stc" -I"D:/Program Files/Dev-Cpp/include/common/wx/svg" -I"D:/Program Files/Dev-Cpp/include/common/wx/xml" -I"D:/Program Files/Dev-Cpp/include/common/wx/xrc" -I"D:/Program Files/Dev-Cpp/include/common/wx" -I"D:/Program Files/Dev-Cpp/include/common" -I"E:/dev/ACE-5.5" -I"E:/DEV" -I"E:/DEV/agg-2.5/include" -I"E:/DEV/wxTreeMultiCtrl/include"
RCINCS = --include-dir "D:/PROGRA~1/Dev-Cpp/include/common"
BIN = ../Default\ Profile/ASSDraw3.exe
DEFINES =
CXXFLAGS = $(CXXINCS) $(DEFINES) -D__WXMSW__ -DNO_GCC_PRAGMA -fno-rtti -fno-exceptions -Wno-deprecated -fexpensive-optimizations -O3
CFLAGS = $(INCS) $(DEFINES) -fexpensive-optimizations -O3
GPROF = gprof.exe
RM = rm -f
LINK = g++.exe
.PHONY: all all-before all-after clean clean-custom
all: all-before $(BIN) all-after
clean: clean-custom
$(RM) $(OBJ) $(BIN)
$(BIN): $(OBJ)
$(LINK) $(LINKOBJ) -o "..\Default Profile\ASSDraw3.exe" $(LIBS)
../Default\ Profile/assdraw.o: $(GLOBALDEPS) assdraw.cpp assdraw.hpp _common.hpp enums.hpp include_once.hpp
$(CPP) -c assdraw.cpp -o "../Default Profile/assdraw.o" $(CXXFLAGS)
../Default\ Profile/cmd.o: $(GLOBALDEPS) cmd.cpp
$(CPP) -c cmd.cpp -o "../Default Profile/cmd.o" $(CXXFLAGS)
../Default\ Profile/engine.o: $(GLOBALDEPS) engine.cpp
$(CPP) -c engine.cpp -o "../Default Profile/engine.o" $(CXXFLAGS)
../Default\ Profile/dlgctrl.o: $(GLOBALDEPS) dlgctrl.cpp assdraw.hpp _common.hpp
$(CPP) -c dlgctrl.cpp -o "../Default Profile/dlgctrl.o" $(CXXFLAGS)
../Default\ Profile/canvas.o: $(GLOBALDEPS) canvas.cpp assdraw.hpp _common.hpp cmd.hpp agghelper.hpp
$(CPP) -c canvas.cpp -o "../Default Profile/canvas.o" $(CXXFLAGS)
../Default\ Profile/AGGWindow.o: $(GLOBALDEPS) wxAGG/AGGWindow.cpp wxAGG/AGGWindow.h wxAGG/PixelFormatConvertor.h
$(CPP) -c wxAGG/AGGWindow.cpp -o "../Default Profile/AGGWindow.o" $(CXXFLAGS)
../Default\ Profile/agg_vcgen_bcspline.o: $(GLOBALDEPS) agg_vcgen_bcspline.cpp agg_vcgen_bcspline.h agg_bcspline.h
$(CPP) -c agg_vcgen_bcspline.cpp -o "../Default Profile/agg_vcgen_bcspline.o" $(CXXFLAGS)
../Default\ Profile/agg_bcspline.o: $(GLOBALDEPS) agg_bcspline.cpp agg_bcspline.h
$(CPP) -c agg_bcspline.cpp -o "../Default Profile/agg_bcspline.o" $(CXXFLAGS)
../Default\ Profile/library.o: $(GLOBALDEPS) library.cpp assdraw.hpp _common.hpp library.hpp engine.hpp _common.hpp wxAGG/AGGWindow.h wxAGG/PixelFormatConvertor.h agg_conv_bcspline.h agg_vcgen_bcspline.h agg_bcspline.h
$(CPP) -c library.cpp -o "../Default Profile/library.o" $(CXXFLAGS)
../Default\ Profile/settings.o: $(GLOBALDEPS) settings.cpp assdraw.hpp _common.hpp settings.hpp _common.hpp
$(CPP) -c settings.cpp -o "../Default Profile/settings.o" $(CXXFLAGS)
../Default\ Profile/assdraw_settings.o: $(GLOBALDEPS) assdraw_settings.cpp assdraw.hpp _common.hpp
$(CPP) -c assdraw_settings.cpp -o "../Default Profile/assdraw_settings.o" $(CXXFLAGS)
../Default\ Profile/canvas_mouse.o: $(GLOBALDEPS) canvas_mouse.cpp canvas_mouse.hpp _common.hpp enums.hpp engine.hpp _common.hpp wxAGG/AGGWindow.h wxAGG/PixelFormatConvertor.h agg_conv_bcspline.h agg_vcgen_bcspline.h agg_bcspline.h canvas.hpp engine.hpp enums.hpp
$(CPP) -c canvas_mouse.cpp -o "../Default Profile/canvas_mouse.o" $(CXXFLAGS)
../Default\ Profile/ASSDraw3_private.res: ../Default\ Profile/ASSDraw3_private.rc assdraw.rc
$(WINDRES) --input-format=rc -o "../Default Profile/ASSDraw3_private.res" $(RCINCS) ../DEFAUL~1/ASSDRA~1.RC -O coff

View File

@ -1,14 +0,0 @@
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#ifndef WX_PRECOMP
#include "wx/wx.h"
#endif
#define TITLE wxT("ASSDraw3")
#define __DPDS__ wxDefaultPosition, wxDefaultSize

View File

@ -1,289 +0,0 @@
//----------------------------------------------------------------------------
// Anti-Grain Geometry (AGG) - Version 2.5
// A high quality rendering engine for C++
// Copyright (C) 2002-2006 Maxim Shemanarev
// Contact: mcseem@antigrain.com
// mcseemagg@yahoo.com
// http://antigrain.com
//
// AGG is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// AGG is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with AGG; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
// MA 02110-1301, USA.
//----------------------------------------------------------------------------
#include "agg_bcspline.h"
namespace agg
{
//------------------------------------------------------------------------
bcspline::bcspline() :
m_max(0),
m_num(0),
m_x(0),
m_y(0),
m_last_idx(-1)
{
}
//------------------------------------------------------------------------
bcspline::bcspline(int num) :
m_max(0),
m_num(0),
m_x(0),
m_y(0),
m_last_idx(-1)
{
init(num);
}
//------------------------------------------------------------------------
bcspline::bcspline(int num, const double* x, const double* y) :
m_max(0),
m_num(0),
m_x(0),
m_y(0),
m_last_idx(-1)
{
init(num, x, y);
}
//------------------------------------------------------------------------
void bcspline::init(int max)
{
if(max > 2 && max > m_max)
{
m_am.resize(max * 3);
m_max = max;
m_x = &m_am[m_max];
m_y = &m_am[m_max * 2];
}
m_num = 0;
m_last_idx = -1;
}
//------------------------------------------------------------------------
void bcspline::add_point(double x, double y)
{
if(m_num < m_max)
{
m_x[m_num] = x;
m_y[m_num] = y;
++m_num;
}
}
//------------------------------------------------------------------------
void bcspline::prepare()
{
if(m_num > 2)
{
int i, k, n1;
double* temp;
double* r;
double* s;
double h, p, d, f, e;
for(k = 0; k < m_num; k++)
{
m_am[k] = 0.0;
}
n1 = 3 * m_num;
pod_array<double> al(n1);
temp = &al[0];
for(k = 0; k < n1; k++)
{
temp[k] = 0.0;
}
r = temp + m_num;
s = temp + m_num * 2;
n1 = m_num - 1;
d = m_x[1] - m_x[0];
e = (m_y[1] - m_y[0]) / d;
for(k = 1; k < n1; k++)
{
h = d;
d = m_x[k + 1] - m_x[k];
f = e;
e = (m_y[k + 1] - m_y[k]) / d;
al[k] = d / (d + h);
r[k] = 1.0 - al[k];
s[k] = 6.0 * (e - f) / (h + d);
}
for(k = 1; k < n1; k++)
{
p = 1.0 / (r[k] * al[k - 1] + 2.0);
al[k] *= -p;
s[k] = (s[k] - r[k] * s[k - 1]) * p;
}
m_am[n1] = 0.0;
al[n1 - 1] = s[n1 - 1];
m_am[n1 - 1] = al[n1 - 1];
for(k = n1 - 2, i = 0; i < m_num - 2; i++, k--)
{
al[k] = al[k] * al[k + 1] + s[k];
m_am[k] = al[k];
}
}
m_last_idx = -1;
}
//------------------------------------------------------------------------
void bcspline::init(int num, const double* x, const double* y)
{
if(num > 2)
{
init(num);
int i;
for(i = 0; i < num; i++)
{
add_point(*x++, *y++);
}
prepare();
}
m_last_idx = -1;
}
//------------------------------------------------------------------------
void bcspline::bsearch(int n, const double *x, double x0, int *i)
{
int j = n - 1;
int k;
for(*i = 0; (j - *i) > 1; )
{
if(x0 < x[k = (*i + j) >> 1]) j = k;
else *i = k;
}
}
//------------------------------------------------------------------------
double bcspline::interpolation(double x, int i) const
{
int j = i + 1;
double d = m_x[i] - m_x[j];
double h = x - m_x[j];
double r = m_x[i] - x;
double p = d * d / 6.0;
return (m_am[j] * r * r * r + m_am[i] * h * h * h) / 6.0 / d +
((m_y[j] - m_am[j] * p) * r + (m_y[i] - m_am[i] * p) * h) / d;
}
//------------------------------------------------------------------------
double bcspline::extrapolation_left(double x) const
{
double d = m_x[1] - m_x[0];
return (-d * m_am[1] / 6 + (m_y[1] - m_y[0]) / d) *
(x - m_x[0]) +
m_y[0];
}
//------------------------------------------------------------------------
double bcspline::extrapolation_right(double x) const
{
double d = m_x[m_num - 1] - m_x[m_num - 2];
return (d * m_am[m_num - 2] / 6 + (m_y[m_num - 1] - m_y[m_num - 2]) / d) *
(x - m_x[m_num - 1]) +
m_y[m_num - 1];
}
//------------------------------------------------------------------------
double bcspline::get(double x) const
{
if(m_num > 2)
{
int i;
// Extrapolation on the left
if(x < m_x[0]) return extrapolation_left(x);
// Extrapolation on the right
if(x >= m_x[m_num - 1]) return extrapolation_right(x);
// Interpolation
bsearch(m_num, m_x, x, &i);
return interpolation(x, i);
}
return 0.0;
}
//------------------------------------------------------------------------
double bcspline::get_stateful(double x) const
{
if(m_num > 2)
{
// Extrapolation on the left
if(x < m_x[0]) return extrapolation_left(x);
// Extrapolation on the right
if(x >= m_x[m_num - 1]) return extrapolation_right(x);
if(m_last_idx >= 0)
{
// Check if x is not in current range
if(x < m_x[m_last_idx] || x > m_x[m_last_idx + 1])
{
// Check if x between next points (most probably)
if(m_last_idx < m_num - 2 &&
x >= m_x[m_last_idx + 1] &&
x <= m_x[m_last_idx + 2])
{
++m_last_idx;
}
else
if(m_last_idx > 0 &&
x >= m_x[m_last_idx - 1] &&
x <= m_x[m_last_idx])
{
// x is between pevious points
--m_last_idx;
}
else
{
// Else perform full search
bsearch(m_num, m_x, x, &m_last_idx);
}
}
return interpolation(x, m_last_idx);
}
else
{
// Interpolation
bsearch(m_num, m_x, x, &m_last_idx);
return interpolation(x, m_last_idx);
}
}
return 0.0;
}
}

View File

@ -1,81 +0,0 @@
//----------------------------------------------------------------------------
// Anti-Grain Geometry (AGG) - Version 2.5
// A high quality rendering engine for C++
// Copyright (C) 2002-2006 Maxim Shemanarev
// Contact: mcseem@antigrain.com
// mcseemagg@yahoo.com
// http://antigrain.com
//
// AGG is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// AGG is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with AGG; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
// MA 02110-1301, USA.
//----------------------------------------------------------------------------
#ifndef AGG_bcspline_INCLUDED
#define AGG_bcspline_INCLUDED
#include "agg_array.h"
namespace agg
{
//----------------------------------------------------------------bcspline
// A very simple class of Bi-cubic Spline interpolation.
// First call init(num, x[], y[]) where num - number of source points,
// x, y - arrays of X and Y values respectively. Here Y must be a function
// of X. It means that all the X-coordinates must be arranged in the ascending
// order.
// Then call get(x) that calculates a value Y for the respective X.
// The class supports extrapolation, i.e. you can call get(x) where x is
// outside the given with init() X-range. Extrapolation is a simple linear
// function.
//
// See Implementation agg_bcspline.cpp
//------------------------------------------------------------------------
class bcspline
{
public:
bcspline();
bcspline(int num);
bcspline(int num, const double* x, const double* y);
void init(int num);
void add_point(double x, double y);
void prepare();
void init(int num, const double* x, const double* y);
double get(double x) const;
double get_stateful(double x) const;
private:
bcspline(const bcspline&);
const bcspline& operator = (const bcspline&);
static void bsearch(int n, const double *x, double x0, int *i);
double extrapolation_left(double x) const;
double extrapolation_right(double x) const;
double interpolation(double x, int i) const;
int m_max;
int m_num;
double* m_x;
double* m_y;
pod_array<double> m_am;
mutable int m_last_idx;
};
}
#endif

View File

@ -1,58 +0,0 @@
//----------------------------------------------------------------------------
// Anti-Grain Geometry (AGG) - Version 2.5
// A high quality rendering engine for C++
// Copyright (C) 2002-2006 Maxim Shemanarev
// Contact: mcseem@antigrain.com
// mcseemagg@yahoo.com
// http://antigrain.com
//
// AGG is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// AGG is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with AGG; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
// MA 02110-1301, USA.
//----------------------------------------------------------------------------
#ifndef AGG_conv_bcspline_INCLUDED
#define AGG_conv_bcspline_INCLUDED
#include "agg_basics.h"
#include "agg_vcgen_bcspline.h"
#include "agg_conv_adaptor_vcgen.h"
namespace agg
{
//---------------------------------------------------------conv_bcspline
template<class VertexSource>
struct conv_bcspline : public conv_adaptor_vcgen<VertexSource, vcgen_bcspline>
{
typedef conv_adaptor_vcgen<VertexSource, vcgen_bcspline> base_type;
conv_bcspline(VertexSource& vs) :
conv_adaptor_vcgen<VertexSource, vcgen_bcspline>(vs) {}
void interpolation_step(double v) { base_type::generator().interpolation_step(v); }
double interpolation_step() const { return base_type::generator().interpolation_step(); }
private:
conv_bcspline(const conv_bcspline<VertexSource>&);
const conv_bcspline<VertexSource>&
operator = (const conv_bcspline<VertexSource>&);
};
}
#endif

View File

@ -1,203 +0,0 @@
//----------------------------------------------------------------------------
// Anti-Grain Geometry (AGG) - Version 2.5
// A high quality rendering engine for C++
// Copyright (C) 2002-2006 Maxim Shemanarev
// Contact: mcseem@antigrain.com
// mcseemagg@yahoo.com
// http://antigrain.com
//
// AGG is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// AGG is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with AGG; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
// MA 02110-1301, USA.
//----------------------------------------------------------------------------
#include "agg_vcgen_bcspline.h"
namespace agg
{
//------------------------------------------------------------------------
vcgen_bcspline::vcgen_bcspline() :
m_src_vertices(),
m_spline_x(),
m_spline_y(),
m_interpolation_step(1.0/50.0),
m_closed(0),
m_status(initial),
m_src_vertex(0)
{
}
//------------------------------------------------------------------------
void vcgen_bcspline::remove_all()
{
m_src_vertices.remove_all();
m_closed = 0;
m_status = initial;
m_src_vertex = 0;
}
//------------------------------------------------------------------------
void vcgen_bcspline::add_vertex(double x, double y, unsigned cmd)
{
m_status = initial;
if(is_move_to(cmd))
{
m_src_vertices.modify_last(point_d(x, y));
}
else
{
if(is_vertex(cmd))
{
m_src_vertices.add(point_d(x, y));
}
else
{
m_closed = get_close_flag(cmd);
}
}
}
//------------------------------------------------------------------------
void vcgen_bcspline::rewind(unsigned)
{
m_cur_abscissa = 0.0;
m_max_abscissa = 0.0;
m_src_vertex = 0;
if(m_status == initial && m_src_vertices.size() > 2)
{
if(m_closed)
{
m_spline_x.init(m_src_vertices.size() + 8);
m_spline_y.init(m_src_vertices.size() + 8);
m_spline_x.add_point(0.0, m_src_vertices.prev(m_src_vertices.size() - 3).x);
m_spline_y.add_point(0.0, m_src_vertices.prev(m_src_vertices.size() - 3).y);
m_spline_x.add_point(1.0, m_src_vertices[m_src_vertices.size() - 3].x);
m_spline_y.add_point(1.0, m_src_vertices[m_src_vertices.size() - 3].y);
m_spline_x.add_point(2.0, m_src_vertices[m_src_vertices.size() - 2].x);
m_spline_y.add_point(2.0, m_src_vertices[m_src_vertices.size() - 2].y);
m_spline_x.add_point(3.0, m_src_vertices[m_src_vertices.size() - 1].x);
m_spline_y.add_point(3.0, m_src_vertices[m_src_vertices.size() - 1].y);
}
else
{
m_spline_x.init(m_src_vertices.size());
m_spline_y.init(m_src_vertices.size());
}
unsigned i;
for(i = 0; i < m_src_vertices.size(); i++)
{
double x = m_closed ? i + 4 : i;
m_spline_x.add_point(x, m_src_vertices[i].x);
m_spline_y.add_point(x, m_src_vertices[i].y);
}
m_cur_abscissa = 0.0;
m_max_abscissa = m_src_vertices.size() - 1;
if(m_closed)
{
m_cur_abscissa = 4.0;
m_max_abscissa += 5.0;
m_spline_x.add_point(m_src_vertices.size() + 4, m_src_vertices[0].x);
m_spline_y.add_point(m_src_vertices.size() + 4, m_src_vertices[0].y);
m_spline_x.add_point(m_src_vertices.size() + 5, m_src_vertices[1].x);
m_spline_y.add_point(m_src_vertices.size() + 5, m_src_vertices[1].y);
m_spline_x.add_point(m_src_vertices.size() + 6, m_src_vertices[2].x);
m_spline_y.add_point(m_src_vertices.size() + 6, m_src_vertices[2].y);
m_spline_x.add_point(m_src_vertices.size() + 7, m_src_vertices.next(2).x);
m_spline_y.add_point(m_src_vertices.size() + 7, m_src_vertices.next(2).y);
}
m_spline_x.prepare();
m_spline_y.prepare();
}
m_status = ready;
}
//------------------------------------------------------------------------
unsigned vcgen_bcspline::vertex(double* x, double* y)
{
unsigned cmd = path_cmd_line_to;
while(!is_stop(cmd))
{
switch(m_status)
{
case initial:
rewind(0);
case ready:
if(m_src_vertices.size() < 2)
{
cmd = path_cmd_stop;
break;
}
if(m_src_vertices.size() == 2)
{
*x = m_src_vertices[m_src_vertex].x;
*y = m_src_vertices[m_src_vertex].y;
m_src_vertex++;
if(m_src_vertex == 1) return path_cmd_move_to;
if(m_src_vertex == 2) return path_cmd_line_to;
cmd = path_cmd_stop;
break;
}
cmd = path_cmd_move_to;
m_status = polygon;
m_src_vertex = 0;
case polygon:
if(m_cur_abscissa >= m_max_abscissa)
{
if(m_closed)
{
m_status = end_poly;
break;
}
else
{
*x = m_src_vertices[m_src_vertices.size() - 1].x;
*y = m_src_vertices[m_src_vertices.size() - 1].y;
m_status = end_poly;
return path_cmd_line_to;
}
}
*x = m_spline_x.get(m_cur_abscissa);
*y = m_spline_y.get(m_cur_abscissa);
m_src_vertex++;
m_cur_abscissa += m_interpolation_step;
return (m_src_vertex == 1) ? path_cmd_move_to : path_cmd_line_to;
case end_poly:
m_status = stop;
return path_cmd_end_poly | m_closed;
case stop:
return path_cmd_stop;
}
}
return cmd;
}
}

View File

@ -1,83 +0,0 @@
//----------------------------------------------------------------------------
// Anti-Grain Geometry (AGG) - Version 2.5
// A high quality rendering engine for C++
// Copyright (C) 2002-2006 Maxim Shemanarev
// Contact: mcseem@antigrain.com
// mcseemagg@yahoo.com
// http://antigrain.com
//
// AGG is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// AGG is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with AGG; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
// MA 02110-1301, USA.
//----------------------------------------------------------------------------
#ifndef AGG_vcgen_bcspline_INCLUDED
#define AGG_vcgen_bcspline_INCLUDED
#include "agg_basics.h"
#include "agg_array.h"
#include "agg_bcspline.h"
namespace agg
{
//==========================================================vcgen_bcspline
class vcgen_bcspline
{
enum status_e
{
initial,
ready,
polygon,
end_poly,
stop
};
public:
typedef pod_bvector<point_d, 6> vertex_storage;
vcgen_bcspline();
void interpolation_step(double v) { m_interpolation_step = v; }
double interpolation_step() const { return m_interpolation_step; }
// Vertex Generator Interface
void remove_all();
void add_vertex(double x, double y, unsigned cmd);
// Vertex Source Interface
void rewind(unsigned path_id);
unsigned vertex(double* x, double* y);
private:
vcgen_bcspline(const vcgen_bcspline&);
const vcgen_bcspline& operator = (const vcgen_bcspline&);
vertex_storage m_src_vertices;
bcspline m_spline_x;
bcspline m_spline_y;
double m_interpolation_step;
unsigned m_closed;
status_e m_status;
unsigned m_src_vertex;
double m_cur_abscissa;
double m_max_abscissa;
};
}
#endif

View File

@ -1,20 +0,0 @@
#pragma once
#include "agg_path_storage.h"
class agghelper
{
public:
static agg::path_storage RectanglePath(double left, double right, double top, double bottom)
{
agg::path_storage path;
path.move_to(left,top);
path.line_to(right,top);
path.line_to(right,bottom);
path.line_to(left,bottom);
path.line_to(left,top);
return path;
}
};

View File

@ -1,741 +0,0 @@
/*
* Copyright (c) 2007, ai-chan
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the ASSDraw3 Team nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY AI-CHAN ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL AI-CHAN BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
///////////////////////////////////////////////////////////////////////////////
// Name: assdraw.cpp
// Purpose: ASSDraw main source file
// Author: ai-chan
// Created: 08/26/06
// Copyright: (c) ai-chan
// Licence: 3-clause BSD
///////////////////////////////////////////////////////////////////////////////
#include "assdraw.hpp"
#include "enums.hpp"
#include "include_once.hpp"
#include <wx/clipbrd.h>
#include <wx/wfstream.h>
#include <wx/filename.h>
#include <wx/dynlib.h>
#include <wx/stdpaths.h>
#if !defined(__WINDOWS__)
#include "xpm/res.h"
#endif
/////////////
// Libraries
#ifdef __VISUALC__
#pragma comment(lib, "Vfw32.lib")
#pragma comment(lib, "comctl32.lib")
#pragma comment(lib, "rpcrt4.lib")
#pragma comment(lib, "winmm.lib")
#pragma comment(lib, "advapi32.lib")
#pragma comment(lib, "wsock32.lib")
#ifdef __WXDEBUG__
#pragma comment(lib, "wxmsw28ud_propgrid.lib")
#else
#pragma comment(lib, "wxmsw28u_propgrid.lib")
#endif
#endif
//DEFINE_EVENT_TYPE(wxEVT_SETTINGS_CHANGED)
// initialize wxWidget to accept our App class
IMPLEMENT_APP(ASSDrawApp)
BEGIN_EVENT_TABLE(ASSDrawFrame, wxFrame)
EVT_TOOL(TB_CLEAR, ASSDrawFrame::OnSelect_Clear)
EVT_TOOL(TB_PREVIEW, ASSDrawFrame::OnSelect_Preview)
EVT_TOOL(TB_TRANSFORM, ASSDrawFrame::OnSelect_Transform)
EVT_TOOL_RANGE(MODE_ARR, MODE_DEL, ASSDrawFrame::OnChoose_Mode)
EVT_TOOL_RCLICKED(wxID_ANY, ASSDrawFrame::OnToolRClick)
EVT_COMMAND(wxID_ANY, wxEVT_SETTINGS_CHANGED, ASSDrawFrame::OnSettingsChanged)
EVT_MENU_RANGE(MENU_TB_ALL, MENU_TB_BGIMG, ASSDrawFrame::OnChoose_TBarRClickMenu)
EVT_MENU(MENU_CLEAR, ASSDrawFrame::OnSelect_Clear)
EVT_MENU(MENU_PREVIEW, ASSDrawFrame::OnSelect_Preview)
EVT_MENU(MENU_TRANSFORM, ASSDrawFrame::OnSelect_Transform)
EVT_MENU(MENU_LIBRARY, ASSDrawFrame::OnSelect_Library)
EVT_MENU(MENU_SETTINGS, ASSDrawFrame::OnSelect_Settings)
EVT_MENU(MENU_RESETPERSPECTIVE, ASSDrawFrame::OnSelect_ResetPerspective)
EVT_MENU(MENU_HELP, ASSDrawFrame::OnSelect_Help)
EVT_MENU(wxID_ABOUT, ASSDrawFrame::OnSelect_About)
EVT_MENU(MENU_UNDO, ASSDrawFrame::OnSelect_Undo)
EVT_MENU(MENU_REDO, ASSDrawFrame::OnSelect_Redo)
EVT_MENU(MENU_PASTE, ASSDrawFrame::OnSelect_Paste)
EVT_MENU(MENU_BGIMG_REMOVE, ASSDrawFrame::OnSelect_RemoveBG)
EVT_MENU(MENU_BGIMG_ALPHA, ASSDrawFrame::OnSelect_AlphaBG)
EVT_MENU_RANGE(MODE_ARR, MODE_NUT_BILINEAR, ASSDrawFrame::OnChoose_Mode)
EVT_MENU_RANGE(MENU_REPOS_TOPLEFT, MENU_REPOS_BOTRIGHT, ASSDrawFrame::OnChoose_Recenter)
EVT_MENU_RANGE(MENU_REPOS_BGTOPLEFT, MENU_REPOS_BGBOTRIGHT, ASSDrawFrame::OnChoose_RecenterToBG)
EVT_CLOSE(ASSDrawFrame::OnClose)
END_EVENT_TABLE()
// ----------------------------------------------------------------------------
// the application class: ASSDrawApp
// ----------------------------------------------------------------------------
// 'Main program' equivalent: the program execution _T("starts") here
bool ASSDrawApp::OnInit()
{
SetAppName(TITLE);
// create the main application window
ASSDrawFrame * assdrawframe = new ASSDrawFrame( this, TITLE, wxDefaultPosition, wxSize(640, 480) );
SetTopWindow(assdrawframe);
return TRUE;
}
// ----------------------------------------------------------------------------
// main frame: ASSDrawFrame
// ----------------------------------------------------------------------------
// constructor
ASSDrawFrame::ASSDrawFrame( wxApp *app, const wxString& title, const wxPoint& pos, const wxSize& size, long style)
: wxFrame(NULL, wxID_ANY, title, pos, size, style)
{
m_app = app;
m_mgr.SetManagedWindow(this);
#ifndef __UNIX__
m_mgr.SetFlags(m_mgr.GetFlags() | wxAUI_MGR_ALLOW_ACTIVE_PANE);
#else
m_mgr.SetFlags(wxAUI_MGR_ALLOW_FLOATING | wxAUI_MGR_ALLOW_ACTIVE_PANE | wxAUI_MGR_RECTANGLE_HINT);
#endif
// set the frame icon
SetIcon(wxICON(appico));
// Create status bar for the frame
CreateStatusBar(3);
int statwidths[] = { 64, -1, 64 };
GetStatusBar()->SetStatusWidths(3, statwidths);
SetStatusBarPane(1);
InitializeDefaultSettings();
// load config
configfile = wxFileName(wxStandardPaths::Get().GetUserDataDir(), _T("ASSDraw3.cfg")).GetFullPath();
bool firsttime = !::wxFileExists(configfile);
if (firsttime) {
wxFileName::Mkdir(wxStandardPaths::Get().GetUserDataDir(), wxS_DIR_DEFAULT, wxPATH_MKDIR_FULL);
wxFileOutputStream(configfile).Close();
}
wxFileInputStream cfgf(configfile);
config = new wxFileConfig(cfgf);
// nullify transformdlg
transformdlg = NULL;
Maximize(true);
Show(true); // to get the right client size, must call Show() first
// config
LoadSettings();
// THE CANVAS
m_canvas = new ASSDrawCanvas( this , this );
// shapes library
shapelib = new ASSDrawShapeLibrary(this, this);
// source text ctrl
srctxtctrl = new ASSDrawSrcTxtCtrl(this, this);
// settings
settingsdlg = new ASSDrawSettingsDialog(this, this);
settingsdlg->Init();
SetMenus();
SetToolBars();
SetPanes();
// config
config->SetPath(_T("info"));
wxString version;
config->Read(_T("version"), &version);
config->SetPath(_T(".."));
default_perspective = m_mgr.SavePerspective(); // back up default perspective
config->SetPath(_T("perspective"));
wxString perspective;
if (config->Read(_T("perspective"), &perspective) && version == VERSION) m_mgr.LoadPerspective(perspective, false);
config->SetPath(_T(".."));
config->SetPath(_T("library"));
int n = 0;
config->Read(_T("n"), &n);
for (int i = 0; i < n; i++)
{
wxString libcmds;
config->Read(wxString::Format(_T("%d"),i), &libcmds);
shapelib->AddShapePreview(libcmds);
}
config->SetPath(_T(".."));
m_mgr.Update();
m_canvas->SetFocus();
m_canvas->Show();
wxSize clientsize = m_canvas->GetClientSize();
m_canvas->ChangeZoomLevelTo(DEFAULT_SCALE, wxPoint(clientsize.x / 2, clientsize.y / 2));
m_canvas->MoveCanvasOriginTo(clientsize.x / 2, clientsize.y / 2);
UpdateASSCommandStringToSrcTxtCtrl(m_canvas->GenerateASS());
UpdateFrameUI();
ApplySettings();
if (firsttime)
_About();
else if (!behaviors.nosplashscreen)
_About(3);
helpcontroller.SetParentWindow(this);
helpcontroller.Initialize(wxFileName(::wxGetCwd(), _T("ASSDraw3.chm")).GetFullPath());
}
void ASSDrawFrame::SetToolBars()
{
drawtbar = new wxToolBar(this, wxID_ANY, __DPDS__ , wxTB_FLAT | wxTB_TEXT | wxTB_NODIVIDER | wxTB_HORIZONTAL);
drawtbar->AddTool(TB_CLEAR, _T("Clear"), wxBITMAP(new_), wxNullBitmap, wxITEM_NORMAL, _T(""), TIPS_CLEAR);
//tbar->AddTool(TB_EDITSRC, _T("Source"), wxBITMAP(src_), wxNullBitmap, wxITEM_NORMAL, _T(""), TIPS_EDITSRC);
drawtbar->AddCheckTool(TB_PREVIEW, _T("Preview"), wxBITMAP(preview_), wxNullBitmap, _T(""), TIPS_PREVIEW);
//drawtbar->AddTool(TB_TRANSFORM, _T("Transform"), wxBITMAP(rot_), wxNullBitmap, wxITEM_NORMAL, _T(""), TIPS_TRANSFORM);
zoomslider = new wxSlider(drawtbar, TB_ZOOMSLIDER, 1000, 100, 5000, __DPDS__ );
//zoomslider->SetSize(280, zoomslider->GetSize().y);
zoomslider->Connect(wxEVT_SCROLL_LINEUP, wxScrollEventHandler(ASSDrawFrame::OnZoomSliderChanged), NULL, this);
zoomslider->Connect(wxEVT_SCROLL_LINEDOWN, wxScrollEventHandler(ASSDrawFrame::OnZoomSliderChanged), NULL, this);
zoomslider->Connect(wxEVT_SCROLL_PAGEUP, wxScrollEventHandler(ASSDrawFrame::OnZoomSliderChanged), NULL, this);
zoomslider->Connect(wxEVT_SCROLL_PAGEDOWN, wxScrollEventHandler(ASSDrawFrame::OnZoomSliderChanged), NULL, this);
zoomslider->Connect(wxEVT_SCROLL_THUMBTRACK, wxScrollEventHandler(ASSDrawFrame::OnZoomSliderChanged), NULL, this);
zoomslider->Connect(wxEVT_SCROLL_CHANGED, wxScrollEventHandler(ASSDrawFrame::OnZoomSliderChanged), NULL, this);
drawtbar->AddControl(zoomslider);
drawtbar->Realize();
m_mgr.AddPane(drawtbar, wxAuiPaneInfo().Name(_T("drawtbar")).Caption(TBNAME_DRAW).
ToolbarPane().Top().Position(0).Dockable(true).LeftDockable(false).RightDockable(false));
modetbar = new wxToolBar(this, wxID_ANY, __DPDS__ , wxTB_FLAT | wxTB_TEXT | wxTB_NODIVIDER | wxTB_HORIZONTAL);
modetbar->AddRadioTool(MODE_ARR, _T("Drag"), wxBITMAP(arr_), wxNullBitmap, _T(""), TIPS_ARR);
modetbar->AddRadioTool(MODE_M, _T("Move"), wxBITMAP(m_), wxNullBitmap, _T(""), TIPS_M);
//modetbar->AddRadioTool(MODE_N, _T("Move*"), wxBITMAP(n_), wxNullBitmap, _T(""), TIPS_N);
modetbar->AddRadioTool(MODE_L, _T("Line"), wxBITMAP(l_), wxNullBitmap, _T(""), TIPS_L);
modetbar->AddRadioTool(MODE_B, _T("Bezier"), wxBITMAP(b_), wxNullBitmap, _T(""), TIPS_B);
//modetbar->AddRadioTool(MODE_S, _T("Spline"), wxBITMAP(s_), wxNullBitmap, _T(""), TIPS_S);
//modetbar->AddRadioTool(MODE_P, _T("Extend"), wxBITMAP(p_), wxNullBitmap, _T(""), TIPS_P);
//modetbar->AddRadioTool(MODE_C, _T("Close"), wxBITMAP(c_), wxNullBitmap, _T(""), TIPS_C);
modetbar->AddRadioTool(MODE_DEL, _T("Delete"), wxBITMAP(del_), wxNullBitmap, _T(""), TIPS_DEL);
modetbar->AddRadioTool(MODE_SCALEROTATE, _T("Scale/Rotate"), wxBITMAP(sc_rot_), wxNullBitmap, _T(""), TIPS_SCALEROTATE);
modetbar->AddRadioTool(MODE_NUT_BILINEAR, _T("Bilinear"), wxBITMAP(nut_), wxNullBitmap, _T(""), TIPS_NUTB);
//modetbar->AddRadioTool(MODE_NUT_PERSPECTIVE, _T("NUT:P"), wxBITMAP(arr_), wxNullBitmap, _T(""), _T(""));
modetbar->Realize();
m_mgr.AddPane(modetbar, wxAuiPaneInfo().Name(_T("modetbar")).Caption(TBNAME_MODE).
ToolbarPane().Top().Position(1).Dockable(true).LeftDockable(false).RightDockable(false));
bgimgtbar = new wxToolBar(this, wxID_ANY, __DPDS__ , wxTB_FLAT | wxTB_TEXT | wxTB_NODIVIDER | wxTB_HORIZONTAL);
bgimgtbar->SetToolBitmapSize(wxSize(24,15));
bgimgtbar->AddCheckTool(DRAG_DWG, _T("Pan drawing"), wxBITMAP(pan_shp), wxNullBitmap, _T(""), TIPS_DWG);
bgimgtbar->AddCheckTool(DRAG_BGIMG, _T("Pan background"), wxBITMAP(pan_bg), wxNullBitmap, _T(""), TIPS_BGIMG);
//bgimgtbar->AddRadioTool(DRAG_BOTH, _T("Pan both"), wxBITMAP(pan_both), wxNullBitmap, _T(""), TIPS_BOTH);
bgimgtbar->Realize();
m_mgr.AddPane(bgimgtbar, wxAuiPaneInfo().Name(_T("bgimgtbar")).Caption(TBNAME_BGIMG).
ToolbarPane().Top().Position(2).Dockable(true).LeftDockable(false).RightDockable(false));
}
void ASSDrawFrame::SetMenus()
{
drawMenu = new wxMenu;
drawMenu->Append(MENU_CLEAR, _T("&Clear\tCtrl+N"), TIPS_CLEAR);
//drawMenu->Append(MENU_EDITSRC, _T("&Source"), TIPS_EDITSRC);
drawMenu->Append(MENU_PREVIEW, _T("&Preview\tCtrl+P"), TIPS_PREVIEW, wxITEM_CHECK);
drawMenu->Append(MENU_TRANSFORM, _T("&Transform"), TIPS_TRANSFORM);
drawMenu->Append(MENU_PASTE, _T("&Paste\tCtrl+V"), TIPS_PASTE);
drawMenu->AppendSeparator();
drawMenu->Append(MENU_UNDO, _T("&Undo\tCtrl+Z"), TIPS_UNDO);
drawMenu->Append(MENU_REDO, _T("&Redo\tCtrl+Y"), TIPS_REDO);
drawMenu->Enable(MENU_UNDO, false);
drawMenu->Enable(MENU_REDO, false);
modeMenu = new wxMenu;
modeMenu->Append(MODE_ARR, _T("D&rag\tF1"), TIPS_ARR, wxITEM_RADIO);
modeMenu->Append(MODE_M, _T("Draw &M\tF2"), TIPS_M, wxITEM_RADIO);
modeMenu->Append(MODE_L, _T("Draw &L\tF3"), TIPS_L, wxITEM_RADIO);
modeMenu->Append(MODE_B, _T("Draw &B\tF4"), TIPS_B, wxITEM_RADIO);
modeMenu->Append(MODE_DEL, _T("&Delete\tF5"), TIPS_DEL, wxITEM_RADIO);
modeMenu->Append(MODE_SCALEROTATE, _T("&Scale/Rotate\tF6"), TIPS_NUTB, wxITEM_RADIO);
modeMenu->Append(MODE_NUT_BILINEAR, _T("&Bilinear transformation\tF7"), TIPS_SCALEROTATE, wxITEM_RADIO);
bgimgMenu = new wxMenu;
bgimgMenu->Append(DRAG_DWG, _T("Pan/Zoom &Drawing\tShift+F1"), TIPS_DWG, wxITEM_CHECK);
bgimgMenu->Append(DRAG_BGIMG, _T("Pan/Zoom Back&ground\tShift+F2"), TIPS_BGIMG, wxITEM_CHECK);
bgimgMenu->AppendSeparator();
bgimgMenu->Append(MENU_BGIMG_ALPHA, _T("Set background image opacity"), _T(""));
wxMenu* reposbgMenu = new wxMenu;
reposbgMenu->Append( MENU_REPOS_BGTOPLEFT, _T("Top left\tCtrl+Shift+7") );
reposbgMenu->Append( MENU_REPOS_BGTOPRIGHT, _T("Top right\tCtrl+Shift+9") );
reposbgMenu->Append( MENU_REPOS_BGCENTER, _T("&Center\tCtrl+Shift+5") );
reposbgMenu->Append( MENU_REPOS_BGBOTLEFT, _T("Bottom left\tCtrl+Shift+1") );
reposbgMenu->Append( MENU_REPOS_BGBOTRIGHT, _T("Bottom right\tCtrl+Shift+3") );
bgimgMenu->Append(MENU_BGIMG_RECENTER, _T("Reposition [&0, 0]"), reposbgMenu);
bgimgMenu->Append(MENU_BGIMG_REMOVE, _T("Remove background\tShift+Del"), _T(""));
wxMenu* reposMenu = new wxMenu;
reposMenu->Append( MENU_REPOS_TOPLEFT, _T("Top left\tCtrl+7") );
reposMenu->Append( MENU_REPOS_TOPRIGHT, _T("Top right\tCtrl+9") );
reposMenu->Append( MENU_REPOS_CENTER, _T("&Center\tCtrl+5") );
reposMenu->Append( MENU_REPOS_BOTLEFT, _T("Bottom left\tCtrl+1") );
reposMenu->Append( MENU_REPOS_BOTRIGHT, _T("Bottom right\tCtrl+3") );
tbarMenu = new wxMenu;
tbarMenu->AppendCheckItem(MENU_TB_DRAW, TBNAME_DRAW);
tbarMenu->AppendCheckItem(MENU_TB_MODE, TBNAME_MODE);
tbarMenu->AppendCheckItem(MENU_TB_BGIMG, TBNAME_BGIMG);
tbarMenu->AppendSeparator();
tbarMenu->Append(MENU_TB_ALL, _T("Show all"));
tbarMenu->Append(MENU_TB_NONE, _T("Hide all"));
tbarMenu->Append(MENU_TB_DOCK, _T("Dock all"));
tbarMenu->Append(MENU_TB_UNDOCK, _T("Undock all"));
viewMenu = new wxMenu;
viewMenu->Append(MENU_LIBRARY, _T("&Library"), TIPS_LIBRARY, wxITEM_CHECK);
if (settingsdlg)
viewMenu->Append(MENU_SETTINGS, _T("&Settings"), _T(""), wxITEM_CHECK);
viewMenu->Append(MENU_TBAR, _T("&Toolbars"), tbarMenu);
viewMenu->Append(MENU_RECENTER, _T("Reposition [&0, 0]"), reposMenu);
viewMenu->AppendSeparator();
viewMenu->Append(MENU_RESETPERSPECTIVE, _T("&Reset workspace"));
wxMenu* helpMenu = new wxMenu;
helpMenu->Append(MENU_HELP, _T("&Manual"));
helpMenu->Append(wxID_ABOUT, _T("&About"));
wxMenuBar *menuBar = new wxMenuBar();
menuBar->Append(drawMenu, _T("&Canvas"));
menuBar->Append(modeMenu, _T("&Mode"));
menuBar->Append(bgimgMenu, _T("&Background"));
menuBar->Append(viewMenu, _T("&Workspace"));
menuBar->Append(helpMenu, _T("&Help"));
SetMenuBar(menuBar);
}
void ASSDrawFrame::SetPanes()
{
m_mgr.AddPane(shapelib, wxAuiPaneInfo().Name(_T("library")).Caption(_T("Shapes Library")).
Right().Layer(2).Position(0).CloseButton(true).BestSize(wxSize(120, 480)).MinSize(wxSize(100, 200)));
m_mgr.AddPane(m_canvas, wxAuiPaneInfo().Name(_T("canvas")).CenterPane());
m_mgr.AddPane(srctxtctrl, wxAuiPaneInfo().Name(_T("commands")).Caption(_T("Drawing commands")).
Bottom().Layer(1).CloseButton(false).BestSize(wxSize(320, 48)));
if (settingsdlg)
m_mgr.AddPane(settingsdlg, wxAuiPaneInfo().Name(_T("settings")).Caption(_T("Settings")).
Right().Layer(3).Position(0).CloseButton(true).BestSize(wxSize(240, 480)).MinSize(wxSize(200, 200)).Show(false));
}
ASSDrawFrame::~ASSDrawFrame()
{
config->SetPath(_T("info"));
config->Write(_T("assdraw3.exe"), wxStandardPaths::Get().GetExecutablePath());
config->Write(_T("version"), VERSION);
config->SetPath(_T(".."));
SaveSettings();
config->SetPath(_T("perspective"));
config->Write(_T("perspective"), m_mgr.SavePerspective());
config->SetPath(_T(".."));
config->DeleteGroup(_T("library"));
config->SetPath(_T("library"));
typedef std::vector< ASSDrawShapePreview *> PrevVec;
PrevVec shapes = shapelib->GetShapePreviews();
int n = shapes.size();
config->Write(_T("n"), n);
for (int i = 0; i < n; i++)
config->Write(wxString::Format(_T("%d"),i), shapes[i]->GenerateASS());
config->SetPath(_T(".."));
wxFileOutputStream cfgf(configfile);
config->Save(cfgf);
delete config;
if (settingsdlg) settingsdlg->Destroy(); // we need this since wxPropertyGrid must be Clear()ed before deleting
m_mgr.UnInit();
}
void ASSDrawFrame::_Clear()
{
wxMessageDialog msgb(this, _T("Clear the canvas and create a new drawing?"),
_T("Confirmation"), wxOK | wxCANCEL | wxICON_QUESTION );
if (msgb.ShowModal() == wxID_OK)
{
m_canvas->RefreshUndocmds();
m_canvas->AddUndo(_T("Clear canvas"));
m_canvas->ResetEngine(true);
wxSize siz = m_canvas->GetClientSize();
m_canvas->ChangeZoomLevelTo(DEFAULT_SCALE, wxPoint(siz.x / 2, siz.y / 2));
m_canvas->MoveCanvasOriginTo(siz.x / 2, siz.y / 2);
UpdateUndoRedoMenu();
m_canvas->RefreshDisplay();
}
}
void ASSDrawFrame::_Preview()
{
m_canvas->SetPreviewMode( !m_canvas->IsPreviewMode() );
UpdateFrameUI();
m_canvas->RefreshDisplay();
}
void ASSDrawFrame::_ToggleLibrary()
{
m_mgr.GetPane(shapelib).Show(!m_mgr.GetPane(shapelib).IsShown());
m_mgr.Update();
UpdateFrameUI();
}
void ASSDrawFrame::_ToggleSettings()
{
if (settingsdlg == NULL) return;
m_mgr.GetPane(settingsdlg).Show(!m_mgr.GetPane(settingsdlg).IsShown());
m_mgr.Update();
UpdateFrameUI();
}
void ASSDrawFrame::_ResetPerspective()
{
m_mgr.LoadPerspective(default_perspective, false);
UpdateFrameUI();
m_mgr.Update();
DRAGMODE bck = m_canvas->GetDragMode();
if (m_canvas->HasBackgroundImage()) m_canvas->SetDragMode(DRAGMODE(true, true));
wxSize clientsize = m_canvas->GetClientSize();
m_canvas->ChangeZoomLevelTo(DEFAULT_SCALE, wxPoint(clientsize.x / 2, clientsize.y / 2));
m_canvas->MoveCanvasOriginTo(clientsize.x / 2, clientsize.y / 2);
m_canvas->SetDragMode(bck);
UpdateFrameUI();
}
void ASSDrawFrame::_Transform()
{
if (transformdlg == NULL)
transformdlg = new ASSDrawTransformDlg( this );
if (transformdlg->ShowModal() == wxID_OK)
{
m_canvas->Transform(
transformdlg->xformvals.f1,
transformdlg->xformvals.f2,
transformdlg->xformvals.f3,
transformdlg->xformvals.f4,
transformdlg->xformvals.f5,
transformdlg->xformvals.f6,
transformdlg->xformvals.f7,
transformdlg->xformvals.f8 );
m_canvas->AddUndo(_T("Transform"));
m_canvas->RefreshDisplay();
UpdateUndoRedoMenu();
}
}
void ASSDrawFrame::_Paste()
{
if (wxTheClipboard->Open())
{
if (wxTheClipboard->IsSupported( wxDF_BITMAP ))
{
wxBitmapDataObject data;
wxTheClipboard->GetData( data );
m_canvas->SetBackgroundImage( data.GetBitmap().ConvertToImage() );
//m_canvas->AskUserForBackgroundAlpha();
}
else if (wxTheClipboard->IsSupported( wxDF_TEXT ))
{
wxTextDataObject data;
wxTheClipboard->GetData( data );
UpdateASSCommandStringToSrcTxtCtrl( data.GetText() );
}
wxTheClipboard->Close();
}
}
void ASSDrawFrame::OnChoose_Recenter(wxCommandEvent& event)
{
int x = 0, y = 0;
wxSize f = m_canvas->GetClientSize();
switch (event.GetId())
{
case MENU_REPOS_TOPLEFT: x = 0, y = 0; break;
case MENU_REPOS_TOPRIGHT: x = f.x, y = 0; break;
case MENU_REPOS_CENTER: x = f.x / 2, y = f.y / 2; break;
case MENU_REPOS_BOTLEFT: x = 0, y = f.y; break;
case MENU_REPOS_BOTRIGHT: x = f.x, y = f.y; break;
}
m_canvas->MoveCanvasOriginTo(x, y);
m_canvas->RefreshDisplay();
}
void ASSDrawFrame::OnChoose_RecenterToBG(wxCommandEvent& event)
{
unsigned w, h;
wxRealPoint disp;
double scale;
if (m_canvas->GetBackgroundInfo(w, h, disp, scale))
{
int x = 0, y = 0;
int lx = (int)disp.x, ty = (int)disp.y;
int rx = lx + (int)(w * scale);
int by = ty + (int)(h * scale);
switch (event.GetId())
{
case MENU_REPOS_BGTOPLEFT: x = lx, y = ty; break;
case MENU_REPOS_BGTOPRIGHT: x = rx, y = ty; break;
case MENU_REPOS_BGCENTER: x = (rx + lx) / 2, y = (by + ty) / 2; break;
case MENU_REPOS_BGBOTLEFT: x = lx, y = by; break;
case MENU_REPOS_BGBOTRIGHT: x = rx, y = by; break;
}
m_canvas->MoveCanvasDrawing(x - m_canvas->GetOriginX(), y - m_canvas->GetOriginY());
m_canvas->RefreshDisplay();
}
}
void ASSDrawFrame::_Help()
{
helpcontroller.DisplayContents();
}
void ASSDrawFrame::_About(unsigned timeout)
{
ASSDrawAboutDlg *aboutdlg = new ASSDrawAboutDlg( this, timeout );
aboutdlg->ShowModal();
aboutdlg->Destroy();
}
void ASSDrawFrame::OnChoose_Mode(wxCommandEvent& event)
{
m_canvas->SetDrawMode( (MODE) event.GetId() );
UpdateFrameUI();
}
void ASSDrawFrame::OnChoose_DragMode(wxCommandEvent& event)
{
DRAGMODE dm = m_canvas->GetDragMode();
switch (event.GetId())
{
case DRAG_DWG: dm.drawing = !dm.drawing; break;
case DRAG_BGIMG: dm.bgimg = !dm.bgimg; break;
}
m_canvas->SetDragMode( dm );
UpdateFrameUI();
}
void ASSDrawFrame::OnZoomSliderChanged(wxScrollEvent &event)
{
double zoom = (double) event.GetPosition() / 100.0;
m_canvas->ChangeZoomLevelTo(zoom, wxPoint((int) m_canvas->GetOriginX(), (int) m_canvas->GetOriginY()));
}
void ASSDrawFrame::OnToolRClick(wxCommandEvent& event)
{
int id = event.GetId();
if (drawtbar->FindById(id) != NULL
|| modetbar->FindById(id) != NULL
|| bgimgtbar->FindById(id) != NULL)
{
PopupMenu(tbarMenu);
}
}
void ASSDrawFrame::OnChoose_TBarRClickMenu(wxCommandEvent& event)
{
int id = event.GetId();
wxToolBar* tbar[3] = { drawtbar, modetbar, bgimgtbar };
bool tb[3] = { false, false, false };
bool show[2] = { false, true };
bool dock[2] = { false, true };
switch (id)
{
case MENU_TB_ALL:
tb[0] = true, tb[1] = true, tb[2] = true;
show[0] = true, show[1] = true;
break;
case MENU_TB_NONE:
tb[0] = true, tb[1] = true, tb[2] = true;
show[0] = true, show[1] = false;
break;
case MENU_TB_DOCK:
tb[0] = true, tb[1] = true, tb[2] = true;
dock[0] = true, dock[1] = true;
break;
case MENU_TB_UNDOCK:
tb[0] = true, tb[1] = true, tb[2] = true;
dock[0] = true, dock[1] = false;
break;
case MENU_TB_DRAW:
tb[0] = true;
show[0] = true, show[1] = !m_mgr.GetPane(tbar[0]).IsShown();
break;
case MENU_TB_MODE:
tb[1] = true;
show[0] = true, show[1] = !m_mgr.GetPane(tbar[1]).IsShown();
break;
case MENU_TB_BGIMG:
tb[2] = true;
show[0] = true, show[1] = !m_mgr.GetPane(tbar[2]).IsShown();
break;
}
for (int i = 0; i < 3; i++)
{
if (tb[i])
{
if (show[0])
m_mgr.GetPane(tbar[i]).Show(show[1]);
if (dock[0])
if (dock[1])
m_mgr.GetPane(tbar[i]).Dock();
else
m_mgr.GetPane(tbar[i]).Float();
}
}
m_mgr.Update();
UpdateFrameUI();
}
void ASSDrawFrame::UpdateASSCommandStringFromSrcTxtCtrl(wxString cmds)
{
m_canvas->ParseASS(cmds, true);
m_canvas->RefreshDisplay();
}
void ASSDrawFrame::UpdateASSCommandStringToSrcTxtCtrl(wxString cmd)
{
if (behaviors.capitalizecmds)
cmd.UpperCase();
else
cmd.LowerCase();
srctxtctrl->ChangeValue(cmd);
//srctxtctrl->AppendText(cmd);
}
void ASSDrawFrame::UndoOrRedo(bool isundo)
{
if (isundo)
m_canvas->Undo();
else
m_canvas->Redo();
UpdateUndoRedoMenu();
UpdateFrameUI();
}
void ASSDrawFrame::UpdateUndoRedoMenu()
{
wxString nextUndo = m_canvas->GetTopUndo();
if (nextUndo.IsSameAs(_T("")))
{
drawMenu->SetLabel(MENU_UNDO, _T("Undo\tCtrl+Z"));
drawMenu->Enable(MENU_UNDO, false);
}
else
{
drawMenu->SetLabel(MENU_UNDO, wxString::Format(_T("Undo: %s\tCtrl+Z"), nextUndo.c_str()));
drawMenu->Enable(MENU_UNDO, true);
}
wxString nextRedo = m_canvas->GetTopRedo();
if (nextRedo.IsSameAs(_T("")))
{
drawMenu->SetLabel(MENU_REDO, _T("Redo\tCtrl+Y"));
drawMenu->Enable(MENU_REDO, false);
}
else
{
drawMenu->SetLabel(MENU_REDO, wxString::Format(_T("Redo: %s\tCtrl+Y"), nextRedo.c_str()));
drawMenu->Enable(MENU_REDO, true);
}
}
void ASSDrawFrame::UpdateFrameUI(unsigned level)
{
bool hasbg = m_canvas->HasBackgroundImage();
int zoom = (int) ((m_canvas->GetScale() * 100.0)+0.5);
switch (level)
{
case 0: // all
drawtbar->ToggleTool(TB_PREVIEW, m_canvas->IsPreviewMode());
modetbar->ToggleTool(m_canvas->GetDrawMode(), true);
drawMenu->Check(MENU_PREVIEW, m_canvas->IsPreviewMode());
modeMenu->Check(m_canvas->GetDrawMode(), true);
case 2: // bgimg & toolbars
bgimgtbar->ToggleTool(DRAG_DWG, m_canvas->GetDragMode().drawing);
bgimgtbar->ToggleTool(DRAG_BGIMG, m_canvas->GetDragMode().bgimg);
bgimgtbar->EnableTool(DRAG_BGIMG, hasbg);
m_mgr.Update();
viewMenu->Check(MENU_LIBRARY, m_mgr.GetPane(shapelib).IsShown());
if (settingsdlg)
viewMenu->Check(MENU_SETTINGS, m_mgr.GetPane(settingsdlg).IsShown());
bgimgMenu->Check(DRAG_DWG, m_canvas->GetDragMode().drawing);
bgimgMenu->Check(DRAG_BGIMG, m_canvas->GetDragMode().bgimg);
bgimgMenu->Enable(DRAG_BGIMG, hasbg);
bgimgMenu->Enable(MENU_BGIMG_ALPHA, hasbg);
bgimgMenu->Enable(MENU_BGIMG_RECENTER, hasbg);
bgimgMenu->Enable(MENU_BGIMG_REMOVE, hasbg);
tbarMenu->Check(MENU_TB_DRAW, m_mgr.GetPane(drawtbar).IsShown());
tbarMenu->Check(MENU_TB_MODE, m_mgr.GetPane(modetbar).IsShown());
tbarMenu->Check(MENU_TB_BGIMG, m_mgr.GetPane(bgimgtbar).IsShown());
case 3: // zoom slider
zoomslider->SetValue(zoom);
SetStatusText( wxString::Format(_T("%d%%"), zoom), 2 );
zoomslider->Enable(m_canvas->GetDragMode().drawing && m_canvas->CanZoom());
}
}
void ASSDrawFrame::OnClose(wxCloseEvent &event)
{
if (event.CanVeto() && behaviors.confirmquit)
{
if (wxMessageDialog(this, _T("Do you want to close ASSDraw3 now?"), _T("Confirmation"), wxOK | wxCANCEL).ShowModal() == wxID_OK)
Destroy();
else
event.Veto();
}
else
Destroy();
}

View File

@ -1,209 +0,0 @@
/*
* Copyright (c) 2007, ai-chan
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the ASSDraw3 Team nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY AI-CHAN ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL AI-CHAN BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
///////////////////////////////////////////////////////////////////////////////
// Name: assdraw.hpp
// Purpose: header file for ASSDraw main source file; also includes
// declarations for all GUI elements (except wxRuler, which has
// its own header file)
// Author: ai-chan
// Created: 08/26/06
// Copyright: (c) ai-chan
// Licence: 3-clause BSD
///////////////////////////////////////////////////////////////////////////////
#pragma once
#include "_common.hpp"
#include <vector>
#include <wx/wxprec.h>
#include <wx/aui/aui.h>
#include <wx/fileconf.h>
#include <wx/help.h>
#include "canvas.hpp" // the canvas
#include "dlgctrl.hpp" // custom dialogs & controls
#include "settings.hpp" // settings property grid
#include "library.hpp" // shape library
//#define BETAVERSION 2
#define VERSION _T("3.0 final")
// this header file declares the following classes
class ASSDrawApp;
class ASSDrawFrame;
class ASSDrawCanvas;
class ASSDrawApp : public wxApp
{
public:
bool OnInit();
};
class ASSDrawFrame : public wxFrame
{
public:
// constructor
ASSDrawFrame(wxApp *app, const wxString& title, const wxPoint& pos, const wxSize& size = wxDefaultSize,
long style = wxDEFAULT_FRAME_STYLE);
virtual ~ASSDrawFrame();
// event handlers (these functions should _not_ be virtual)
// OnSelect_* for single items, OnChoose_* for many-choose-one items
void OnSelect_Clear(wxCommandEvent& WXUNUSED(event)) { _Clear(); }
void OnSelect_Preview(wxCommandEvent& WXUNUSED(event)) { _Preview(); }
void OnSelect_Transform(wxCommandEvent& WXUNUSED(event)) { _Transform(); }
void OnSelect_Library(wxCommandEvent& WXUNUSED(event)) { _ToggleLibrary(); }
void OnSelect_Settings(wxCommandEvent& WXUNUSED(event)) { _ToggleSettings(); }
void OnSelect_ResetPerspective(wxCommandEvent& WXUNUSED(event)) { _ResetPerspective(); }
void OnSelect_Help(wxCommandEvent& WXUNUSED(event)) { _Help(); }
void OnSelect_About(wxCommandEvent& WXUNUSED(event)) { _About(); }
void OnSelect_Undo(wxCommandEvent& WXUNUSED(event)) { UndoOrRedo( true ); }
void OnSelect_Redo(wxCommandEvent& WXUNUSED(event)) { UndoOrRedo( false ); }
void OnSelect_Paste(wxCommandEvent& WXUNUSED(event)) { _Paste(); }
void OnSelect_RemoveBG(wxCommandEvent& WXUNUSED(event)) { m_canvas->RemoveBackgroundImage(); }
void OnSelect_AlphaBG(wxCommandEvent& WXUNUSED(event)) { m_canvas->AskUserForBackgroundAlpha(); }
void OnChoose_Recenter(wxCommandEvent& event);
void OnChoose_RecenterToBG(wxCommandEvent& event);
void OnChoose_Mode(wxCommandEvent& event);
void OnChoose_DragMode(wxCommandEvent& event);
void OnZoomSliderChanged(wxScrollEvent &event);
void OnToolRClick(wxCommandEvent& event);
void OnChoose_TBarRClickMenu(wxCommandEvent& event);
void OnSettingsChanged(wxCommandEvent& event);
void OnClose(wxCloseEvent &event);
void UpdateASSCommandStringToSrcTxtCtrl(wxString cmds);
void UpdateASSCommandStringFromSrcTxtCtrl(wxString cmds);
void UndoOrRedo(bool isundo);
void UpdateUndoRedoMenu();
void _Clear();
void _Preview();
void _Transform();
void _ToggleLibrary();
void _ToggleSettings();
void _Help();
void _About(unsigned timeout = 0);
void _Paste();
void _ResetPerspective();
void UpdateFrameUI(unsigned level = 0);
// the canvas
wxApp *m_app;
ASSDrawCanvas* m_canvas;
wxAuiManager m_mgr;
wxString default_perspective;
ASSDrawSrcTxtCtrl* srctxtctrl;
// config
wxString configfile;
wxFileConfig *config;
// toolbars
wxToolBar *drawtbar, *modetbar, *bgimgtbar;
// zoom slider
wxSlider* zoomslider;
//library
ASSDrawShapeLibrary *shapelib;
typedef std::vector< ASSDrawEngine* > DrawEngineVec;
DrawEngineVec libshapes;
// menus
#if wxUSE_MENUS
wxMenu *drawMenu;
wxMenu *modeMenu;
wxMenu *bgimgMenu;
wxMenu *viewMenu;
wxMenu *tbarMenu;
#endif
// dialogs
ASSDrawTransformDlg* transformdlg;
ASSDrawSettingsDialog* settingsdlg;
// colors
struct
{
wxColour canvas_bg;
wxColour canvas_shape_normal;
wxColour canvas_shape_preview;
wxColour canvas_shape_outline;
wxColour canvas_shape_guideline;
wxColour canvas_shape_mainpoint;
wxColour canvas_shape_controlpoint;
wxColour canvas_shape_selectpoint;
wxColour library_shape;
wxColour library_libarea;
wxColour origin, ruler_h, ruler_v;
} colors;
struct
{
long canvas_shape_normal;
long canvas_shape_preview;
long canvas_shape_outline;
long canvas_shape_guideline;
long canvas_shape_mainpoint;
long canvas_shape_controlpoint;
long canvas_shape_selectpoint;
} alphas;
struct
{
long origincross;
} sizes;
struct
{
bool capitalizecmds;
bool autoaskimgopac;
bool parse_spc;
bool nosplashscreen;
bool confirmquit;
} behaviors;
void LoadSettings();
void SaveSettings();
void InitializeDefaultSettings();
void ApplySettings();
static void wxColourToAggRGBA(wxColour &colour, agg::rgba &rgba);
static void wxColourSetAlpha(wxColour &colour, long alpha);
protected:
virtual void SetToolBars();
virtual void SetMenus();
virtual void SetPanes();
DECLARE_EVENT_TABLE()
wxHelpController helpcontroller;
};

View File

@ -1,101 +0,0 @@
// Microsoft Visual C++ generated resource script.
//
#include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// English (U.S.) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
#endif //_WIN32
/////////////////////////////////////////////////////////////////////////////
//
// Icon
//
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
APPICO ICON "tsukasa.ico"
/////////////////////////////////////////////////////////////////////////////
//
// Bitmap
//
ASSDRAW3_ BITMAP "bitmaps/assdraw3.bmp"
NEW_ BITMAP "bitmaps/new_.bmp"
SRC_ BITMAP "bitmaps/src_.bmp"
PREVIEW_ BITMAP "bitmaps/preview_.bmp"
ARR_ BITMAP "bitmaps/arr_.bmp"
M_ BITMAP "bitmaps/m_.bmp"
N_ BITMAP "bitmaps/n_.bmp"
L_ BITMAP "bitmaps/l_.bmp"
B_ BITMAP "bitmaps/b_.bmp"
S_ BITMAP "bitmaps/s_.bmp"
P_ BITMAP "bitmaps/p_.bmp"
C_ BITMAP "bitmaps/c_.bmp"
DEL_ BITMAP "bitmaps/del_.bmp"
NUT_ BITMAP "bitmaps/nut_.bmp"
SC_ROT_ BITMAP "bitmaps/sc_rot_.bmp"
ROT_ BITMAP "bitmaps/rot_.bmp"
HELP_ BITMAP "bitmaps/help_.bmp"
TRANSFORM BITMAP "bitmaps/transform.bmp"
PAN_SHP BITMAP "bitmaps/pan_shp.bmp"
PAN_BG BITMAP "bitmaps/pan_bg.bmp"
//PAN_BOTH BITMAP "bitmaps/pan_both.bmp"
ADD BITMAP "bitmaps/add_.bmp"
CHECK BITMAP "bitmaps/check_.bmp"
UNCHECK BITMAP "bitmaps/uncheck_.bmp"
DELCROSS BITMAP "bitmaps/del_cross.bmp"
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE
BEGIN
"resource.h\0"
END
3 TEXTINCLUDE
BEGIN
"\r\n"
END
2 TEXTINCLUDE
BEGIN
"#include ""afxres.h""\r\n"
END
#endif // APSTUDIO_INVOKED
#endif // English (U.S.) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED

View File

@ -1,190 +0,0 @@
/*
* Copyright (c) 2007, ai-chan
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the ASSDraw3 Team nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY AI-CHAN ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL AI-CHAN BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "assdraw.hpp"
void ASSDrawFrame::InitializeDefaultSettings()
{
colors.canvas_bg = wxColour(0xFF, 0xFF, 0xFF);
colors.canvas_shape_normal = wxColour(0x0, 0x0, 0xFF, 0x99);
colors.canvas_shape_preview = wxColour(0x0, 0x0, 0xFF);
colors.canvas_shape_outline = wxColour(0x0, 0x0, 0x0);
colors.canvas_shape_guideline = wxColour(0x66, 0x66, 0x66);
colors.canvas_shape_mainpoint = wxColour(0xFF, 0x0, 0x0, 0xCC);
colors.canvas_shape_controlpoint = wxColour(0x0, 0xFF, 0x0, 0xCC);
colors.canvas_shape_selectpoint = wxColour(0x0, 0x0, 0xCC);
colors.library_shape = wxColour(0x0, 0x66, 0x99);
colors.library_libarea = wxColour(0xFF, 0xFF, 0x99);
colors.origin = wxColour(0xFF, 0x0, 0x0);
colors.ruler_h = wxColour(0x0, 0x0, 0x66);
colors.ruler_v = wxColour(0x66, 0x0, 0x0);
alphas.canvas_shape_normal = 128;
alphas.canvas_shape_preview = 255;
alphas.canvas_shape_outline = 255;
alphas.canvas_shape_guideline = 255;
alphas.canvas_shape_mainpoint = 128;
alphas.canvas_shape_controlpoint = 128;
alphas.canvas_shape_selectpoint = 255;
sizes.origincross = 2;
behaviors.capitalizecmds = false;
behaviors.autoaskimgopac = true;
behaviors.parse_spc = false;
behaviors.nosplashscreen = false;
behaviors.confirmquit = true;
}
void ASSDrawFrame::ApplySettings()
{
wxColourSetAlpha(colors.canvas_shape_normal, alphas.canvas_shape_normal);
wxColourSetAlpha(colors.canvas_shape_preview, alphas.canvas_shape_preview);
wxColourSetAlpha(colors.canvas_shape_outline, alphas.canvas_shape_outline);
wxColourSetAlpha(colors.canvas_shape_guideline, alphas.canvas_shape_guideline);
wxColourSetAlpha(colors.canvas_shape_mainpoint, alphas.canvas_shape_mainpoint);
wxColourSetAlpha(colors.canvas_shape_controlpoint, alphas.canvas_shape_controlpoint);
wxColourSetAlpha(colors.canvas_shape_selectpoint, alphas.canvas_shape_selectpoint);
wxColourToAggRGBA(colors.canvas_shape_normal, m_canvas->rgba_shape_normal);
wxColourToAggRGBA(colors.canvas_shape_preview, m_canvas->rgba_shape);
wxColourToAggRGBA(colors.canvas_shape_outline, m_canvas->rgba_outline);
wxColourToAggRGBA(colors.canvas_shape_guideline, m_canvas->rgba_guideline);
wxColourToAggRGBA(colors.canvas_shape_mainpoint, m_canvas->rgba_mainpoint);
wxColourToAggRGBA(colors.canvas_shape_controlpoint, m_canvas->rgba_controlpoint);
wxColourToAggRGBA(colors.canvas_shape_selectpoint, m_canvas->rgba_selectpoint);
wxColourToAggRGBA(colors.origin, m_canvas->rgba_origin);
wxColourToAggRGBA(colors.ruler_h, m_canvas->rgba_ruler_h);
wxColourToAggRGBA(colors.ruler_v, m_canvas->rgba_ruler_v);
m_canvas->color_bg.r = colors.canvas_bg.Red();
m_canvas->color_bg.g = colors.canvas_bg.Green();
m_canvas->color_bg.b = colors.canvas_bg.Blue();
m_canvas->color_bg.a = colors.canvas_bg.Alpha();
m_canvas->PrepareBackgroundBitmap(-1.0);
m_canvas->Refresh();
shapelib->libarea->SetBackgroundColour(colors.library_libarea);
typedef std::vector< ASSDrawShapePreview *> PrevVec;
PrevVec shapes = shapelib->GetShapePreviews();
int n = shapes.size();
for (int i = 0; i < n; i++)
wxColourToAggRGBA(colors.library_shape, shapes[i]->rgba_shape);
shapelib->libarea->Refresh();
m_canvas->SetDrawCmdSet(behaviors.parse_spc? _T("m n l b s p c _"):_T("m n l b _"));
UpdateASSCommandStringToSrcTxtCtrl(m_canvas->GenerateASS());
}
void ASSDrawFrame::wxColourToAggRGBA(wxColour &colour, agg::rgba &rgba)
{
rgba.r = (double) colour.Red() / 255.0;
rgba.g = (double) colour.Green() / 255.0;
rgba.b = (double) colour.Blue() / 255.0;
rgba.a = (double) colour.Alpha() / 255.0;
}
void ASSDrawFrame::wxColourSetAlpha(wxColour &colour, long alpha)
{
colour.Set(colour.Red(), colour.Green(), colour.Blue(), alpha);
}
void ASSDrawFrame::OnSettingsChanged(wxCommandEvent& event)
{
ApplySettings();
}
void ASSDrawFrame::LoadSettings()
{
#define CFGREADCOLOR(color) if (config->Read(wxString(#color,wxConvUTF8), &tmpstr)) color.Set(tmpstr);
#define CFGREAD(var) config->Read(wxString(#var,wxConvUTF8), &var);
config->SetPath(_T("settings"));
wxString tmpstr;
CFGREADCOLOR(colors.canvas_bg)
CFGREADCOLOR(colors.canvas_shape_normal)
CFGREADCOLOR(colors.canvas_shape_preview)
CFGREADCOLOR(colors.canvas_shape_controlpoint)
CFGREADCOLOR(colors.canvas_shape_guideline)
CFGREADCOLOR(colors.canvas_shape_mainpoint)
CFGREADCOLOR(colors.canvas_shape_outline)
CFGREADCOLOR(colors.canvas_shape_selectpoint)
CFGREADCOLOR(colors.library_libarea)
CFGREADCOLOR(colors.library_shape)
CFGREADCOLOR(colors.origin)
CFGREADCOLOR(colors.ruler_h)
CFGREADCOLOR(colors.ruler_v)
CFGREAD(alphas.canvas_shape_normal)
CFGREAD(alphas.canvas_shape_preview)
CFGREAD(alphas.canvas_shape_controlpoint)
CFGREAD(alphas.canvas_shape_guideline)
CFGREAD(alphas.canvas_shape_mainpoint)
CFGREAD(alphas.canvas_shape_outline)
CFGREAD(alphas.canvas_shape_selectpoint)
CFGREAD(sizes.origincross)
CFGREAD(behaviors.autoaskimgopac)
CFGREAD(behaviors.capitalizecmds)
CFGREAD(behaviors.parse_spc)
CFGREAD(behaviors.nosplashscreen)
CFGREAD(behaviors.confirmquit)
config->SetPath(_T(".."));
}
void ASSDrawFrame::SaveSettings()
{
#define CFGWRITE(var) config->Write(wxString(#var,wxConvUTF8), var);
#define CFGWRITECOLOR(color) config->Write(wxString(#color,wxConvUTF8), color.GetAsString(wxC2S_CSS_SYNTAX));
config->SetPath(_T("settings"));
CFGWRITECOLOR(colors.canvas_bg)
CFGWRITECOLOR(colors.canvas_shape_normal)
CFGWRITECOLOR(colors.canvas_shape_preview)
CFGWRITECOLOR(colors.canvas_shape_controlpoint)
CFGWRITECOLOR(colors.canvas_shape_guideline)
CFGWRITECOLOR(colors.canvas_shape_mainpoint)
CFGWRITECOLOR(colors.canvas_shape_outline)
CFGWRITECOLOR(colors.canvas_shape_selectpoint)
CFGWRITECOLOR(colors.library_libarea)
CFGWRITECOLOR(colors.library_shape)
CFGWRITECOLOR(colors.origin)
CFGWRITECOLOR(colors.ruler_h)
CFGWRITECOLOR(colors.ruler_v)
CFGWRITE(alphas.canvas_shape_normal)
CFGWRITE(alphas.canvas_shape_preview)
CFGWRITE(alphas.canvas_shape_controlpoint)
CFGWRITE(alphas.canvas_shape_guideline)
CFGWRITE(alphas.canvas_shape_mainpoint)
CFGWRITE(alphas.canvas_shape_outline)
CFGWRITE(alphas.canvas_shape_selectpoint)
CFGWRITE(sizes.origincross)
CFGWRITE(behaviors.autoaskimgopac)
CFGWRITE(behaviors.capitalizecmds)
CFGWRITE(behaviors.parse_spc)
CFGWRITE(behaviors.nosplashscreen)
CFGWRITE(behaviors.confirmquit)
config->SetPath(_T(".."));
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 774 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 776 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 774 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 776 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 776 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 774 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 776 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 774 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 774 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 776 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 776 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 776 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 776 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 774 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 776 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 776 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 774 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 776 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 774 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 776 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 774 B

File diff suppressed because it is too large Load Diff

View File

@ -1,304 +0,0 @@
/*
* Copyright (c) 2007, ai-chan
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the ASSDraw3 Team nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY AI-CHAN ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL AI-CHAN BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
///////////////////////////////////////////////////////////////////////////////
// Name: canvas.hpp
// Purpose: header file for ASSDraw main canvas class
// Author: ai-chan
// Created: 08/26/06
// Copyright: (c) ai-chan
// Licence: 3-clause BSD
///////////////////////////////////////////////////////////////////////////////
#pragma once
#include <vector>
#include "engine.hpp"
#include "enums.hpp"
#include <wx/dnd.h>
#include <wx/splitter.h>
#include <wx/clntdata.h>
#include "agg_span_allocator.h"
#include "agg_span_interpolator_linear.h"
#include "agg_span_image_filter_rgb.h"
#include "agg_span_image_filter_rgba.h"
#include "agg_image_accessors.h"
#include "agg_conv_clip_polygon.h"
class ASSDrawFrame;
class ASSDrawCanvas;
struct UndoRedo
{
wxString cmds;
wxString desc;
double originx, originy, scale;
std::vector< bool > c1cont;
wxString bgimgfile;
wxRealPoint bgdisp, bgcenter;
double bgscale, bgalpha;
MODE draw_mode;
agg::path_storage backupcmds;
wxRealPoint rectbound[4], rectbound2[4], backup[4];
bool isshapetransformable;
void Import(ASSDrawCanvas *canvas, bool prestage, wxString cmds = _T(""));
void Export(ASSDrawCanvas *canvas);
};
// for multiple point selection
enum SELECTMODE { NEW, ADD, DEL };
class ASSDrawCanvas: public ASSDrawEngine, public wxClientData
{
public:
ASSDrawCanvas( wxWindow *parent, ASSDrawFrame *frame, int extraflags = 0 );
// destructor
~ASSDrawCanvas();
virtual void ResetEngine(bool addM);
virtual void SetPreviewMode( bool mode );
virtual bool IsPreviewMode() { return preview_mode; }
virtual void ParseASS(wxString str, bool addundo = false);
virtual void SetDrawMode( MODE mode );
virtual MODE GetDrawMode() { return draw_mode; }
virtual bool IsTransformMode();
virtual void SetDragMode( DRAGMODE mode );
virtual DRAGMODE GetDragMode() { return drag_mode; }
virtual void RefreshDisplay();
virtual bool CanZoom();
virtual bool CanMove();
virtual void OnMouseMove(wxMouseEvent &event);
virtual void OnMouseLeftUp(wxMouseEvent &event);
virtual void OnMouseLeftDown(wxMouseEvent &event);
virtual void OnMouseRightUp(wxMouseEvent &event);
virtual void OnMouseRightDown(wxMouseEvent &event);
virtual void OnMouseRightDClick(wxMouseEvent &event);
virtual void OnMouseWheel(wxMouseEvent &event);
virtual void CustomOnKeyDown(wxKeyEvent &event);
virtual void CustomOnKeyUp(wxKeyEvent &event);
virtual void ChangeZoomLevel(double zoomamount, wxPoint bgzoomctr);
virtual void ChangeZoomLevelTo(double zoom, wxPoint bgzoomctr);
virtual void ChangeDrawingZoomLevel(double zoom);
virtual void ChangeBackgroundZoomLevel(double zoom, wxRealPoint newcenter);
virtual void MoveCanvas(double xamount, double yamount);
virtual void MoveCanvasOriginTo(double originx, double originy);
virtual void MoveCanvasDrawing(double xamount, double yamount);
virtual void MoveCanvasBackground(double xamount, double yamount);
virtual void OnSelect_ConvertLineToBezier(wxCommandEvent& WXUNUSED(event));
virtual void OnSelect_ConvertBezierToLine(wxCommandEvent& WXUNUSED(event));
virtual void OnSelect_C1ContinuityBezier(wxCommandEvent& WXUNUSED(event));
virtual void OnSelect_Move00Here(wxCommandEvent& WXUNUSED(event));
void OnAlphaSliderChanged(wxScrollEvent &event);
// to replace _PointSystem() that has been made protected
double GetScale() { return pointsys->scale; }
double GetOriginX() { return pointsys->originx; }
double GetOriginY() { return pointsys->originy; }
// undo/redo system
virtual void AddUndo( wxString desc );
virtual bool UndoOrRedo(bool isundo);
virtual bool Undo();
virtual bool Redo();
virtual wxString GetTopUndo();
virtual wxString GetTopRedo();
virtual void RefreshUndocmds();
virtual bool HasBackgroundImage() { return bgimg.bgimg != NULL; }
virtual void RemoveBackgroundImage();
virtual void ReceiveBackgroundImageFileDropEvent(const wxString& filename);
virtual void SetBackgroundImage(const wxImage& img, wxString fname = _T("<clipboard>"), bool ask4alpha = true);
virtual void PrepareBackgroundBitmap(double alpha);
virtual void AskUserForBackgroundAlpha();
virtual bool GetBackgroundInfo(unsigned& w, unsigned& h, wxRealPoint& disp, double& scale);
agg::rgba rgba_shape_normal, rgba_outline, rgba_guideline;
agg::rgba rgba_mainpoint, rgba_controlpoint, rgba_selectpoint;
agg::rgba rgba_origin, rgba_ruler_h, rgba_ruler_v;
protected:
typedef PixelFormat::AGGType::color_type color_type;
typedef agg::span_interpolator_linear<> interpolator_type;
typedef agg::span_image_filter_rgb_bilinear_clip<PixelFormat::AGGType, interpolator_type> span_gen_type;
// The GUI window
ASSDrawFrame* m_frame;
// highlight mechanism
DrawCmd* hilite_cmd;
Point* hilite_point;
// mouse capture
bool capturemouse_left, capturemouse_right;
virtual void CustomOnMouseCaptureLost(wxMouseCaptureLostEvent &event);
virtual void ProcessOnMouseLeftUp();
virtual void ProcessOnMouseRightUp();
// selection mechanism
PointSet selected_points;
// if it has status bar
bool hasStatusBar;
// some mouse readings
Point* mousedownAt_point;
Point* pointedAt_point;
Point* dblclicked_point_right;
wxPoint mouse_point;
// The wxPoint being dragged by left button
wxPoint* dragAnchor_left;
wxPoint* lastDrag_left;
// The wxPoint being dragged by right button
wxPoint* dragAnchor_right;
wxPoint* lastDrag_right;
// true if the drawing origin (0, 0) is being dragged
bool dragOrigin;
// The newest command being initialized thru dragging action
DrawCmd* newcommand;
// the draw mode
MODE draw_mode;
DRAGMODE drag_mode;
// holding shift key temporarily switches to drag mode (MODE_ARR)
// so we want to save the mode before the key-down to restore it on key-up
MODE mode_b4_shift;
// true if preview mode (i.e don't draw anything except the shape itself;
// also draw the shape as closed)
bool preview_mode;
// background image!
struct
{
agg::rendering_buffer ibuf;
wxImage *bgimg;
wxBitmap *bgbmp;
wxString bgimgfile;
agg::path_storage bg_path;
agg::span_allocator<color_type> spanalloc;
//span_gen_type spangen;
agg::trans_affine img_mtx, path_mtx;
wxRealPoint disp, center, new_disp, new_center;
double scale, new_scale, alpha;
wxDialog* alpha_dlg;
wxSlider* alpha_slider;
} bgimg;
// Undo/redo system (simply stores the ASS commands)
std::list<UndoRedo> undos;
std::list<UndoRedo> redos;
UndoRedo _undo;
// last action and commands (for undo/redo system)
wxString undodesc;
wxString oldasscmds;
// was preview_mode
//bool was_preview_mode;
PointSystem* _PointSystem() { return pointsys; }
// for Undo/Redo system
virtual void PrepareUndoRedo(UndoRedo& ur, bool prestage, wxString cmds, wxString desc);
// -------------------- points highlight/selection ---------------------------
// set command and point to highlight
virtual void SetHighlighted ( DrawCmd* cmd, Point* point );
// selects all points within (lx, ty) , (rx, by) returns # of selected points
virtual int SelectPointsWithin( int lx, int rx, int ty, int by, SELECTMODE smode = NEW );
virtual void ClearPointsSelection();
virtual SELECTMODE GetSelectMode(wxMouseEvent &event);
// -------------------- misc ---------------------------
// non-uniform transformation
virtual bool InitiateDraggingIfTransformMode();
virtual void UpdateTranformModeRectCenter();
virtual bool GetThe4thPoint(double ox, double oy, double a1x, double a1y, double a2x, double a2y, double *x, double *y);
enum { NONE, LEFT, RIGHT } backupowner;
agg::path_storage backupcmds;
int rectbound2upd, rectbound2upd2;
wxRealPoint rectbound[4], rectbound2[4], backup[4], rectcenter;
bool isshapetransformable;
// do the real drawing
virtual void DoDraw( RendererBase& rbase, RendererPrimitives& rprim, RendererSolid& rsolid, agg::trans_affine& mtx );
// update background image scale & position
virtual void UpdateBackgroundImgScalePosition(bool firsttime = false);
// perform extra stuff other than calling ASSDrawEngine::ConnectSubsequentCmds
virtual void ConnectSubsequentCmds (DrawCmd* cmd1, DrawCmd* cmd2);
// make sure the c1 continuity is followed after performing a drag-point action
virtual void EnforceC1Continuity (DrawCmd* cmd, Point* pnt);
// after the bounding quadrangle has changed, update the shape to fill up inside it
virtual void UpdateNonUniformTransformation();
friend struct UndoRedo;
DECLARE_EVENT_TABLE()
};
class ASSDrawFileDropTarget : public wxFileDropTarget
{
public:
ASSDrawFileDropTarget(ASSDrawCanvas *canvas): wxFileDropTarget()
{
m_canvas = canvas;
}
virtual bool OnDropFiles(wxCoord x, wxCoord y, const wxArrayString& filenames)
{
m_canvas->ReceiveBackgroundImageFileDropEvent(filenames.Item(0));
return true;
}
protected:
ASSDrawCanvas *m_canvas;
};

View File

@ -1,56 +0,0 @@
/*
* Copyright (c) 2007, ai-chan
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the ASSDraw3 Team nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY AI-CHAN ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL AI-CHAN BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "canvas_mouse.hpp"
#include "canvas.hpp"
DEFINE_EVENT_TYPE( wxEVT_MOUSEONCANVAS )
ASSDrawMouseOnCanvasEvent::ASSDrawMouseOnCanvasEvent(const ASSDrawCanvas* canvas)
: wxNotifyEvent(),
_canvas(canvas)
{
_data = NULL;
}
wxEvent* ASSDrawMouseOnCanvasEvent::Clone()
{
ASSDrawMouseOnCanvasEvent *clone = new ASSDrawMouseOnCanvasEvent(_canvas);
clone->SetData(_data);
return clone;
}
void ASSDrawMouseOnCanvasEvent::SetData(MouseOnCanvasData *data)
{
_data = data;
}
MouseOnCanvasData* ASSDrawMouseOnCanvasEvent::GetData()
{
return _data;
}

View File

@ -1,85 +0,0 @@
/*
* Copyright (c) 2007, ai-chan
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the ASSDraw3 Team nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY AI-CHAN ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL AI-CHAN BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#pragma once
#include "_common.hpp"
#include "enums.hpp"
#include "engine.hpp"
#include <wx/event.h>
struct MouseOnCanvasData
{
MODE mode;
wxMouseEvent event;
enum { NONE, LEFT, RIGHT, BOTH } button;
Point* mousedownAt_point;
Point* pointedAt_point;
Point* dblclicked_point_right;
wxPoint mouse_point;
wxPoint* dragAnchor_left;
wxPoint* lastDrag_left;
wxPoint* dragAnchor_right;
wxPoint* lastDrag_right;
};
class ASSDrawCanvas;
class ASSDrawMouseOnCanvasEvent : public wxNotifyEvent
{
public:
ASSDrawMouseOnCanvasEvent(const ASSDrawCanvas* canvas);
wxEvent* Clone();
void SetData(MouseOnCanvasData *data);
MouseOnCanvasData* GetData();
private:
const ASSDrawCanvas* _canvas;
MouseOnCanvasData* _data;
};
DECLARE_EVENT_TYPE( wxEVT_MOUSEONCANVAS, -1 )
typedef void (wxEvtHandler::*wxMouseOnCanvasEventFunction)(ASSDrawMouseOnCanvasEvent&);
#define EVT_MOUSEONCANVAS(fn) \
DECLARE_EVENT_TABLE_ENTRY( wxEVT_MOUSEONCANVAS, -1, -1, \
(wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxNotifyEventFunction) \
wxStaticCastEvent( wxMouseOnCanvasEventFunction, & fn ), (wxObject *) NULL ),
class ASSDrawMouseOnCanvasHandler
{
};

View File

@ -1,213 +0,0 @@
/*
* Copyright (c) 2007, ai-chan
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the ASSDraw3 Team nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY AI-CHAN ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL AI-CHAN BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
///////////////////////////////////////////////////////////////////////////////
// Name: cmd.cpp
// Purpose: ASSDraw drawing command classes
// Author: ai-chan
// Created: 08/26/06
// Copyright: (c) ai-chan
// Licence: 3-clause BSD
///////////////////////////////////////////////////////////////////////////////
#include "cmd.hpp" // the header for this file
#include <wx/log.h>
// ----------------------------------------------------------------------------
// DrawCmd_M
// ----------------------------------------------------------------------------
// constructor
DrawCmd_M::DrawCmd_M ( int x, int y, PointSystem *ps, DrawCmd *prev )
: DrawCmd ( x, y, ps, prev )
{
type = M;
}
// to ASS drawing command
wxString DrawCmd_M::ToString()
{
return wxString::Format(_T("m %d %d"), m_point->x(), m_point->y());
}
// ----------------------------------------------------------------------------
// DrawCmd_L
// ----------------------------------------------------------------------------
// constructor
DrawCmd_L::DrawCmd_L ( int x, int y, PointSystem *ps, DrawCmd *prev )
: DrawCmd ( x, y, ps, prev )
{
type = L;
}
// to ASS drawing command
wxString DrawCmd_L::ToString()
{
return wxString::Format(_T("l %d %d"), m_point->x(), m_point->y());
}
// ----------------------------------------------------------------------------
// DrawCmd_B
// ----------------------------------------------------------------------------
// constructor
DrawCmd_B::DrawCmd_B
( int x, int y, int x1, int y1, int x2, int y2, PointSystem *ps, DrawCmd *prev )
: DrawCmd ( x, y, ps, prev )
{
type = B;
controlpoints.push_back( new Point(x1, y1, ps, CP, this, 1) );
controlpoints.push_back( new Point(x2, y2, ps, CP, this, 2) );
initialized = true;
C1Cont = false;
}
// constructor
DrawCmd_B::DrawCmd_B ( int x, int y, PointSystem *ps, DrawCmd *prev )
: DrawCmd ( x, y, ps, prev )
{
type = B;
initialized = false;
C1Cont = false;
}
// initialize; generate control points
void DrawCmd_B::Init ( unsigned n )
{
// Ignore if this is already initted
if (initialized) return;
wxPoint wx0 = prev->m_point->ToWxPoint();
wxPoint wx1 = m_point->ToWxPoint();
int xdiff = (wx1.x - wx0.x) / 3;
int ydiff = (wx1.y - wx0.y) / 3;
int xg, yg;
// first control
m_point->pointsys->FromWxPoint( wx0.x + xdiff, wx0.y + ydiff, xg, yg );
controlpoints.push_back( new Point( xg, yg, m_point->pointsys, CP, this, 1 ) );
// second control
m_point->pointsys->FromWxPoint( wx1.x - xdiff, wx1.y - ydiff, xg, yg );
controlpoints.push_back( new Point( xg, yg, m_point->pointsys, CP, this, 2 ) );
initialized = true;
}
// to ASS drawing command
wxString DrawCmd_B::ToString()
{
if (initialized) {
PointList::iterator iterate = controlpoints.begin();
Point* c1 = (*iterate++);
Point* c2 = (*iterate);
return wxString::Format(_T("b %d %d %d %d %d %d"), c1->x(), c1->y(), c2->x(), c2->y(), m_point->x(), m_point->y());
}
else
return wxString::Format(_T("b ? ? ? ? %d %d"), m_point->x(), m_point->y());
}
// ----------------------------------------------------------------------------
// DrawCmd_S
// ----------------------------------------------------------------------------
// constructor
DrawCmd_S::DrawCmd_S
( int x, int y, PointSystem *ps, DrawCmd *prev )
: DrawCmd ( x, y, ps, prev )
{
type = S;
initialized = false;
closed = false;
}
// constructor
DrawCmd_S::DrawCmd_S
( int x, int y, std::vector< int > vals, PointSystem *ps, DrawCmd *prev )
: DrawCmd ( x, y, ps, prev )
{
type = S;
std::vector< int >::iterator it = vals.begin();
unsigned n = 0;
while (it != vals.end())
{
int ix = *it; it++;
int iy = *it; it++;
n++;
//::wxLogMessage(_T("%d %d\n"), ix, iy);
controlpoints.push_back( new Point( ix, iy, ps, CP, this, n ) );
}
initialized = true;
closed = false;
}
// initialize; generate control points
void DrawCmd_S::Init(unsigned n)
{
// Ignore if this is already initted
if (initialized) return;
wxPoint wx0 = prev->m_point->ToWxPoint();
wxPoint wx1 = m_point->ToWxPoint();
int xdiff = (wx1.x - wx0.x) / 3;
int ydiff = (wx1.y - wx0.y) / 3;
int xg, yg;
// first control
m_point->pointsys->FromWxPoint( wx0.x + xdiff, wx0.y + ydiff, xg, yg );
controlpoints.push_back( new Point( xg, yg, m_point->pointsys, CP, this, 1 ) );
// second control
m_point->pointsys->FromWxPoint( wx1.x - xdiff, wx1.y - ydiff, xg, yg );
controlpoints.push_back( new Point( xg, yg, m_point->pointsys, CP, this, 2 ) );
initialized = true;
}
// to ASS drawing command
wxString DrawCmd_S::ToString()
{
PointList::iterator iterate = controlpoints.begin();
wxString assout = _T("s");
for (; iterate != controlpoints.end(); iterate++)
{
if (initialized)
assout = wxString::Format(_T("%s %d %d"), assout.c_str(), (*iterate)->x(), (*iterate)->y());
else
assout = wxString::Format(_T("%s ? ?"), assout.c_str());
}
assout = wxString::Format(_T("%s %d %d"), assout.c_str(), m_point->x(), m_point->y());
if (closed) assout = wxString::Format(_T("%s c"), assout.c_str());
return assout;
}

View File

@ -1,112 +0,0 @@
/*
* Copyright (c) 2007, ai-chan
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the ASSDraw3 Team nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY AI-CHAN ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL AI-CHAN BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
///////////////////////////////////////////////////////////////////////////////
// Name: cmd.hpp
// Purpose: header file for ASSDraw drawing command classes
// Author: ai-chan
// Created: 08/26/06
// Copyright: (c) ai-chan
// Licence: 3-clause BSD
///////////////////////////////////////////////////////////////////////////////
#pragma once
#include "engine.hpp" // include the engine header for DrawCmd
#include <vector> // ok, we use vector too
// this header file declares the following classes
class DrawCmd_M;
class DrawCmd_L;
class DrawCmd_B;
// The M command
class DrawCmd_M: public DrawCmd
{
public:
// Constructor
DrawCmd_M ( int x, int y, PointSystem *ps, DrawCmd *prev );
// to ASS drawing command
wxString ToString();
};
// The L command
class DrawCmd_L: public DrawCmd
{
public:
// Constructor
DrawCmd_L ( int x, int y, PointSystem *ps, DrawCmd *prev );
// to ASS drawing command
wxString ToString();
};
// The B command
class DrawCmd_B: public DrawCmd
{
public:
// Constructor
DrawCmd_B ( int x, int y, int x1, int y1, int x2, int y2, PointSystem *ps, DrawCmd *prev );
// Special constructor where only m_point is defined
// Need to call Init() to generate the controls
DrawCmd_B ( int x, int y, PointSystem *ps, DrawCmd *prev );
// Init this B command; generate controlpoints
void Init ( unsigned n = 0 );
// to ASS drawing command
wxString ToString();
//special
bool C1Cont;
};
// The S command
class DrawCmd_S: public DrawCmd
{
public:
// Constructor
DrawCmd_S ( int x, int y, PointSystem *ps, DrawCmd *prev );
// Constructor (with points info)
DrawCmd_S ( int x, int y, std::vector< int > vals, PointSystem *ps, DrawCmd *prev );
// Init this S command; generate controlpoints
void Init ( unsigned n = 0 );
// to ASS drawing command
wxString ToString();
// special
bool closed;
};

View File

@ -1,2 +0,0 @@
perl t-stringifier.pl agg_bcspline.h agg_conv_bcspline.h agg_vcgen_bcspline.h resource.h agg_bcspline.cpp agg_vcgen_bcspline.cpp assdraw.cpp assdraw_settings.cpp canvas.cpp canvas_mouse.cpp cmd.cpp dlgctrl.cpp engine.cpp library.cpp settings.cpp
pause

View File

@ -1,375 +0,0 @@
/*
* Copyright (c) 2007, ai-chan
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the ASSDraw3 Team nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY AI-CHAN ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL AI-CHAN BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
///////////////////////////////////////////////////////////////////////////////
// Name: dlgctrl.cpp
// Purpose: custom dialogs and controls
// Author: ai-chan
// Created: 08/26/06
// Copyright: (c) ai-chan
// Licence: 3-clause BSD
///////////////////////////////////////////////////////////////////////////////
#include "assdraw.hpp"
#if !defined(__WINDOWS__)
#include "xpm/res.h"
#endif
BEGIN_EVENT_TABLE(ASSDrawSrcTxtCtrl, wxTextCtrl)
EVT_CHAR(ASSDrawSrcTxtCtrl::CustomOnChar)
EVT_TEXT(wxID_ANY, ASSDrawSrcTxtCtrl::CustomOnText)
END_EVENT_TABLE()
BEGIN_EVENT_TABLE(ASSDrawTransformDlg, wxDialog)
EVT_COMBOBOX(-1, ASSDrawTransformDlg::OnTemplatesCombo)
END_EVENT_TABLE()
//BEGIN_EVENT_TABLE(ASSDrawCanvasRecenterButton, wxWindow)
//END_EVENT_TABLE()
// ----------------------------------------------------------------------------
// ASSDrawSrcTxtCtrl
// ----------------------------------------------------------------------------
ASSDrawSrcTxtCtrl::ASSDrawSrcTxtCtrl(wxWindow *parent, ASSDrawFrame *frame)
: wxTextCtrl(parent, wxID_ANY, _T(""), __DPDS__ , wxTE_MULTILINE )
{
m_frame = frame;
}
void ASSDrawSrcTxtCtrl::CustomOnChar(wxKeyEvent &event)
{
switch (event.GetKeyCode())
{
case WXK_RETURN:
m_frame->UpdateASSCommandStringFromSrcTxtCtrl(GetValue());
break;
case WXK_TAB:
break; //do nothing
default:
//m_frame->SetTitle(wxString::Format(_T("Key: %d"), event.GetKeyCode()));
event.Skip(true);
}
//SetBackgroundColour(IsModified()? wxColour(0xFF, 0xFF, 0x99):*wxWHITE);
}
void ASSDrawSrcTxtCtrl::CustomOnText(wxCommandEvent &event)
{
//SetBackgroundColour(IsModified()? wxColour(0xFF, 0xFF, 0x99):*wxWHITE);
}
// ----------------------------------------------------------------------------
// ASSDrawTransformDlg
// ----------------------------------------------------------------------------
ASSDrawTransformDlg::ASSDrawTransformDlg(ASSDrawFrame* parent)
: wxDialog(parent, -1, wxString(_T("Transform")))
{
m_frame = parent;
wxBoxSizer* sizer_main = new wxBoxSizer(wxVERTICAL);
this->SetSizer(sizer_main);
wxBoxSizer* sizer_templates = new wxBoxSizer(wxHORIZONTAL);
sizer_main->Add(sizer_templates, 0, wxGROW|wxLEFT, 5);
sizer_templates->Add(new wxStaticText( this, -1, _("Templates"), __DPDS__ , 0 ),
0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
combo_templates = new wxComboBox( this, -1, combo_templatesStrings[0], __DPDS__ , 10, combo_templatesStrings, wxCB_READONLY );
sizer_templates->Add(combo_templates, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
wxFlexGridSizer* sizer_fields = new wxFlexGridSizer(3, 4, 0, 0);
sizer_main->Add(sizer_fields, 0, wxALIGN_CENTER_HORIZONTAL|wxLEFT, 5);
int flag_txtctrl = wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL;
int flag_statictxt = wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxALL;
sizer_fields->Add(new wxStaticText( this, -1, _("m11"), __DPDS__ , 0 ),
0, flag_statictxt, 5);
txtctrl_m11 = new wxTextCtrl( this, -1, _T("1.0"), __DPDS__ , wxTE_RIGHT );
sizer_fields->Add(txtctrl_m11, 0, flag_txtctrl, 5);
sizer_fields->Add(new wxStaticText( this, -1, _("m12"), __DPDS__ , 0 ),
0, flag_statictxt, 5);
txtctrl_m12 = new wxTextCtrl( this, -1, _T("0.0"), __DPDS__ , wxTE_RIGHT );
sizer_fields->Add(txtctrl_m12, 0, flag_txtctrl, 5);
sizer_fields->Add(new wxStaticText( this, -1, _("m21"), __DPDS__ , 0 ),
0, flag_statictxt, 5);
txtctrl_m21 = new wxTextCtrl( this, -1, _T("0.0"), __DPDS__ , wxTE_RIGHT );
sizer_fields->Add(txtctrl_m21, 0, flag_txtctrl, 5);
sizer_fields->Add(new wxStaticText( this, -1, _("m22"), __DPDS__ , 0 ),
0, flag_statictxt, 5);
txtctrl_m22 = new wxTextCtrl( this, -1, _T("1.0"), __DPDS__ , wxTE_RIGHT );
sizer_fields->Add(txtctrl_m22, 0, flag_txtctrl, 5);
sizer_fields->Add(new wxStaticText( this, -1, _("mx"), __DPDS__ , 0 ),
0, flag_statictxt, 5);
txtctrl_mx = new wxTextCtrl( this, -1, _T("0.0"), __DPDS__ , wxTE_RIGHT );
sizer_fields->Add(txtctrl_mx, 0, flag_txtctrl, 5);
sizer_fields->Add(new wxStaticText( this, -1, _("my"), __DPDS__ , 0 ),
0, flag_statictxt, 5);
txtctrl_my = new wxTextCtrl( this, -1, _T("0.0"), __DPDS__ , wxTE_RIGHT );
sizer_fields->Add(txtctrl_my, 0, flag_txtctrl, 5);
sizer_fields->Add(new wxStaticText( this, -1, _("nx"), __DPDS__ , 0 ),
0, flag_statictxt, 5);
txtctrl_nx = new wxTextCtrl( this, -1, _T("0.0"), __DPDS__ , wxTE_RIGHT );
sizer_fields->Add(txtctrl_nx, 0, flag_txtctrl, 5);
sizer_fields->Add(new wxStaticText( this, -1, _("ny"), __DPDS__ , 0 ),
0, flag_statictxt, 5);
txtctrl_ny = new wxTextCtrl( this, -1, _T("0.0"), __DPDS__ , wxTE_RIGHT );
sizer_fields->Add(txtctrl_ny, 0, flag_txtctrl, 5);
wxStaticBitmap* staticbmp = new wxStaticBitmap( this, -1, wxBITMAP(transform), wxDefaultPosition, wxSize(224, 56), 0 );
sizer_main->Add(staticbmp, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
wxStdDialogButtonSizer* sizer_stdbutt = new wxStdDialogButtonSizer;
sizer_main->Add(sizer_stdbutt, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
wxButton* button_ok = new wxButton( this, wxID_OK, _("&OK"), __DPDS__ , 0 );
sizer_stdbutt->AddButton(button_ok);
wxButton* button_cancel = new wxButton( this, wxID_CANCEL, _("&Cancel"), __DPDS__ , 0 );
sizer_stdbutt->AddButton(button_cancel);
sizer_stdbutt->Realize();
sizer_main->Fit(this);
}
void ASSDrawTransformDlg::OnTemplatesCombo(wxCommandEvent &event)
{
int pos = -1;
for (int i = 0; i < combo_templatesCount; i++)
if (combo_templatesStrings[i].IsSameAs(((wxComboBox *) event.GetEventObject())->GetValue()))
{
pos = i;
break;
}
if (pos == -1)
return;
txtctrl_m11->SetValue( wxString::Format(_T("%.1f"), combo_templatesValues[pos].f1) );
txtctrl_m12->SetValue( wxString::Format(_T("%.1f"), combo_templatesValues[pos].f2) );
txtctrl_m21->SetValue( wxString::Format(_T("%.1f"), combo_templatesValues[pos].f3) );
txtctrl_m22->SetValue( wxString::Format(_T("%.1f"), combo_templatesValues[pos].f4) );
txtctrl_mx->SetValue( wxString::Format(_T("%.1f"), combo_templatesValues[pos].f5) );
txtctrl_my->SetValue( wxString::Format(_T("%.1f"), combo_templatesValues[pos].f6) );
txtctrl_nx->SetValue( wxString::Format(_T("%.1f"), combo_templatesValues[pos].f7) );
txtctrl_ny->SetValue( wxString::Format(_T("%.1f"), combo_templatesValues[pos].f8) );
}
void ASSDrawTransformDlg::EndModal(int retCode)
{
if (retCode != wxID_OK)
{
wxDialog::EndModal(retCode);
return;
}
bool ok = true;
ok = ok && txtctrl_m11->GetValue().ToDouble( &xformvals.f1 );
ok = ok && txtctrl_m12->GetValue().ToDouble( &xformvals.f2 );
ok = ok && txtctrl_m21->GetValue().ToDouble( &xformvals.f3 );
ok = ok && txtctrl_m22->GetValue().ToDouble( &xformvals.f4 );
ok = ok && txtctrl_mx->GetValue().ToDouble( &xformvals.f5 );
ok = ok && txtctrl_my->GetValue().ToDouble( &xformvals.f6 );
ok = ok && txtctrl_nx->GetValue().ToDouble( &xformvals.f7 );
ok = ok && txtctrl_ny->GetValue().ToDouble( &xformvals.f8 );
if (ok)
wxDialog::EndModal(wxID_OK);
else
wxMessageBox(_T("One or more values entered are not real numbers.\nPlease fix."), _T("Value error"), wxOK | wxICON_INFORMATION, m_frame);
}
ASSDrawAboutDlg::ASSDrawAboutDlg(ASSDrawFrame *parent, unsigned timeout)
: wxDialog(parent, wxID_ANY, wxString(TITLE), __DPDS__ , wxSIMPLE_BORDER), time_out(timeout)
{
SetBackgroundColour(*wxWHITE);
htmlwin = new wxHtmlWindow(this, wxID_ANY, wxDefaultPosition, wxSize(396, 200), wxHW_DEFAULT_STYLE | wxSIMPLE_BORDER);
htmlwin->SetPage(
_T("<html><body> \
<p>ASSDraw3 is a tool for designing shapes to be used in ASS subtitle file. \
<p>To add lines or curves, initiate the draw mode by clicking on the drawing tools. \
Then, either click on empty space or drag from an existing point to add the new lines/curves. \
Control points for Bezier curves are generated once you release the mouse button. \
<p>To modify shapes, drag their points (squares) and control points (circles) in the drag mode. \
<p><b>Some tips & tricks:</b> \
<ul> \
<li> Set background image by dragging image file from explorer onto the canvas \
<li> Use the Shapes Library to store your drawings \
<li> Ctrl-Z for undo, Ctrl-Y for redo \
<li> Use your mousewheel to zoom in/out (PageUp/PageDown keys work too) \
<li> Dragging with right mouse button moves the drawing and/or background image around. \
<li> Double clicking with right mouse button for popup menus. \
<li> Holding shift key while in the draw mode temporarily switches to the drag mode \
<li> The shapes origin (coordinate [0, 0] depicted by the small cross) is draggable \
</ul> \
<p><b>Acknowledgements:</b> \
<ul> \
<li> Maxim Shemanarev <a href=\"http://www.antigrain.com\">http://www.antigrain.com</a> for his Anti-Grain Geometry (AGG) graphic toolkit. \
<li> wxWidgets Project <a href=\"http://www.wxwidgets.org\">http://www.wxwidgets.org</a> for the ultracool GUI toolkit. \
<li> Adrian Secord <a href=\"http://mrl.nyu.edu/~ajsecord/index.html\">http://mrl.nyu.edu/~ajsecord/index.html</a> for wxAGG, that combines AGG and wxWidgets\
<li> jfs, ArchMageZeratul, RoRo and everyone at Aegisub's forum <a href=\"http://malakith.net/aegisub\">http://malakith.net/aegisub</a> for all suggestions and supports. \
</ul> \
<p>ai-chan recommends Aegisub for all your subtitle and typesetting needs! \
</body></html>")
);
htmlwin->Connect(wxEVT_COMMAND_HTML_LINK_CLICKED, wxHtmlLinkEventHandler(ASSDrawAboutDlg::OnURL), NULL, this);
wxFlexGridSizer *sizer = new wxFlexGridSizer(1);
sizer->AddGrowableCol(0);
//sizer->AddGrowableRow(1);
sizer->Add(new BigStaticBitmapCtrl(this, wxBITMAP(assdraw3_), *wxWHITE, this), 1, wxEXPAND);
sizer->Add(htmlwin, 1, wxLEFT | wxRIGHT, 2);
sizer->Add(new wxStaticText(this, wxID_ANY, wxString::Format(_T("Version: %s"), VERSION)), 1, wxEXPAND | wxALL, 2);
sizer->Add(new wxButton(this, wxID_OK), 0, wxALIGN_CENTER | wxBOTTOM, 10);
SetSizer(sizer);
sizer->Layout();
sizer->Fit(this);
Center();
//if (CanSetTransparent()) SetTransparent(0xCC);
timer.SetOwner(this);
Connect(wxEVT_TIMER, wxTimerEventHandler(ASSDrawAboutDlg::OnTimeout));
Connect(wxEVT_ENTER_WINDOW, wxMouseEventHandler(ASSDrawAboutDlg::OnMouseEnterWindow));
}
ASSDrawAboutDlg::~ASSDrawAboutDlg()
{
timer.Stop();
}
int ASSDrawAboutDlg::ShowModal()
{
if (time_out > 0)
timer.Start(time_out * 1000, true);
return wxDialog::ShowModal();
}
void ASSDrawAboutDlg::OnURL(wxHtmlLinkEvent &event)
{
wxString URL(event.GetLinkInfo().GetHref());
if (URL.StartsWith(_T("http://")))
::wxLaunchDefaultBrowser(URL);
else
event.Skip(true);
}
void ASSDrawAboutDlg::OnTimeout(wxTimerEvent& event)
{
if (IsShown())
EndModal(wxID_OK);
}
void ASSDrawAboutDlg::OnMouseEnterWindow(wxMouseEvent& event)
{
// if mouse enters this dialog, stop the timout timer
// and dialog will only close through user input
timer.Stop();
}
BEGIN_EVENT_TABLE(BigStaticBitmapCtrl, wxPanel)
EVT_PAINT(BigStaticBitmapCtrl::OnPaint)
EVT_MOTION (BigStaticBitmapCtrl::OnMouseMove)
EVT_LEFT_UP(BigStaticBitmapCtrl::OnMouseLeftUp)
EVT_LEFT_DOWN(BigStaticBitmapCtrl::OnMouseLeftDown)
END_EVENT_TABLE()
BigStaticBitmapCtrl::BigStaticBitmapCtrl(wxWindow *parent, wxBitmap bmap, wxColour bgcol, wxWindow *todrag)
: wxPanel(parent, wxID_ANY)
{
bitmap = bmap;
bgbrush = wxBrush(bgcol);
window_to_drag = todrag;
SetSize(bitmap.GetWidth(), bitmap.GetHeight());
Refresh();
}
BigStaticBitmapCtrl::~BigStaticBitmapCtrl()
{
}
void BigStaticBitmapCtrl::OnPaint(wxPaintEvent& event)
{
wxPaintDC dc(this);
dc.SetBackground(bgbrush);
dc.Clear();
dc.DrawBitmap(bitmap, wxPoint(0,0));
}
void BigStaticBitmapCtrl::OnMouseLeftDown(wxMouseEvent &event)
{
if (window_to_drag != NULL)
{
dragpoint = event.GetPosition();
}
CaptureMouse();
}
void BigStaticBitmapCtrl::OnMouseLeftUp(wxMouseEvent &event)
{
ReleaseMouse();
}
void BigStaticBitmapCtrl::OnMouseMove(wxMouseEvent &event)
{
if (window_to_drag != NULL && event.Dragging() && HasCapture())
{
wxPoint npoint(event.GetPosition());
wxPoint wndpos = window_to_drag->GetScreenPosition();
wxPoint thispos = this->GetScreenPosition();
//ReleaseMouse();
window_to_drag->Move(wndpos.x + npoint.x - dragpoint.x,
wndpos.y + npoint.y - dragpoint.y);
//CaptureMouse();
if (thispos == this->GetScreenPosition()) // if this ctrl did not move when window_to_drag moved
dragpoint = npoint;
}
event.Skip(true);
}

View File

@ -1,115 +0,0 @@
/*
* Copyright (c) 2007, ai-chan
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the ASSDraw3 Team nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY AI-CHAN ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL AI-CHAN BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#pragma once
#include "_common.hpp"
#include <wx/html/htmlwin.h>
#include <wx/timer.h>
class ASSDrawFrame;
class ASSDrawSrcTxtCtrl : public wxTextCtrl
{
public:
ASSDrawSrcTxtCtrl(wxWindow *parent, ASSDrawFrame *frame);
virtual void CustomOnChar(wxKeyEvent &event);
virtual void CustomOnText(wxCommandEvent &event);
protected:
ASSDrawFrame *m_frame;
DECLARE_EVENT_TABLE()
};
struct EightDouble
{
double f1, f2, f3, f4, f5, f6, f7, f8;
};
class ASSDrawTransformDlg : public wxDialog
{
public:
ASSDrawTransformDlg(ASSDrawFrame* parent);
void OnTemplatesCombo(wxCommandEvent &event);
void EndModal(int retCode);
ASSDrawFrame* m_frame;
wxComboBox* combo_templates;
wxTextCtrl* txtctrl_m11;
wxTextCtrl* txtctrl_m12;
wxTextCtrl* txtctrl_m21;
wxTextCtrl* txtctrl_m22;
wxTextCtrl* txtctrl_mx;
wxTextCtrl* txtctrl_my;
wxTextCtrl* txtctrl_nx;
wxTextCtrl* txtctrl_ny;
EightDouble xformvals;
static wxString combo_templatesStrings[];
static int combo_templatesCount;
static EightDouble combo_templatesValues[];
DECLARE_EVENT_TABLE()
};
class ASSDrawAboutDlg : public wxDialog
{
public:
ASSDrawAboutDlg(ASSDrawFrame *parent, unsigned timeout = 0);
virtual ~ASSDrawAboutDlg();
virtual void OnURL(wxHtmlLinkEvent &event);
virtual int ShowModal();
virtual void OnTimeout(wxTimerEvent& event);
virtual void OnMouseEnterWindow(wxMouseEvent& event);
protected:
wxTimer timer;
wxHtmlWindow *htmlwin;
const unsigned time_out;
};
class BigStaticBitmapCtrl : public wxPanel
{
public:
BigStaticBitmapCtrl(wxWindow *parent, wxBitmap bmap, wxColour bgcol, wxWindow *todrag = NULL);
virtual ~BigStaticBitmapCtrl();
virtual void OnPaint(wxPaintEvent& event);
virtual void OnMouseLeftDown(wxMouseEvent &event);
virtual void OnMouseLeftUp(wxMouseEvent &event);
virtual void OnMouseMove(wxMouseEvent &event);
protected:
wxBitmap bitmap;
wxBrush bgbrush;
wxWindow *window_to_drag;
wxPoint dragpoint, wndpos;
DECLARE_EVENT_TABLE()
};

View File

@ -1,749 +0,0 @@
/*
* Copyright (c) 2007, ai-chan
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the ASSDraw3 Team nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY AI-CHAN ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL AI-CHAN BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
///////////////////////////////////////////////////////////////////////////////
// Name: engine.cpp
// Purpose: ASSDraw drawing engine
// Author: ai-chan
// Created: 08/26/06
// Copyright: (c) ai-chan
// Licence: 3-clause BSD
///////////////////////////////////////////////////////////////////////////////
#include "engine.hpp" // the header
#include "cmd.hpp" // we need the drawing command classes declaration
#include <wx/tokenzr.h> // we use string tokenizer
#include <vector> // ok, we use vector too
#include <stdio.h>
#include <algorithm>
// ----------------------------------------------------------------------------
// Point
// ----------------------------------------------------------------------------
// constructor
Point::Point ( int _x, int _y, PointSystem* ps, POINTTYPE t, DrawCmd* cmd, unsigned n )
{
x_ = _x;
y_ = _y;
pointsys = ps;
cmd_main = cmd;
cmd_next = NULL;
type = t;
isselected = false;
num = n;
}
// setters
void Point::setXY( int _x, int _y)
{
x_ = _x;
y_ = _y;
}
// simply returns true if px and py are the coordinate values
bool Point::IsAt( int px, int py )
{
return (x_ == px && y_ == py );
}
// convert this point to wxPoint using scale and originx, originy
wxPoint Point::ToWxPoint ( bool useorigin )
{
if (useorigin)
return pointsys->ToWxPoint( x_, y_ );
else
return *(new wxPoint(x_ * (int) pointsys->scale, y_ * (int) pointsys->scale ));
}
// check if wxpoint is nearby this point
bool Point::CheckWxPoint ( wxPoint wxpoint )
{
wxPoint p = ToWxPoint();
int cx, cy;
pointsys->FromWxPoint( wxpoint, cx, cy );
//delete &p;
return (x_ == cx && y_ == cy );
}
// ----------------------------------------------------------------------------
// DrawCmd
// ----------------------------------------------------------------------------
// constructor
DrawCmd::DrawCmd ( int x, int y, PointSystem *ps, DrawCmd *pv )
{
m_point = new Point ( x, y, ps, MP, this );
m_point->cmd_main = this;
prev = pv;
dobreak = false;
invisible = false;
}
// destructor
DrawCmd::~DrawCmd ( )
{
if (m_point)
delete m_point;
for (PointList::iterator iter_cpoint = controlpoints.begin();
iter_cpoint != controlpoints.end(); iter_cpoint++)
delete (*iter_cpoint);
}
// ----------------------------------------------------------------------------
// ASSDrawEngine
// ----------------------------------------------------------------------------
BEGIN_EVENT_TABLE(ASSDrawEngine, GUI::AGGWindow)
EVT_PAINT (ASSDrawEngine::OnPaint)
END_EVENT_TABLE()
// constructor
ASSDrawEngine::ASSDrawEngine( wxWindow *parent, int extraflags )
: GUI::AGGWindow(parent, -1, wxDefaultPosition, wxDefaultSize,
wxNO_FULL_REPAINT_ON_RESIZE | extraflags )
{
pointsys = new PointSystem(1, 0, 0) ;
refresh_called = false;
fitviewpoint_hmargin = 10;
fitviewpoint_vmargin = 10;
setfitviewpoint = false;
rgba_shape = agg::rgba(0,0,1);
color_bg = PixelFormat::AGGType::color_type(255, 255, 255);
drawcmdset = _T("m n l b s p c _"); //the spaces and underscore are in there for a reason, guess?
ResetEngine();
}
ASSDrawEngine::~ASSDrawEngine()
{
ResetEngine ( false );
//delete pointsys;
}
// parse ASS draw commands; returns the number of parsed commands
int ASSDrawEngine::ParseASS ( wxString str )
{
ResetEngine( false );
str.Replace(_T("\t"), _T(""));
str.Replace(_T("\r"), _T(""));
str.Replace(_T("\n"), _T(""));
str = str.Lower() + _T(" _ _");
// we don't use regex because the pattern is too simple
wxStringTokenizer tkz( str, _T(" ") );
wxString currcmd(_T(""));
std::vector<int> val;
wxString token;
long tmp_int;
bool n_collected = false;
DrawCmd_S *s_command = NULL;
wxPoint tmp_n_pnt;
while ( tkz.HasMoreTokens() )
{
token = tkz.GetNextToken();
if ( drawcmdset.Find(token) > -1 )
{
bool done;
do {
done = true;
// N
if (currcmd.IsSameAs(_T("n")) && val.size() >= 2)
{
tmp_n_pnt.x = val[0], tmp_n_pnt.y = val[1];
n_collected = true;
}
else if(n_collected)
{
AppendCmd ( L, tmp_n_pnt.x, tmp_n_pnt.y );
n_collected = false;
}
if (s_command != NULL)
{
bool ends = true;
if (currcmd.IsSameAs(_T("p"))&& val.size() >= 2)
{
s_command->m_point->type = CP;
s_command->m_point->num = s_command->controlpoints.size() + 1;
s_command->controlpoints.push_back(s_command->m_point);
s_command->m_point = new Point(val[0], val[1], pointsys, MP, s_command);
ends = false;
}
else if (currcmd.IsSameAs(_T("c")))
s_command->closed = true;
if (ends)
{
AppendCmd(s_command);
s_command = NULL;
}
}
// M
if (currcmd.IsSameAs(_T("m")) && val.size() >= 2)
AppendCmd ( M, val[0], val[1] );
// L
if (currcmd.IsSameAs(_T("l")) && val.size() >= 2)
{
AppendCmd ( L, val[0], val[1] );
val.erase(val.begin(), val.begin()+2);
// L is greedy
if (val.size() >= 2)
done = false;
}
// B
if (currcmd.IsSameAs(_T("b")) && val.size() >= 6)
{
AppendCmd ( new DrawCmd_B(val[4], val[5], val[0], val[1],
val[2], val[3], pointsys, LastCmd()) );
val.erase(val.begin(), val.begin()+6);
// so is B
if (val.size() >= 6)
done = false;
}
// S
if (currcmd.IsSameAs(_T("s")) && val.size() >= 6)
{
int num = (val.size() / 2) * 2;
std::vector<int> val2;
int i = 0;
for (; i < num - 2; i++)
val2.push_back(val[i]);
s_command = new DrawCmd_S(val[num - 2], val[num - 1], val2, pointsys, LastCmd());
}
// more to come later
} while (!done);
val.clear();
currcmd = token;
}
else if (token.ToLong( &tmp_int ))
{
val.push_back( (int) tmp_int );
}
}
return (int) cmds.size();
}
// generate ASS draw commands
wxString ASSDrawEngine::GenerateASS ( )
{
wxString output = _T("");
for (DrawCmdList::iterator iterate = cmds.begin(); iterate != cmds.end(); iterate++)
output = output + (*iterate)->ToString() + _T(" ");
return output;
}
// reset; delete all points and add a new M(0,0)
void ASSDrawEngine::ResetEngine()
{
ResetEngine(true);
}
// reset; delete all points and add a new M(0,0) if addM == true
void ASSDrawEngine::ResetEngine( bool addM )
{
for (DrawCmdList::iterator iterate = cmds.begin(); iterate != cmds.end(); iterate++)
delete (*iterate);
cmds.clear();
if (addM) AppendCmd( M, 0, 0 );
}
// Create draw command of type 'type' and m_point (x, y), append to the
// list and return it
DrawCmd* ASSDrawEngine::AppendCmd ( CMDTYPE type, int x, int y )
{
// use a variation of this method
return AppendCmd( NewCmd( type, x, y ) );
}
// Append draw command
DrawCmd* ASSDrawEngine::AppendCmd ( DrawCmd* cmd )
{
// no NULL command!
if (cmd == NULL) return NULL;
// set dependency of this command on the m_point of the last command
if (!cmds.empty())
ConnectSubsequentCmds( cmds.back(), cmd );
else
{
// since this is the first command, if it's not an M make it into one
if (cmd->type != M)
cmd = NewCmd( M, cmd->m_point->x(), cmd->m_point->y() );
ConnectSubsequentCmds( NULL, cmd );
}
// put it in the list
cmds.push_back( cmd );
return cmd;
}
// create draw command of type 'type' and m_point (x, y), insert to the
// list after the _cmd and return it
DrawCmd* ASSDrawEngine::InsertCmd ( CMDTYPE type, int x, int y, DrawCmd* _cmd )
{
// prepare the new DrawCmd
DrawCmd* c = NewCmd( type, x, y );
// use a variation of this method
InsertCmd( c, _cmd );
return NULL;
}
// insert draw command cmd after _cmd
void ASSDrawEngine::InsertCmd ( DrawCmd* cmd, DrawCmd* _cmd )
{
DrawCmdList::iterator iterate = cmds.begin();
for (; iterate != cmds.end() && *iterate != _cmd; iterate++)
{
// do nothing
}
if (iterate == cmds.end())
{
AppendCmd( cmd );
}
else
{
iterate++;
if (iterate != cmds.end())
{
ConnectSubsequentCmds( cmd, (*iterate) );
}
cmds.insert( iterate, cmd );
ConnectSubsequentCmds( _cmd, cmd );
}
}
DrawCmd* ASSDrawEngine::NewCmd ( CMDTYPE type, int x, int y )
{
DrawCmd* c = NULL;
switch (type)
{
case M:
c = new DrawCmd_M(x, y, pointsys, LastCmd());
break;
case L:
c = new DrawCmd_L(x, y, pointsys, LastCmd());
break;
case B:
c = new DrawCmd_B(x, y, pointsys, LastCmd());
break;
case S:
c = new DrawCmd_S(x, y, pointsys, LastCmd());
break;
}
return c;
}
// returns the iterator for the list
DrawCmdList::iterator ASSDrawEngine::Iterator ( )
{
return cmds.begin();
}
// returns the 'end' iterator for the list
DrawCmdList::iterator ASSDrawEngine::IteratorEnd ( )
{
return cmds.end();
}
// returns the last command in the list
DrawCmd* ASSDrawEngine::LastCmd ()
{
if (cmds.size() == 0)
return NULL;
else
return cmds.back();
}
// move all points by relative amount of x, y coordinates
void ASSDrawEngine::MovePoints ( int x, int y )
{
DrawCmdList::iterator iterate = cmds.begin();
PointList::iterator iterate2;
for (; iterate != cmds.end(); iterate++)
{
(*iterate)->m_point->setXY( (*iterate)->m_point->x() + x, (*iterate)->m_point->y() + y );
for (iterate2 = (*iterate)->controlpoints.begin();
iterate2 != (*iterate)->controlpoints.end(); iterate2++)
{
(*iterate2)->setXY( (*iterate2)->x() + x, (*iterate2)->y() + y );
}
}
}
// transform all points using the calculation:
// | (m11) (m12) | x | (x - mx) | + | nx |
// | (m21) (m22) | | (y - my) | | ny |
void ASSDrawEngine::Transform( float m11, float m12, float m21, float m22,
float mx, float my, float nx, float ny )
{
DrawCmdList::iterator iterate = cmds.begin();
PointList::iterator iterate2;
float x, y;
for (; iterate != cmds.end(); iterate++)
{
x = ((float) (*iterate)->m_point->x()) - mx;
y = ((float) (*iterate)->m_point->y()) - my;
(*iterate)->m_point->setXY((int) (x * m11 + y * m12 + nx), (int) (x * m21 + y * m22 + ny) );
for (iterate2 = (*iterate)->controlpoints.begin();
iterate2 != (*iterate)->controlpoints.end(); iterate2++)
{
x = ((float) (*iterate2)->x()) - mx;
y = ((float) (*iterate2)->y()) - my;
(*iterate2)->setXY((int) (x * m11 + y * m12 + nx), (int) (x * m21 + y * m22 + ny) );
}
}
}
// returns some DrawCmd if its m_point = (x, y)
DrawCmd* ASSDrawEngine::PointAt ( int x, int y )
{
DrawCmd* c = NULL;
DrawCmdList::iterator iterate = cmds.begin();
for (; iterate != cmds.end(); iterate++)
{
if ( (*iterate)->m_point->IsAt( x, y ) )
c = (*iterate);
}
//delete &iterate;
return c;
}
// returns some DrawCmd if one of its control point = (x, y)
// also set &point to refer to that control point
DrawCmd* ASSDrawEngine::ControlAt ( int x, int y, Point* &point )
{
DrawCmd* c = NULL;
point = NULL;
DrawCmdList::iterator cmd_iterator = cmds.begin();
PointList::iterator pnt_iterator;
PointList::iterator end;
for (; cmd_iterator != cmds.end(); cmd_iterator++)
{
pnt_iterator = (*cmd_iterator)->controlpoints.begin();
end = (*cmd_iterator)->controlpoints.end();
for (; pnt_iterator != end; pnt_iterator++)
{
if ( (*pnt_iterator)->IsAt( x, y ) )
{
c = (*cmd_iterator);
point = (*pnt_iterator);
}
}
}
return c;
}
// attempts to delete a commmand, returns true|false if successful|fail
bool ASSDrawEngine::DeleteCommand ( DrawCmd* cmd )
{
DrawCmdList::iterator iterate = cmds.begin();
// can't delete the first command without deleting other commands first
if ( cmd == (*iterate) && cmds.size() > 1) return false;
DrawCmd* lastiter = NULL;
for (; iterate != cmds.end(); iterate++)
{
if ( cmd == (*iterate) )
{
iterate++;
DrawCmd* nxt = (iterate != cmds.end()? (*iterate):NULL);
ConnectSubsequentCmds( lastiter, nxt );
iterate--;
cmds.erase( iterate );
delete cmd;
break;
}
else
lastiter = (*iterate);
}
return true;
}
// set stuff to connect two drawing commands cmd1 and cmd2 such that
// cmd1 comes right before cmd2
void ASSDrawEngine::ConnectSubsequentCmds (DrawCmd* cmd1, DrawCmd* cmd2)
{
if (cmd1 != NULL)
{
cmd1->m_point->cmd_next = cmd2;
}
if (cmd2 != NULL)
{
cmd2->prev = cmd1;
}
}
void ASSDrawEngine::RefreshDisplay()
{
if (!refresh_called)
{
Refresh();
refresh_called = true;
}
}
void ASSDrawEngine::OnPaint(wxPaintEvent& event)
{
draw();
onPaint(event);
if (setfitviewpoint)
{
FitToViewPoint( fitviewpoint_hmargin, fitviewpoint_vmargin );
setfitviewpoint = false;
RefreshDisplay();
}
}
void ASSDrawEngine::draw()
{
refresh_called = false;
PixelFormat::AGGType pixf(rBuf);
RendererBase rbase(pixf);
RendererPrimitives rprim(rbase);
RendererSolid rsolid(rbase);
agg::trans_affine mtx;
ConstructPathsAndCurves(mtx, rm_path, rb_path, rm_curve);
rasterizer.reset();
update_rendered_bound_coords(true);
DoDraw(rbase, rprim, rsolid, mtx);
delete rm_path, rb_path, rm_curve;
}
void ASSDrawEngine::ConstructPathsAndCurves(agg::trans_affine& mtx,
trans_path*& _rm_path, trans_path*& _rb_path, agg::conv_curve<trans_path>*& _rm_curve)
{
mtx *= agg::trans_affine_scaling(pointsys->scale);
mtx *= agg::trans_affine_translation(pointsys->originx, pointsys->originy);
m_path.remove_all();
b_path.remove_all();
DrawCmdList::iterator ci = cmds.begin();
while (ci != cmds.end())
{
AddDrawCmdToAGGPathStorage(*ci, m_path);
AddDrawCmdToAGGPathStorage(*ci, b_path, CTRL_LN);
ci++;
}
_rm_path = new trans_path(m_path, mtx);
_rb_path = new trans_path(b_path, mtx);
_rm_curve = new agg::conv_curve<trans_path>(*rm_path);
}
void ASSDrawEngine::DoDraw( RendererBase& rbase, RendererPrimitives& rprim, RendererSolid& rsolid, agg::trans_affine& mtx )
{
Draw_Clear( rbase );
Draw_Draw( rbase, rprim, rsolid, mtx, rgba_shape );
}
void ASSDrawEngine::Draw_Clear( RendererBase& rbase )
{
rbase.clear(color_bg);
}
void ASSDrawEngine::Draw_Draw( RendererBase& rbase, RendererPrimitives& rprim, RendererSolid& rsolid, agg::trans_affine& mtx, agg::rgba color )
{
agg::conv_contour< agg::conv_curve< agg::conv_transform< agg::path_storage > > > contour(*rm_curve);
rasterizer.add_path(contour);
render_scanlines_aa_solid(rbase, color);
}
void ASSDrawEngine::AddDrawCmdToAGGPathStorage(DrawCmd* cmd, agg::path_storage& path, DRAWCMDMODE mode)
{
if (mode == HILITE && cmd->prev)
path.move_to(cmd->prev->m_point->x(), cmd->prev->m_point->y());
switch(cmd->type)
{
case M:
path.move_to(cmd->m_point->x(),cmd->m_point->y());
break;
case B:
if (cmd->initialized)
{
//path.move_to(cmd->prev->m_point->x(),cmd->prev->m_point->y());
PointList::iterator iterate = cmd->controlpoints.begin();
int x[2], y[2];
x[0] = (*iterate)->x();
y[0] = (*iterate)->y();
iterate++;
x[1] = (*iterate)->x();
y[1] = (*iterate)->y();
path.curve4(x[0], y[0], x[1], y[1], cmd->m_point->x(),cmd->m_point->y());
break;
}
case L:
if (mode == CTRL_LN)
path.move_to(cmd->m_point->x(),cmd->m_point->y());
else
path.line_to(cmd->m_point->x(),cmd->m_point->y());
break;
case S:
unsigned np = cmd->controlpoints.size();
agg::pod_array<double> m_polygon(np * 2);
unsigned _pn = 0;
PointList::iterator iterate = cmd->controlpoints.begin();
while (iterate != cmd->controlpoints.end())
{
m_polygon[_pn] = (*iterate)->x(); _pn++;
m_polygon[_pn] = (*iterate)->y(); _pn++;
iterate++;
}
//m_polygon[_pn++] = cmd->m_point->x();
//m_polygon[_pn++] = cmd->m_point->y();
//path.move_to(cmd->prev->m_point->x(),cmd->prev->m_point->y());
if (mode == CTRL_LN)
{
_pn = 0;
while (_pn < np * 2)
{
path.line_to((int) m_polygon[_pn],(int) m_polygon[_pn + 1]);
_pn += 2;
}
path.line_to(cmd->m_point->x(), cmd->m_point->y());
}
else
{
//path.line_to((int) m_polygon[0],(int) m_polygon[1]);
aggpolygon poly(&m_polygon[0], np, false, false);
agg::conv_bcspline<agg::simple_polygon_vertex_source> bspline(poly);
bspline.interpolation_step(0.01);
agg::path_storage npath;
npath.join_path(bspline);
path.join_path(npath);
if (mode == HILITE)
path.move_to((int) m_polygon[np * 2 - 2], (int) m_polygon[np * 2 - 1] );
path.line_to(cmd->m_point->x(), cmd->m_point->y());
}
break;
}
}
void ASSDrawEngine::render_scanlines_aa_solid(RendererBase& rbase, agg::rgba rgba, bool affectboundaries)
{
agg::render_scanlines_aa_solid(rasterizer, scanline, rbase, rgba);
if (affectboundaries) update_rendered_bound_coords();
}
void ASSDrawEngine::render_scanlines(RendererSolid& rsolid, bool affectboundaries)
{
agg::render_scanlines(rasterizer, scanline, rsolid);
if (affectboundaries) update_rendered_bound_coords();
}
void ASSDrawEngine::update_rendered_bound_coords(bool rendered_fresh)
{
int min_x = rasterizer.min_x();
int min_y = rasterizer.min_y();
int max_x = rasterizer.max_x();
int max_y = rasterizer.max_y();
if (min_x < rendered_min_x || rendered_fresh) rendered_min_x = min_x;
if (min_y < rendered_min_y || rendered_fresh) rendered_min_y = min_y;
if (max_x > rendered_max_x || rendered_fresh) rendered_max_x = max_x;
if (max_y > rendered_max_y || rendered_fresh) rendered_max_y = max_y;
}
void ASSDrawEngine::FitToViewPoint(int hmargin, int vmargin)
{
wxSize v = GetClientSize();
double wide = rendered_max_x - rendered_min_x;
double high = rendered_max_y - rendered_min_y;
double widthratio = (double) (v.x - hmargin * 2) / wide;
double heightratio = (double) (v.y - vmargin * 2) / high;
double ratio = (widthratio < heightratio? widthratio:heightratio);
pointsys->scale = pointsys->scale * ratio;
if (pointsys->scale < 0.01) pointsys->scale = 0.01;
double new_min_x = pointsys->originx + (rendered_min_x - pointsys->originx) * ratio;
double new_max_x = pointsys->originx + (rendered_max_x - pointsys->originx) * ratio;
pointsys->originx += (v.x - new_max_x + new_min_x) / 2 - new_min_x;
double new_min_y = pointsys->originy + (rendered_min_y - pointsys->originy) * ratio;
double new_max_y = pointsys->originy + (rendered_max_y - pointsys->originy) * ratio;
pointsys->originy += (v.y - new_max_y + new_min_y) / 2 - new_min_y;
RefreshDisplay();
}
void ASSDrawEngine::SetFitToViewPointOnNextPaint(int hmargin, int vmargin)
{
if (vmargin >= 0) fitviewpoint_vmargin = vmargin;
if (hmargin >= 0) fitviewpoint_hmargin = hmargin;
setfitviewpoint = true;
}
std::vector< bool > ASSDrawEngine::PrepareC1ContData()
{
std::vector< bool > out;
for (DrawCmdList::iterator it = cmds.begin(); it != cmds.end(); it++)
{
bool c1 = false;
if ((*it)->type == B)
{
DrawCmd_B *cmdb = static_cast<DrawCmd_B *>(*it);
c1 = cmdb->C1Cont;
}
out.push_back(c1);
}
return out;
}

View File

@ -1,406 +0,0 @@
/*
* Copyright (c) 2007, ai-chan
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the ASSDraw3 Team nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY AI-CHAN ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL AI-CHAN BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
///////////////////////////////////////////////////////////////////////////////
// Name: engine.hpp
// Purpose: header file for ASSDraw drawing engine
// Author: ai-chan
// Created: 08/26/06
// Copyright: (c) ai-chan
// Licence: 3-clause BSD
///////////////////////////////////////////////////////////////////////////////
#pragma once
#include "_common.hpp"
// we use these 2 standard libraries
#include <math.h>
#include <list>
#include <set>
#include <vector>
// agg support
#include "wxAGG/AGGWindow.h"
#include "agg_color_rgba.h"
#include "agg_rasterizer_scanline_aa.h"
#include "agg_scanline_p.h"
#include "agg_renderer_base.h"
#include "agg_renderer_primitives.h"
#include "agg_renderer_scanline.h"
#include "agg_path_storage.h"
#include "agg_curves.h"
#include "agg_conv_curve.h"
#include "agg_conv_contour.h"
#include "agg_conv_stroke.h"
#include "agg_conv_bcspline.h"
#include "agg_math.h"
#define DEFAULT_SCALE 10
// this header file declare the following classes
class DrawEngine;
class Point;
class PointSystem;
class DrawCmd;
typedef std::list<DrawCmd*> DrawCmdList;
typedef std::list<Point*> PointList;
typedef std::set<Point*> PointSet;
// Command type
enum CMDTYPE
{
M = 0,
N = 1,
L = 2,
B = 3,
S = 4,
P = 5,
C = 6
};
// Point type
enum POINTTYPE
{
MP, // main point
CP // control point
};
// A PointSystem is a centralized entity holding the parameters:
// scale, originx and originy, all of which are needed by Point
class PointSystem
{
public:
double scale, originx, originy;
PointSystem ( double sc = 1.0, double origx = 0.0, double origy = 0.0 )
{ Set( sc, origx, origy ); }
// set scale, originx and originy;
void Set( double sc, double origx, double origy )
{ scale = sc, originx = origx, originy = origy; }
wxRealPoint ToWxRealPoint ( double x, double y )
{ return wxRealPoint( originx + x * scale, originy + y * scale ); }
// given drawing command coordinates returns the wxPoint on the GUI
wxPoint ToWxPoint ( double x, double y )
{ return wxPoint( (int) (originx + x * scale), (int) (originy + y * scale) ); }
// given wxPoint on the GUI returns the nearest drawing command coords
void FromWxPoint ( int wxpx, int wxpy, int &x, int &y )
{
x = int( floor( ((double) wxpx - originx) / scale + 0.5 ) );
y = int( floor( ((double) wxpy - originy) / scale + 0.5 ) );
}
// given wxPoint on the GUI returns the nearest drawing command coords
void FromWxPoint ( wxPoint wxp, int &x, int &y )
{
FromWxPoint( wxp.x, wxp.y, x, y );
}
};
// The point class
// note: this actually refers to the x,y-coordinate in drawing commands,
// not the coordinate in the GUI
class Point
{
public:
POINTTYPE type;
PointSystem *pointsys;
// drawing commands that depend on this point
DrawCmd* cmd_main;
DrawCmd* cmd_next;
bool isselected;
unsigned num;
// constructor
//Point ( ) { cmd_main = NULL; cmd_next = NULL; }
// constructor
Point ( int _x, int _y, PointSystem* ps, POINTTYPE t, DrawCmd* cmd, unsigned n = 0 );
// getters
int x() { return x_; }
int y() { return y_; }
//set x and y
void setXY( int _x, int _y);
// simply returns true if px and py are the coordinate values
bool IsAt( int px, int py );
// convert this point to wxPoint using scale and originx, originy
wxPoint ToWxPoint () { return ToWxPoint(true); }
// convert this point to wxPoint using scale;
// also use originx and originy if useorigin = true
wxPoint ToWxPoint (bool useorigin);
// check if wxpoint is nearby this point
bool CheckWxPoint ( wxPoint wxpoint );
private:
int x_, y_;
};
// The base class for all draw commands
class DrawCmd
{
public:
CMDTYPE type;
// main point (almost every command has one)
// for B and S it's the last (destination) point
Point* m_point;
// other points than the main point
// subclasses must populate this list even if they define
// new variables for other points
PointList controlpoints;
// Linked list feature
DrawCmd *prev;
// Must set to true if the next command should NOT utilize this command
// for the drawing
bool dobreak;
// Set to true if invisible m_point (not drawn)
bool invisible;
// true if this DrawCmd has been initialized with Init(), false otherwise
// (initialized means that the control points have been generated)
bool initialized;
// -----------------------------------------------------------
// Constructor(s)
DrawCmd ( int x, int y, PointSystem *ps, DrawCmd *pv );
// Destructor
virtual ~DrawCmd ();
// Init the draw command (for example to generate the control points)
virtual void Init(unsigned n = 0) { initialized = true; }
virtual wxString ToString() { return wxT(""); }
};
class ASSDrawEngine: public GUI::AGGWindow
{
public:
ASSDrawEngine( wxWindow *parent, int extraflags = 0 );
// destructor
~ASSDrawEngine();
virtual void SetDrawCmdSet(wxString set) { drawcmdset = set; }
virtual void ResetEngine();
virtual void ResetEngine(bool addM);
virtual void RefreshDisplay();
void FitToViewPoint(int hmargin, int vmargin);
void SetFitToViewPointOnNextPaint(int hmargin = -1, int vmargin = -1);
PointSystem* _PointSystem() { return pointsys; }
// ASS draw commands; returns the number of parsed commands
virtual int ParseASS ( wxString str );
// generate ASS draw commands
virtual wxString GenerateASS ( );
// drawing
virtual void OnPaint(wxPaintEvent &event);
// -------------------- adding new commands ----------------------------
// create draw command of type 'type' and m_point (x, y), append to the
// list and return it
virtual DrawCmd* AppendCmd ( CMDTYPE type, int x, int y );
// append draw command
virtual DrawCmd* AppendCmd ( DrawCmd* cmd );
// create draw command of type 'type' and m_point (x, y), insert to the
// list after the _cmd and return it
virtual DrawCmd* InsertCmd ( CMDTYPE type, int x, int y, DrawCmd* _cmd );
// insert draw command cmd after _cmd
virtual void InsertCmd ( DrawCmd* cmd, DrawCmd* _cmd );
// Create new DrawCmd
DrawCmd* NewCmd ( CMDTYPE type, int x, int y );
// -------------------- read/modify commands ---------------------------
// returns the iterator for the list
virtual DrawCmdList::iterator Iterator ( );
// returns the 'end' iterator for the list
virtual DrawCmdList::iterator IteratorEnd ( );
// returns the last command in the list
virtual DrawCmd* LastCmd ();
// returns the total number of commands in the list
//virtual int CmdCount () { return cmds.size(); }
// move all points by relative amount of x, y coordinates
virtual void MovePoints ( int x, int y );
// transform all points using the calculation:
// | (m11) (m12) | x | (x - mx) | + | nx |
// | (m21) (m22) | | (y - my) | | ny |
virtual void Transform( float m11, float m12, float m21, float m22,
float mx, float my, float nx, float ny );
// returns some DrawCmd if its m_point = (x, y)
virtual DrawCmd* PointAt ( int x, int y );
// returns some DrawCmd if one of its control point = (x, y)
// also set &point to refer to that control point
virtual DrawCmd* ControlAt ( int x, int y, Point* &point );
// attempts to delete a commmand, returns true|false if successful|fail
virtual bool DeleteCommand ( DrawCmd* cmd );
agg::rgba rgba_shape;
PixelFormat::AGGType::color_type color_bg;
protected:
/// The AGG base renderer
typedef agg::renderer_base<PixelFormat::AGGType> RendererBase;
/// The AGG primitives renderer
typedef agg::renderer_primitives<RendererBase> RendererPrimitives;
/// The AGG solid renderer
typedef agg::renderer_scanline_aa_solid<RendererBase> RendererSolid;
enum DRAWCMDMODE {
NORMAL,
CTRL_LN,
HILITE
};
DrawCmdList cmds;
wxString drawcmdset;
PointSystem* pointsys;
// for FitToViewPoint feature
bool setfitviewpoint;
int fitviewpoint_vmargin, fitviewpoint_hmargin;
// AGG
agg::rasterizer_scanline_aa<> rasterizer; ///< Scanline rasterizer
agg::scanline_p8 scanline; ///< Scanline container
void render_scanlines_aa_solid(RendererBase& rbase, agg::rgba rbga, bool affectboundaries = true);
void render_scanlines(RendererSolid& rsolid, bool affectboundaries = true);
int rendered_min_x, rendered_min_y, rendered_max_x, rendered_max_y; //bounding coord of rendered shapes
void update_rendered_bound_coords(bool rendered_fresh = false);
typedef agg::conv_transform<agg::path_storage> trans_path;
agg::path_storage m_path, b_path;
trans_path *rm_path, *rb_path;
agg::conv_curve<trans_path> *rm_curve;
void draw();
virtual void ConstructPathsAndCurves(agg::trans_affine& mtx, trans_path*& _rm_path, trans_path*& _rb_path, agg::conv_curve<trans_path>*& _rm_curve);
virtual void DoDraw( RendererBase& rbase, RendererPrimitives& rprim, RendererSolid& rsolid, agg::trans_affine& mtx );
virtual void Draw_Clear( RendererBase& rbase );
virtual void Draw_Draw( RendererBase& rbase, RendererPrimitives& rprim, RendererSolid& rsolid, agg::trans_affine& mtx, agg::rgba color );
bool refresh_called;
// set stuff to connect two drawing commands cmd1 and cmd2 such that
// cmd1 comes right before cmd2
virtual void ConnectSubsequentCmds (DrawCmd* cmd1, DrawCmd* cmd2);
virtual void AddDrawCmdToAGGPathStorage(DrawCmd* cmd, agg::path_storage& path, DRAWCMDMODE mode = NORMAL);
virtual std::vector< bool > PrepareC1ContData();
DECLARE_EVENT_TABLE()
};
namespace agg
{
class simple_polygon_vertex_source
{
public:
simple_polygon_vertex_source(const double* polygon, unsigned np,
bool roundoff = false,
bool close = true) :
m_polygon(polygon),
m_num_points(np),
m_vertex(0),
m_roundoff(roundoff),
m_close(close)
{
}
void close(bool f) { m_close = f; }
bool close() const { return m_close; }
void rewind(unsigned)
{
m_vertex = 0;
}
unsigned vertex(double* x, double* y)
{
if(m_vertex > m_num_points) return path_cmd_stop;
if(m_vertex == m_num_points)
{
++m_vertex;
return path_cmd_end_poly | (m_close ? path_flags_close : 0);
}
*x = m_polygon[m_vertex * 2];
*y = m_polygon[m_vertex * 2 + 1];
if(m_roundoff)
{
*x = floor(*x) + 0.5;
*y = floor(*y) + 0.5;
}
++m_vertex;
return (m_vertex == 1) ? path_cmd_move_to : path_cmd_line_to;
}
private:
const double* m_polygon;
unsigned m_num_points;
unsigned m_vertex;
bool m_roundoff;
bool m_close;
};
};
typedef agg::simple_polygon_vertex_source aggpolygon;

View File

@ -1,113 +0,0 @@
/*
* Copyright (c) 2007, ai-chan
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the ASSDraw3 Team nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY AI-CHAN ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL AI-CHAN BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#pragma once
// enum for IDs of menus
enum {
MENU_DUMMY = 200,
MENU_CLEAR,
MENU_PREVIEW,
MENU_TRANSFORM,
MENU_LIBRARY,
MENU_HELP,
MENU_RESETPERSPECTIVE,
MENU_SETTINGS,
MENU_UNDO,
MENU_REDO,
MENU_PASTE,
MENU_BGIMG_LOAD,
MENU_BGIMG_ALPHA,
MENU_BGIMG_REMOVE,
MENU_RECENTER,
MENU_TBAR,
MENU_REPOS_TOPLEFT,
MENU_REPOS_TOPRIGHT,
MENU_REPOS_CENTER,
MENU_REPOS_BOTLEFT,
MENU_REPOS_BOTRIGHT,
MENU_BGIMG_RECENTER,
MENU_REPOS_BGTOPLEFT,
MENU_REPOS_BGTOPRIGHT,
MENU_REPOS_BGCENTER,
MENU_REPOS_BGBOTLEFT,
MENU_REPOS_BGBOTRIGHT,
MENU_DRC_LNTOBEZ,
MENU_DRC_C1CONTBEZ,
MENU_DRC_BEZTOLN,
MENU_DRC_MOVE00,
MENU_TB_ALL,
MENU_TB_NONE,
MENU_TB_DOCK,
MENU_TB_UNDOCK,
MENU_TB_DRAW,
MENU_TB_MODE,
MENU_TB_BGIMG
};
// enum for modes (i.e. create m, b, l etc or normal mode)
// also use as tools IDs
enum MODE
{
MODE_ARR = 100,
MODE_M = 101,
MODE_N = 102,
MODE_L = 103,
MODE_B = 104,
MODE_S = 105,
MODE_P = 106,
MODE_C = 107,
MODE_DEL = 108,
MODE_SCALEROTATE = 109,
MODE_NUT_BILINEAR = 110
};
// enum for IDs of other tools on the toolbar
enum {
TB_CLEAR = 111,
TB_EDITSRC = 112,
TB_PREVIEW = 113,
TB_TRANSFORM = 114,
TB_HELP = 115,
TB_ZOOMSLIDER = 116,
TB_BGALPHA_SLIDER = 117
};
enum DRAGMODETOOL
{
DRAG_DWG = 120,
DRAG_BGIMG = 121,
DRAG_BOTH = 122
};
struct DRAGMODE
{
bool drawing;
bool bgimg;
DRAGMODE() { drawing = true, bgimg = false; }
DRAGMODE(bool d, bool b) { drawing = d, bgimg = b; }
};

View File

@ -1,94 +0,0 @@
/*
* Copyright (c) 2007, ai-chan
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the ASSDraw3 Team nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY AI-CHAN ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL AI-CHAN BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
///////////////////////////////////////////////////////////////////////////////
// Name: include_once.hpp
// Purpose: A header file that is included exactly once for the whole code
// (supposed to be included by assdraw.cpp only)
// Put must-define-exactly-once codes here
// Author: ai-chan
// Created: 08/26/06
// Copyright: (c) ai-chan
// Licence: 3-clause BSD
///////////////////////////////////////////////////////////////////////////////
// tooltips
const wxString TIPS_CLEAR = wxT("Clear the canvas and create a new drawing");
const wxString TIPS_EDITSRC = wxT("Edit the source");
const wxString TIPS_PREVIEW = wxT("Draw the shapes without enlarged points and control points");
const wxString TIPS_TRANSFORM = wxT("Transform the drawing using matrix transformation");
const wxString TIPS_LIBRARY = wxT("Shapes library");
const wxString TIPS_HELP = wxT("Help! Help!");
const wxString TIPS_PASTE = wxT("Depending on what's in the clipboard, import as drawing commands or background");
const wxString TIPS_UNDO = wxT("Undo last action");
const wxString TIPS_REDO = wxT("Redo last undo");
const wxString TIPS_ARR = wxT("Drag mode");
const wxString TIPS_M = wxT("Draw M mode (Close current shape and move the virtual pen to a new point)");
const wxString TIPS_N = wxT("Draw N mode (Same as M but doesn't close the shape)");
const wxString TIPS_L = wxT("Draw L mode (Straight line)");
const wxString TIPS_B = wxT("Draw B mode (Cubic Bezier curve)");
const wxString TIPS_S = wxT("Draw S mode (Spline)");
const wxString TIPS_P = wxT("Draw P mode (Extends a spline with another point)");
const wxString TIPS_C = wxT("Draw C mode (Close the last spline)");
const wxString TIPS_DEL = wxT("Delete mode");
const wxString TIPS_NUTB = wxT("Bilinear transformation mode: Drag the vertices to distort the shape; Dragging an edge moves two adjacent vertices together");
const wxString TIPS_SCALEROTATE = wxT("Scale/Rotate mode: Drag a vertex or an edge to rescale the shape; Right-drag to rotate");
const wxString TIPS_DWG = wxT("Right-dragging pans drawing, mousewheel zooms in/out drawing");
const wxString TIPS_BGIMG = wxT("Right-dragging pans background, mousewheel zooms in/out background");
const wxString TIPS_BOTH = wxT("Right-dragging pans drawing & background, mousewheel zooms in/out drawing & background");
const wxString TBNAME_DRAW = wxT("Canvas");
const wxString TBNAME_MODE = wxT("Drawing mode");
const wxString TBNAME_BGIMG = wxT("Background");
const wxString TBNAME_ZOOM = wxT("Zoom");
wxString ASSDrawTransformDlg::combo_templatesStrings[] = {
_("<Select>"),
_("Move 5 units down"),
_("Move 5 units right"),
_("Rotate 90\370 clockwise at (1, 2)"),
_("Rotate 90\370 counterclockwise at (-1, 2)"),
_("Rotate 180\370 at (0, 0)"),
_("Flip horizontally at X = 4"),
_("Flip vertically at Y = 3"),
_("Scale up horizontally by a factor of 2"),
_("Scale up vertically by a factor of 3")
};
int ASSDrawTransformDlg::combo_templatesCount = 10;
EightDouble ASSDrawTransformDlg::combo_templatesValues[] = {
{ 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f }, //<Select>
{ 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 5.0f }, //5 units down
{ 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 5.0f, 0.0f }, //5 units left
{ 0.0f, -1.0f, 1.0f, 0.0f, 1.0f, 2.0f, 1.0f, 2.0f }, //90 CW (1,2)
{ 0.0f, 1.0f, -1.0f, 0.0f, -1.0f, 2.0f, -1.0f, 2.0f }, //90 CCW, (-1,2)
{ -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f }, //180 (0,0)
{ -1.0f, 0.0f, 0.0f, 1.0f, 4.0f, 0.0f, 4.0f, 0.0f }, //Flip X = 4
{ 1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 3.0f, 0.0f, 3.0f }, //Flip Y = 3
{ 2.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f }, //Scale X * 2
{ 1.0f, 0.0f, 0.0f, 3.0f, 0.0f, 0.0f, 0.0f, 0.0f } //Scale Y * 3
};

View File

@ -1,265 +0,0 @@
/*
* Copyright (c) 2007, ai-chan
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the ASSDraw3 Team nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY AI-CHAN ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL AI-CHAN BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "assdraw.hpp"
#include "library.hpp"
#include <wx/clipbrd.h>
#if !defined(__WINDOWS__)
#include "xpm/res.h"
#endif
BEGIN_EVENT_TABLE(ASSDrawShapePreview, ASSDrawEngine)
EVT_SIZE(ASSDrawShapePreview::OnSize)
END_EVENT_TABLE()
ASSDrawShapePreview::ASSDrawShapePreview( wxWindow *parent, ASSDrawShapeLibrary *_shapelib, wxString initialcmds )
: ASSDrawEngine(parent, wxSIMPLE_BORDER)
{
shapelib = _shapelib;
if (ParseASS(initialcmds) > 0)
SetFitToViewPointOnNextPaint(5, 5);
cb = new wxCheckBox(this, wxID_ANY, _T(""));
}
void ASSDrawShapePreview::OnSize(wxSizeEvent& event)
{
return;
wxSize siz = event.GetSize();
if (shapelib->layout == HORIZONTAL)
SetSize(siz.x, siz.x);
else
SetSize(siz.y, siz.y);
SetFitToViewPointOnNextPaint(10, 10);
}
BEGIN_EVENT_TABLE(ASSDrawShapeLibrary, wxScrolledWindow)
EVT_SIZE(ASSDrawShapeLibrary::OnSize)
EVT_MENU_RANGE(MENU_RANGE_START, MENU_RANGE_END, ASSDrawShapeLibrary::OnPopupMenuClicked)
EVT_TOOL(TOOL_SAVE, ASSDrawShapeLibrary::SaveShapeFromCanvas)
EVT_TOOL_RANGE(TOOL_CHECK, TOOL_UNCHECK, ASSDrawShapeLibrary::CheckUncheckAllPreviews)
EVT_TOOL(TOOL_DELETE, ASSDrawShapeLibrary::DeleteChecked)
END_EVENT_TABLE()
ASSDrawShapeLibrary::ASSDrawShapeLibrary( wxWindow *parent, ASSDrawFrame *frame )
: wxScrolledWindow(parent, wxID_ANY)
{
m_frame = frame;
//sizer = NULL;
layout = VERTICAL;
wxToolBar *tbar = new wxToolBar(this, wxID_ANY, __DPDS__ , wxTB_HORIZONTAL | wxNO_BORDER | wxTB_FLAT | wxTB_NODIVIDER);
tbar->SetMargins(0, 3);
tbar->AddTool(TOOL_SAVE, _T("Save canvas"), wxBITMAP(add));
tbar->AddSeparator();
tbar->AddTool(TOOL_CHECK, _T("Select all"), wxBITMAP(check));
tbar->AddTool(TOOL_UNCHECK, _T("Select none"), wxBITMAP(uncheck));
tbar->AddTool(TOOL_DELETE, _T("Delete selected"), wxBITMAP(delcross));
libarea = new wxScrolledWindow(this, wxID_ANY, __DPDS__ , wxScrolledWindowStyle | wxSIMPLE_BORDER);
libarea->SetBackgroundColour(wxColour(0xFF, 0xFF, 0x99));
sizer = new wxFlexGridSizer(0, 1, 0, 0);
((wxFlexGridSizer*) sizer)->AddGrowableCol(0);
libarea->SetSizer(sizer);
libarea->SetScrollbars(20, 20, 50, 50);
libsizer = new wxFlexGridSizer(2, 1, 0, 0);
libsizer->AddGrowableCol(0);
libsizer->AddGrowableRow(1);
libsizer->Add(tbar, 0, wxBOTTOM, 2);
libsizer->Add(libarea,1,wxEXPAND);
tbar->Realize();
libsizer->Layout();
SetSizer(libsizer);
}
void ASSDrawShapeLibrary::OnSize(wxSizeEvent& event)
{
if (sizer == NULL || sizer->GetChildren().size() == 0) return;
wxSize siz = GetClientSize();
libsizer->SetDimension(0, 0, siz.x, siz.y);
UpdatePreviewDisplays();
}
ASSDrawShapePreview* ASSDrawShapeLibrary::AddShapePreview(wxString cmds, bool addtotop)
{
ASSDrawShapePreview *prev = new ASSDrawShapePreview(libarea, this, cmds);
prev->Connect(wxEVT_LEFT_DCLICK, wxMouseEventHandler(ASSDrawShapeLibrary::OnMouseLeftDClick), NULL, this);
prev->Connect(wxEVT_RIGHT_UP, wxMouseEventHandler(ASSDrawShapeLibrary::OnMouseRightClick), NULL, this);
ASSDrawFrame::wxColourToAggRGBA(m_frame->colors.library_shape, prev->rgba_shape);
if (addtotop)
sizer->Insert(0, prev, 1, wxEXPAND | wxTOP | wxLEFT | wxRIGHT, 5);
else
sizer->Add(prev, 1, wxEXPAND | wxTOP | wxLEFT | wxRIGHT, 5);
UpdatePreviewDisplays();
return prev;
}
void ASSDrawShapeLibrary::UpdatePreviewDisplays()
{
wxSize siz = GetClientSize();
int dim = siz.x - 15;
libarea->Show(false);
wxwxSizerItemListNode *node = sizer->GetChildren().GetFirst();
while (node != NULL)
{
ASSDrawShapePreview *shprvw = (ASSDrawShapePreview *) node->GetData()->GetWindow();
shprvw->SetSize(dim, dim);
sizer->SetItemMinSize(shprvw, dim - 20, dim - 20);
shprvw->SetFitToViewPointOnNextPaint(10, 10);
shprvw->Refresh();
node = node->GetNext();
}
sizer->Layout();
sizer->FitInside(libarea);
libarea->Show(true);
}
void ASSDrawShapeLibrary::OnMouseLeftDClick(wxMouseEvent &event)
{
ASSDrawShapePreview *preview = (ASSDrawShapePreview *) event.GetEventObject();
LoadToCanvas(preview);
}
void ASSDrawShapeLibrary::OnMouseRightClick(wxMouseEvent &event)
{
ASSDrawShapePreview *prev = (ASSDrawShapePreview *) event.GetEventObject();
if (prev && prev->shapelib == this)
{
activepreview = prev;
wxMenu *menu = new wxMenu;
wxMenuItem *menuload = new wxMenuItem(menu, MENU_LOAD, _T("Load to canvas"));
#ifdef __WINDOWS__
wxFont f = menuload->GetFont();
f.SetWeight(wxFONTWEIGHT_BOLD);
menuload->SetFont(f);
#endif
menu->Append(menuload);
//menu->Append(MENU_LOAD, _T("Load to canvas"))->GetFont().SetWeight(wxFONTWEIGHT_BOLD);
menu->Append(MENU_COPYCLIPBOARD, _T("Copy commands to clipboard"));
menu->Append(MENU_SAVECANVAS, _T("Save canvas here"));
wxMenu *submenu = new wxMenu;
submenu->Append(MENU_DELETE, _T("Confirm delete?"));
menu->Append(MENU_DUMMY, _T("Delete from library"), submenu);
PopupMenu(menu);
delete menu;
}
}
void ASSDrawShapeLibrary::OnPopupMenuClicked(wxCommandEvent &event)
{
int id = event.GetId();
switch(id)
{
case MENU_LOAD:
LoadToCanvas(activepreview);
break;
case MENU_COPYCLIPBOARD:
if (wxTheClipboard->Open())
{
if (wxTheClipboard->IsSupported( wxDF_TEXT ))
{
wxTheClipboard->SetData( new wxTextDataObject( activepreview->GenerateASS() ) );
}
wxTheClipboard->Close();
}
break;
case MENU_SAVECANVAS:
activepreview->ParseASS(m_frame->m_canvas->GenerateASS());
activepreview->SetFitToViewPointOnNextPaint();
activepreview->RefreshDisplay();
break;
case MENU_DELETE:
sizer->Detach(activepreview);
activepreview->Show(false);
activepreview->Destroy();
UpdatePreviewDisplays();
Refresh();
break;
}
}
void ASSDrawShapeLibrary::SaveShapeFromCanvas(wxCommandEvent& WXUNUSED(event))
{
AddShapePreview(m_frame->m_canvas->GenerateASS(), true);
}
void ASSDrawShapeLibrary::CheckUncheckAllPreviews(wxCommandEvent &event)
{
bool checked = event.GetId() == TOOL_CHECK;
wxwxSizerItemListNode *node = sizer->GetChildren().GetFirst();
while (node != NULL)
{
ASSDrawShapePreview *shprvw = (ASSDrawShapePreview *) node->GetData()->GetWindow();
shprvw->cb->SetValue(checked);
node = node->GetNext();
}
}
void ASSDrawShapeLibrary::DeleteChecked(wxCommandEvent& WXUNUSED(event))
{
wxwxSizerItemListNode *node = sizer->GetChildren().GetFirst();
while (node != NULL)
{
ASSDrawShapePreview *shprvw = (ASSDrawShapePreview *) node->GetData()->GetWindow();
if (shprvw->cb->GetValue())
{
sizer->Detach(shprvw);
shprvw->Show(false);
shprvw->Destroy();
}
node = node->GetNext();
}
UpdatePreviewDisplays();
Refresh();
}
std::vector< ASSDrawShapePreview *> ASSDrawShapeLibrary::GetShapePreviews()
{
std::vector< ASSDrawShapePreview *> out;
wxwxSizerItemListNode *node = sizer->GetChildren().GetFirst();
while (node != NULL)
{
ASSDrawShapePreview *shprvw = (ASSDrawShapePreview *) node->GetData()->GetWindow();
out.push_back(shprvw);
node = node->GetNext();
}
return out;
}
void ASSDrawShapeLibrary::LoadToCanvas(ASSDrawShapePreview *preview)
{
m_frame->m_canvas->AddUndo(_T("Load shape from library"));
m_frame->m_canvas->ParseASS(preview->GenerateASS());
m_frame->m_canvas->RefreshDisplay();
m_frame->m_canvas->RefreshUndocmds();
m_frame->UpdateFrameUI();
}

View File

@ -1,88 +0,0 @@
/*
* Copyright (c) 2007, ai-chan
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the ASSDraw3 Team nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY AI-CHAN ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL AI-CHAN BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#pragma once
#include "engine.hpp"
#include <wx/scrolwin.h>
class ASSDrawFrame;
class ASSDrawShapeLibrary;
enum LIBLAYOUT { VERTICAL, HORIZONTAL };
enum {
MENU_RANGE_START = 450,
MENU_LOAD,
MENU_COPYCLIPBOARD,
MENU_SAVECANVAS,
MENU_DELETE,
MENU_RANGE_END,
TOOL_SAVE,
TOOL_CHECK,
TOOL_UNCHECK,
TOOL_DELETE
};
class ASSDrawShapePreview : public ASSDrawEngine
{
protected:
ASSDrawShapePreview( wxWindow *parent, ASSDrawShapeLibrary *shapelib, wxString initialcmds = _T(""));
virtual void OnSize(wxSizeEvent& event);
ASSDrawShapeLibrary *shapelib;
wxCheckBox *cb;
DECLARE_EVENT_TABLE()
friend class ASSDrawShapeLibrary;
};
class ASSDrawShapeLibrary : public wxScrolledWindow
{
public:
ASSDrawShapeLibrary( wxWindow *parent, ASSDrawFrame *frame );
virtual ASSDrawShapePreview* AddShapePreview(wxString cmds, bool addtotop = false);
virtual void OnSize(wxSizeEvent& event);
virtual void OnMouseLeftDClick(wxMouseEvent &event);
virtual void OnMouseRightClick(wxMouseEvent &event);
virtual void OnPopupMenuClicked(wxCommandEvent &event);
virtual void SaveShapeFromCanvas(wxCommandEvent& WXUNUSED(event));
virtual void CheckUncheckAllPreviews(wxCommandEvent &event);
virtual void DeleteChecked(wxCommandEvent& WXUNUSED(event));
virtual void UpdatePreviewDisplays();
virtual std::vector< ASSDrawShapePreview *> GetShapePreviews();
virtual void LoadToCanvas(ASSDrawShapePreview *preview);
wxScrolledWindow* libarea;
wxFlexGridSizer *libsizer;
wxSizer* sizer;
LIBLAYOUT layout;
protected:
ASSDrawFrame *m_frame;
ASSDrawShapePreview *activepreview;
DECLARE_EVENT_TABLE()
};

View File

@ -1,15 +0,0 @@
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by assdraw.rc
//
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 105
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1000
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif

View File

@ -1,223 +0,0 @@
/*
* Copyright (c) 2007, ai-chan
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the ASSDraw3 Team nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY AI-CHAN ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL AI-CHAN BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
///////////////////////////////////////////////////////////////////////////////
// Name: settings.cpp
// Purpose: settings property grid
// Author: ai-chan
// Created: 08/26/06
// Copyright: (c) ai-chan
// Licence: 3-clause BSD
///////////////////////////////////////////////////////////////////////////////
#include "assdraw.hpp"
#include "settings.hpp"
DEFINE_EVENT_TYPE(wxEVT_SETTINGS_CHANGED)
// ----------------------------------------------------------------------------
// ASSDrawSettingsDialog
// ----------------------------------------------------------------------------
ASSDrawSettingsDialog::ASSDrawSettingsDialog(wxWindow *parent, ASSDrawFrame *frame, int id)
: wxPanel(parent, id)
{
m_frame = frame;
propgrid = NULL;
}
void ASSDrawSettingsDialog::Init()
{
propgrid = new wxPropertyGrid(this,
wxID_ANY,
wxDefaultPosition,
wxDefaultSize,
//wxPG_BOLD_MODIFIED |
//wxPG_SPLITTER_AUTO_CENTER |
//wxPG_AUTO_SORT |
//wxPG_HIDE_MARGIN | wxPG_STATIC_SPLITTER |
wxPG_TOOLTIPS |
//wxPG_NOCATEGORIES |
wxTAB_TRAVERSAL //|
//wxSUNKEN_BORDER
);
#define APPENDCOLOURPROP(pgid, label, color) pgid = propgrid->Append(new wxColourProperty(label, wxPG_LABEL, color));
#define APPENDUINTPROP(pgid, label, uint) \
pgid = propgrid->Append(new wxUIntProperty(label, wxPG_LABEL, uint) ); \
propgrid->SetPropertyValidator( pgid, validator );
#define APPENDBOOLPROP(pgid, label, boolvar) \
pgid = propgrid->Append(new wxBoolProperty (label, wxPG_LABEL, boolvar ) ); \
propgrid->SetPropertyAttribute( pgid, wxPG_BOOL_USE_CHECKBOX, (long)1 );
wxLongPropertyValidator validator(0x0,0xFF);
propgrid->Append(new wxPropertyCategory(_T("Appearance"),wxPG_LABEL) );
APPENDCOLOURPROP(colors_canvas_bg_pgid, _T("Canvas"), m_frame->colors.canvas_bg)
APPENDCOLOURPROP(colors_canvas_shape_normal_pgid, _T("Drawing"), m_frame->colors.canvas_shape_normal)
APPENDUINTPROP(alphas_canvas_shape_normal_pgid, _T("Drawing @"), m_frame->alphas.canvas_shape_normal)
APPENDCOLOURPROP(colors_canvas_shape_preview_pgid, _T("Preview"), m_frame->colors.canvas_shape_preview)
APPENDUINTPROP(alphas_canvas_shape_preview_pgid, _T("Preview @"), m_frame->alphas.canvas_shape_preview)
APPENDCOLOURPROP(colors_canvas_shape_outline_pgid, _T("Outline"), m_frame->colors.canvas_shape_outline)
APPENDUINTPROP(alphas_canvas_shape_outline_pgid, _T("Outline @"), m_frame->alphas.canvas_shape_outline)
APPENDCOLOURPROP(colors_canvas_shape_guideline_pgid, _T("Control lines"), m_frame->colors.canvas_shape_guideline)
APPENDUINTPROP(alphas_canvas_shape_guideline_pgid, _T("Control lines @"), m_frame->alphas.canvas_shape_guideline)
APPENDCOLOURPROP(colors_canvas_shape_mainpoint_pgid, _T("Points"), m_frame->colors.canvas_shape_mainpoint)
APPENDUINTPROP(alphas_canvas_shape_mainpoint_pgid, _T("Points @"), m_frame->alphas.canvas_shape_mainpoint)
APPENDCOLOURPROP(colors_canvas_shape_controlpoint_pgid, _T("Control points"), m_frame->colors.canvas_shape_controlpoint)
APPENDUINTPROP(alphas_canvas_shape_controlpoint_pgid, _T("Control points @"), m_frame->alphas.canvas_shape_controlpoint)
APPENDCOLOURPROP(colors_canvas_shape_selectpoint_pgid, _T("Selected points"), m_frame->colors.canvas_shape_selectpoint)
APPENDUINTPROP(alphas_canvas_shape_selectpoint_pgid, _T("Selected points @"), m_frame->alphas.canvas_shape_selectpoint)
APPENDCOLOURPROP(colors_library_libarea_pgid, _T("Library"), m_frame->colors.library_libarea)
APPENDCOLOURPROP(colors_library_shape_pgid, _T("Library shapes"), m_frame->colors.library_shape)
APPENDCOLOURPROP(colors_origin_pgid, _T("Origin"), m_frame->colors.origin)
APPENDUINTPROP(sizes_origincross_pgid, _T("Origin cross size"), m_frame->sizes.origincross)
APPENDCOLOURPROP(colors_ruler_h_pgid, _T("H ruler"), m_frame->colors.ruler_h)
APPENDCOLOURPROP(colors_ruler_v_pgid, _T("V ruler"), m_frame->colors.ruler_v)
propgrid->Append(new wxPropertyCategory(_T("Behaviors"),wxPG_LABEL) );
APPENDBOOLPROP(behaviors_capitalizecmds_pgid, _T("Capitalize commands"), m_frame->behaviors.capitalizecmds);
APPENDBOOLPROP(behaviors_autoaskimgopac_pgid, _T("Ask for image opacity"), m_frame->behaviors.autoaskimgopac);
APPENDBOOLPROP(behaviors_parse_spc_pgid, _T("Parse S/P/C"), m_frame->behaviors.parse_spc);
APPENDBOOLPROP(behaviors_nosplashscreen_pgid, _T("No splash screen"), m_frame->behaviors.nosplashscreen);
APPENDBOOLPROP(behaviors_confirmquit_pgid, _T("Confirm quit"), m_frame->behaviors.confirmquit);
wxFlexGridSizer *sizer = new wxFlexGridSizer(2, 1, 0, 0);
sizer->AddGrowableCol(0);
sizer->AddGrowableRow(0);
sizer->Add(propgrid, 1, wxEXPAND);
wxBoxSizer *bsizer = new wxBoxSizer(wxHORIZONTAL);
wxButton *abutton = new wxButton(this, wxID_ANY, _T("Apply"));
abutton->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(ASSDrawSettingsDialog::OnSettingsApplyButtonClicked), NULL, this);
bsizer->Add(abutton, 2, wxEXPAND);
wxButton *rbutton = new wxButton(this, wxID_ANY, _T("Revert"));
rbutton->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(ASSDrawSettingsDialog::OnSettingsRevertButtonClicked), NULL, this);
bsizer->Add(rbutton, 1, wxEXPAND);
bsizer->Layout();
sizer->Add(bsizer, 1, wxEXPAND);
sizer->Layout();
SetSizer(sizer);
}
ASSDrawSettingsDialog::~ASSDrawSettingsDialog()
{
if (propgrid) propgrid->Clear();
}
void ASSDrawSettingsDialog::OnSettingsApplyButtonClicked(wxCommandEvent &event)
{
wxButton *button = (wxButton *) event.GetEventObject();
//wxPropertyGrid *propgrid = (wxPropertyGrid *) button->GetClientData();
if (propgrid == NULL) return;
#define PARSECOLOR(color, pgid) \
{ \
wxVariant variant = propgrid->GetPropertyValue(pgid); \
color = *wxGetVariantCast(variant,wxColour); \
}
#define PARSE(ptr, pgid) propgrid->GetPropertyValue(pgid).Convert(ptr);
PARSECOLOR(m_frame->colors.canvas_bg, colors_canvas_bg_pgid)
PARSECOLOR(m_frame->colors.canvas_shape_controlpoint, colors_canvas_shape_controlpoint_pgid)
PARSECOLOR(m_frame->colors.canvas_shape_guideline, colors_canvas_shape_guideline_pgid)
PARSECOLOR(m_frame->colors.canvas_shape_mainpoint, colors_canvas_shape_mainpoint_pgid)
PARSECOLOR(m_frame->colors.canvas_shape_normal, colors_canvas_shape_normal_pgid)
PARSECOLOR(m_frame->colors.canvas_shape_outline, colors_canvas_shape_outline_pgid)
PARSECOLOR(m_frame->colors.canvas_shape_preview, colors_canvas_shape_preview_pgid)
PARSECOLOR(m_frame->colors.canvas_shape_selectpoint, colors_canvas_shape_selectpoint_pgid)
PARSECOLOR(m_frame->colors.library_libarea, colors_library_libarea_pgid)
PARSECOLOR(m_frame->colors.library_shape, colors_library_shape_pgid)
PARSECOLOR(m_frame->colors.origin, colors_origin_pgid)
PARSECOLOR(m_frame->colors.ruler_h, colors_ruler_h_pgid)
PARSECOLOR(m_frame->colors.ruler_v, colors_ruler_v_pgid)
PARSE(&m_frame->alphas.canvas_shape_controlpoint, alphas_canvas_shape_controlpoint_pgid)
PARSE(&m_frame->alphas.canvas_shape_guideline, alphas_canvas_shape_guideline_pgid)
PARSE(&m_frame->alphas.canvas_shape_mainpoint, alphas_canvas_shape_mainpoint_pgid)
PARSE(&m_frame->alphas.canvas_shape_normal, alphas_canvas_shape_normal_pgid)
PARSE(&m_frame->alphas.canvas_shape_outline, alphas_canvas_shape_outline_pgid)
PARSE(&m_frame->alphas.canvas_shape_preview, alphas_canvas_shape_preview_pgid)
PARSE(&m_frame->alphas.canvas_shape_selectpoint, alphas_canvas_shape_selectpoint_pgid)
PARSE(&m_frame->sizes.origincross, sizes_origincross_pgid)
PARSE(&m_frame->behaviors.autoaskimgopac, behaviors_autoaskimgopac_pgid)
PARSE(&m_frame->behaviors.capitalizecmds, behaviors_capitalizecmds_pgid)
PARSE(&m_frame->behaviors.parse_spc, behaviors_parse_spc_pgid)
PARSE(&m_frame->behaviors.nosplashscreen, behaviors_nosplashscreen_pgid)
PARSE(&m_frame->behaviors.confirmquit, behaviors_confirmquit_pgid)
wxCommandEvent evento( wxEVT_SETTINGS_CHANGED, event.GetId() );
evento.SetEventObject( button );
m_frame->GetEventHandler()->ProcessEvent( evento );
}
void ASSDrawSettingsDialog::OnSettingsRevertButtonClicked(wxCommandEvent &event)
{
RefreshSettingsDisplay();
}
void ASSDrawSettingsDialog::RefreshSettingsDisplay()
{
if (propgrid == NULL) return;
#define UPDATESETTING(value, pgid) propgrid->SetPropertyValue(pgid, value);
UPDATESETTING(m_frame->colors.canvas_bg, colors_canvas_bg_pgid)
UPDATESETTING(m_frame->colors.canvas_shape_controlpoint, colors_canvas_shape_controlpoint_pgid)
UPDATESETTING(m_frame->colors.canvas_shape_guideline, colors_canvas_shape_guideline_pgid)
UPDATESETTING(m_frame->colors.canvas_shape_mainpoint, colors_canvas_shape_mainpoint_pgid)
UPDATESETTING(m_frame->colors.canvas_shape_normal, colors_canvas_shape_normal_pgid)
UPDATESETTING(m_frame->colors.canvas_shape_outline, colors_canvas_shape_outline_pgid)
UPDATESETTING(m_frame->colors.canvas_shape_preview, colors_canvas_shape_preview_pgid)
UPDATESETTING(m_frame->colors.canvas_shape_selectpoint, colors_canvas_shape_selectpoint_pgid)
UPDATESETTING(m_frame->colors.library_libarea, colors_library_libarea_pgid)
UPDATESETTING(m_frame->colors.library_shape, colors_library_shape_pgid)
UPDATESETTING(m_frame->colors.origin, colors_origin_pgid)
UPDATESETTING(m_frame->colors.ruler_h, colors_ruler_h_pgid)
UPDATESETTING(m_frame->colors.ruler_v, colors_ruler_v_pgid)
UPDATESETTING(m_frame->alphas.canvas_shape_controlpoint, alphas_canvas_shape_controlpoint_pgid)
UPDATESETTING(m_frame->alphas.canvas_shape_guideline, alphas_canvas_shape_guideline_pgid)
UPDATESETTING(m_frame->alphas.canvas_shape_mainpoint, alphas_canvas_shape_mainpoint_pgid)
UPDATESETTING(m_frame->alphas.canvas_shape_normal, alphas_canvas_shape_normal_pgid)
UPDATESETTING(m_frame->alphas.canvas_shape_outline, alphas_canvas_shape_outline_pgid)
UPDATESETTING(m_frame->alphas.canvas_shape_preview, alphas_canvas_shape_preview_pgid)
UPDATESETTING(m_frame->alphas.canvas_shape_selectpoint, alphas_canvas_shape_selectpoint_pgid)
UPDATESETTING(m_frame->sizes.origincross, sizes_origincross_pgid)
UPDATESETTING(m_frame->behaviors.capitalizecmds, behaviors_capitalizecmds_pgid)
UPDATESETTING(m_frame->behaviors.autoaskimgopac, behaviors_autoaskimgopac_pgid)
UPDATESETTING(m_frame->behaviors.parse_spc, behaviors_parse_spc_pgid)
UPDATESETTING(m_frame->behaviors.nosplashscreen, behaviors_nosplashscreen_pgid)
UPDATESETTING(m_frame->behaviors.confirmquit, behaviors_confirmquit_pgid)
}

View File

@ -1,121 +0,0 @@
/*
* Copyright (c) 2007, ai-chan
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the ASSDraw3 Team nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY AI-CHAN ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL AI-CHAN BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#pragma once
#include "_common.hpp"
#include <wx/propgrid/propgrid.h>
#include <wx/propgrid/advprops.h>
class ASSDrawFrame;
DECLARE_EVENT_TYPE(wxEVT_SETTINGS_CHANGED, -1)
typedef wxPGProperty* wxPGId;
class ASSDrawSettingsDialog : public wxPanel
{
public:
ASSDrawFrame* m_frame;
ASSDrawSettingsDialog( wxWindow *parent, ASSDrawFrame *frame, int id = wxID_ANY );
virtual ~ASSDrawSettingsDialog();
virtual void Init();
virtual void OnSettingsApplyButtonClicked(wxCommandEvent &event);
virtual void OnSettingsRevertButtonClicked(wxCommandEvent &event);
virtual void RefreshSettingsDisplay();
wxPGId colors_canvas_bg_pgid;
wxPGId colors_canvas_shape_normal_pgid;
wxPGId colors_canvas_shape_preview_pgid;
wxPGId colors_canvas_shape_outline_pgid;
wxPGId colors_canvas_shape_guideline_pgid;
wxPGId colors_canvas_shape_mainpoint_pgid;
wxPGId colors_canvas_shape_controlpoint_pgid;
wxPGId colors_canvas_shape_selectpoint_pgid;
wxPGId colors_library_shape_pgid;
wxPGId colors_library_libarea_pgid;
wxPGId colors_origin_pgid;
wxPGId colors_ruler_h_pgid;
wxPGId colors_ruler_v_pgid;
wxPGId alphas_canvas_shape_normal_pgid;
wxPGId alphas_canvas_shape_preview_pgid;
wxPGId alphas_canvas_shape_outline_pgid;
wxPGId alphas_canvas_shape_guideline_pgid;
wxPGId alphas_canvas_shape_mainpoint_pgid;
wxPGId alphas_canvas_shape_controlpoint_pgid;
wxPGId alphas_canvas_shape_selectpoint_pgid;
wxPGId sizes_origincross_pgid;
wxPGId behaviors_capitalizecmds_pgid;
wxPGId behaviors_autoaskimgopac_pgid;
wxPGId behaviors_parse_spc_pgid;
wxPGId behaviors_nosplashscreen_pgid;
wxPGId behaviors_confirmquit_pgid;
wxPropertyGrid *propgrid;
//DECLARE_EVENT_TABLE()
};
class wxLongPropertyValidator : public wxValidator
{
public:
wxLongPropertyValidator( const int min, const int max )
: wxValidator()
{
m_min = min, m_max = max;
}
virtual wxObject* Clone() const
{
return new wxLongPropertyValidator( m_min, m_max );
}
virtual bool Validate(wxWindow* WXUNUSED(parent))
{
wxTextCtrl* tc = wxDynamicCast(GetWindow(), wxTextCtrl);
wxCHECK_MSG(tc, true, wxT("validator window must be wxTextCtrl"));
wxString val = tc->GetValue();
long valint = 0;
val.ToLong(&valint);
if (valint < m_min) valint = m_min;
if (valint > m_max) valint = m_max;
tc->SetValue(wxString::Format(_T("%d"), valint));
return true;
}
private:
int m_min, m_max;
};

View File

@ -1,58 +0,0 @@
#!/usr/bin/perl
###########################
# t-stringifier.pl - replaces "strings" with _T("strings")
#
# Usage: t-stringifier.pl file1 [file2 [file...]]
# NOTE: changes existing files in place so backup stuff or rewrite the script
# (more specifically comment out the rename() call at the end of the main loop)
# if you're paranoid.
#
# Written by Karl Blomster 2008
# This script is in the public domain.
###########################
use warnings;
use strict;
my @infiles = @ARGV;
foreach my $infile (@infiles) {
my $outfile = $infile . ".out";
open(INFILE, "<", $infile) or die("Couldn't open $infile for reading: $!");
open(OUTFILE, ">", $outfile) or die("Couldn't open $outfile for writing: $!");
print("Processing: $infile \n");
while (<INFILE>) {
print OUTFILE $_ and next() if (m!^#\s*include!);
my $line = $_;
$line =~ s/(_T\(|_\(|wxT\()?"(.*?)(?<!\\)"(\))?/replacementstring($1,$2,$3)/eg;
print OUTFILE $line;
}
close(OUTFILE);
close(INFILE);
rename($outfile,$infile) or die("Couldn't overwrite ${infile}: $!");
}
sub replacementstring {
my ($pre, $string, $post) = @_;
if ($pre) {
if ($pre eq "_(") { return( qq!_("${string}")! ); }
else { return( qq!_T("${string}")! ); }
}
elsif ($post) {
return( qq!_T("${string}"))! );
}
else {
return( qq!_T("${string}")! );
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

View File

@ -1,127 +0,0 @@
#include "AGGWindow.h"
#include "agg_rendering_buffer.h"
#include "agg_pixfmt_rgb.h"
#include <wx/dcclient.h>
namespace GUI {
BEGIN_EVENT_TABLE(AGGWindow, wxWindow)
EVT_PAINT(AGGWindow::onPaint)
EVT_SIZE(AGGWindow::onSize)
EVT_ERASE_BACKGROUND(AGGWindow::onEraseBackground)
END_EVENT_TABLE()
AGGWindow::AGGWindow(wxWindow* parent, wxWindowID id,
const wxPoint& pos, const wxSize& size, long style):
wxWindow(parent, id, pos, size, style, wxT("AGGWindow")),
bitmap(NULL) {
}
void AGGWindow::init(const int width, const int height) {
memDC.SelectObject(wxNullBitmap);
delete bitmap;
int ncheight = height, ncwidth = width;
if (ncwidth < 1) ncwidth = 1;
if (ncheight < 1) ncheight = 1;
bitmap = new wxBitmap(ncwidth, ncheight, PixelFormat::wxWidgetsType::BitsPerPixel);
// Draw the bitmap
attachAndDraw();
memDC.SelectObject(*bitmap);
// Request a full redraw of the window
Refresh(false);
}
AGGWindow::~AGGWindow() {
memDC.SelectObject(wxNullBitmap);
delete bitmap;
}
void AGGWindow::attachAndDraw() {
// Get raw access to the wxWidgets bitmap -- this locks the pixels and
// unlocks on destruction.
PixelData data(*bitmap);
assert(data);
#if 1
// This cast looks like it is ignoring byte-ordering, but the
// pixel format already explicitly handles that.
assert(data.GetPixels().IsOk());
wxAlphaPixelFormat::ChannelType* pd = (wxAlphaPixelFormat::ChannelType*) &data.GetPixels().Data();
// wxWidgets always returns a pointer to the first row of pixels, whether
// that is stored at the beginning of the buffer (stride > 0) or at the
// end of the buffer (stride < 0). AGG always wants a pointer to the
// beginning of the buffer, no matter what the stride. (AGG does handle
// negative strides correctly.)
// Upshot: if the stride is negative, rewind the pointer from the end of
// the buffer to the beginning.
const int stride = data.GetRowStride();
if (stride < 0)
pd += (data.GetHeight() - 1) * stride;
rBuf.attach(pd, data.GetWidth(), data.GetHeight(), stride);
// Call the user code to actually draw.
draw();
#else
PixelData::Iterator p(data);
// we draw a (10, 10)-(20, 20) rect manually using the given r, g, b
p.Offset(data, 10, 10);
for ( int y = 0; y < 10; ++y )
{
PixelData::Iterator rowStart = p;
for ( int x = 0; x < 10; ++x, ++p )
{
p.Red() = 255;
p.Green() = 0;
p.Blue() = 255;
}
p = rowStart;
p.OffsetY(data, 1);
}
#endif
}
void AGGWindow::onSize(wxSizeEvent& event) {
const wxSize size = GetClientSize();
if (bitmap && size.GetWidth() == bitmap->GetWidth() && size.GetHeight() == bitmap->GetHeight())
return;
init(size.GetWidth(), size.GetHeight());
}
void AGGWindow::onPaint(wxPaintEvent& event) {
wxPaintDC dc(this);
wxCoord width, height;
dc.GetSize(&width, &height);
if (!bitmap || bitmap->GetWidth() != width || bitmap->GetHeight() != height)
init(width, height);
// Iterate over regions needing repainting
wxRegionIterator regions(GetUpdateRegion());
wxRect rect;
while (regions) {
rect = regions.GetRect();
dc.Blit(rect.x, rect.y, rect.width, rect.height, &memDC, rect.x, rect.y);
++regions;
}
}
void AGGWindow::onEraseBackground(wxEraseEvent& WXUNUSED(event)) {
// Do nothing to "avoid flashing in MSW" Grr.
}
}

View File

@ -1,68 +0,0 @@
#ifndef WX_AGG_WINDOW_H
#define WX_AGG_WINDOW_H
#include "PixelFormatConvertor.h"
#include <wx/bitmap.h>
#include <wx/rawbmp.h>
#include <wx/window.h>
#include <wx/dcmemory.h>
#include "agg_rendering_buffer.h"
namespace GUI {
/// A simple widget that displays a bitmap that AGG can draw on.
/// It reallocates the bitmap so that it always is the current size of the
/// entire panel and calls the virtual method draw() to draw to the bitmap.
/// This should be useable anywhere a wxWindow can be, e.g. in actual windows,
/// buttons, etc.
class AGGWindow: public wxWindow {
public:
/// Create an AGGWindow. Defaults are taken from wxWindow::wxWindow(), see
/// that documentation for more information.
AGGWindow(wxWindow* parent, wxWindowID id = wxID_ANY,
const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
long style = wxTAB_TRAVERSAL);
/// Clean up resources held
virtual ~AGGWindow();
protected:
/// The conversion between wxWidgets' pixel format and AGG's pixel format
typedef PixelFormatConvertor<wxNativePixelFormat> PixelFormat;
/// The wxWidgets "pixel data" type, an accessor to the raw pixels
typedef wxPixelData<wxBitmap, PixelFormat::wxWidgetsType> PixelData;
/// Create the bitmap given the current size.
void init(const int width, const int height);
/// Attach the AGG rendering buffer to the bitmap and call the user draw() code.
void attachAndDraw();
/// Paint the bitmap onto the panel.
void onPaint(wxPaintEvent& event);
/// Resize the bitmap to match the window.
void onSize(wxSizeEvent& event);
/// Handle the erase-background event.
void onEraseBackground(wxEraseEvent& event);
/// Draw into the bitmap using AGG.
virtual void draw() = 0;
wxBitmap* bitmap; ///< wxWidgets bitmap for AGG to draw into
wxMemoryDC memDC; ///< Memory "device context" for drawing the bitmap
agg::rendering_buffer rBuf; ///< AGG's rendering buffer, pointing into the bitmap
DECLARE_EVENT_TABLE() /// Allocate wxWidgets storage for event handlers
};
}
#endif

View File

@ -1,8 +0,0 @@
AM_CXXFLAGS = @WX_CPPFLAGS@ @LIBAGG_CFLAGS@
noinst_LIBRARIES = libaggwindow.a
libaggwindow_a_SOURCES = \
AGGWindow.cpp \
AGGWindow.h \
PixelFormatConvertor.h

View File

@ -1,117 +0,0 @@
/*
* Copyright (c) 2007, ai-chan
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the ASSDraw3 Team nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY AI-CHAN ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL AI-CHAN BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef WX_AGG_PIXEL_FORMAT_CONVERTOR_H
#define WX_AGG_PIXEL_FORMAT_CONVERTOR_H
#include "agg_pixfmt_rgb.h"
#include "agg_pixfmt_rgba.h"
namespace {
/// Given a particular combination of channel type, bits per pixel and
/// channel indices, return the AGG format that matches.
/// The actual template specializations that follow give the actual types,
/// and using a combination of parameters that are not listed will give
/// a compile-time error.
template <typename Channel, int bitsPerPixel, int r, int g, int b, int a>
struct wxWidgetsToAGGHelper {
//empty
};
/// 24-bit RGB
template <> struct wxWidgetsToAGGHelper<unsigned char, 24, 0, 1, 2, -1> {
typedef agg::pixfmt_rgb24 format;
};
/// 24-bit BGR
template <> struct wxWidgetsToAGGHelper<unsigned char, 24, 2, 1, 0, -1> {
typedef agg::pixfmt_bgr24 format;
};
/// 32-bit RGB, alpha unused but stored as ARGB.
template <> struct wxWidgetsToAGGHelper<unsigned char, 32, 1, 2, 3, -1> {
typedef agg::pixfmt_argb32 format;
};
/// 32-bit RGB, alpha unused but stored as RGBA.
template <> struct wxWidgetsToAGGHelper<unsigned char, 32, 0, 1, 2, -1> {
typedef agg::pixfmt_rgba32 format;
};
/// 32-bit BGR, alpha unused but stored as ABGR.
template <> struct wxWidgetsToAGGHelper<unsigned char, 32, 3, 2, 1, -1> {
typedef agg::pixfmt_abgr32 format;
};
/// 32-bit BGR, alpha unused but stored as BGRA.
template <> struct wxWidgetsToAGGHelper<unsigned char, 32, 2, 1, 0, -1> {
typedef agg::pixfmt_bgra32 format;
};
/// 32-bit RGBA
template <> struct wxWidgetsToAGGHelper<unsigned char, 32, 0, 1, 2, 3> {
typedef agg::pixfmt_rgba32 format;
};
/// 32-bit BGRA
template <> struct wxWidgetsToAGGHelper<unsigned char, 32, 2, 1, 0, 3> {
typedef agg::pixfmt_bgra32 format;
};
/// 32-bit ARGB
template <> struct wxWidgetsToAGGHelper<unsigned char, 32, 1, 2, 3, 0> {
typedef agg::pixfmt_argb32 format;
};
/// 32-bit ABGR
template <> struct wxWidgetsToAGGHelper<unsigned char, 32, 3, 2, 1, 0> {
typedef agg::pixfmt_abgr32 format;
};
}
namespace GUI {
/// Convert between a wxWidgets pixel format class and an AGG pixel format class.
/// Usage examples:
/// PixelFormatConvertor<wxNativePixelFormat>::AGGType or
/// PixelFormatConvertor<wxAlphaPixelFormat>::AGGType.
template <typename wxWidgetsPixelFormat>
class PixelFormatConvertor {
public:
typedef wxWidgetsPixelFormat wxWidgetsType;
// Break out the wxWidgets parameters and feed to the helper class.
typedef typename wxWidgetsToAGGHelper<typename wxWidgetsPixelFormat::ChannelType,
wxWidgetsPixelFormat::BitsPerPixel,
wxWidgetsPixelFormat::RED,
wxWidgetsPixelFormat::GREEN,
wxWidgetsPixelFormat::BLUE,
wxWidgetsPixelFormat::ALPHA>::format AGGType;
};
}
#endif

View File

@ -1,4 +0,0 @@
noinst_LIBRARIES = libres.a
libres_a_SOURCES = res.cpp res.h

View File

@ -1,24 +0,0 @@
/* XPM */
const char *add_xpm[] = {
/* columns rows colors chars-per-pixel */
"16 15 3 1",
" c black",
". c #99999999FFFF",
"X c None",
/* pixels */
"XXXXX XXXXX",
"XXXXX .... XXXXX",
"XXXXX .... XXXXX",
"XXXXX .... XXXXX",
"X .... X",
"X ............ X",
"X ............ X",
"X ............ X",
"X ............ X",
"X .... X",
"XXXXX .... XXXXX",
"XXXXX .... XXXXX",
"XXXXX .... XXXXX",
"XXXXX XXXXX",
"XXXXXXXXXXXXXXXX"
};

View File

@ -1,292 +0,0 @@
/* XPM */
const char *appico_xpm[] = {
/* columns rows colors chars-per-pixel */
"32 32 254 2",
" c black",
". c #121508",
"X c #1E1913",
"o c #222200",
"O c #252817",
"+ c #313117",
"@ c #15152A",
"# c #2A002A",
"$ c #3F003F",
"% c #3F1F3F",
"& c #332023",
"* c #26392C",
"= c #333223",
"- c #322E36",
"; c #2C3939",
": c #4D313F",
"> c #55383E",
", c #555500",
"< c #464F2B",
"1 c #54542A",
"2 c #4D4E3F",
"3 c #575937",
"4 c #5E672D",
"5 c #6D7029",
"6 c #362B56",
"7 c #363571",
"8 c #4C355F",
"9 c #583B55",
"0 c #443579",
"q c #3C4575",
"w c #4A4757",
"e c #644D5D",
"r c #6A5D5A",
"t c #50624A",
"y c #626448",
"u c #626D51",
"i c #787A55",
"p c #554875",
"a c #67537A",
"s c #70517F",
"d c #756C60",
"f c #7F7C65",
"g c #626D75",
"h c #637479",
"j c #AB713F",
"k c #AF7D4C",
"l c #8F7662",
"z c #9C7277",
"x c #E76F5B",
"c c #81992A",
"v c #D3B80F",
"b c #EFBE0F",
"n c #C1A821",
"m c #F5CE11",
"M c #DDCC22",
"N c #90805C",
"B c #97A447",
"V c #8BBB4C",
"C c #91B648",
"Z c #99AA55",
"A c #91BB5D",
"S c #A5B859",
"D c #8B8F65",
"F c #959469",
"G c #878B7D",
"H c #989970",
"J c #AB956B",
"K c #BABC6D",
"L c #ACA977",
"P c #B8B376",
"I c #C7814B",
"U c #EB8D50",
"Y c #DB8A69",
"T c #DAA87A",
"R c #A0C64B",
"E c #BEC254",
"W c #A9D058",
"Q c #AEC96B",
"! c #AAD071",
"~ c #D1D647",
"^ c #DBDF5C",
"/ c #CCE252",
"( c #D8ED5F",
") c #E5EC56",
"_ c #E2F35A",
"` c #FEFE59",
"' c #CECF6F",
"] c #C6D460",
"[ c #D7DC65",
"{ c #CFD47E",
"} c #D5D879",
"| c #CAE365",
" . c #D3EB6C",
".. c #D0EA72",
"X. c #E3E864",
"o. c #EBF268",
"O. c #FDFD66",
"+. c #E3E976",
"@. c #E8F376",
"#. c #FDFD74",
"$. c #3B3D8E",
"%. c #3B3CA8",
"&. c #413DB3",
"*. c #554887",
"=. c #405587",
"-. c #494197",
";. c #544894",
":. c #5E5896",
">. c #654F9C",
",. c #655A9B",
"<. c #785E98",
"1. c #577494",
"2. c #67718D",
"3. c #78778A",
"4. c #65639A",
"5. c #756499",
"6. c #667F99",
"7. c #73769E",
"8. c #4C4BB1",
"9. c #6E5CA1",
"0. c #745DA2",
"q. c #615AB9",
"w. c #6B66A8",
"e. c #7B65A7",
"r. c #797BA3",
"t. c #6B66B7",
"y. c #7565B2",
"u. c #7A7BB5",
"i. c #4443C6",
"p. c #6E63CC",
"a. c #796BC6",
"s. c #7673C2",
"d. c #6B64D8",
"f. c #766DD7",
"g. c #7C74D6",
"h. c #7C74E0",
"j. c #816CAF",
"k. c #8964B8",
"l. c #867AB6",
"z. c #8479D8",
"x. c #917BD3",
"c. c #887BE7",
"v. c #917BE8",
"b. c #8D79F4",
"n. c #987CF9",
"m. c #6481A1",
"M. c #7B83B8",
"N. c #868289",
"B. c #979D80",
"V. c #888695",
"C. c #8C929A",
"Z. c #9A9898",
"A. c #A69898",
"S. c #98BF95",
"D. c #B3AE8E",
"F. c #B7B98C",
"G. c #ACAB96",
"H. c #B6B792",
"J. c #8A88A8",
"K. c #9285AA",
"L. c #9996A3",
"P. c #8480BE",
"I. c #978EBC",
"U. c #9E9DBA",
"Y. c #A39BB6",
"T. c #93B8B1",
"R. c #A8A0A6",
"E. c #B3A9AF",
"W. c #B4B0A4",
"Q. c #A8A6B6",
"!. c #B3AFBF",
"~. c #B9B6B6",
"^. c #D3AC80",
"/. c #DABC98",
"(. c #E1AC82",
"). c #FFBB89",
"_. c #E9BD91",
"`. c #C5B7A7",
"'. c #BEC18C",
"]. c #A6C19D",
"[. c #98C6B1",
"{. c #A4C7AA",
"}. c #C8C385",
"|. c #D1D28E",
" X c #C7C998",
".X c #CCD59C",
"XX c #FFC18C",
"oX c #E9C994",
"OX c #F4C890",
"+X c #E9D198",
"@X c #FFD698",
"#X c #DAE082",
"$X c #D8ED9A",
"%X c #FFE19F",
"&X c #F0F09E",
"*X c #D5CEA3",
"=X c #D9D9A5",
"-X c #C7C3B8",
";X c #D4C8BB",
":X c #DCD8B8",
">X c #EBCAA2",
",X c #FADBA1",
"<X c #DDE1A9",
"1X c #E6E5AC",
"2X c #FCE6A8",
"3X c #FFF3AE",
"4X c #E8E7B6",
"5X c #F5EAB2",
"6X c #FDFAB9",
"7X c #9789CB",
"8X c #9D96CC",
"9X c #8D85D7",
"0X c #9889D4",
"qX c #9790DB",
"wX c #AA9BC8",
"eX c #A496D7",
"rX c #ABA5C4",
"tX c #B4A5C8",
"yX c #B2B5C7",
"uX c #B4ABD7",
"iX c #8D83EB",
"pX c #9686E9",
"aX c #9B92E9",
"sX c #8B82F2",
"dX c #9886F4",
"fX c #9C90F8",
"gX c #A38FE7",
"hX c #A899E9",
"jX c #A38CFE",
"kX c #A593FE",
"lX c #B19BFF",
"zX c #AFBBE0",
"xX c #ACA6F7",
"cX c #B5ABFE",
"vX c #BAB2FE",
"bX c #A9D8C4",
"nX c #D3CFC5",
"mX c #CED9CB",
"MX c #DAD7C6",
"NX c #CCC6D5",
"BX c #EAECC5",
"VX c #F0ECC4",
"CX c #ECF1CD",
"ZX c #FEFEC6",
"AX c #FFFED0",
"SX c #C4C7EF",
"DX c #C9C1FF",
"FX c #D0CCFE",
"GX c #D8D8FE",
"HX c #CEE0E3",
"JX c #DCF1E9",
"KX c #E0E0E7",
"LX c #E5E3FF",
"PX c #F9FBFB",
/* pixels */
" | @.#.o.S w.a.s.u.Z ( | ",
" Q .#.#.#.#.' 7Xn.dX9X} O.o.W ",
" ..+.#.#.#.#.#.#.K tX7X} #.O.O.[ C.M.6. ",
" .@.#.#.#.#.#.#.#.) #.[ O.O.O.O.O.W.aXz.2. ",
" R o.#.#.#.O.O.#.O.X.[ ^ o.O.O.` ` ` [ kXkXpXu. ",
" _ O.O.O.O.O.O.O.O.A.7Xr D.O.` ` ` ` O.I.kXkXpXM. ",
" / O.O.O.O.O.O.} A.l.n.k.z v.L O.` ` ` ` F.kXjXkXdXu. ",
" ~ O.O.O.O.[ R.0Xb.n.pXA.;XpX5.}.` ` ` ` } aXkXkXkXl. ",
" 5 O.O.o.} V.hXlXkXa.dXwX4X:XpXJ.0X} ` ` ` [ eXcXvXxXGXf ",
" 1 E ` @.CXKXzXDXkXaXa.v.MX4X4XeXL.eXeX#X` ` ) rXvXLXHXPXmX, ",
" {.$XBXPXGXxXdXjXdXU.c.tX4X6XZXwXQ.~.jXgX{ ` ` G.kXkXaXGXNXd ",
" JXPXFXcXkXc.jXdXeXR.g.nX=XZXZXE.Q.*Xx.kXeX}.` K kXkXpXkXqX5.",
" h SXaXdXdXjXb.jXv.;XV.8XZX=XZXZX:XL.ZXZ.pXjXkXG.] 0XkXz.kXkXe.",
"@ qXiXpXc.kXdXdXb.l.5XY.!.ZX=XZXZXZXG 6X:XP.dXkXpX8XpXkXz.kXkXe.",
"*.z.g.fXc.kXdXdXpXMXZXN.ZX6X1XZXZXZX X=XZX-XpXdXsXkXkXkXz.kXkX<.",
"e.pX;.kXz.kXdXdXhXBXZXB.ZX6X4XZXZXZX1X4XZXZXrXkXc.kXkXkXz.kXkX5.",
"5.9.0.kXc.kXiXpXyXZXZX4XZXZX6X6XZXZXZX6XZXZXBXrXz.kXkXkXz.kXkX<.",
"4.,.y.kXc.kXc.z.MXZXZX5X6XZXZX6XZXZXZX6X6XZXZX4Xz.kXkXkXg.kXkX<.",
"5.# z.kXiXkXh.t.ZX=XF D F.ZX6X6X6X6X6X}.P |.ZX=XkXjXkXjXf.kXpX0.",
"w pXkXdXdXd.r.H = 3 2X2X@X@X2X}.+ . O i G.kXkXkXdXf.kXx.s ",
" $ dXkXs.pXq.G O 2 XZX6X%XXX).).).OXoXL y X kXkXkXc.f.kXx.: ",
" $ dXkX3.uXP. X X5X6XZX6X2X@X@X@X,X,X3XZXZX'.w kXkXkXg.h.kXe. ",
" pXj.3.~.Q.=X6X6X6X6XZX6X6X6X6X6X6XZX6X6X5XwXkXkXdXp.c.kX8 ",
" z.<.0.7.Z. X5X2X2X6XZXZX,XT (.^.ZXZX6X3X+XeXkXkXiXq.sXz.% ",
" ,.5.>.i.%.7 ,X,X,X6XZXZXoXx x Y ZXZX6X@X_.eXkXkXg.q.h.w. ",
" p 9 ;.i.&.0 l >X2X6XZXZX6XoX_.5XZXZX6X2X/.0XkXc.t.q.t.9X ",
" & *.i.&.0 6 6 K.-XVXAXZXZXZXZXZXZX4X`.:.z.kX8.8.p e 5. ",
" -.i.%.9 6 6 &.8.w.V. XZXZX2XG.J.w.8.8.c.iX8.-.a > 9 ",
" 7 %.7 X X 7 %.=.T.N I I j 1.1.$.7 8.c.t.%.6 - ",
" ; $.B v c c t m.[.[.J U U k [.T.u H.Z.7Xg q t o ",
" * v m m +.! [.bX[.k U U J ].4X<XZXAX X4 < ",
" C V v m m &X$XA [.bXk U J {.S..X5X1XZXZXn b M "
};

View File

@ -1,64 +0,0 @@
/* XPM */
const char *arr___xpm[] = {
/* columns rows colors chars-per-pixel */
"16 15 43 1",
" c black",
". c gray1",
"X c gray2",
"o c gray9",
"O c #282828282828",
"+ c #2A2A2A2A2A2A",
"@ c #3A3A3A3A3A3A",
"# c #3C3C3C3C3C3C",
"$ c #494949494949",
"% c gray35",
"& c #747473737373",
"* c #777777777777",
"= c #888887878787",
"- c #8F8F8E8E8E8E",
"; c gray60",
": c #9D9D9D9D9D9D",
"> c #A2A29F9F9F9F",
", c #B6B6B6B6B6B6",
"< c gray74",
"1 c #C5C5C5C5C5C5",
"2 c #C9C9C9C9CACA",
"3 c gray80",
"4 c #CDCDCDCDCDCD",
"5 c #CECECECECECE",
"6 c #D0D0D0D0D0D0",
"7 c #D1D1D1D1D0D0",
"8 c gray82",
"9 c gray83",
"0 c #D7D7D7D7D6D6",
"q c #D7D7D7D7D7D7",
"w c gainsboro",
"e c #DFDFDFDFDFDF",
"r c #E2E2E2E2E2E2",
"t c gray90",
"y c #E6E6E6E6E6E6",
"u c #EAEAEAEAEAEA",
"i c #ECECECECECEC",
"p c gray93",
"a c #F2F2F3F3F2F2",
"s c #F9F9F9F9F9F9",
"d c gray99",
"f c gray100",
"g c None",
/* pixels */
"ggggyggggggggggg",
"gggg-9gggggggggg",
"gggg- 8ggggggggg",
"gggg-0 5gggggggg",
"gggg-f,#5ggggggg",
"gggg-fs* 5gggggg",
"gggg-dp,* 4ggggg",
"gggg-ae2>* 5gggg",
"gggg-t7X uggg",
"gggg-0% X193gggg",
"gggg-$<@ &gggggg",
"gggg-6w: oqggggg",
"ggggiggrO =ggggg",
"gggggggw;.+pgggg",
"ggggggggt +ugggg"
};

View File

@ -1,64 +0,0 @@
/* XPM */
const char *arr__xpm[] = {
/* columns rows colors chars-per-pixel */
"16 15 43 1",
" c black",
". c gray1",
"X c gray2",
"o c gray9",
"O c #282828282828",
"+ c #2A2A2A2A2A2A",
"@ c #3A3A3A3A3A3A",
"# c #3C3C3C3C3C3C",
"$ c #494949494949",
"% c gray35",
"& c #747473737373",
"* c #777777777777",
"= c #888887878787",
"- c #8F8F8E8E8E8E",
"; c gray60",
": c #9D9D9D9D9D9D",
"> c #A2A29F9F9F9F",
", c #B6B6B6B6B6B6",
"< c gray74",
"1 c #C5C5C5C5C5C5",
"2 c #C9C9C9C9CACA",
"3 c gray80",
"4 c #CDCDCDCDCDCD",
"5 c #CECECECECECE",
"6 c #D0D0D0D0D0D0",
"7 c #D1D1D1D1D0D0",
"8 c gray82",
"9 c gray83",
"0 c #D7D7D7D7D6D6",
"q c #D7D7D7D7D7D7",
"w c gainsboro",
"e c #DFDFDFDFDFDF",
"r c #E2E2E2E2E2E2",
"t c gray90",
"y c #E6E6E6E6E6E6",
"u c #EAEAEAEAEAEA",
"i c #ECECECECECEC",
"p c gray93",
"a c #F2F2F3F3F2F2",
"s c #F9F9F9F9F9F9",
"d c gray99",
"f c gray100",
"g c None",
/* pixels */
"ggggyggggggggggg",
"gggg-9gggggggggg",
"gggg- 8ggggggggg",
"gggg-0 5gggggggg",
"gggg-f,#5ggggggg",
"gggg-fs* 5gggggg",
"gggg-dp,* 4ggggg",
"gggg-ae2>* 5gggg",
"gggg-t7X uggg",
"gggg-0% X193gggg",
"gggg-$<@ &gggggg",
"gggg-6w: oqggggg",
"ggggiggrO =ggggg",
"gggggggw;.+pgggg",
"ggggggggt +ugggg"
};

View File

@ -1,362 +0,0 @@
/* XPM */
const char *assdraw3__xpm[] = {
/* columns rows colors chars-per-pixel */
"400 100 256 2",
" c #28AB0BFA0F09",
". c #28960E0E13CB",
"X c #765D23C626EF",
"o c #5590382452C9",
"O c #7143583C597E",
"+ c #72C050027049",
"@ c #83F81A0E1A0E",
"# c #8C6430583368",
"$ c #87FC3C8E4395",
"% c #917749A94FF5",
"& c #910059486920",
"* c #90BF6D3E70D5",
"= c #A1096E346C0F",
"- c #AF2F96FE721A",
"; c #E654B694684E",
": c #F2CAC2D668DF",
"> c #36C239BEABF3",
", c #37064141AE58",
"< c #3A9D4229AE8E",
"1 c #3AC846E1B34F",
"2 c #3C664C47B584",
"3 c #3BF750FEB66D",
"4 c #3D4E5802BC51",
"5 c #3DC96161BF79",
"6 c #7636552590B8",
"7 c #42114D5DB551",
"8 c #40404F4FB8B8",
"9 c #43FB5266B639",
"0 c #48C55424B730",
"q c #431255BABB08",
"w c #43E45BA1BCB2",
"e c #4DB45926BA20",
"r c #4AD25C1DBC76",
"t c #49CD6262BE4E",
"y c #52676459BEE3",
"u c #3DDF6E97C9D7",
"i c #4CA86B87C7C7",
"p c #497E78D9CCD2",
"a c #568C78CFCC0E",
"s c #49297A84D662",
"d c #55427C03D410",
"f c #5C9C7BFCD1E1",
"g c #933A70B08E99",
"h c #9CB272409D38",
"j c #93B971DCAEBB",
"k c #C4C47F7F8181",
"l c #994977CACA20",
"z c #993C778ED200",
"x c #A3097D4AC62C",
"c c #3EBF8808D757",
"v c #062B96DFFFFF",
"b c #18349E22FFFF",
"n c #343E8F05FFFF",
"m c #3A3A8F8FFFFF",
"M c #341392F7FFFF",
"N c #3BD4949CFFFF",
"B c #32339C25FFFF",
"V c #3C0D9BCEFFFF",
"C c #2222A2A2FFFF",
"Z c #2CFFA676FFFF",
"A c #2E92AC92FFFF",
"S c #313FA3C1FFFF",
"D c #3C29A42BFFF8",
"F c #340BAB35FFFF",
"G c #3C4AACD6FFE6",
"H c #2CE2B584FFFF",
"J c #2C41B8DBFFFF",
"K c #33D1B5BCFFFF",
"L c #3C20B48CFF30",
"P c #3450B985FFFF",
"I c #3C65BACAFF95",
"U c #56F68383CEA6",
"Y c #487F87FED841",
"T c #4C358CDFD71A",
"R c #582F8856D760",
"E c #5852979FDC15",
"W c #66CD8807D103",
"Q c #65B489C4D61F",
"! c #66D796E9DB25",
"~ c #74009813DB2B",
"^ c #5D38A1EADF83",
"/ c #6E44A421DE0C",
"( c #4F5F8B86E567",
") c #48969863E8D8",
"_ c #587D97F7E9E9",
"` c #496A97B0F5EB",
"' c #43A49648FE2B",
"] c #43689BE0FF5B",
"[ c #4B189CEBFF90",
"{ c #55CC9C62F711",
"} c #66E799F6E703",
"| c #726B9C5AE460",
" . c #488DA8B4ECBC",
".. c #586DA881E935",
"X. c #4E4EB0B0EFEF",
"o. c #5A4DB224EDFF",
"O. c #46F4A98AF404",
"+. c #4321A3AFFF1B",
"@. c #4D27A393FF7A",
"#. c #4354ABEDFEE4",
"$. c #4BD7AC56FEFA",
"%. c #55A2A7C4F48D",
"&. c #53DDA385FE94",
"*. c #5BE8A589FF9D",
"=. c #5363AC12FEB9",
"-. c #5C99AB49FFB8",
";. c #4807B49BF5C3",
":. c #4317B372FF10",
">. c #4C03B446FECA",
",. c #43A1BD08FF53",
"<. c #4B12BCE2FE59",
"1. c #56B2B52EF88E",
"2. c #5296B4E1FF39",
"3. c #5480BAE7FF1E",
"4. c #5C2ABBB4FF9F",
"5. c #678AA81EE7FD",
"6. c #775EA85EE91D",
"7. c #66F9B3C5EC19",
"8. c #7987B6D6EB12",
"9. c #63F0AB70FF9C",
"0. c #67F1AA89FB42",
"q. c #7568ACF4F599",
"w. c #65CEB620FA05",
"e. c #6BE7B352FFDB",
"r. c #62D6BCE6FFC1",
"t. c #69D7BDA0FFC7",
"y. c #7445B41AFFB0",
"u. c #7771B90BFB58",
"i. c #7CFBBBB9FFDA",
"p. c #465DC0C0FFFF",
"a. c #4B39C159FFF4",
"s. c #5402C363FFEE",
"d. c #5C08C549FFC7",
"f. c #5E4AC8C8FFD7",
"g. c #7D27C0C0EFEF",
"h. c #6BC1C26CF6EA",
"j. c #637AC51CFF58",
"k. c #6C8BC406FF82",
"l. c #6459C983FFF2",
"z. c #6BF1CB67FFDA",
"x. c #78EFC45FF587",
"c. c #73ACC4B8FF4E",
"v. c #7AE0C563FFC1",
"b. c #73FECDDAFFD6",
"n. c #7D0ACC39FFD0",
"m. c #7676D100FFFF",
"M. c #7CECD1F1FFFD",
"N. c #AD418EA89292",
"B. c #A8A196DE9560",
"V. c #AE7D90C8B02F",
"C. c #B1EEA9E1B4A9",
"Z. c #D93B929299E1",
"A. c #CC5EB10F930F",
"S. c #E9BAA4369224",
"D. c #CF39B2CFAFCF",
"F. c #F80AB8E3B4B4",
"G. c #BE3EC7C7BCBC",
"H. c #DF84CDC89EFE",
"J. c #FA24EA148F39",
"K. c #FB99E9B995EB",
"L. c #FA72E78F983D",
"P. c #FC13E9B69A64",
"I. c #FACEC494BCA2",
"U. c #E9F1D33EB055",
"Y. c #FADAEAF3A8DA",
"T. c #AD4398F3D9D9",
"R. c #B4BE9084D060",
"E. c #B21DB290CB18",
"W. c #8974B187EC76",
"Q. c #8633B972EC03",
"!. c #8A5CBB6CF842",
"~. c #8432BCD8FFAD",
"^. c #94D6BD38F488",
"/. c #C7AAA02ED27C",
"(. c #C9D8AC35D1A5",
"). c #C5459E61E9D8",
"_. c #C88A9F32F3A5",
"`. c #CAE6A742E767",
"'. c #C6D7A24FEDA6",
"]. c #CADFA3EEEDB2",
"[. c #D42DB04CED0D",
"{. c #C72AA224F318",
"}. c #CA9BA2E3F33B",
"|. c #CC28A631F61E",
" X c #BB02C666DB8D",
".X c #899BC340EECB",
"XX c #9309C49CEF02",
"oX c #8CCCCB08F4F2",
"OX c #86BDC4C7F8A3",
"+X c #8C8AC3A3FFB1",
"@X c #84A6CC40FFA5",
"#X c #8B89CD17FF99",
"$X c #9A4EC6C5F75E",
"%X c #9372CCE5F4BA",
"&X c #9414C4D3FE9F",
"*X c #942ECC3DFF0A",
"=X c #9CA4CB6BFEA6",
"-X c #844ED403FFF3",
";X c #8BE4D56DFFC1",
":X c #8E73D8EAFFFF",
">X c #99B5D2B3F720",
",X c #93F0D3D0FEA2",
"<X c #9C25D53CFD2B",
"1X c #94F5DA0DFFEB",
"2X c #9CC3DBE4FF4F",
"3X c #B8B3C925E909",
"4X c #B90BD45AEC3E",
"5X c #A40ACD18FDBD",
"6X c #A8BBCC8EF96F",
"7X c #B35CCD61F2CE",
"8X c #A9F9D684F617",
"9X c #A41ED505FDF8",
"0X c #AC7FD40EFEED",
"qX c #A452DC6FFEB8",
"wX c #AC1FDCD4FEA3",
"eX c #B801D868F76E",
"rX c #B3BAD5F5FF87",
"tX c #B4ABDCCBFF96",
"yX c #BC86DC74FFB1",
"uX c #A777E110FFCF",
"iX c #AC95E221FFC4",
"pX c #BCBCE0E0F6F6",
"aX c #B4E6E461FFAF",
"sX c #BC4AE4F3FFCF",
"dX c #BF52E8FBFFFF",
"fX c #D0AAC90BD064",
"gX c #E9DBCF5DCC4B",
"hX c #FBBFCC35C3F0",
"jX c #FAA7D605CAA2",
"kX c #FBF4DC36CE44",
"lX c #FC54DDA0D251",
"zX c #F8ABDBA4D829",
"xX c #CACAE1E1DEDE",
"cX c #F63AEB43CF94",
"vX c #FB6EE2B6D7C3",
"bX c #C518CB51E5A5",
"nX c #C325D58FEB1C",
"mX c #C5B8DBB1F576",
"MX c #C43CDED2FF14",
"NX c #EE7BD62EF2CF",
"BX c #C3DEE259F6D0",
"VX c #C48CE46AFF1D",
"CX c #CBC8E45EFFBF",
"ZX c #C4ADEA88FFC0",
"AX c #CC9CEC48FFDF",
"SX c #D2D2E791F49E",
"DX c #D2B0E72FFFF0",
"FX c #D464ECD8FFFA",
"GX c #DBC4ECF2FFFF",
"HX c #D68CF137FFFD",
"JX c #DCD8F2D5FFFF",
"KX c #E81AEAEAF258",
"LX c #E195EF78FFFF",
"PX c #F6B3EDB0F7A5",
"IX c #E2AAF363FFFF",
"UX c #EC2DF656FFFF",
/* pixels */
"H H H H H H H H H H H H H H H H S n n M M B B M n B H J J H H H H H H H H J H H M H H S n n n n n n n n n n M M M H H H B n S J H S M M n n M M M M M M M M M H H Z M H H H H H H H H H H H H H S n n M M B B M n B H J J H H H H H H H H J H H M H H S n n n n n n n n n n M M M H H H B n S J H S M M n n M M M M M M M M M H H Z M H H H H H H H H H H H H H S n n M M B B M n B H J J H H H H H H H H J H H M H H S n n n n n n n n n n M M M H H H B n S J H S M M n n M M M M M M M M M H H Z M H H H H H H H H H H H H H S n n M M B B M n B H J J H H H H H H H H J H H M H H S n n n n n n n n n n M M M H H H B n S J H S M M n n M M M M M M M M M H H Z M H H H H H H H H H H H H H S n n M M B B M n B H J J H H H H H H H H J H H M H H S n n n n n n n n n n M M M H H H B n S J H S M M n n M M M M M M M M M H ",
"H H H H H H H H H H H H H H H A M M S A H H H A B M S H H J H H H H H H H H H H M H H S n n n n n M M B B A A B M A J H Z B A J H B M A A S B M M n n M M M M H H S M H H H H H H H H H H H H A M M S A H H H A B M S H H J H H H H H H H H H H M H H S n n n n n M M B B A A B M A J H Z B A J H B M A A S B M M n n M M M M H H S M H H H H H H H H H H H H A M M S A H H H A B M S H H J H H H H H H H H H H M H H S n n n n n M M B B A A B M A J H Z B A J H B M A A S B M M n n M M M M H H S M H H H H H H H H H H H H A M M S A H H H A B M S H H J H H H H H H H H H H M H H S n n n n n M M B B A A B M A J H Z B A J H B M A A S B M M n n M M M M H H S M H H H H H H H H H H H H A M M S A H H H A B M S H H J H H H H H H H H H H M H H S n n n n n M M B B A A B M A J H Z B A J H B M A A S B M M n n M M M M H ",
"H H H H H H H H H H H H H H H B M A H H H H H J H S M A J H H H J H J J H H H H M A H H B M M B B Z A H H A B M n S H H J H J J A M n B Z H H H A Z B M n M A H J B M H H H H H H H H H H H H B M A H H H H H J H S M A J H H H J H J J H H H H M A H H B M M B B Z A H H A B M n S H H J H J J A M n B Z H H H A Z B M n M A H J B M H H H H H H H H H H H H B M A H H H H H J H S M A J H H H J H J J H H H H M A H H B M M B B Z A H H A B M n S H H J H J J A M n B Z H H H A Z B M n M A H J B M H H H H H H H H H H H H B M A H H H H H J H S M A J H H H J H J J H H H H M A H H B M M B B Z A H H A B M n S H H J H J J A M n B Z H H H A Z B M n M A H J B M H H H H H H H H H H H H B M A H H H H H J H S M A J H H H J H J J H H H H M A H H B M M B B Z A H H A B M n S H H J H J J A M n B Z H H H A Z B M n M A H ",
"H H H H H H H H A A Z Z A H H M A H H H Z S Z H H H B B J H A A A A H H H J H H M B H H H A H H H H H Z B M B S B M Z H H J J A B M S B M B S A J J J H H H J H A M M H H H H H A A Z Z A H H M A H H H Z S Z H H H B B J H A A A A H H H J H H M B H H H A H H H H H Z B M B S B M Z H H J J A B M S B M B S A J J J H H H J H A M M H H H H H A A Z Z A H H M A H H H Z S Z H H H B B J H A A A A H H H J H H M B H H H A H H H H H Z B M B S B M Z H H J J A B M S B M B S A J J J H H H J H A M M H H H H H A A Z Z A H H M A H H H Z S Z H H H B B J H A A A A H H H J H H M B H H H A H H H H H Z B M B S B M Z H H J J A B M S B M B S A J J J H H H J H A M M H H H H H A A Z Z A H H M A H H H Z S Z H H H B B J H A A A A H H H J H H M B H H H A H H H H H Z B M B S B M Z H H J J A B M S B M B S A J J J H H H J H ",
"H H H H H H H S M M M M M S A M H H A B n M M S H H S B H B M n M M B A H H H H S M S H J H J H A S M M B A H A B M M B S Z S M M M Z H A S B M B A H H H H H A B M B H H H H S M M M M M S A M H H A B n M M S H H S B H B M n M M B A H H H H S M S H J H J H A S M M B A H A B M M B S Z S M M M Z H A S B M B A H H H H H A B M B H H H H S M M M M M S A M H H A B n M M S H H S B H B M n M M B A H H H H S M S H J H J H A S M M B A H A B M M B S Z S M M M Z H A S B M B A H H H H H A B M B H H H H S M M M M M S A M H H A B n M M S H H S B H B M n M M B A H H H H S M S H J H J H A S M M B A H A B M M B S Z S M M M Z H A S B M B A H H H H H A B M B H H H H S M M M M M S A M H H A B n M M S H H S B H B M n M M B A H H H H S M S H J H J H A S M M B A H A B M M B S Z S M M M Z H A S B M B A H H H H H A ",
"H H H H J H B M B Z A A S M B M H H Z n n n M M H H S B B B S A A Z B M Z H H H H B n B Z A S B M M B A H H S M M Z M M M n M n B B M B A H H A B M M S Z Z B M M A H H J H B M B Z A A S M B M H H Z n n n M M H H S B B B S A A Z B M Z H H H H B n B Z A S B M M B A H H S M M Z M M M n M n B B M B A H H A B M M S Z Z B M M A A H J H B M B Z A A S M B M H H Z n n n M M H H S B B B S A A Z B M Z H H H H B n B Z A S B M M B A H H S M M Z M M M n M n B B M B A H H A B M M S Z Z B M M A H H J H B M B Z A A S M B M H H Z n n n M M H H S B B B S A A Z B M Z H H H H B n B Z A S B M M B A H H S M M Z M M M n M n B B M B A H H A B M M S Z Z B M M A A H J H B M B Z A A S M B M H H Z n n n M M H H S B B B S A A Z B M Z H H H H B n B Z A S B M M B A H H S M M Z M M M n M n B B M B A H H A B M M S Z Z B M ",
"H H H J H B M Z H H H H H A M n H H A n n M n M H J B n B H H H H H H B M S H H J H S B B B n M S A J H F B n M S A M S B B F B S A M n M S H J H A B M n B B S A J H J H B M Z H H H H H A M n H H A n n M n M H J B n B H H H H H H B M S H H J H S B B B n M S A J H A B n M S A M S B B A B S A M n M S H J H A B M n B B S A J H J H B M Z H H H H H A M n H H A n n M n M H J B n B H H H H H H B M S H H J H S B B B n M S A J H A B n M S A M S B B A B S A M n M S H J H A B M n B B S A J H J H B M Z H H H H H A M n H H A n n M n M H J B n B H H H H H H B M S H H J H S B B B n M S A J H A B n M S A M S B B A B S A M n M S H J H A B M n B B S A J H J H B M Z H H H H H A M n H H A n n M n M H J B n B H H H H H H B M S H H J H S B B B n M S A J H A B n M S A M S B B A B S A M n M S H J H A B M n B B S ",
"H H H H S M S H H H A H H H S M A H A n n M n B H H B M A H H A A H J H B M A J H H J J A B B H H H F B M M n B K S M K B B K S B H S M M n M S H J J A B S H J H H H H S M S H H H A H H H S M A H A n n M n B H H B M A H H A A H J H B M A J H H J J A B B H H H A B M M n B H S M H B B H S B H S n M n M S H J J A B S H J H H H H S M S H H H A H H H S M A H A n n M n B H H B M A H H A A H J H B M A J H H J J A B B H H H A B M M n B H S M H B B H S B H S n M n M S H J J A B S H J H H H H S M S H H H A H H H S M A H A n n M n B H H B M A H H A A H J H B M A J H H J J A B B H H H A B M M n B H S M H B B H S B H S n M n M S H J J A B S H J H H H H S M S H H H A H H H S M A H A n n M n B H H B M A H H A A H J H B M A J H H J J A B B H H H A B M M n B H S M H B B H S B H S n M n M S H J J A B S H J ",
"H H H A M B H J A B M M S H H M B H H M n n n S H A M S H H B M M B H J A M S H J H H H B M F H K S M M M M N F K M S K B M F K M F K B M M M M B F K H F M F J J H J A M B H J A B M M S H H M B H H M n n n S H A M S H H B M M B H J A M S H J H H H B M A H H S M n n M M A H M S H B n A A M A H B n M n n B A H H A M Z J J H J A M B H J A B M M S H H M B H H M n n n S H A M S H H B M M B H J A M S H J H H H B M A H H S M n n M M A H M S H B n A A M A H B n M n n B A H H A M Z J J H J A M B H J A B M M S H H M B H H M n n n S H A M S H H B M M B H J A M S H J H H H B M A H H S M n n M M A H M S H B n A A M A H B n M n n B A H H A M Z J J H J A M B H J A B M M S H H M B H H M n n n S H A M S H H B M M B H J A M S H J H H H B M A H H S M n n M M A H M S H B n A A M A H B n M n n B A H H A M Z J ",
"H H H Z M A J H M n n n M A J Z M A H B n n M A H S M A J S M n n n S H H B M H J H H F M F K K S M N N N N D K F N K K N N D P D B K F N N N N M M F K K B B K H H J F M A J H M n n n M A J Z M A H B n n M A H S M A J S M n n n S H H B M H J H H A M Z H H B M n n n n S H S M A A M n S H B B H A M n M n n M A H H B B H H H J Z M A J H M n n n M A J Z M A H B n n M A H S M A J S M n n n S H H B M H J H H A M Z H H B M n n n n S H S M A A M n S H B B H A M n M n n M A H H B B H H H J Z M A J H M n n n M A J Z M A H B n n M A H S M A J S M n n n S H H B M H J H H A M Z H H B M n n n n S H S M A A M n S H B B H A M n M n n M A H H B B H H H J Z M A J H M n n n M A J Z M A H B n n M A H S M A J S M n n n S H H B M H J H H A M Z H H B M n n n n S H S M A A M n S H B B H A M n M n n M A H H B B H ",
"H H H S M H H F M M n M M B H H M S H S M M M K H M B J F M M M M M B J J S N K P K K F N K P F N N N N N V L K V D K G N N V K G V L P D N N N N N D P K F V K P K K F N K K F M M n M M B H H M S H S M M M K H M B J F M M M M M B J J S M H J H H S M H H F M M M M M M K H B B H F M M B H F M F H B n M M M M B H H S M H H J J S M H H F M M n M M B H H M S H S M M M K H M B J F M M M M M B J J S M H J H H S M H H F M M M M M M K H B B H F M M B H F M F H B n M M M M B H H S M H J H H S M H H F M M n M M B H H M S H S M M M K H M B J F M M M M M B J J S M H J H H S M H H F M M M M M M K H B B H F M M B H F M F H B n M M M M B H H S M H H J J S M H H F M M n M M B H H M S H S M M M K H M B J F M M M M M B J J S M H J H H S M H H F M M M M M M K H B B H F M M B H F M F H B n M M M M B H H S M H ",
"P K P F M K K F M M M M M M F K S N K F M n B K F M F K B M M M M M B P K S V K P P P F N K P G N N ' ' ' G I G ' G I +.] ' ] L L ] +.I L ] ' ' ' N D I I D V P P P P F N K P F N M N M M M F K S N K F M n B K F M F K B M M M M M B P K S B K P K P F M K P F M M M M M S P F M F K B M M M K K B S P K M M M M M B K K S M K P K P F M K K F M M M M M M F K S N K F M n B K F M F K B M M M M M B P K S B K P K P F M K P F M M M M M S P F M F K B M M M K K B S P K M M M M M B K K S M K P K P F M K K F M M M M M M F K S N K F M n B K F M F K B M M M M M B P K S B K P K P F M K P F M M M M M S P F M F K B M M M K K B S P K M M M M M B K K S M K P K P F M K K F M M M M M M F K S N K F M n B K F M F K B M M M M M B P K S B K P K P F M K P F M M M M M S P F M F K B M M M K K B S P K M M M M M B K K S M K ",
"P P P F N F K P S N N N N N V K K N F K V m F K V V K F N N N N N V K P K V D P P P I G ' G I I +.' ' ' +.,.,.+.+.,.,.+.] [ ] :.,.#.+.:.,.#.] ' ' ] :.I I ] +.I I I P L V G P P D N N N N N V K K N F K V m F K V V K F N N N N N B K P K N D P P K P F N F P K V N N N V K K V V K K V N N N F K S V K K F N N N N F P K V V K P P P F N F K P S N N N N N V K K N F K V m F K V V K F N N N N N B K P K N D P P K P F N F P K V N N N V K K V V K K V N N N F K S V K K F N N N N F P K V V K P P P F N F K P S N N N N N V K K N F K V m F K V V K F N N N N N B K P K N D P P K P F N F P K V N N N V K K V V K K V N N N F K S V K K F N N N N F P K V V K P P P F N F K P S N N N N N V K K N F K V m F K V V K F N N N N N B K P K N D P P K P F N F P K V N N N V K K V V K K V N N N F K S V K K F N N N N F P K V V K ",
"P P K K D V K P P F V N N N N D P D V P V N F K N F K V N N N V F P P P D V L I I I I I ] +.,.I :.+.+.#.,.,.:.[ $.,.>.@.[ [ [ $.,.,.[ $.,.,.$.@.@.:.,.,.#.] #.I I I I I D ] L P P G V N N N N D P D V P V N F K N F K V N N N V F P P K V N K P P P P K V V K P K D V D K P F N D P F N N N N D K K N D P K D V V F P P F N F P P P K K D V K P P F V N N N N D P D V P V N F K N F K V N N N V F P P K V N K P P P P K V V K P K D V D K P F N D P F N N N N D K K N D P K D V V F P P F N F P P P K K D V K P P F V N N N N D P D V P V N F K N F K V N N N V F P P K V N K P P P P K V V K P K D V D K P F N D P F N N N N D K K N D P K D V V F P P F N F P P P K K D V K P P F V N N N N D P D V P V N F K N F K V N N N V F P P K V N K P P P P K V V K P K D V D K P F N D P F N N N N D K K N D P K D V V F P P F N F P ",
"P P P K G V V L P P K G N N N N G L N L D V P D V K D N N N D L I I L D ] L L I I ,.,.,.#.[ #.,.,.,.<.<.<.<.$.[ <.a.>.[ &.[ &.=.<.a.=.&.>.a.<.<.<.,.,.<.@.@.,.,.,.,.,.:.:.] +.L I I L G ' ' ' N G L N L D V P D V K D N N N D K P P L D V G K K P P P P G N D P P K P P P K V N L P G N N N N V K P V N L P P P P P P L V V L P P P P K G V V L P P K G N N N N G L N L D V P D V K D N N N D K P P L D V G K K P P P P G N D P P K P P P K V N L P G N N N N V K P V N L P P P P P P L V V L P P P P K G V V L P P K G N N N N G L N L D V P D V K D N N N D K P P L D V G K K P P P P G N D P P K P P P K V N L P G N N N N V K P V N L P P P P P P L V V L P P P P K G V V L P P K G N N N N G L N L D V P D V K D N N N D K P P L D V G K K P P P P G N D P P K P P P K V N L P G N N N N V K P V N L P P P P P P L V V L P ",
"P L D V V V N V D G L P L D N N V L V D D V D V D G V N D L I I L D ] ' ] ] ] ] :.,.,.,.,.$.[ $.<.<.a.a.3.=.&.&.3.s.2.&.&.&.&.=.s.s.2.&.=.3.s.a.a.a.>.&.&.>.<.,.,.:.$.[ [ [ [ ] +.:.I I L +.' ' +.L V D D V D V D G V N D L P I L D V N V V V V L P I I L D N D L I P P L V V V L P G N N N N V I I D N V G I P P P G V V L P P P L D V V V N V D G L P L D N N V L V D D V D V D G V N D L P I L D V N V V V V L P I I L D N D L I P P L V V V L P G N N N N V I I D N V G I P P P G V V L P P P L D V V V N V D G L P L D N N V L V D D V D V D G V N D L P I L D V N V V V V L P I I L D N D L I P P L V V V L P G N N N N V I I D N V G I P P P G V V L P P P L D V V V N V D G L P L D N N V L V D D V D V D G V N D L P I L D V N V V V V L P I I L D N D L I P P L V V V L P G N N N N V I I D N V G I P P P G V V L P P ",
"L ] ] G L L L G D ' +.G I I L +.' D ] ' ] ] ] ' D ] ] G I I G +.] ] +.:.,.,.:.$.[ $.<.<.<.a.2.&.&.=.2.2.*.-.4.-.s.s.4.*.*.*.*.-.d.s.4.-.-.*.-.3.2.=.*.&.3.a.a.<.<.@.@.$.>.<.:.:.@.[ +.#.,.I L +.' +.] ' ] ] ] ' D ] ] G I I G +.] ] D L I I L D ' D I I I I G ' ] D D D ] ] G ] I I G ' ' ' ' ] I I G ] D ' D G G +.] ] L I I I L ] ] G L L L G D ' +.G I I L +.' D ] ' ] ] ] ' D ] ] G I I G +.] ] D L I I L D ' D I I I I G ' ] D D D ] ] G ] I I G ' ' ' ' ] I I G ] D ' D G G +.] ] L I I I L ] ] G L L L G D ' +.G I I L +.' D ] ' ] ] ] ' D ] ] G I I G +.] ] D L I I L D ' D I I I I G ' ] D D D ] ] G ] I I G ' ' ' ' ] I I G ] D ' D G G +.] ] L I I I L ] ] G L L L G D ' +.G I I L +.' D ] ' ] ] ] ' D ] ] G I I G +.] ] D L I I L D ' D I I I I G ' ] D D D ] ] G ] I I G ' ' ' ' ] I I G ] D ' D G G +.] ] L I I I ",
"+.] L I I I I I I L +.] ] +.L I +.' ] G L I L +.' ] L I #.+.] ] #.:.,.,.,.,.,.<.$.&.=.<.a.s.s.3.-.-.-.-.-.4.4.9.d.d.d.w.9.9.9.r.d.f.w.9.d.-.-.-.-.-.4.s.s.s.s.s.=.&.2.a.a.a.<.<.,.:.$.[ [ #.:.,.+.' ] #.L I L +.' ] L I G +.] ] #.L I I I I I I +.' #.I I I I L +.] ] +.+.L L ] L I L +.] ' ] G I I +.+.I +.] ] ] ] #.I I I I I +.] L I I I I I I L +.] ' +.L L +.' ' G L L L +.' ] L I G ] ] ] G L I I I I I I +.' D L I I I G +.] ] ] +.L L ] L L L +.] ' ] G I I +.+.I +.] ] ] ] #.I I I I I +.] L I I I I I I L +.] ] +.L I +.' ] G L I L +.' ] L I G +.] ] #.L I I I I I I +.' #.I I I I L +.] ] +.+.L L ] L I I +.] ' ] L I I +.+.I +.] ] ] ] #.I I I I I +.] L I I I I I I L +.] ] +.L I +.' ] G L I L +.' ] L I G +.] ] #.L I I I I I I +.' #.I I I I L +.] ] +.+.L L ] L I I +.] ' ] L I I +.+.I +.] ] ] ] #.I I I I I ",
"] #.I I :.:.:.:.I I I :.#.+.] +.] ] :.I I I I I #.' +.] ] +.:.,.,.,.,.>.>.>.<.a.<.&.&.s.s.s.d.d.d.d.d.j.f.l.j.9.r.l.l.j.j.j.j.l.l.j.e.r.l.l.j.j.j.f.f.d.d.d.d.s.-.2.s.s.3.2.>.<.<.<.<.<.>.@.[ @.[ +.:.,.,.,.,.I #.' +.] ] +.:.I I I :.:.#.#.I I I ] ] I I I I I I I :.:.I I I ] #.I I L L L L I I L ] #.I I I :.:.I I I I I I I ] #.I I L G G L I I I L G ] ] ] ' ] L I L I I I +.' +.] ] +.G I I L L G G G L I L ] ] L I I I I I L L L I I L ] D I I L L L L I I L ] #.I I I L L I I I I I I I ] #.I I :.:.:.:.I I I :.#.+.] +.] ] :.I I I I I #.' +.] ] +.:.I I I :.:.#.#.I I I ] ] I I I I I I I :.:.I I I ] #.I I I I :.I I I :.] #.I I I :.:.I I I I I I I ] #.I I :.:.:.:.I I I :.#.+.] +.] ] :.I I I I I #.' +.] ] +.:.I I I :.:.#.#.I I I ] ] I I I I I I I :.:.I I I ] #.I I I I :.I I I :.] #.I I I :.:.I I I I I I I ",
"[ :.,.:.+.] ] [ +.+.#.:.,.,.:.+.' :.,.,.,.,.,.,.,.+.[ #.:.,.,.:.$.@.@.&.[ &.=.s.s.2.*.d.d.d.f.f.j.l.l.l.l.l.l.t.e.k.z.z.z.z.z.z.k.e.y.k.z.z.l.l.l.l.l.l.j.f.d.d.9.d.d.4.-.*.*.&.&.=.2.<.<.<.>.@.[ >.,.,.,.,.,.,.,.+.] #.:.,.,.:.#.+.[ ] ] ] #.,.,.#.[ ,.,.,.,.,.,.,.,.I I ,.I +.] #.L I I I I I :.] ] :.I ,.I I ,.,.,.,.,.,.,.,.] :.I :.] ' ' ] ] +.#.:.L L #.] ' #.I I I :.I I :.+.] #.:.I I :.#.] ] ' ' ' +.I L +.' L L L I I L I I I L L I +.' #.L L L L L I #.] ] :.I I I I I I I I I I ,.,.[ :.,.:.+.] ] [ +.+.#.:.,.,.:.+.' :.,.,.,.,.,.,.,.+.] #.:.,.,.:.#.+.[ ] ] ] #.,.,.#.[ ,.,.,.,.,.,.,.,.,.,.,.,.#.[ #.,.,.,.,.,.,.:.+.[ :.,.,.,.,.,.,.,.,.,.,.,.,.[ :.,.:.+.] ] [ +.+.#.:.,.,.:.+.' :.,.,.,.,.,.,.,.+.] #.:.,.,.:.#.+.[ ] ] ] #.,.,.#.[ ,.,.,.,.,.,.,.,.,.,.,.,.#.[ #.,.,.,.,.,.,.:.+.[ :.,.,.,.,.,.,.,.,.,.,.,.,.",
"[ ,.,.#.[ [ [ [ [ [ [ [ @.#.:.+.[ ,.,.,.+.+.:.,.,.#.[ #.$.@.@.[ [ [ [ &.&.&.*.s.d.4.9.d.f.l.l.l.l.l.z.z.z.z.z.b.u.y.u.c.c.c.c.u.y.y.c.b.b.z.z.z.z.z.z.z.l.l.l.j.9.j.f.4.9.*.*.*.*.&.&.&.&.=.>.@.[ <.<.,.$.@.:.,.,.#.[ #.#.+.[ [ [ [ [ [ [ [ [ ,.,.:.[ ,.,.,.,.,.,.,.,.,.,.,.,.,.+.' +.+.#.#.#.+.] ] #.,.,.,.,.,.,.,.,.,.,.,.,.,.[ ,.,.#.' ' ' ' ' ' ' ' ] +.#.] ' :.:.:.+.] #.,.,.+.] #.+.+.] ' ' ' ' ' ' ' ' :.:.#.' :.L L :.L L L L L L L L :.] ' ] +.#.#.#.+.] ' #.:.:.,.,.,.,.,.,.,.,.,.,.,.[ ,.,.#.[ [ [ [ [ [ [ [ @.#.:.+.[ ,.,.,.+.+.:.,.,.#.[ #.#.+.[ [ [ [ [ [ [ [ [ ,.,.:.[ ,.,.,.,.,.,.,.,.,.,.,.,.,.+.[ +.#.:.:.:.#.[ [ #.,.,.,.,.,.,.,.,.,.,.,.,.,.[ ,.,.#.[ [ [ [ [ [ [ [ @.#.:.+.[ ,.,.,.+.+.:.,.,.#.[ #.#.+.[ [ [ [ [ [ [ [ [ ,.,.:.[ ,.,.,.,.,.,.,.,.,.,.,.,.,.+.[ +.#.:.:.:.#.[ [ #.,.,.,.,.,.,.,.,.,.,.,.,.,.",
"[ ,.,.$.[ [ [ [ [ [ [ [ [ [ [ [ [ ,.,.,.@.[ $.,.,.$.[ [ [ [ &.&.&.&.&.*.*.*.-.d.d.r.9.j.l.l.z.z.z.z.b.b.b.b.m.m.b.v.i.i.i.v.i.i.i.i.v.b.b.b.b.b.b.b.b.z.z.z.z.z.e.l.l.r.9.9.9.9.*.*.*.*.*.{ &.&.&.<.<.<.@.[ $.,.,.$.[ [ [ [ [ [ [ [ [ [ [ [ [ ,.,.#.[ ,.,.,.,.,.,.,.,.,.,.,.,.,.:.+.` ` [ +.` ` ` ` #.:.,.,.,.,.,.,.,.,.,.,.,.,.[ ,.,.#.` ` ` ` ` ` ` ` ` ` ` ` ` :.:.:.[ ` +.,.:.#.` ` ` ` ` ` ` ` ` ` ` ` ` ;.;.O.` ;.:.:.:.:.:.:.:.:.:.;.:.:.;.+.` ` ` +.` ` ` ` O.:.:.:.,.,.,.,.,.,.,.,.,.,.[ ,.,.$.[ [ [ [ [ [ [ [ [ [ [ [ [ ,.,.,.@.[ $.,.,.$.[ [ [ [ [ [ [ [ [ [ [ [ [ ,.,.#.[ ,.,.,.,.,.,.,.,.,.,.,.,.,.,.$.[ [ @.$.@.@.[ [ $.,.,.,.,.,.,.,.,.,.,.,.,.,.[ ,.,.$.[ [ [ [ [ [ [ [ [ [ [ [ [ ,.,.,.@.[ $.,.,.$.[ [ [ [ [ [ [ [ [ [ [ [ [ ,.,.#.[ ,.,.,.,.,.,.,.,.,.,.,.,.,.,.$.[ [ @.$.@.@.[ [ $.,.,.,.,.,.,.,.,.,.,.,.,.,.",
"@.,.,.>.[ [ [ [ [ [ [ @.$.>.<.$.[ <.p.,.>.$.<.p.<.$.@.>.>.>.=.&.&.*.*.*.*.*.9.f.j.t.e.z.z.z.z.b.b.b.m.m.M.M.M.n.@X~.~.~.~.@X+X~.~.@X-XM.M.M.M.M.M.m.m.b.b.b.b.b.y.z.z.t.0.0.9.9.9.9.-.-.-.3.3.2.&.3.a.a.>.$.<.p.<.$.@.>.>.$.$.@.[ [ [ [ [ [ @.,.,.>.@.,.,.,.,.,.,.,.,.,.,.,.,.:.O.` ` ` ` +.` ` ` +.:.,.,.,.,.,.,.,.,.,.,.,.,.,.[ ,.,.#.` ` ` ` ` ` ` ` O.O.O.O.` ;.;.;.O.+.;.,.;.+.` #.#.O.+.` ` ` ` ` ` ` ` ;.;.O.` ;.;.;.;.;.;.;.;.;.;.;.;.;.O.` ` ` ` +.` ` ` +.;.;.;.;.;.:.,.,.,.,.,.,.,.,.[ ,.,.>.[ [ [ [ [ [ [ @.$.>.<.$.[ <.p.,.>.$.<.p.,.$.@.>.>.$.$.@.[ [ [ [ [ [ @.,.,.>.@.,.,.,.,.,.,.,.,.,.,.,.,.,.$.[ [ @.@.$.@.@.[ $.,.p.p.,.,.,.,.,.,.,.,.,.,.,.[ ,.,.$.[ [ [ [ [ [ [ @.$.>.<.$.[ <.p.,.>.$.<.p.,.$.@.>.>.$.$.@.[ [ [ [ [ [ @.,.,.>.@.,.,.,.,.,.,.,.,.,.,.,.,.,.$.[ [ @.@.$.@.@.[ $.,.p.p.,.,.,.,.,.,.,.,.p.,.,.",
"@.<.p.<.$.@.@.@.$.>.<.<.<.>.$.@.[ $.<.p.p.<.a.a.>.&.&.=.2.3.s.s.3.4.-.9.9.9.r.l.l.t.y.z.b.b.b.m.M.M.M.M.-X-X-X@X+X+X#X;X;X;X;X;X#X+X#X-X-X-X-X-X-X-XM.M.M.M.b.b.u.b.b.z.t.e.e.e.e.r.j.d.d.4.-.-.*.2.s.a.a.a.a.a.>.&.[ @.>.<.<.<.<.>.$.@.[ @.>.p.p.$.@.<.<.p.<.p.,.<.<.<.<.<.,.$.` ` O.O.;.;.;.O.O.` $.,.,.,.,.<.<.<.<.<.<.<.,.<.[ ;.,.;.@.` ` ` O.O.O.;.;.O.` ` ` O.;.;.;.;.;.;.O.` ` ` O.;.;.;.O.O.` ` ` ` O.;.;.` ` O.O.O.O.O.O.O.O.O.O.O.;.O.` ` O.O.;.O.O.O.` ` O.;.;.;.;.;.;.;.,.,.,.,.,.<.[ >.<.<.$.@.@.@.$.>.<.<.<.>.$.@.[ $.<.p.p.<.p.p.>.@.[ @.>.<.<.<.<.>.$.@.[ @.>.,.,.$.[ <.,.,.<.<.<.<.,.,.<.<.p.>.@.@.$.<.<.<.<.>.$.@.>.<.<.,.,.,.,.,.<.<.<.<.<.<.[ >.<.<.@.[ [ @.$.>.>.<.<.>.$.@.[ $.<.p.p.<.p.p.>.@.[ @.>.<.<.<.<.>.$.@.[ @.>.p.p.$.@.<.<.p.<.p.p.<.<.<.<.<.p.>.@.@.$.<.<.<.<.>.$.@.>.<.<.p.p.p.p.p.p.p.p.p.<.<.",
"&.$.<.<.<.<.<.<.<.<.<.>.$.&.@.>.@.&.>.<.<.a.a.<.=.&.2.=.&.=.2.3.d.d.f.f.j.l.l.z.k.y.y.b.b.m.M.M.-X-X-X-X;X;X;X*X&X,X1X1X1X1X1X1X1X*X&X,X:X:X;X;X;X;X-X-X-X-XM.M.i.v.b.b.b.c.z.z.z.l.j.r.w.9.9.4.-.*.3.s.s.s.a.3.=.&.=.=.&.@.$.<.a.a.a.<.<.<.a.a.>.&.&.<.<.a.<.a.<.<.<.<.<.<.;.[ ` O.;.;.;.;.;.;.;.O.` $.<.<.<.<.<.<.<.<.<.<.<.<.[ @.;.;.;.O.O.O.;.;.O.O.` ` ` O.` ` O.;.;.;.;.O.` ` O.O.` ` O.O.;.;.;.O.O.O.O.O.O.` ` O.O.O. .O. . .O.O.O.O.O.` ` O.O.O.O.O.O.O.O.` ` O.;.;.;.;.;.;.;.;.;.<.<.<.[ $.<.<.<.<.<.<.<.<.<.>.$.&.@.>.@.&.>.<.<.a.a.<.@.[ $.$.@.@.$.<.<.a.<.<.<.<.<.<.>.[ @.<.<.<.<.<.<.<.<.<.<.<.<.@.@.>.a.<.a.<.<.a.<.$.[ >.<.<.<.<.<.<.<.<.<.<.<.<.[ @.<.<.<.>.>.<.<.<.<.>.@.@.@.>.@.&.>.<.<.a.a.<.$.&.$.$.&.@.$.<.a.a.a.<.<.<.a.a.>.&.&.<.<.a.<.a.a.a.a.a.a.a.<.@.&.>.a.<.a.<.a.a.<.$.&.>.a.<.<.a.a.a.a.a.<.a.<.<.",
"$.&.>.a.a.a.a.a.<.$.&.&.=.>.<.<.=.&.&.=.2.>.=.&.&.&.2.s.3.2.-.-.9.r.j.l.l.z.z.z.y.i.i.n.M.-X-X-X;X#X#X,X3X XH.U.H. X2X2X<X<X<X2X2X2X=X=X1X1X1X,X,X,X:X:X;X;X-X-X@X~.@XM.m.b.b.b.k.t.e.e.e.r.j.4.9.-.*.-.2.3.2.&.&.&.2.<.<.2.&.&.=.>.<.a.a.a.a.<.&.&.=.<.a.a.a.<.<.>.>.>.>.;.;.` O.;. .) Y Y ) .;.;.` @.<.<.>.>.>.>.<.<.<.<.<.<.O.` O.;.;.;.;.O.O.` ` ` ` .O. .` ` ` ` .O.` ` ` ` O.O.O.O.` ` ` O.O.O.O.O. . .) ) ) . . . . . .) ) ) . . .) . . . .) ` .O.O.O.` ` O.O.O.O.O.O.;.;.;.;.;.<.$.[ $.<.<.<.a.<.<.$.&.&.$.>.<.<.=.&.[ $.>.>.$.&.[ [ $.<.<.$.@.&.@.>.<.<.<.<.<.<.&.&.$.<.<.<.<.<.>.>.>.>.>.<.<.[ >.a.<.<.>.$.>.<.<.<.&.$.<.<.>.>.>.>.<.<.<.<.<.<.$.[ $.<.<.<.<.<.>.$.@.[ $.>.<.>.&.&.&.=.>.>.$.&.&.&.>.<.<.>.&.&.=.>.<.a.a.a.a.<.&.&.=.<.a.a.a.<.<.>.>.>.<.<.<.&.>.a.a.<.>.=.>.<.a.<.=.=.a.a.<.>.>.>.<.a.a.a.a.<.",
"<.=.&.=.2.2.2.=.&.&.=.3.<.<.2.&.&.2.&.&.&.&.&.*.=.=.*.-.4.d.d.r.9.9.e.t.k.c.u.y.i.n.n.-X-X-X;X#X&X&XG.A.H.L.L.P.P.H.- 4X5X5X5X9XqXqX9X9X2X9X5X=X=XC.C.C.G.1X:X;X;X+X~.+X@Xn.v.i.y.y.t.k.z.l.t.e.9.r.9.9.-.*.*.*.=.=.&.=.3.s.3.2.=.&.&.=.2.2.=.&.&.3.3.a.a.a.<.=.&.&.{ { { $.O.` ;. .Y 4 2 2 4 s .;.O.@.;.@.{ { { { &.>.<.<.<.;.;.@.` ` O. . .) s s Y Y Y Y Y ( ) ) Y s s ( ) ` ` ` ` ` .O. . .) Y s Y Y Y s s ( ) ) Y c Y ) ) ( ( ( s s s Y s ) ) Y s s s s Y Y Y Y ) .` ` ` ` ` ` O.;.;.;.;.>.@.{ &.>.>.=.&.&.&.=.>.<.<.2.&.&.2.&.&.&.{ &.{ =.=.{ &.>.<.<.>.&.&.&.=.>.>.=.{ &.>.>.<.<.<.>.$.&.{ { { { =.2.&.<.<.<.&.{ &.&.=.<.<.=.=.<.&.{ { { { &.>.<.<.;.;.;.@.{ @.$.$.$.@.{ { $.>.<.<.=.&.&.2.&.&.&.{ &.&.=.=.&.=.3.a.<.2.=.&.&.=.2.2.=.&.&.3.3.a.a.a.<.2.&.&.&.&.&.2.2.&.<.a.3.=.&.&.&.2.a.a.2.=.<.=.&.&.&.&.=.2.a.a.a.a.",
"s.3.2.=.=.=.&.&.2.3.s.s.2.=.&.&.2.3.&.2.=.=.3.-.3.4.-.9.9.r.j.l.l.k.e.y.y.u.i.v.M.-X-X-X;X;X*X&XH.A.H.P.K.L.P.K.J.K.L.- B.V.V.R.R.R.R.V.V.V.C.B.A.P.P.P.L.A.1X1X1X:X#X+X+X+X~.~.v.n.b.b.c.y.e.e.r.j.9.r.-.-.4.-.4.3.*.*.*.2.3.s.s.3.=.&.&.=.=.2.s.s.s.s.s.3.=.&.=.2.2.>.=.{ { ` X.) 5 , 1 1 , 3 Y .O.{ @.&.=.>.>.2.&.{ $.<.;.;.;.;.O.` ) Y s p 4 3 3 3 2 2 4 i Y p 4 2 4 s ) ) ) .) ( ( ) Y Y s 4 2 2 1 2 2 4 p c u 4 3 4 u Y ( Y p 4 2 1 2 4 u p 4 1 1 2 2 2 3 3 4 p s s Y ) ) .` ` O.;.;.;.;.;.$.&.&.&.{ { =.2.<.<.2.&.{ &.=.2.&.2.=.=.2.&.=.>.&.{ { =.>.<.<.>.&.{ { &.&.=.<.<.<.<.<.>.&.{ &.>.>.>.=.&.&.&.3.<.2.{ { &.&.&.<.<.=.&.&.&.=.>.>.$.&.{ O.;.;.;.;.;.O.%.&.{ { { %.>.<.<.2.&.{ &.2.3.&.2.=.=.3.=.2.3.&.&.&.2.3.s.s.3.=.&.&.=.=.2.s.s.s.s.s.3.=.&.=.2.3.3.2.&.=.&.3.s.2.&.&.&.&.&.3.s.2.=.=.=.2.3.3.2.=.&.2.s.s.s.",
"s.s.s.s.3.=.=.3.s.s.3.=.*.*.*.=.s.2.*.s.=.-.3.4.-.d.4.9.9.9.e.t.z.z.z.c.i.v.M.M.-X-X;X:X,X=X6X- H.Y.P.P.P.P.P.P.K.K.K.P.N./.`.]._.}.{.].'.(.N.Y.L.K.K.K.P.L.C.2X2X1X1X:X;X+X+X-X-XM.n.v.u.y.y.e.z.t.e.j.w.9.d.4.-.d.4.*.*.*.-.2.s.s.s.3.=.2.s.s.s.s.s.s.3.=.&.2.3.3.<.<.<.X.{ ` X.T 3 1 JXJX3 , 5 ) %.{ %.;.<.<.3.3.3.=.{ %.;.;.X.;.X. .Y 4 2 3 3 3 2 2 2 2 2 2 3 2 2 1 , 3 s ) ) .) ( ( s 4 2 3 3 3 2 2 2 3 3 3 3 3 3 1 > 2 u s u 3 , 1 2 1 2 2 2 2 2 2 2 1 2 2 3 2 2 2 3 3 5 s ) .` ` %.;.;.;.;.;.<.1.&.&.>.<.3.2.=.&.&.{ &.3.=.&.3.=.&.3.=.&.<.=.{ { { &.=.<.<.<.2.&.=.<.<.<.<.<.<.1.&.{ =.1.;.<.<.3.2.&.{ 3.3.2.{ { &.{ &.3.<.=.{ &.>.<.<.;.;.;.%.{ %.;.;.X.;.;.;.X.{ { ;.;.;.1.=.&.&.{ &.3.2.*.3.=.=.3.2.=.s.2.*.*.*.=.2.s.s.s.3.=.2.s.s.s.s.s.s.3.=.*.3.s.s.s.s.s.3.*.*.3.s.3.*.*.*.*.*.3.s.2.*.=.s.s.s.s.s.s.=.*.2.s.s.",
"s.s.s.s.-.*.3.s.s.2.-.*.*.*.*.3.s.*.2.s.-.*.4.d.9.4.d.9.9.0.e.e.y.c.b.b.n.~.@X-X;X:X1X1X<XD.A.P.L.L.P.P.P.L.P.P.K.P.P.L.Y.A.(._.].].}.]./.B.Y.L.P.P.P.K.K.P.H.C.2X2X2X1X*X&X;X;X-X@X~.~.i.i.y.c.z.y.t.l.e.9.r.d.9.4.d.-.*.*.*.*.-.3.s.s.3.*.3.s.s.s.s.s.2.*.2.s.3.3.1.1.1.X.%.{ ) s 3 4 FXFXFX1 3 T { { X.1.1.1.1.3.3.3.%.{ X.;.X. .) s 4 , 1 4 FXFXFXFXFXFXFX4 2 4 FXFX3 > 4 Y ( ) ) s i 3 > 1 4 FXFXFXFXFXFXFX4 2 4 FXFX2 > 1 2 1 , 3 FXFXFXFX4 4 FXFXFXFXFXFXFXFXFX4 2 3 3 2 2 5 Y ) ) ` X.X.X.;.;.X.%.{ 1.<.1.%.&.{ { { { 1.3.&.=.3.&.{ 1.1.{ 1.1.%.{ { { { %.1.1.1.1.{ =.<.1.1.1.1.%.{ %.;.1.1.1.1.1.3.=.&.1.3.1.{ { { { &.3.3.%.{ 1.1.1.X.X.X.;.X.%.{ X.X.X.X.X.X.{ { X.X.X.%.{ { { &.&.3.3.*.2.s.-.*.3.3.*.3.s.-.*.*.*.*.-.3.s.s.3.*.3.s.s.s.s.s.2.*.3.s.s.3.3.3.s.s.3.*.3.s.3.*.*.*.*.-.s.s.-.-.3.s.s.3.3.s.s.s.-.-.3.s.",
"s.s.s.4.-.4.s.s.-.*.*.*.*.*.4.s.4.-.4.4.-.9.4.d.w.w.l.t.e.e.e.y.y.u.v.M.M.+X+X;X:X1X1X2XA.H.Y.P.P.P.K.K.P.P.L.P.P.L.P.K.K.Y.- V.C./.`./.A.Y.P.P.K.K.K.K.K.K.P.- V.C.qX2X=X<X1X1X*X+X~.~.~.~.v.b.c.y.k.k.e.e.r.l.w.w.d.4.-.9.*.*.*.-.4.s.s.-.-.s.s.s.s.4.-.-.s.s.1.*.&.%.%.1.X.{ Y 5 3 FXFXFXFX2 3 Y _ %.1.1.%.{ %.%.1.1.1.{ %.X. .Y 5 3 2 4 FXFXFXFXFXFXFXFXFXFXFXFXFXFXFX1 2 Y ( Y s 4 2 2 4 FXFXFXFXFXFXFXFXFXFXFXFXFXFXFX1 > > > 2 FXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFX4 2 3 5 Y ( ) X.X.X.X.X.{ %.1.1.%.{ { { { { %.1.1.&.1.1.&.{ %.1.%.%.1.%.{ { { { { { %.1.1.%.%.1.1.1.1.X.{ %.X.X.%.{ { { %.1.1.%.%.3.3.&.{ { { %.1.1.{ %.1.X.%.{ { %.X.X.X._ %.X.X.X.X. ._ .X.X.%.{ { { { { =.3.1.*.3.3.-.*.4.s.-.-.s.4.-.*.*.*.*.-.4.s.s.-.-.s.s.s.s.4.-.-.s.s.4.-.*.-.4.s.s.-.-.s.s.-.*.*.*.4.s.4.*.4.s.s.-.*.-.-.s.s.4.-.4.s.",
"d.d.d.4.-.d.d.4.-.*.*.*.*.-.d.d.-.-.d.4.9.9.9.j.r.9.j.l.t.e.y.y.y.i.v.-X-X#X+X1X1X1X2X- Y.P.P.K.P.P.K.K.P.P.K.P.P.P.K.K.L.Y.- Y.Y.A.V.N.Y.P.K.P.K.L.K.P.P.K.L.Y.N.`.V.B.7X2X2X<X&X&X+X~.~.~.n.n.i.u.b.c.y.e.e.l.r.9.j.d.w.9.9.*.*.*.-.d.d.4.-.d.d.d.d.4.*.4.s.3.*.{ { { { X.X.%.s 3 3 AXAXAXAX2 3 Y _ X.1.%.{ { { { %.1.1.%.{ .Y 4 , 4 AXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAX1 1 Y Y i 3 , 3 AXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAX2 > > > AXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAX3 , 4 p Y .X.X.X.%.{ X.X.X.{ { { { { { 1.1.%.%.1.%.{ { %.1.%.{ X.X.%._ _ { { { %.X.X.%.{ X.X.X.X.%.{ .) T ( _ { { { 1.1.1.%.1.1.%.{ { { 1.1.%.{ X.X.%.{ _ _ _ %.X.X.) ( T Y Y Y Y s Y T ( ( _ { { { %.1.3.*.-.s.4.*.*.-.d.4.-.4.d.-.*.*.*.*.*.-.d.d.4.-.d.d.d.d.4.*.4.d.d.-.*.*.*.-.4.d.4.-.4.d.-.*.*.-.4.d.4.-.4.d.4.-.*.*.*.4.d.d.-.-.d.",
"d.d.d.4.-.d.d.4.-.9.*.9.9.4.d.4.9.4.d.9.9.9.9.j.j.e.t.z.k.y.y.i.i.~.OX-X;X#X*X1X2XqXA.Y.P.K.P.P.P.P.P.P.K.K.K.P.P.L.P.K.K.P.; P.J.P.= Y.L.K.K.K.P.K.K.K.K.K.L.K.A.`.{.`.V.C. X<X=X=X&X&X+X#X-X@Xi.v.b.u.y.y.e.k.l.e.w.l.j.9.9.9.9.9.-.d.d.4.-.d.d.d.d.4.*.d.d.4.*.*.{ { { %.X. .p 2 4 VXVXVXVX4 3 p _ X.%.{ { { { { %.1.1.%.{ ) 5 < 4 VXVXVXVXVXVX4 2 2 2 4 VXVXVXVXVXVXVX1 1 p Y 4 > 3 VXVXVXVXVXVX4 3 3 2 4 VXVXVXVXVXVXVX2 > > > 3 VXVXVXVXVXVXVX4 2 2 2 2 3 3 2 4 VXVXVXVXVXVXVXVX4 3 2 4 Y . .X. ._ X.X.%.{ _ _ { { %.1.%.{ %.X.%.{ { { X.X.{ %.X.X._ _ _ _ _ { X.X.%._ X.X.X.X.%.( Y 5 3 w s ( _ { %.1.1.%.%.1.%.{ { { 1.1.{ _ ) T s ( ( _ _ _ X. .) s 4 3 3 3 2 2 3 3 4 p ( ( { { %.3.1.*.4.d.-.-.9.-.d.d.-.4.d.d.-.9.9.*.9.-.d.d.4.-.d.d.d.d.4.9.d.d.4.-.9.9.9.9.-.d.d.-.4.d.4.9.9.-.d.d.-.-.d.4.-.9.-.-.-.-.d.d.4.-.d.",
"f.d.f.4.9.4.f.d.9.9.9.9.9.d.d.9.9.d.d.9.9.9.0.j.l.t.e.z.b.c.i.i.~.~.#X;X:X*X=X2XqX- Y.P.P.K.P.P.L.P.P.P.K.K.K.P.P.P.P.P.K.; L.L.P.L.L.P.K.P.K.K.P.K.K.K.K.K.L.K.U./.}.].].}.V.V.9X=X=X&X*X;X;X+X+Xn.n.i.y.y.y.k.z.t.e.j.l.r.9.9.9.9.r.d.d.9.9.d.f.d.f.4.9.d.d.4.*.*.{ { { _ ..) 4 2 sXsXsXsXsXsX2 q ( X.%.{ { { { { %.1.1.%._ Y 3 4 sXsXsXsXsX4 2 2 2 2 2 2 2 4 sXsXsXsXsX1 , 5 u 2 3 sXsXsXsXsX4 2 2 3 3 2 2 2 4 sXsXsXsXsX2 > > > 1 sXsXsXsXsX5 1 2 2 2 2 2 3 2 2 2 3 2 4 sXsXsXsXsXsXsX4 , 4 T . ..._ ..X.X._ _ _ _ { X.X.{ { X.X.{ _ _ _ ..X._ Y T T Y s s s s Y ) ._ _ X.X.X.X.) s 4 < , , 3 s _ _ { %.1.%.{ 1.o.{ { %.1.%._ Y 5 2 2 w s ( ( _ .) s 3 , 1 2 2 2 2 2 3 3 2 w s _ %.1.1.-.-.4.4.-.9.9.9.4.d.4.9.d.d.4.9.9.9.9.4.d.d.9.9.d.f.d.f.4.9.d.d.4.9.9.9.9.9.9.4.d.4.9.d.4.9.9.9.d.4.9.4.d.9.9.9.9.9.9.w.f.d.4.9.d.",
"f.f.f.d.9.9.d.f.d.w.9.w.d.f.4.9.r.l.j.9.9.0.e.t.z.z.y.c.b.b.v.~.+X#X;X:X,X=X<XqX- Y.P.L.P.P.P.P.P.K.P.P.K.K.K.P.P.K.K.K.P.- P.P.L.J.P.P.K.P.K.K.P.K.K.K.K.K.P.K.Y.N.}.|.}._.].`.h 6X5X<X1X1X;X+X@X-Xn.i.i.y.y.u.z.z.e.t.l.l.r.9.w.r.j.f.r.9.r.f.f.f.d.4.9.4.d.4.1.*.{ { _ _ _ p 1 2 sXsXsXsXsXsX2 2 T .._ { { { { %.1.o.o._ s 4 3 sXsXsXsXsX4 3 4 p s s Y p 3 > 4 sXsXsXsX1 > 1 1 2 sXsXsXsXsX4 2 4 p Y Y s p 4 , 4 sXsXsXsX2 > , , 1 sXsXsXsXsX2 3 p Y s s Y Y s s p 4 2 2 2 q sXsXsXsXsXsX4 3 p ) . .( Y Y T T _ _ _ ..X..._ ..X..._ _ _ _ _ ..Y q 2 3 3 2 2 2 2 3 5 s ( ..........T w , 4 sX4 > q R _ _ { o.o.{ %.o.{ _ %.X._ ( t , 1 1 > 3 s ( . .T 4 > 1 sXsXsXsXsXsXsXsX4 < w ( o.1.1.*.1.d.4.9.9.9.9.w.f.d.9.r.f.f.r.9.9.r.f.f.r.9.r.f.f.f.f.d.9.r.f.f.r.9.9.9.9.9.9.d.d.9.r.f.9.9.r.f.9.9.f.r.9.9.9.9.9.w.d.f.d.9.r.f.",
"l.l.l.l.r.9.r.j.l.j.j.l.j.j.w.9.j.l.t.e.e.e.e.e.z.z.u.i.n.M.M.-X;X;X1X1X=X5XqXA.Y.P.P.P.K.P.P.P.K.K.K.K.K.P.P.P.P.K.K.P.Y.A.P.P.P.; P.P.P.K.P.P.K.K.K.P.K.K.K.K.K.A.[.].}.}.}.}.`.V.3X2X2X1X*X&X;X-X@X~.~.i.i.u.b.z.y.e.k.l.l.l.l.l.l.j.9.9.j.f.f.f.d.d.w.9.4.4.1.1.%.{ _ _ R w , w tXtXtXtXtXtXq 2 s _ _ _ { %.o.o.o.o.%.R t < 5 tXtXtXtXq w p T ) ......) p 3 2 tXtXtXtX1 > > > 4 tXtXtXtX4 4 p T ...._ _ ) Y 4 2 tXtXtXtX2 1 u i 1 3 tXtXtX4 2 i ( .._ _ ...._ ....R s i q 2 2 4 tXtXtXtXtX2 4 Y ) ) p q 2 3 5 Y ......T Y s T T T ( _ _ _ ( Y 4 , 1 2 2 2 2 3 3 1 , 3 p T .......Y 2 1 tXtXtX1 2 s _ _ _ ..o..._ o._ _ ...._ T 3 1 tXtX3 , w T ....s 2 > 1 tXtXtXtXtXtXtXtXtX4 3 Y ..1.%.0.4.d.w.9.9.9.9.9.j.l.w.9.j.l.l.l.j.l.l.j.9.9.j.l.l.l.j.j.r.9.j.l.j.r.e.9.9.9.9.r.l.w.w.j.e.9.j.j.9.r.j.9.9.9.9.9.r.l.l.j.w.9.j.l.",
"l.l.l.l.j.w.9.r.j.l.l.l.j.e.9.9.j.l.t.e.e.e.y.y.b.b.v.i.~.@X-X-X;X1X,X=X5XqX8XH.P.L.P.L.P.K.P.P.K.K.K.K.K.K.K.P.P.P.K.Y.A.A.U.U.H.= Y.P.K.K.P.K.K.K.K.K.K.L.K.K.K.Y./.'.}.}.}.}._.{.V.8XqX=X=X&X,X;X#X~.~.~.i.i.b.b.t.y.e.k.z.l.l.l.r.e.e.j.j.j.j.j.j.j.r.0.0.1.1.1.o.%._ _ i 1 1 wXwXwXwXwXwXwXwX3 w R _ _ %.o.o.o.o.%._ T 3 1 wXwXwXwX4 2 i _ .........._ ( i 2 4 wXwXwX1 > > 1 wXwXwXwX3 2 p ) ...._ _ ....) p 2 4 wXwXwX2 2 p p 2 2 wXwXwX2 2 Y ( .._ _ ...._ o..._ _ ( T p 4 , 4 wXwXwXwX4 , 4 Y Y 4 , 1 1 , 4 p T p w 2 2 3 3 w i d ( _ Y 4 , 3 wXwXwXwXwXwXwXwXq 2 2 i T ....) p 2 q wXwXwX3 3 Y _ _ _ _ ..E d E _ _ ...._ T 2 2 wXwXwX4 2 p E ( s 4 > > 1 2 2 2 4 wXwXwXwXwX3 t _ %.%.0.4.d.w.0.9.9.9.e.l.l.r.9.e.j.l.l.l.l.r.9.e.j.l.l.l.l.l.j.j.e.e.j.l.l.j.r.9.9.9.9.j.j.9.j.r.e.l.r.e.j.r.9.9.9.w.j.l.l.j.e.9.j.j.j.",
"l.l.l.l.l.l.t.e.e.t.t.t.e.e.t.e.l.z.t.e.y.y.y.u.b.b.v.~.OX~.+X#X*X=X=X5XqXuX- P.J.K.P.L.P.P.K.K.K.K.K.K.P.K.K.P.P.P.Y.A.R./.V.V.o V.D.Y.K.P.P.K.K.K.P.P.P.P.K.K.K.Y.* `._.}.}.|.|.}.'.V.0X9X<X=X1X:X#X~.~.~.~.i.b.b.c.y.y.y.e.t.t.e.e.e.j.l.l.j.j.r.w.0.0.0.0.0.0.o.o.o.o.R w > q qXqXqXqXqXqXqXqX3 2 d _ o.o.o.o..._ _ _ R 2 2 qXqXqXw , t T _ _ _ _ _ _ _ _ s 2 1 qXqXqX1 > > 2 qXqXqX4 > q T _ _ _ _ ........T 3 1 qXqXqX2 4 s p 2 2 qXqXqX2 2 Y _ _ _ _ .._ ..o._ _ ....o...Y 4 , q qXqXqXqX1 1 i i 1 1 qXqX3 , 1 2 2 2 2 2 3 3 2 2 w d ( s 2 1 qXqXqXqXqXqXqXqXqXqXqX4 2 p E _ Y q 2 qXqXqXqX2 4 T .._ _ ( s t 2 w s _ _ _ _ Y 2 2 qXqXqXqX2 w s ( R p 4 2 2 2 2 1 , 4 qXqXqXqX2 2 R 5.0.0.r.j.w.0.0.0.e.e.l.l.t.e.e.e.e.t.t.e.e.e.j.l.l.l.l.j.t.e.e.e.e.e.e.j.l.l.j.t.e.0.e.j.e.e.e.e.t.e.t.j.e.e.e.j.l.l.j.t.e.e.e.e.e.e.",
"l.l.l.l.l.l.l.k.t.e.e.e.t.k.k.e.k.z.z.t.y.y.u.c.m.M.@XOX-X+X+X&X=X=X<XqXuXA.Y.K.K.L.K.P.P.P.L.K.K.K.K.K.L.P.P.P.P.H.N./.].'.}.V.N.R.`.D.Y.K.L.K.K.K.P.P.P.P.L.K.K.L.A.(.|.}.}._.}.{.{.|.V.eXqX=X2X1X,X#X+X~.~.n.M.m.i.u.b.u.y.y.e.e.t.j.l.l.l.j.j.0.0.w.w.w.w.w.0._ ......p 3 q 9X9X9X9X9X9X9X9X9Xw 2 p ..o....._ _ ......s 3 w 9X9X9X3 1 p ...._ _ _ _ _ ....R w , 1 2 1 > > > 4 9X9X9X2 1 i ( _ _ ....o.o.....T w > 1 2 1 2 i T p 2 2 9X9X9X2 2 s _ _ _ _ _ } %.5.{ o.o.o..._ _ s 4 2 9X9X9X9X4 , 1 1 > 2 9X9X9Xq 2 2 w 9X9X9X9X9X9X4 2 i R Y 2 1 9X9X9X9X4 4 9X9X9X9X9X9X2 4 p R p 2 2 9X9X9Xq 2 i _ ...._ s 9 , , > q s ( _ _ R q 2 9X9X9X9X2 2 s E E T Y p p p p p 3 , 4 9X9X9X2 2 R o.o.0.w.j.j.w.0.0.e.k.l.l.t.e.l.t.e.e.e.e.t.l.l.l.l.l.k.e.e.t.k.k.k.t.e.e.e.t.l.l.k.e.e.t.e.e.e.e.e.e.e.e.e.t.l.l.k.e.e.e.t.k.l.l.k.e.",
"z.z.z.z.z.z.z.z.z.z.k.z.z.z.z.e.t.z.z.b.b.c.b.b.M.n.~.@X;X;X,X1X2X2XqXuXxXA.L.K.P.K.K.P.K.P.P.K.K.P.K.K.P.K.P.A.N.V.`.]._.|./.* D.V.}.`.D.Y.L.L.L.P.P.P.P.P.P.P.K.K.Y.V.}.}.}._._.}.}.}.}.V.qX5X<X1X1X,X;X-X-X-XM.n.i.v.b.b.b.k.k.z.z.z.l.l.l.j.w.0.w.j.r.r.w.o.o.o..._ d q 3 <X<X<X<Xw 2 w <X<X<X<X3 t E _ _ _ ..o.o.o.E t 3 <X<X<X<X3 t T ......o...o.o.....( s w 2 2 2 1 > 1 <X<X<X<X2 w T ......o.o.o.o.o.o._ d w 3 3 3 i T E Y 4 2 <X<X<X2 2 d _ ..o.o.o.0.} 0.7.o.7.5.} _ ....p 3 w <X<X<X<X1 > , > 1 <X<X<X<X<X<X<X<X<X<X<X<X<X<X1 w T T 4 , 1 2 2 2 2 2 2 4 <X<X<X<X4 , 4 s p 2 2 <X<X<X2 2 s _ _ _ T w , q <X4 , w T _ _ ( p 2 w <X<X<X2 2 Y E E E E T s p p p t , 2 <X<X<X3 3 T o.w.0.w.j.j.j.j.k.z.z.z.k.e.t.z.z.z.k.k.z.z.z.z.z.z.z.t.e.k.z.z.z.z.z.z.k.t.e.e.t.k.z.t.e.e.t.k.z.k.t.e.e.k.z.k.e.e.e.t.k.z.z.z.z.z.z.",
"z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.t.y.c.b.b.b.b.m.M.n.+X+X;X;X1X1X2X2XqXuXiXA.Y.P.P.P.K.K.P.K.K.L.K.K.K.P.P.Y.A.N.(.j ].].).}.].V.= Z.R.'.}.R.A.Y.K.K.L.K.P.P.P.P.P.K.K.P.N.].}.}.}._.}.}.}._.).D.9X5X<X1X1X1X;X-X-X@X~.i.n.m.b.b.b.z.z.z.z.z.l.l.k.0.w.h.h.w.w.7.7.o.o.o.E w < q ,X,X,Xw > > > 4 ,X,X,X2 1 p _ ..o.o.o.o...R 3 3 ,X,X,Xq 3 p ......o.o.o.o.o.o.o._ _ T T T Y i 1 2 ,X,X,Xw 2 p E ....o.o.o.o.o.o.o.} _ E T T T T E ..E p 2 w ,X,X2 2 d ..o.o.7.w.w.w.0.0.0.0.0.7.o.o.o.E w 2 ,X,X,X,X1 1 t 3 , 4 ,X,X,X,X,X,X,X,X,X,X,X,X4 > 2 Y E p q 2 2 2 4 p p 4 , 3 ,X,X,X,X1 1 p Y 2 2 ,X,X,X2 2 Y _ _ _ d 2 1 ,X,X,X1 3 T .._ _ d 2 2 ,X,X,X2 2 Y E E E E p 4 2 1 2 1 , 4 ,X,X,X3 3 E o.w.0.0.w.h.k.z.z.z.z.k.e.e.k.z.z.z.z.z.z.z.z.z.z.z.z.e.t.z.z.k.k.k.k.z.z.z.k.k.e.e.e.e.e.k.z.z.z.z.z.t.y.e.e.e.t.k.z.z.z.z.k.k.k.z.z.",
"z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.b.u.y.i.v.v.v.n.@X~.~.#X;X,X1X2X2XqXqXiX4X; L.K.P.P.K.K.K.K.K.P.K.P.P.U.A.N./.|.}.R.}.].'.}.V.Z.hXjXV.].'.V./.D.Y.P.P.K.K.P.L.P.K.K.K.P.A.`.}.{.}.|.}.{.}._.{.R.C.0X5X=X<X,X,X#X#X+X~.@XM.n.b.b.b.b.b.z.z.z.z.z.h.0.t.h.w.0.0.5.5.5.5._ p 3 q ,X,X,X,X1 > , > 2 ,X,X,Xq < w E ....5.} } } d 2 2 ,X,X,Xq 3 p ......o.o.o.o.o.o.o.o._ _ _ _ _ U 2 2 ,X,X,Xw 2 p E ....o.o.o.o.o.o.7.} o.o...} } _ _ _ _ U 2 2 ,X,X2 2 R o.o.7.7.w.w.w.0.0.w.w.w.7.7.5.} _ i 2 q ,X,X,X2 1 p p 1 2 ,X,X,X,X,X,Xw 2 2 2 2 1 > > w T E R d p Y p Y T T p 1 > 4 ,X,X,X2 1 p Y 2 2 ,X,X,X2 2 d _ ....Y 2 2 ,X,X,X3 2 T ...._ d 2 2 ,X,X,X2 2 p R R R p 4 , 1 2 2 2 w ,X,X,X,X3 t E 7.7.w.0.0.e.t.t.k.k.t.y.y.k.z.z.z.z.z.z.z.z.z.z.z.z.z.y.z.z.k.y.y.y.y.y.t.k.k.z.z.k.y.y.k.z.z.z.z.z.z.z.y.y.t.k.z.z.k.t.y.y.y.y.y.t.z.",
"z.z.z.z.z.z.z.z.z.z.z.b.b.b.b.b.b.i.i.i.i.OX~.+X~.!.#X,X1X1X2XqXuXiXiX- P.K.P.L.K.K.K.K.P.K.P.Y.A.N.V.`.].].|.R.).{.|.}.`.D.B.lXlXV.'.}.V.h /.D.Y.J.K.K.L.P.P.K.K.K.K.H./.{.}.}.}.{.{.{.{.{.}.h iX9X5X=X=X*X&X+X~.~.@XM.M.n.m.b.b.b.b.z.z.z.k.h.0.h.h.w.5.5.} } } } d q 2 #X#X#X#Xw , 4 i 9 2 #X#X#X#X1 2 R } } } } } } d 2 2 #X#X#X#X3 w E ....o.o.7.7.7.7.7.o.o.} } _ _ d 2 2 #X#X#X#X2 w T ......o.7.7.7.7.7.5.7.7.5.} } } } } _ d 2 2 #X#Xw 2 p ..7.5.0.w.h.h.w.0.w.w.0.0.5.} } } d 2 2 #X#X#X2 2 p Y w 2 #X#X#X#X#Xw , 1 3 2 2 2 2 q p R E R R U p U U U U i 1 > 2 #X#X#X2 1 p p 2 1 #X#X#X2 2 a R _ _ U 2 2 #X#X#X2 2 U ...._ d 2 2 #X#X#X2 2 a R R d q , 4 #X#X#X#X#X#X#X#Xw 3 U ..7.w.w.t.w.q.e.y.u.y.y.y.y.c.z.z.z.z.z.z.z.z.z.z.z.z.z.y.z.z.c.y.y.y.y.y.y.y.y.y.u.c.y.y.b.z.z.u.y.c.z.z.t.y.c.t.y.y.y.y.y.y.y.y.y.y.z.",
"b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.v.i.i.i.~.@X+X+X!.#X1X1X1X2XqXqXuXiXaXH.P.K.L.K.P.P.K.J.P.Y.- N./.`.{.}._.{.).x }.}.|.].g zXU.kXlXV.].].V.h [.R.H.L.K.K.K.K.P.K.K.K.K.Y.V.{.{.}.{.{.{.{.}.{.{.NXg 0X5X5X=X=X*X&X+X+X-X-XM.M.M.b.b.b.b.b.z.z.k.h.q.h.w.5.Q R R R R a q < q @X@X@X@X2 4 p R i 2 w @X@X@Xw 7 a } } } } } } R w 2 @X@X@X@X3 1 p ......o.7.7.7.7.7.7.5.} } } _ R q 2 @X@X@X@X2 1 p ^ ....o.7.7.7.7.7.5.7.7.5.} } } } } } d 2 2 @X@X@X2 t E 7.5.5.w.h.h.w.q.q.q.q.0.5.5.} } d 2 2 @X@X@X2 2 U E p 2 w @X@X@X@X2 1 p T U d d d d E E E R p w 2 2 2 2 2 1 > > 4 @X@X@X4 1 i p 2 1 @X@X@X2 2 a R R R d 2 2 @X@X@X2 2 U ...._ d 2 2 @X@X@X2 2 d R R d 2 < @X@X@X@X@X@X@X@X@X3 3 T 7.7.7.w.w.q.q.y.y.u.u.y.y.u.b.b.b.b.b.b.b.b.b.b.b.b.b.b.y.b.b.c.y.y.y.y.y.y.y.y.y.y.y.y.y.b.b.b.y.y.u.b.b.c.y.y.y.y.y.y.y.y.y.y.y.y.y.b.",
"b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.v.i.i.v.n.-X-X-X;X#X&X,X1X2XqXqXuXiXeX% Y.K.P.K.P.K.K.P.L.A.- R.]._.|.}.'.}.'./.R.}.).].R.zXU.kXlXkXN.`.}.h zX/.{.V.H.L.K.K.P.K.K.K.K.P.P.N.{.{.'.'.'.'.'.'.{.'.NXV.0XwXqX2X2X1X,X*X+X#X-X-XM.M.M.M.b.b.b.b.c.h.h.q.w.7.R r 7 7 7 7 1 < q n.n.n.n.9 2 p E E d 2 2 n.n.n.n.3 w R } } } } } } i 2 w n.n.n.w < q U ....5.7.7.7.7.7.5.} } 5.5...E p 2 q n.n.n.w < q U ....5.7.7.7.7.7.5.7.7.7.} } } } } } d 8 2 n.n.n.7 3 E 7.7.q.w.h.h.y.q.t.t.w.q.q.5.} } d 2 2 n.n.n.2 2 U E U 2 2 n.n.n.n.3 w E ..} } _ ......^ E p 8 < 1 2 2 2 2 2 2 w n.n.n.n.n.1 3 w 1 1 n.n.n.2 2 a E E _ U 2 2 n.n.n.2 2 U ...._ d w 2 n.n.n.2 2 d E E d q < q n.n.n.n.n.n.n.n.3 2 U 5.7.7.w.q.q.u.c.c.b.b.c.i.y.c.b.b.b.b.b.b.b.b.b.b.b.b.b.y.b.b.c.y.y.y.y.y.y.y.u.i.c.b.i.y.b.b.b.c.i.b.b.b.i.y.c.c.c.i.u.y.y.y.y.y.y.y.b.",
"b.b.b.b.b.b.b.b.b.b.b.b.b.m.n.i.i.n.M.-X-X-X;X;X,X*X=X<X2XqXuXiXaXN.H.P.K.L.K.P.P.H.- V.).j `.'.`.`.[.[.[.[.h `.}.}.`.C.lXA.vXkXzXD.`.].h PXg }.].C.U.L.K.P.K.J.K.K.K.K.- [.|.`.`.`.`.`.[.[.[.PXPXE.iXqXqX2X1X1X1X#X+X#X-X-X-XM.M.n.b.b.c.c.h.h.q.w...t < 1 7 7 8 9 w v.v.v.v.w > w R E E R w 2 v.v.v.v.2 2 d ..5.5.} } } d 2 3 v.v.v.v.q < q p R E ..7.7.7.7.5.} 5.7.5.5...R 3 2 v.v.v.v.q < q p R E ..7.7.7.7.5.7.7.7.5.5.5.5.5.5.R 3 3 v.v.v.7 9 E 7.7.w.h.h.c.q.q.y.u.h.h.w.7.7.5.R 7 2 v.v.v.2 2 U E U 2 2 v.v.v.w 3 p ^ } } 5.........E U q < 8 v.v.v.v.v.v.v.v.v.v.v.v.v.1 > , > 2 v.v.v.2 2 U ^ ^ _ R w 2 v.v.v.3 3 R ..E E R i 2 w v.v.2 2 d E ! R a q < 1 2 w v.v.v.v.v.t < t E 7.7.q.q.t.h.c.b.b.b.b.b.v.i.c.b.b.b.b.b.b.b.b.b.b.b.b.u.b.b.b.i.i.i.i.i.c.b.b.b.c.v.i.y.v.b.b.b.b.b.b.c.u.y.i.c.b.b.b.b.c.i.i.y.i.c.b.",
"b.b.b.b.b.b.b.b.b.v.v.v.n.n.n.~.n.M.-X-X@X#X#X:X1X1X=X9XqXuXwXtX X& Y.J.K.K.P.L.N.D.[.NXNXV.NXPXPXPXNX[.`.h h `.}.{.R.zXvXD.lXkXlXgX[.'.h vXN.`.{.].V.U.K.J.K.K.K.P.P.K.A.[.[.NXNXPXPXPXfXPXPXPXPX* iXwXqX9X<X1X1X1X+X#X-X-X@X@Xn.v.n.b.c.c.h.h.q.q.E 9 2 c.c.c.c.c.c.c.c.c.c.2 < i R E E E p 2 q c.c.c.w < w E 5.5.5.5.5.R w 3 c.c.c.c.c.w 3 3 3 w a R E 5.7.} 5.7.7.5.5.} R w 3 c.c.c.c.c.w 2 2 2 w d E E 5.7.5.5.7.7.7.7.7.7.7.7.R 9 8 c.c.c.8 7 R 7.7.t.h.u.u.q.u.u.y.q.u.w.7.7.7.R 9 3 c.c.c.2 2 U E U 2 2 c.c.c.2 2 R 5.} 5.5.5.5.5.E d q < q c.c.c.c.c.c.c.c.c.c.c.c.c.c.2 > < > 2 c.c.c.2 2 U E E ! E p 2 q c.c.3 3 R ^ E ! E d 2 2 c.c.3 3 U ^ ^ ^ E U w 2 2 2 3 w c.c.c.c.q 9 d 5.7.q.u.h.c.c.c.u.v.b.b.b.i.v.m.b.b.v.v.v.b.b.b.m.b.b.i.i.b.b.b.b.b.b.b.b.b.v.i.i.i.v.i.i.v.b.b.m.m.b.i.i.v.v.i.i.v.b.m.m.m.b.b.b.m.b.",
"n.n.n.n.b.n.n.v.i.i.i.i.~.v.n.~.-X-X@X+X+X&X&X*X1X2X<X9XqX0XrXeX& A.P.K.K.L.A.fXPXPXPXPXNXNXNXbX`.`.'._.R.NXh ].|.`.C.vXgXkXlXkXlXzXV.}.j vXgXR.}._.}.V.Y.K.P.P.K.L.P.K.H.(.|.'.`.[.NXPXC.PXPXPXPXgXaX0X0X5X5X<X1X1X*X#X;X+X~.~.~.~.i.v.c.x.h.u.q.q.! t 9 k.k.k.k.k.k.k.k.k.k.w < 9 i d d U i 1 7 k.k.k.k.1 1 a } 5.5.5.5.E p 2 9 k.k.k.k.k.k.w 7 7 7 7 r d E } 7.7.5.} } } ! a 3 q k.k.k.k.k.k.q 7 7 2 9 t U E 5.5.7.7.7.7.7.7.5.5.R 7 8 k.k.k.8 7 R 5.7.7.q.q.q.q.u.c.x.u.q.q.q.7.7.E 9 3 k.k.k.2 2 U E R w 2 k.k.k.7 7 R 5.} 5.5.5.} } R w < q k.k.k.k.k.q 2 q k.k.k.k.k.k.k.2 1 w 3 2 k.k.k.w 2 i R ! ! ^ U 7 7 k.k.2 2 U ! ! ! E U 2 2 k.k.2 2 U ^ ^ ^ ..E R d d p q < q k.k.k.k.7 r ! 7.q.u.x.x.u.u.i.i.v.n.b.v.v.n.v.i.i.i.i.i.v.m.m.b.n.v.i.v.b.m.m.m.b.n.v.i.i.v.v.n.n.i.i.i.v.v.v.v.i.i.i.v.n.n.v.i.i.i.v.n.m.m.m.m.n.",
"n.n.n.M.M.n.i.i.v.n.n.n.@X~.OX~.-X-X#X!.&X&X&X=X2X2X9X9X0XrXtXC.D.H.L.L.A.U.PXPXPXPXPXNXg [.'.'.}.{.{.}.V.D.(.}.].V.vXlXN.lXlXkXkXvXg '.j vXkXV.`.{.|.}.V.U.P.K.P.K.P.J.Y.V.].}.{.{.'.[.V.NXPXPXPXPX& rX0X0X5X5X2X1X*X&X+X+X#X@X@Xv.i.u.u.x.x.u.7.5.} d 9 t t.t.t.t.t.t.t.t.t.t.w 2 7 7 7 7 1 > 2 t.t.t.t.t < q a U R ! } ! R q < q t.t.t.t.t.t.t.t.w 1 < 1 r d 5.7.5.} } } } R w < q t.t.t.t.t.t.t.t.w 1 < 2 t R 5.6.5.7.7.5.5.| } R 9 9 t.t.t.7 9 R 6.6.q.q.q.u.u.q.u.u.x.u.8.q.6.5.R 9 7 t.t.t.2 2 U E E i 2 w t.t.2 7 d } } 5.7.5.} } d 7 1 t.t.t.t.w 2 2 2 2 2 q t.t.t.t.t.2 2 i i 2 w t.t.t.2 q R ^ ^ ! a 7 w t.t.7 7 d ! ! ! ! d 2 2 t.t.2 2 d ! ! ! } } } 5.5.^ U q < w t.t.t.9 9 Q q.q.u.x.u.u.u.i.i.i.n.M.v.i.i.i.v.n.n.v.i.i.v.M.M.M.n.v.i.i.v.n.v.i.i.i.v.n.n.n.v.i.i.n.i.i.i.i.i.i.v.v.i.i.n.M.n.n.i.i.i.v.v.n.v.i.",
"M.M.M.M.n.~.~.n.M.M.M.M.-X@X+X~.-X;X#X&X&X&X=X=X2XqX9X6X0XaXaX* fXU.; A.PXPXPXPXPX[.`.].j ].}.}.}._.}.V.vXg [.'.].V.lXlXN.lXlXvXkXkXg ].V.vXlXD.`.{.}.}.].V.H.Y.K.K.L.K.P.* _.{.{.{.{.`.x ].[.NXPXPXN.rXrX0X5X5X2X2X*X&X*X;X;X-X-X@Xn.u.q.u.x.8.7.7.5.R 9 7 r.r.r.r.r.r.r.r.r.r.r.r.w 7 7 1 > > w r.r.r.r.r.w 9 9 9 w a Q ! R a w 2 2 w r.r.r.r.r.r.r.r.t 2 < 0 U E 5.} } } } ! U w 7 7 q r.r.r.r.r.r.r.r.w 2 < w U ! 5.6.6.6.6.5.5.E 9 9 r.r.r.9 9 R 7.6.q.u.q.u.x.q.q.q.u.u.8.7.7.5.R 7 7 r.r.r.3 2 U ! ! a 7 3 r.r.9 9 R } | 5.7.5.| } a 7 r r.r.r.q < q a U p q < q r.r.r.r.2 2 a a 2 2 r.r.r.2 1 a ! ! R w 8 r.r.r.w 7 a Q ! ! Q i 7 w r.r.2 2 d ! ! ! ! } 5.5.5.5.! a 1 7 r.r.r.9 9 E q.q.u.x.x.u.i.i.~.~.n.M.@X~.OXn.M.M.M.M.M.OX~.v.M.M.M.n.n.OXOX~.~.~.v.n.M.M.n.~.~.~.v.n.~.n.OXOXn.~.n.n.~.~.~.@Xn.M.M.n.OX~.~.~.OXv.",
"M.M.M.M.@X~.@XM.-X@X@X@X-X-X@X+X#X;X;X&X&X&X=X=X2XqX0X0XaXaXo KXPXC.zXPXPXPXNX[./.'.'.).|.'.}.{.{.}.].(.vXh '.}.x PXkXkXgXlXlXlXkXkXD.[.V.vXkXvXh |.}.}.|.].R.D.K.K.L.K.K.- [.}.{.}.}.`.x ].].'.`.NXNXrXrX0X0X9X2X2X=X*X,X;X;X#X@X@Xn.x.u.q.8.8.8.7.5.U 2 7 4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.w w 4.4.4.4.4.4.4.4.t 2 < q a ! ! E R i 1 > 1 q 4.4.4.4.4.4.4.4.r 7 9 i ! } } } } } ! R i 1 > 1 w 4.4.4.4.4.4.4.4.t 9 9 i ! 7.6.6.7.7.7.R 9 7 4.4.4.9 9 Q 7.6.q.8.u.q.x.u.q.q.q.q.q.8.7.5.d 7 r 4.4.4.9 9 U ! Q a 9 w 4.4.9 9 R 5.| 5.7.7.| Q r 7 4.4.4.4.7 q U E ! E a q 2 4.4.4.4.2 2 U U 2 7 4.4.4.w < w R ! d 7 9 4.4.4.4.7 w R ! ^ R q 2 4.4.4.2 2 U ! ! ! ^ 5.5.5.5.5.} d 7 9 4.4.4.9 9 ! q.q.u.x.x.u.i.~.~.OXM.M.OX~.n.M.M.n.n.M.M.M.OX~.n.M.M.M.M.M.n.OXOXn.M.M.n.@X~.~.~.OXM.@X~.M.OX~.n.@X~.M.@X~.~.~.~.@XM.M.M.n.OX@XM.M.",
"-X-X-X@X~.OX-X-X@X+X~.+X@X-X-X+X+X;X:X&X&X=X=X9XqXqX0XtXaXeX+ PXPXPXPXPXNX[.'.{.}.}.'.x ].].}.{.'.}.j vXzXV.].).V.lXkXD.vXlXlXkXkXlXzXR.R.zXlXU.N.[._.}.{.'.}./.A.Y.K.K.K.Y./.].].{.}.].j ].}.{.{.'.[.h rXrX0X9XqX2X=X,X1X,X#X!.!.OX@Xn.x.q.8.8.8.5.R w < r 3.3.3.3.3.r r 3.3.3.3.3.3.3.3.3.3.3.3.3.3.3.3.3.3.3.3.3.q < w d ! ! E i 1 > > > 1 w 3.3.3.3.3.3.3.3.q 9 U } | } } } ^ ! i 1 > > > 1 q 3.3.3.3.3.3.3.3.w 9 U 5.6.7.7.7.5.R 7 7 3.3.3.9 7 Q 7.6.6.8.u.q.u.x.q.q.q.q.6.6.7.! t 9 3.3.3.3.9 9 U ! R w 9 3.3.3.7 9 E 7.6.6.7.7.6.Q 7 7 3.3.3.r 7 a ! ! ! ! ! a 9 w 3.3.3.9 w R U 7 1 3.3.3.3.9 7 i d i 9 r 3.3.3.3.7 7 U ! ! U 2 7 3.3.3.2 2 U ^ ! ! ! 5.5.5.5.5.} U 9 9 3.3.3.7 9 ! 8.q.u.x.x.~.~.~.~.@X-X@X~.@X-X-X@X~.~.@X-X-X@X~.@X-X-X-X-X-XOX~.@X-X-X@X~.~.~.~.~.@X-X~.@X-X+X~.@X@X~.@X-X+X~.~.~.~.OX@X-X-X@X~.@X-X",
"-X-X-X@X~.@X-X-X~.~.~.~.+X;X;X#X&X,X1X*X=X=X5XqXqXwX0XaXaXB.gXPXPXPXNX`.).'.}.{.{.}.}.R.].'.{.'.}.T.gXkXgX(.R.R.zXkXlXN.lXkXlXlXlXlXlXh /.zXlXlXN.j ].}._.|._.}.R.A.P.K.K.Y.h ].}.'.{.'.j ].|.}.{.}.`.h rXrX0XwXqX9X=X<X1X*X&X!.!.!.OXx.x.8.q.7.! U w < 0 2.2.2.2.r 7 7 7 7 9 9 t 2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.1 9 a ! E a 9 > > > 1 2 2 7 7 q 2.2.2.2.2.2.9 t Q | | | / ! a 9 > > > 1 7 7 7 7 w 2.2.2.2.2.2.9 t Q 6.7.7.6.| Q 7 7 2.2.2.9 7 ! 8.6.6.q.8.8.q.8.8.q.6.6.6.6.| d 2 9 2.2.2.2.9 t R ! R 9 9 2.2.2.7 7 Q 7.6.6.8.8.6.Q 7 7 2.2.2.7 9 R ! ! ! ! ! U 9 9 2.2.w 9 a ! R r < r 2.2.2.2.r 7 7 1 9 2.2.2.2.2.r 7 a ! ! a 2 q 2.2.2.7 1 i U U R ! / 5.5.5.5.| R 9 9 2.2.2.7 9 ! 8.8.q.x.n.~.~.~.~.@X-X@X+X@X-X@X~.~.~.~.@X-X-X@X+X-X-X-X-X@X~.@X-X-X@X~.~.~.~.~.@X-X@X~.@X@X+X~.@X-X@X+X-X@X~.~.~.~.~.~.@X-X-X+X+X-X",
"-X-X-X@X~.-X-X@X~.~.~.~.!.+X;X;X&X*X1X,X=X5X5XqXqX0XtXaXsXo PXPXNXj '.|.R.'._.{.}.}.).T.'.}.}._.].V.zXkXB.V.|.N.vXlXlXA.lXvXvXlXlXlXlXV.[.D.kXlXjX+ [.'.).}.].}.|.`.N.Y.L.K.- `.}.{.}.'.j ].}.}.}.}.'.g yXrXrXwXqX5X9X2X<X&X&X&X!.!.!.OXx.8.6.Q t 9 9 t >.>.>.>.q < 0 a a r 9 9 9 9 9 9 r >.>.>.>.>.>.>.>.>.>.>.>.>.>.9 w U Q a 9 < < > > t a i q 1 > 1 r >.>.>.>.r 9 a ! | | ! U 9 < < > < r a i q 1 < 1 w >.>.>.>.t 9 a 5.7.6.6.| Q 7 7 >.>.>.7 r ! 6.6.6.6.8.8.q.8.8.8.6.6.6.| d q < t >.>.>.t 9 a ! | R 9 9 >.>.>.7 7 Q 8.8.6.8.8.6.Q 7 9 >.>.>.r 9 a ! ! ! ! Q a 9 r >.>.9 9 R / ! a 1 2 >.>.>.>.>.r 7 9 i >.>.>.>.>.>.7 q a a q 7 >.>.>.>.1 > 1 7 9 w a E ^ / / 5.! a 2 9 >.>.>.7 7 Q 8.u.u.i.n.OX~.~.~.-X-X+X+X-X@X~.~.~.~.~.+X-X-X@X+X-X-X-X-X@X~.-X-X@X~.~.~.~.~.+X-X-X+X+X-X@X~.~.+X-X@X+X@X-X+X~.~.~.~.~.+X-X-X@X+X-X",
"-X-X-X#X~.-X-X-X+X~.+X+X&X&X#X1X*X=X1X<X=X5X9XqXwXrXaXaXE.C.NX[.R.`.'.'.x ].}.}.}.].R.).'.{.{.{.R.fXjXD.N.`.`.(.zXlXlXU.lXlXlXlXlXlXkXgX/.V.kXlXkXgXV.).}._.}.}.}.}.].V.A.Y.H.C.'.}.}.'.j ].}.}.}.}.}.h yXrXtXiXwX5XqX2X=X=X&X&X!.!.!.OXg.8.| t < r :.:.:.:.:.w < 0 W | | ! ! ! a t 9 9 9 7 9 9 9 9 r :.:.:.:.:.:.:.r 7 a Q a w < 9 :.9 > w U ! a i r 1 < r :.:.:.:.9 r Q | | Q r < q :.9 < q a Q a a r 1 < r :.:.:.:.9 r ! 8.6.6.| Q 7 7 :.:.t 7 a 5.6.6.6.6.8.8.6.8.8.8.6.6.| f 0 < w :.:.:.:.9 t ! 5.| R 9 9 :.:.:.7 7 Q 8.8.8.6.8.8.Q 7 9 :.:.:.:.9 q a ! ! Q a q 9 :.:.:.9 9 R 5.5.Q t < r :.:.:.:.:.:.:.:.:.:.:.:.:.:.r < 1 1 < r :.:.:.q > > > > 1 7 7 r a R R R a q < t :.:.:.7 9 Q 8.x.!.!.@X@X~.!.+X-X#X+X#X-X+X~.~.~.~.~.+X-X-X#X+X-X-X-X-X#X+X-X-X#X+X~.~.~.~.#X-X#X~.#X-X+X+X~.+X-X-X+X#X-X-X+X~.~.~.~.+X-X-X#X+X-X",
";X;X;X;X+X#X;X;X#X+X+X&X&X&X&X,X1X=X<X2X5X5X9XwX0X7XaXsXo NX`.`.j `._.].j ].|.}.].].R.].}.{.}._.g D.D.lXB.`.x vXkXkXgXgXlXlXlXlXlXlXkXzXV.g vXkXkXzXg R.|.'.}.|.'.].].R.R.N.U.N.'.}.].'.g ].}.].}.}.'.V.yXyXtXiX0X0XqX9X=X=X&X&X&X+XOXOXOX6.W 9 r G G G G G r < r W | 6.6.8.8.6.6./ ! Q d r 9 9 9 9 9 9 t G G G G G 7 7 U Q a 7 1 G G G 1 7 U ! ! Q f i 1 7 G G G G 9 9 W | 5.R 7 1 G G G 1 7 a Q ! ! R i 1 7 G G G G 9 7 Q 8.8.6.| a 7 r G G 7 7 Q 6.6.6.6.6.8.8.8.6.8.8.6.! a 0 < r G G G G w 9 U / 5.| Q 9 9 G G G 9 r ! 6.8.8.6.8.8.~ r 9 G G G G r < 0 a f a 0 < t G G G 9 9 Q 5.6.| U w 9 G G G G G G G G G G G G G G G r 9 7 r G G G G 1 > > > q G G r 9 9 9 9 9 7 9 t G G G G 9 y | 8.g.OX!.OX@X!.!.#X;X+X+X;X#X+X+X+X!.+X+X;X;X;X+X#X;X;X;X;X#X+X#X;X;X+X+X+X!.+X;X;X+X+X;X;X+X+X!.+X#X;X#X+X;X;X#X+X!.+X+X#X;X;X+X+X;X",
";X;X;X;X#X+X;X;X;X;X*X&X&X&X&X*X1X=X=X2X9X5XwXwXrXaXaX3X+ `.'.].j ].{.].j }.}.}.].].j ].}.'.].x D.kXlXlXN.`.g vXkXkXU.jXkXlXlXlXlXlXlXzXN.+ vXkXlXlXzXV.j '.}.}.}.}.}.R.).`.R.`.{.}.}.'.6 `.}.].].{.}.R.yXyXaXaX0XwXqX9X5X=X=X&X*X#XoXOX!.| i 7 G G G G G r < r Q 6.6.8.8.g.8.q.8.g.8.6.6.~ Q Q ! ! a r < t G G G G 7 7 a Q a 7 7 G G G 7 7 U ! ! ! ! f 7 7 G G G G 7 9 W | 5.R 7 7 G G G 7 7 a ! / / / U 7 9 G G G G 9 9 Q 8.8.8.! r 7 G G G 7 1 U / 6.6.6.6.6.8.8.| ! ! U t 9 9 t G G G G r < t ! 6.6.6.Q 9 7 G G r 9 f 6.6.8.8.8.8.8.6.f 9 t G G G G r 7 7 7 9 9 t G G G G 9 9 Q 8.6.6.| U 9 r G G G G G G G G t 9 r G G G G G G G G G G q > > > 1 G G G G G t 9 9 9 r G G G G G r 9 f 6.W.!.OXOXOX-X+X!.;X;X+X;X;X+X+X+X+X+X#X;X:X;X#X+X;X;X;X;X;X;X+X+X;X;X;X#X+X#X;X;X;X+X#X;X;X+X+X+X+X#X;X;X+X#X;X;X#X+X+X#X;X;X#X+X#X:X",
";X;X:X;X;X&X&X;X:X:X,X*X&X&X&X=X<X<X5XqX9X0XiXwXrXaXsXC.(.{.{.[.T.'.{.'.R.].}.}.}.).j ].).R.R.6 vXkXlXkXN.`.gXlXkXkXD.lXlXlXlXlXlXlXlXlXU.g vXlXlXlXlXV.[.R.R.).].}.|.R.].{.].}.}.}.}.{.g `.{.}.].].].R.E.yXaXtXrXwX9X5X5X=X=X,X,X;XoX!.!.~ 0 > r F F F r < r Q 8.8.8.g.g.g.Q.W..Xg.Q.W.W.W.W.8.8.8.6.f 7 2 F F F F 7 1 i W a 7 7 F F F w 7 i ! / / ! a 1 7 F F F F 7 9 W | 6.W 7 9 F F F e 7 a ! / ! ! a 2 9 F F F F 9 9 Q 6.8.8.! 9 9 F F F r < w a W Q Q Q Q ! ! a r 9 9 9 t F F F F F r < r Q 6.8.8.8.Q 9 > 7 7 < y ~ 6.W.W.Q.8.W.8.8.| y 9 F F F F F F r 9 t F F F F F F 9 9 ! 8.8.6.6.! i 9 9 t F F F F F r < < < 0 F F F F F F F F q < 2 9 2 9 F F F F F F F F F F F F F F r < y | W.W.!.OXOX!.#X#X+X;X#X&X;X#X&X&X&X#X;X:X:X;X#X&X;X;X;X:X:X:X:X#X&X#X;X:X;X;X;X;X;X#X&X;X:X#X&X&X&X&X&X;X:X*X&X;X:X:X;X;X:X:X;X&X&X;X:X",
":X,X*X&X&X&X&X&X*X,X1X1X1X*X=X=X=X2X5X9X9X0XwXrXtXaXyX+ `.|.}.R.[.{.}.].R.].}.}.}.|.R.'.).}.`.(.kXlXlXvXg g vXlXkXkXA.vXlXlXlXlXlXlXlXlXvXO zXkXkXlXkXvXg }.}.R.x ).|.R.}.|.}.|.|.}.}.}.j `.{._.}.].].R.E.yXyXrXtXwX0X0X9X<X2X1X,X&X^.!.!.| i > > 7 0 0 0 y Q 6.8..X.X.XOX!.!.!.OXOX!.W.W.W.W.W.8.8.8.~ r < t Z Z Z r < 0 U U 7 7 Z Z Z Z 7 9 a a U a 0 < r Z Z Z Z 7 9 Q | 6.W 7 9 Z Z Z Z 7 q a U f a 0 < r Z Z Z Z 7 9 Q 6.6.8.! 9 9 Z Z Z Z r < 7 7 7 9 9 9 9 9 9 9 9 y Z Z Z Z Z Z r < r Q 6.8.6.6.6.~ r > > > r ! 8.Q.W.W.Q..XQ.Q.Q.6.W 0 r Z Z Z Z Z Z Z Z Z Z Z Z Z Z 9 y / 8.8.8.8.6.~ W r < 7 0 9 9 9 9 y a e < 0 Z Z Z Z Z Z 0 < 0 a Q a 9 0 Z Z Z Z Z Z Z Z Z Z Z r 9 0 y ! 8.!.!.!.OX#X+X+X#X&X*X&X*X,X&X&X*X,X:X:X,X*X&X&X&X&X&X&X;X:X:X:X:X*X&X*X:X:X:X:X,X*X&X&X,X:X*X&X&X&X&X&X:X:X*X&X&X,X:X:X:X:X,X&X&X,X:X:X",
",X*X&X*X,X,X,X,X*X&X*X,X1X1X<X=X5X9X5X5X0X0XrXrXtXyXyXg }._.].+ ].}.].).T.]._._.}.|.R.'.{.|.V.vXkXlXkXlXg g zXvXlXlXA.vXkXlXlXlXlXlXlXkXlXD.D.zXlXlXlXkXzXV.`.{.}.}.'.x ].}.}.}.}.}.}.|.g `.{._._.}.].).E.yXyXrXtXrX0XwXqX2X<X=X$X&X&XoXoXQ.! i 0 0 0 y W / 8.W.W.Q.!.!.!.!.OX!.oXoXOX!.!.!.W.Q..X.XQ.6.f 7 7 Z Z Z Z 1 1 a a 7 7 Z Z Z Z t 7 7 7 7 7 9 t Z Z Z Z r < r Q 6.| W 7 7 Z Z Z Z y 7 7 7 7 9 9 t Z Z Z Z y < y ~ 8.6.6.Q 9 9 Z Z Z Z Z t 9 7 7 9 9 9 9 9 y Z Z Z Z Z Z Z Z r < r Q 8.8.W.W.Q.8.8.Q y 0 y Q 8..X.X.X!.!.!.!.!.W.W.| i 0 0 y Z Z Z Z Z Z Z Z Z Z Z r 9 f 6.8.8.8.8.Q.W.6.Q y 0 0 0 9 y W / 6.W y 9 9 9 9 9 9 7 < 0 W / 6.Q i 7 9 9 t Z Z Z Z Z Z y 7 < r W | 8.OXOXOX!.!.+X&X&X&X&X&X&X*X*X&X*X1X1X,X*X&X&X*X,X1X,X,X*X&X*X1X1X1X1X*X&X*X*X*X*X&X*X*X*X,X1X,X&X&X&X&X*X1X1X*X*X*X&X*X,X*X*X&X&X,X1X1X1X",
"*X&X,X1X1X1X1X1X1X,X*X=X=X<X<X2X9X5X5XwXwXwXtXtXyXyXC.R.'.}.R.g ].{.].T.'.'._.}.}.}.R.}.{.|.V.vXkXlXkXvXg (.lXlXlXlXA.vXlXlXlXlXlXlXlXkXkXvXO vXlXkXkXkXkXD./.}.].}.'.x '.{.}.}.}.}.}.{.j '.|.}.}.}.].).E.dXsXtXrXrXwXwXqX9X5X=X=X,X,XoXoXoX.X6.~ ~ ~ 6.8..X.X!.!.!.!.!.OXoXoX!.oXoXoXOX!.!.!.OXOX.XQ.W./ y < r C C C r < 9 t 1 7 C C C C C C r 9 9 r C C C C C C 9 e W 6.6.6.Q 7 7 C C C C C C r 9 9 t C C C C C C 9 r Q 8.8.8.6.Q 9 9 C C C C C C C C C C C C C C C C C C C C C y 0 0 y ! 8.Q.Q.W.Q..X.X.X8.6.~ 6.W.Q.!.!.OXoXOX!.!.OXOX.XQ.| W r < 7 9 9 0 9 9 y C C C r < y ~ W.Q..X.X.X.XQ.Q.W.| ~ ~ ~ ~ ~ 8.Q.8.6.~ f y 0 0 0 9 9 y W | 6.6.| ! U t 9 9 0 9 0 0 0 0 0 0 y ! 8.Q.Q.!.OXoXoX&X^.&X*X,X,X,X*X&X&X,X1X,X*X&X*X,X,X1X1X1X1X1X1X*X&X*X1X1X1X1X,X*X*X*X*X*X,X,X&X,X1X1X*X&X&X*X,X1X1X*X*X1X*X*X&X*X*X*X,X1X1X1X1X",
"=X,X1X1X1X,X,X1X1X1X1X<X<X=X5X9X5X9XqXuXiXiXaXaXyXyXg `.{.`.o R.}.}.].R.].'.{.{.'.|.R.{.|.).(.lXlXzXkXlX* zXlXlXkXkXA.vXlXkXkXkXlXlXlXlXkXkXD.lXlXlXlXlXlXlXN.[._.{.].R.{.{.{.{.{.}.}.|.j '.{.}.}.}.'.).E.ZXdXsXtXrXrX0X0X9X9X2X<X>X>X%X%XoXoXoX.X!.!..X.XoXoXoXoXoXoXoXoX;X#X&X&X;X;XoXoXoXoXoXoX.XW.Q.8.Q r 9 b b b b < > < > 7 b b b b b b b b b b b b b b b r 0 W 6.8.8.8.! 9 7 b b b b b b b b b b b b b b b r 9 W 8.Q.Q.Q.8.! 0 0 b b b b b b b b b b b b b b b b b b b y 7 < r W / 8..X.XW.Q..X.X.X.X.X.XoXoXoXoXoX!.!.^.!.^.oXoXoXoXoX.XW.Q y 0 0 0 0 0 0 0 0 0 7 < r ! Q.W.Q..X.X.XoXoXoX.X.X.X.X.X.XW.Q..X.XQ.Q.8./ ~ ~ ~ ~ ~ / 8.8.8.8.8.8.8.~ ! W y 0 0 0 0 y W ~ 6.Q..X.XoXoX^.^.&X&X&X,X1X1X1X1X1X*X=X=X=X=X*X,X1X1X1X1X,X,X,X1X1X1X=X=X1X1X1X1X1X1X1X1X1X1X1X1X=X,X1X1X1X1X,X1X1X1X1X=X,X1X1X1X1X1X1X1X1X1X1X1X1X",
"=X1X1X1X=X=X=X=X=X<X<X<X2X2X2X9X5XqXuXiXiXaXaXaXsXyX+ |.}.R.o [.}.}.].R.`.].'.{.'.).).}.}.V.vXvXlXlXlXvX* vXkXlXkXkXD.lXkXkXkXkXkXlXlXlXlXkXkXkXlXlXkXkXkXkXvXg [.}.`.T.{.{.{.{.}.|._.|.j }.}.{.'.'.'.).E.ZXdXsXaXtXrXwXwXqXqX9X<X=X$X$X^.^.XXoXoX.X^.oXoXoXoXoXoXoX;X,X,X,X,X*X&X*X,X,X,X;XoXoXoX!.!..X.X8.W 0 r b b 0 > > > > 7 b b b b b b b b b b b b b b r < y ~ 8.8.8.8.! 9 9 b b b b b b b b b b b b b b r < y / Q.Q.Q.Q.Q.~ 0 0 b b b b b b b b b b b b b b b y 0 0 0 0 0 y ! Q..X.X.X.X!..XoXoX!.^.!.^.^.XXoXoXoXoXoX&X^.%X,XoXoXoXoXoX.XW.| ~ ~ ~ ~ ~ ~ W y 0 0 y ~ Q..X!.!.oXoXoXoXoXoXoXoXoXoXoXoX!.!.!..X.X.X.X.X.XQ.W.W.Q..XQ.Q.Q.Q.Q.Q.Q.Q.Q.8./ ~ ~ ~ ~ ~ W.W.W.!.!.oXoXoX%X%X&X&X,X1X1X1X1X1X1X1X=X=X,X1X1X1X,X,X=X=X=X=X=X<X1X1X,X=X1X1X1X1X1X1X1X1X1X1X1X1X,X=X<X1X1X1X1X1X1X,X=X=X1X1X1X1X1X1X1X1X1X1X1X1X1X",
"=X2X2X<X=X=X=X=X=X=X5X5X5X9XqX9X5XwXiXiXrXrXaXsXdXyXg |.|.o + `.|.}.].R.`.'.}.}.{.'.).'.].V.zXlXlXlXkXlXU.kXkXkXkXlXjXkXkXkXkXkXkXkXlXlXkXkXkXkXlXlXlXkXlXlXzXzXV.'.R.|.'.{.}.}.}.|.}.|.R.].{.}.'.'.}./.E.VXdXsXaXtXrXwXwX0X9X5X5X=X=X$X$X$X^.%X%XoX^.%X%X%X%X%X,X,X,X,X,X,X,X,X*X&X=X*X*X*X*X$X&X^.oXoX.X.X/ i 0 9 7 > > 7 7 > 7 b b b b r r b b b b b y 0 0 0 y Q 8.Q.W.W.Q.~ 0 9 b b b b r r b b b b b y 0 0 0 y Q Q..X.X.X.X.X~ 0 7 b b b b y 0 0 0 0 0 0 0 0 0 0 0 0 0 y W ~ 6.Q..X.XoXoXoX^.oXoXoX^.^.^.^.^.^.^.&X&X&X*X&X&X,X,X,X$X&X%XoXoXXX!.!.Q.Q.W.W.W.W.| ~ ~ | W.oXoXoX^.%X%X%X%X%X%X%X%X%XoXoXoXoX^.^.^.XX.X.X.X!.!.W.!..X.X.X.X.X.X.X.X.X.X.X.X.XW..X.X!.W.W.^.^.^.^.^.^.&X$X*X*X$X<X1X1X=X=X<X2X2X<X=X<X<X=X=X=X=X=X=X=X=X=X=X2X2X<X=X2X2X2X2X2X2X2X2X2X2X2X2X2X=X=X=X<X<X<X<X<X=X=X<X2X2X2X2X2X2X2X2X2X2X2X2X2X",
"=X2X2X<X=X=X=X=X=X5X5X5X5X5X5X5X0XwXiXiXrXrXtXsXdXE.V.].R.B.o `.{.}.}.R.`.].}.].{.).).}.`.gXkXkXlXlXkXkXkXkXlXlXlXlXlXkXkXkXkXkXkXkXlXlXkXkXkXkXkXkXkXkXlXlXlXlXgXV.j |.}.}.}.}.}.|.}.}.R.].'.}.{.{.{.R.E.MXVXsXsXtXrXrX0X0X0X5X5X5X=X=X$X$X$X>X>X%X$X>X,X,X,X,X,X,X1X1X1X2X1X1X<X=X=X=X=X=X$X$X$X^.XXoXoX.XQ./ W y 9 9 t a a 7 7 v v v 0 < 7 7 7 0 0 0 0 0 y W ~ Q.Q.Q.W.W.W.~ 0 0 v v v e < 7 9 0 0 0 0 0 0 y W 6.W..X.X.X.X.X.X6.y < 7 0 0 0 0 0 0 0 0 0 0 0 0 0 y W ~ ~ 6.Q..X.XoXoXoXoXoX%X^.%X%X%X^.$X$X$X$X$X$X$X$X$X$X$X$X,X,X,X$X$X%X%X%XXX^.^.^.^.^.^.^.^.^.^.^.^.^.%X%X%X$X%X,X,X,X,X,X,X,X%X%X%X%X%X%X$X^.^.XXXX^.^.^.^.XXoXoXoXoXoXoXoXoXoXoXoXoXoX^.oXoXXX^.^.^.^.^.^.^.$X$X$X$X$X=X<X2X2X=X=X<X2X2X<X=X=X=X=X=X=X=X=X=X=X=X=X=X2X2X<X=X2X2X2X2X2X2X2X2X2X2X2X2X2X2X<X=X=X=X<X=X=X=X=X<X2X2X2X2X2X2X2X2X2X2X2X2X2X",
"5X2X2X<X5X5X5X5X5X5X5X9X9XqXqX0X0XwXiXiXtXtXsXsXdXO `.[.o SXo ].}.}.}.R.].'.}.}.}.R.).{.h PXkXkXlXlXlXlXlXkXkXkXlXkXkXkXkXkXkXkXkXlXlXlXkXkXkXkXkXkXkXlXlXkXkXlXkXgX+ |.{.}.}.|.}.}.}.].T.}.{.{.{.}.{.x BXVXVXdXsXtXrXtXwXwX0X0X5X5X5X5X=X=X$X<X>X=X$X>X<X<X<X<X<X2X2X2X2X2X2X2X<X5X5X=X=X=X=X=X$X$X%X%X%XoX.X.XQ./ ~ ! ~ / W 9 7 v v y < e i y 0 0 0 y W ~ 6.W.W..X.X.XQ.Q.Q.~ 0 0 v v y < r a y 0 0 0 y W ~ 6.Q.^.^.oXoXoXoXoXoXQ.~ y 0 0 0 y W ~ ~ ~ ~ ~ ~ ~ ~ ~ 6.Q..X.X.XoXoX%X%X%X%X%X%X>X$X>X>X=X$X$X$X$X$X$X$X$X=X<X<X=X=X<X<X<X=X=X>X>X>X$X$X%X%XXXXX^.^.^.^.^.^.^.$X%X%X$X$X>X>X<X<X<X>X>X>X>X>X>X>X>X$X$X$X$X$X$X$X$X^.$X%X%X%X%X%X%X%X%X%X%X%X%X%X%X^.%X%X$X^.^.^.^.$X$X$X$X$X>X<X=X=X<X2X2X<X<X2X2X2X<X5X2X2X<X<X5X5X5X5X5X5X5X5X2X2X<X5X2X2X2X2X2X2X2X2X2X2X2X2X2X<X5X5X5X5X<X5X5X5X<X2X2X2X2X2X2X2X2X2X2X2X2X2X2X",
"5X2X2X2X9X5X5X9X9X9XqXqXqXqX0X0X0XwXiXaXaXaXsXdXVXo [.R.+ nX+ ].{.}.}.T.].'.'.'.}.x T.].N.zXkXlXlXlXlXlXjXjXkXkXlXlXkXkXkXkXkXlXkXkXkXkXkXlXlXkXkXkXlXlXlXkXkXlXkXvXh '.{.{.}.].}.}.].`.).}.{.{.{.|.{.h AXZXZXdXsXyXrXtXtXiXiXwXqX9X9X5X5X=X<X<X<X=X=X<X<X<X<X2X2X2X2X2X2X2X2XqX5X5X9X2X2X2X2X<X=X$X=X>X%X%X%XXX.XQ.Q.Q.Q.Q.! 0 7 v v 7 7 f ~ ~ ~ ~ ~ 6.Q..X^.^.^.XXXXXX.X.X.X~ 0 7 v v 7 7 W 6.~ ~ ~ ~ ~ W.XX%X%X^.^.%X%X%X%X%X%X%XQ.6./ / / 6.W.W.Q..X.X.X.X.X^.^.^.XX%X%X%X%X%X%X%X>X>X>X>X>X$X<X<X<X=X=X=X=X=X<X<X<X<X<X=X5X5X<X<X2X2X<X<X<X>X$X$X$X%X%X%X%X%X$X$X$X^.$X$X>X>X$X$X<X<X<X<X<X<X<X>X>X>X>X<X=X$X$X=X>X>X>X>X>X$X$X$X>X>X>X>X>X>X>X>X>X>X>X>X>X$X%X>X%X$X$X$X$X$X=X>X>X>X>X5X5X5X<X2X2X2X2X2X2X2X5X5X9X9X2X2X2X2X9X9X5X5X5X9X2X2X9X5X2X2X2X2X2X2X2X2X2X2X2X2XqX5X5X9X2X2X2X2X2X9X5X9X2X2X2X2X2X2X2X2X2X2X2X2X2X",
"5X9XqXqXqXqXqXqXqXqXqX9X9X0X0XwX0XrXtXaXaXaXsXsXVXo [.+ mXnXg ].}.'.'.'.T.].}.}.{.l R.`.fXkXkXkXlXD.A.D.D.D.D.U.kXkXkXkXkXkXkXlXkXkXkXkXlXlXgXD.D.U.jXlXjXkXlXlXkXzXR.{.{.'.|.}.|.}.}.R.`.'.'.{.{.{.{.g AXZXZXdXyXyXtXtXrXrXwXwXqXuXqXqXqXqX2X2X<X5X5X2X2X2X2X2X2X2X2X2XqXqXqX9X5XqXqXqXqXqX2X2X2X=X=X>X>X%X%X%XXXXX.XQ.Q.Q.~ y < 7 7 < y ~ Q.Q.Q..XXX^.^.^.^.XX^.^.XX%X%XXXXX6.y 7 7 7 < y ~ Q..X.X.XXXXX%X%X%X%X^.$X%X%X%X%X%X%X%X%X%X%X%X%X^.^.XX%XXX%XXX%X%X%XXX^.XX%X%X%X%X>X>X>X>X>X<X<X<X=X=X<X2X2X<X<X2X2X2X2X9X9X5X5X9X5X5X9X2X2X2X2X<X=X$X=X=X$X$X$X>X>X>X>X>X>X>X>X>X>X$X=X<X<X<X<X<X<X<X<X<X<X<X<X=X=X<X<X<X<X>X>X>X>X$X$X>X>X>X>X>X>X<X>X>X>X>X>X>X$X$X<X<X<X<X<X>X<X<X<X5X5X^.5X9X5X5X9XqXqXqXqXqX9X5X9X9X5X5X9XqXqXqXqXqXqXqXqXqXqX5X5XqXqXqXqXqXqXqXqXqXqXqXqX9X5XqXqXqXqXqXqXqXqX9X5XqXqXqXqXqXqXqXqXqXqXqXqXqX",
"9X5X9XqXqXqXqXqXqX9X0X0X0XwXiXwX0XrXrXtXtXsXsXMXMXo `.g FXmXg }.}.{.{.'.R.].'.{.|.l R.R.vXkXlXvXlXlXvXkXU.D.gXvXkXkXkXkXkXkXjXjXjXjXjXkXlXlXlXlXvXvXgXD.U.vXlXvXkXD.`.{.{.].|.}.}.}.}.R.R.{.'.'.{.{.}.h AXZXVXMXyXyXtXaXaXtX0X0X0XwXqXqXqXqXqXqX5X5X9XqXqXqXqXqXqXqXqXqXqXqXqX5XqXqXqXqXqX9X9XqXqXqX5X5X<X>X>X$XXXXXXXXX.XQ.Q.~ r > > r ~ Q..XXXXX^.^.^.$X$X%X%X$X$X^.$XXXXXXXW.~ e > > y ~ W.W.^.XXXX%X%X%X%X>X$X$X$X>X>X>X>X>X>X>X$X$X%X%X%X^.$X%X%X%XXX$X$X%X%X%X$X$X>X>X>X>X>X>X<X<X<X2X2XqX9X5X9XqXqXqXqXqXqX9X5X5X9XqXqXqX9X5X5X9X9X9X9X5X5X5X<X<X<X=X=X5X$X>X>X>X>X<X<X9X5X5X5X9X9XqX9XqX9X9X9X9X9X9X9X5X9XqX<X9X9X5X9X9X9X9X5X5X9X9X9X9X9X9X<X<X<X<X<X<X=X5X<X<X<X2X<X<X9X5X6X6Xg E.9X9X5X5X5X9X9XqX9X5X5X6X9XqX9X9X5X6X9X9XqXqXqXqXqXqX9X9X9XqXqXqXqXqXqXqXqXqXqXqXqX5XqXqXqXqXqX9XqXqXqXqX9X9XqXqXqXqXqXqXqXqXqXqXqXqX",
"qX9X5X9XqXqXqX0X0X0X0XwXwXiXwX0XrXtXrXrXyXyXyXMXVX* h CXFX Xg }.].'.'.].j ].}.{.|.l R.h vXkXlXlXD.O . C.zXkXjXjXjXjXhXhXhXhXjXjXjXjXjXD.N.N.N.D.jXD.lXkXkXV.`.|.}.}.}.].}.}.}.x R.{.}.{.{.{.].g CXCXVXMXsXyXyXtXaXaXiXwX0X0X0X0XwXqX9X5X9XqXqXqXqXqXqX9X9X5X9X9X5X9XqX9XqXqXqX9X5X5X5X9XqXqX9X5X9X=X$X$X$X^.^.XXXXXXXXQ.~ y y ~ W.XX^.^.^.^.$X%X>X>X$X$X$X$X$X$X$X^.^.^.W.~ i y ~ Q.XXXX^.^.^.$X$X$X$X$X$X>X>X<X<X<X<X=X$X$X$X$X$X$X>X$X>X>X>X$X$X$X$X$X>X>X$X$X>X$X$X5X5X5X5X9XqXqXqXqXqX9X5X9XqXqX9X9X5X9X9XqXqXqX9X9X9XqX5X5X5X5X5X5X9X9X5X5X9XqX9X9X5X6X6X6X6X6X5X6X6X9X9XqXqX8X8X8X6X6X6X$X6X9X9X5XqXqX9X5X6X6X6X6X8X8X6X6Xg E.6X6X6X6X6X9X9X9X9X9X9X5X5X5X9X9X9X6X6X6X6X8XX C.8X6X6X9X5X5X5X5X5X6X9X9X6X6X8X8X8X8X6X6X6X9X9X9X9X5X9XqXqXqXqXqXqX9X9X5X9X9X5X9XqX9XqXqXqX9X5X5X5X9XqXqXqX9XqX9X9X5X5X5X9XqXqXqXqXqX",
"uXqXwX0X0X0X0X0XwXwXuXiXwX0XrXrXtXaXtXaXyXyXsXMXVXN.o CXDX Xh '.}.}.}.'.R.].|.}.{.l j V.vXvXB.. . . * lXjXjXhXhXI.I.F.I.I.hXhXhXjXN. . * gXvXkXN.].].}.}.}.}.}.{.].j T.{.}.{.'.}.`.E.CXCXZXVXsXsXyXyXrXtXaXiXiXwX0X0X0X0X0X0XuXuXuXuXuXqX0X0X0XwXwXwX0X0X0X0XqXuXwX0X0X0X0X0XqXqX9X5X5X5X9X9X>X$X$X^.$X%XXXXXQ.W.W.W.^.^.^.^.$X>X>X>X>X5X5X5X5X9X6X>X$X$X>X$X$XXXW.W.W.$X%X%X%X$X$X$X5X5X5X5XqX9X9X9XqX9X5X5X5X9X9X9X5X6X5X6X>X>X>X5X5X6X6X6X<X<X9X5X5X5X9X9X9X9X5X5X9XqXqXqXuXqXwX0X0X0X0X0XwXwXuXuXwX0X0X0XwXwX0XwX0X0XqX9X9XqX5X5X5X9XqXqX9X8X6X6X& E.6X6X8X8X8X8X8X8X6X6X6X8X8XX E.6X0X6XqXqX9X6X6X6X6X6X8X8X8XB.X B.8X8X8X8X6X6X8X8X8X8XqX9X9X9X9X9X6X6X8X8X8X8XX g 7X6X8X8X6XwX0X0XwX6X8X8X6X7X7X6X8X8X8X8X6X6X6X0X0X0XqXqXuXuXuXqX0X0X0XwXwXwX0X0X0X0XqXuXwX0X0X0X0X0XqXuXwX0X0X0XwXwXwXwX0X0XwXuXuXuX",
"uXuXuXuXwX0X0XwXuXiXwXwX0XrXrXrXaXtXtXsXyXyXdXVXVXD. XCXDXE.V.'.{.|.{.}.R.`.|.}._.l 6 C.vXo . . O B.D.D.jXhXI.I.F.F.F.F.F.F.F.F.I.jX. . . . O zXN.].}.}.|.}.}.}.}.}.j T.{.}.'.}.].V.AXCXCXZXVXMXdXsXyXyXrXrXtXiXiXiXwX0XwXuXuXuXuXuXuXwX0X0XwXuXuXuXuXuXwX0X0XwXuXwX0X0X0X0X0XwXuX0X6X0XqXqXqX9X9X>X$X$X$X>X%X%X%X%X%X$X$X$X>X>X>X9X5X6X5X6X5X9X9X5X9X5X5X>X5X$X>X$X$X$X$X$X$X>X>X>X9X5X5X9XqXqXqXqXqXqX5X5X9XqXqXqXqX9X9X5X6X9X9X9X6X6X6X6X5X9XqX9X6X6XqXqXqXqXqXqX0X0XwXuXuXuXuXuXuXwX0X0XwXuXuXwX0X0X0X0X0XuXwX0XwX0X0XwXwX0XwX9X0X0X6X0X8X8X8X8X8XX C.8X8X8X8X8X8Xg & 7X8X8X8XE.X 8X8X6X6XwXwXwX6X7X7X7X7X X8X7XE.B.8X8XwXwXwX8X8X6X8X8X8XwXwXwXwXwX6X6X8X8X8X8X7XX g 7X7X8X8X6XwX0X0X8X8X6X8X7X7XE.7X7X7X8X8X8X8X6X8XwXwXwXwXwXuXwX0X0XwXuXuXuXuXuXwX0X0XwXuXwX0X0X0X0X0XwXuX0X0X0XwXuXuXuXuXuX0X0XwXuXuX",
"iXiXiXiX0X0XwXiXiXwX0XrXrXrXrXaXaXyXyXsXyXMXVXZXVXO nXCXDXC.R.}.{.{._.).).R.).}._.j + (.A. . * gXvXlXlXkXjXI.I.I.F.F.F.F.F.F.F.F.F.F.I.D.gXgXD.* . . . h ).}.}.|.}.].}.{.{.6 R.}.{.}._.].+ FXCXCXZXZXMXsXsXyXyXyXrXrXrXtXiXiXwX0XwXiXiXiXiXiXwX0XwXiXiXiXwXwXiXiXwX0XwXiXwX0X0X0X0X0XiXiX0X0XwXwXwX9X9XqX9X9X6X6X9X>X>X>X>X>X6X6X9X9X9X6X6X6X6X6X6X9XqX6X8X9X6X6X9X9X6X5X9X6X6X6X6X6X6X9X9X9X9X6X9XqXqXwXwXwX0X0X0XwXwXwXwXqXqXqX8X6X9XqX9X6X6X6X6X0XqXqX0X0XwXwXwXwXwXwXuXiX0X0XwXiXiXiXiXiX0X0XwXiXiXwX0X0X0X0X0XwXiX0XwXiX0X0XwXwX0XwXiX0X0X0X0X0X0X8X8X8X$ E.7X8X8X8X8X8XE.X 7X8X8X7X* & 8XwX0X0XwXwX8X7X7X7XV.% X & 7X7X7X8X8X8X8X8X8X8X7X7X8XwXwXwXwXwX0X7X8X8X8X7X7X3X$ g 7X7X8X7X8X8X7X7X8X8X7X7XB.$ X g 3X3X3X7X7X7X7X7X8XwXwXwXiXiXwX0XwXiXiXiXwXwXiXiXwX0XwXiXwX0X0X0X0X0XiXiX0X0XwXiXiXwXwXiXiXiX0X0XwXiX",
"iXiXiXwX0XwXiXiXwXrXrXrXrXrXtXaXtXyXsXsXyXMXVXZXVX* AXAXDXC.R._.{.}.].j V.V.].{._.6 O gXvX . B.zXvXlXlXlXlXkXhXI.I.F.F.F.F.F.F.F.F.F.F.F.I.F.hXjXlXlXvXD.O . . . |.].}.|.}.}.}.{.{.6 R.}.}.'.{.[.& FXCXCXCXZXVXVXdXsXyXyXrXrXrXrXtXiXiXwXwXiXiXiXiXwX0XwXiXiXwX0X0X0XwXiXiX0XwXiXiX0X0XrX0XwXiXwX0XwXiXwX0X0X0X0XwXqX9X6X6X8X8X8X8X9X6X6X8X8X8X6X6X6X6X6X0XwXwX0XwXwX6X6X9XqX6X6X8X6X6X6X6X6X6X6X8XqXwX0X0XwXiXwXiXwX0X0XiXiXwX0X0X0XwXwXwX0X0XwXwX0X6X0X6X0XwXwX0X0XwXwX0X0X0XwXiXiXwX0XwXiXiXiXiXwX0XwXiXiXwX0XrXrXrXrXwXiXwX0XwXwX0XrXwXiXwXwXiXwX0XrX0XrX7X7X7X4X$ V.3X4X4X4X4X7XE.X C.4X7X7X$ N.8XwXwXrXrXwX8X7X7X& # g B.X E.3X4X8X7XE.V.g g % X X X X % wXwX8X7X8X8X8X7X7XE.3X$ g 3X4X7X7X7X8X7X7X7X4X7X$ $ N.* # E.# V.3X3X4XE.7X7X8XwXwXiXwX0XwXiXiXwX0X0X0XwXiXiX0XwXiXiX0X0XrX0XwXiXwX0XwXiXiXwX0X0XwXiXiXwX0XwXiX",
"iXiXiXwXrXiXiXwXrXrXrXrXrXrXaXaXyXyXsXsXyXMXVXZXD. XAXAXFXE.R.{.{.{.}.6 V.V.`.{.'.6 o vXlXO zXzXlXlXlXlXkXkXjXI.hXhXF.F.F.F.F.F.F.F.F.F.F.F.hXhXhXkXkXlXlXlXgXo g ).].}.|.}.}.}.{.}.6 R.{.'.}.{./.FXFXCXCXCXZXVXMXsXsXyXyXyXrXrXrXtXaXiXtXrXiXiXiXiXwXrXwXiXiXrXrXrXrXrXwXiXwXrXiXiXrXrXrXrXwXiXtXrXiXiXwXrX0X0X0X0XwXwX0X6X8XqX8X8X8X6X8XqX8X6X0X0X0X0X0XwXwX0X0XwXwX0X0X0XwX8X6X8X8X8X6X6X6X6X6X0XwXwXwX0XiXiXiXiXwXrXwXiXiX0X0X0X0X0XwXiXwX0XwXwX0X0X0X0XwXiXwX0XwXiXwXrXrXrXrXtXiXiXrXrXiXiXiXiXwXrXiXiXwXrXrXrXrXrXrXiXiXrXrXiXwXrXrXrXiXwXrXwXiXtXrXrXrX7X7X7X4X$ * 3X4X4X4X4X3X3X# C.3X3X3X# 7X7XeXwXeXrXeXeX7X% $ E.3X3X% C.3X4X7XV.g g g g g C.E.E.E.eXeXeXeX7XeXeXE.& # # 3X$ g 3X4X3XE.E.7X7X7X7XC.$ & 3X X X# V.@ g E. X* X V.3XeXeXwXiXwXrXwXiXiXrXrXrXrXrXwXiXwXrXiXiXrXrXrXrXwXiXtXrXiXiXtXrXrXrXrXtXiXiXrXrXiX",
"aXaXaXtXrXaXaXaXrXrXrXrXrXtXaXaXyXsXsXyXMXMXMXZXZXCXCXAXFXE.R.}.}.}.[.6 D.zX/.{.].(.N.vXkXvXkXkXjXjXgXkXjXkXhXjXjXjXI.F.I.I.F.hXF.I.hXhXF.hXhXI.kXkXkXlXkXlXlXvXO V.|.}.}.}.}.}.}.{.].6 R.{.'.}.}.g FXDXCXCXCXZXZXVXVXdXsXyXyXyXrXrXtXaXaXtXrXaXaXaXaXtXrXaXaXtXrXrXrXrXrXtXaXaXrXtXaXtXrXrXrXaXaXrXtXaXaXrXrXrXrXrXrXiXiXwX0XwXwXwXwX0X0XwXwXwX0XrXrXrXrXtXaXtXrXtXiXrXrXrX0XwXwX0X0XwXwX0X0X0X0XrXrXiXiXtXrXaXaXaXaXtXrXaXaXtXrXrXrXrXrXtXaXaXrXtXaXtXrXrXrXaXaXrXtXaXaXrXrXrXrXrXtXaXaXtXrXaXaXaXaXtXrXaXaXaXrXrXrXrXrXtXaXtXrXtXaXtXrXrXrXaXaXrXtXaXaXrXrXrX7X7X7X4X$ @ & V.3X3X3X3X3X% % 3X3XV.$ 3X7XeXeXeX7XeXeX& & 3X X X X% C.& * 3X7X7X7X7XeXtXeXeX7XeXeXeXeXeX7X3X& X % g g 3X$ g 3X3XE.# % 3X3X3X3X$ N.3X X X X# E.# V.E.V.@ @ % 3X4XeXeXaXtXrXaXaXtXrXrXrXrXrXtXaXaXrXtXaXtXrXrXrXaXaXrXtXaXaXrXrXrXrXrXtXaXaXtXrXaX",
"aXaXaXtXrXtXaXaXtXrXrXrXtXaXaXyXyXsXsXMXMXMXMXZXAXCXCXAXFXE.R.|.}.]./.g D.vXN.|.R.PXD.gXkXlXkXjXD.jXD.kXkXjXjXkXjXjXI.hXhXhXhXhXI.hXjXhXhXjXjXjXkXkXjXkXkXkXjXkXC./.|.}.}.}.}.}.}.}.].6 R.{.}.}.|.g FXDXCXCXCXZXZXVXMXdXdXsXyXyXyXyXaXaXaXtXtXaXaXaXaXtXrXaXaXaXrXrXrXrXrXrXtXaXtXrXaXaXrXrXtXaXtXrXaXaXtXrXrXrXrXrXtXaXaXtXrXtXiXwXiXtXrXtXiXaXrXrXrXrXtXaXaXtXtXaXaXrXrXrXrXtXaXtXrXwXaXtXrXrXrXrXtXaXaXrXtXaXaXaXaXtXrXaXaXaXrXrXrXrXrXrXtXaXtXrXaXaXrXrXtXaXtXrXaXaXtXrXrXrXrXrXtXaXaXtXtXaXaXaXaXtXrXtXaXaXtXrXrXrXtXaXaXtXtXaXaXtXrXrXrXaXaXtXtXaXaXtXrXrX7X7X4X4X% # # @ # % N.3X3XC.# E.3X& * 3X7X7XeXeXeX7Xg g 3XE.E. X= # E.% * 3X7X7X7X7XeXaXtXeXeXeXeXeXeX4XE.X % C.3X3X3X3X% g 3X3X& @ @ V.3X3X& V. X XE.E.= # (.# = E.% @ # # 3X4XeXeXaXtXrXaXaXaXrXrXrXrXrXrXtXaXtXrXaXaXrXrXtXaXtXrXaXaXtXrXrXrXrXrXtXaXaXtXtXaX",
"aXaXaXaXtXtXaXaXaXyXyXyXsXsXsXyXsXdXdXMXMXMXVXCXAXAXCXFXFXE.R.}.{.].g h N.vXgX`.h vXgXU.jXjXjXjXjXjXjXjXkXjXkXkXjXjXjXjXjXjXjXjXjXjXkXjXkXkXkXkXkXkXkXjXjXjXjXkXV.].{.{.}.|.}.}.}.).|.j T.}.}.}.R.Z.FXDXDXCXCXCXZXZXMXVXdXsXsXyXyXsXaXaXaXyXaXaXaXaXaXaXtXtXaXaXtXrXrXrXrXrXtXaXaXtXaXaXtXrXtXaXtXtXaXtXrXrXrXrXrXtXaXaXaXrXtXaXaXaXaXaXrXtXaXaXaXtXtXtXaXaXaXyXtXaXaXrXrXrXrXtXaXaXrXtXaXaXtXrXtXtXaXaXaXyXaXaXaXaXaXaXtXtXaXaXtXrXrXrXrXrXtXaXaXtXaXaXtXrXtXaXtXtXaXtXrXrXrXrXrXtXaXaXaXtXtXaXaXaXaXaXtXtXaXaXaXtXtXtXaXaXaXyXtXaXaXtXrXrXyXtXaXaXrXtXaXaXtXeXeXeX4X4X% % XV.& # @ & 3X X% % 3X# V.3X7X7XeXeXeXeX4X4X3XV.% # @ # X% g 3X7X7XeXeXtXaXtXeXeXeXeXeXeXE.X g 4X4X4X3X3X3Xg % 3XE.# g # & 3X3X3X X XN.% # # & (.# = V.@ & C.@ N.4X4XeXpXtXrXtXaXaXtXrXrXrXrXrXtXaXaXtXaXaXtXrXtXaXtXtXaXtXrXrXrXrXrXtXaXaXaXtXtXaX",
"aXaXaXaXaXyXyXaXaXaXsXsXsXsXyXyXsXdXVXMXMXMXVXCXAXAXCXDXFXE.V.{.{.`.= V.V.vXlXV.h zXjXD.jXjXhXjXlXkXjXjXjXkXkXkXkXkXkXkXjXkXlXlXlXlXlXkXkXkXkXlXkXkXjXjXjXjXhXjXV.].{.}.}.}.}.}.].R.}.j ).|.|.{.h HXFXDXDXCXCXCXZXZXVXMXdXdXdXsXsXsXsXsXyXyXaXaXaXaXaXaXyXyXaXaXaXaXyXyXyXyXyXyXaXyXyXaXyXyXaXaXyXaXaXyXyXyXyXyXaXaXaXaXtXyXaXaXaXaXaXaXtXyXtXaXaXaXaXaXaXaXyXyXaXaXaXyXyXrXyXyXaXaXyXyXaXaXaXaXaXaXaXaXyXyXaXaXaXaXaXaXyXyXaXaXaXaXyXyXyXyXyXyXaXyXyXaXyXyXaXaXyXaXaXyXyXyXyXyXaXaXaXaXyXyXaXaXaXaXaXaXaXyXyXaXaXaXaXaXaXaXyXyXaXaXaXyXyXyXyXyXaXaXyXyXaXaXaXaXeXeX4X4Xg # X X XC.# # 3X XN.@ % # 3X3X4XeXeXeXeXeX4X4X= @ # % # % X% g 3X4XeXeXpXaXaXeXeXtXeXeXeXE.X B.3X4X4X4X4X4X4XN.# X& % X= # 3X3X3XbX% @ # % # = (.# % # % XbX# % 4XeXeXeXaXyXyXaXaXaXaXyXyXyXyXyXyXaXyXyXaXyXyXaXaXyXaXaXyXyXyXyXyXaXaXaXaXyXyXaXaX",
"sXsXsXsXsXyXyXsXsXsXsXsXsXyXyXyXdXdXVXMXMXVXCXCXAXAXDXDXFX Xh }.{.V.fXV.'.h zXV.V.zXlXB.jXhXhXI.hXhXhXhXjXkXkXkXkXlXlXlXF.jXlXlXlXlXjXkXlXkXkXlXkXjXjXjXjXjXhXjXh '.}.}.}.}.}.'.R.[.).j {.{.{.}.g HXFXDXDXDXCXCXZXZXVXMXVXVXdXdXdXsXsXyXyXsXsXsXsXsXsXsXsXyXyXsXsXsXsXsXyXyXyXyXsXsXyXsXsXyXsXsXyXsXsXyXyXyXyXsXsXsXsXyXyXsXsXsXsXsXsXsXsXyXyXsXsXsXsXsXsXyXyXyXsXsXsXyXyXyXyXyXsXsXsXyXyXsXsXsXsXsXsXyXyXsXsXsXsXsXsXsXsXyXyXsXsXsXsXsXyXyXyXyXsXsXyXsXsXyXsXsXyXsXsXyXyXyXyXsXsXsXsXyXyXsXsXsXsXsXsXsXsXyXyXsXsXsXsXsXsXyXyXyXsXsXsXyXyXyXyXyXsXsXsXyXyXsXsXsXpXeX4X3Xh # C.bXbXC.# % bXbXbX% @ # % 4X4XeXeXeXeXeX4XC.@ % E.V.# % bX% g 3X4XeXpXpXsXyXyXpXpXyXeXeX% & 4X4X4X4X4X4X4X4XC.@ & @ C.3XE.@ E.bXbXg @ = (.k # = fX% @ # C.bXbX& X V.eXeXpXsXsXyXyXsXsXsXsXsXyXyXyXyXsXsXyXsXsXyXsXsXyXsXsXyXyXyXyXsXsXsXsXyXyXsXsXsX",
"sXsXsXsXsXsXsXyXyXsXsXsXyXyXsXMXZXZXVXMXMXCXCXCXAXAXFXDXFXE.g |.{.g IXh ).l g V.V.vXvXN.jXhXI.I.I.I.hXhXjXjXkXkXlXlXkXlXN.Z.Z.Z.Z.Z.Z.N.lXkXkXlXkXjXjXhXhXI.I.hXh }.}.}.}.].}.}.j ].R.j |.'.'.'.g HXFXDXDXDXCXCXAXZXVXVXVXMXVXVXsXyXyXyXsXdXsXsXsXsXyXyXyXyXyXyXyXsXsXsXsXsXyXyXyXsXyXyXyXyXsXyXsXsXyXyXyXsXsXsXsXsXyXyXyXyXyXyXsXsXsXsXsXsXsXyXyXsXsXsXyXyXsXyXsXsXsXyXyXyXyXyXsXsXsXyXyXyXyXsXsXyXyXyXsXdXsXsXsXsXyXyXyXyXyXyXyXsXsXsXsXsXyXyXyXsXyXyXyXyXsXyXsXsXyXyXyXsXsXsXsXsXyXyXyXyXyXyXsXsXsXsXsXsXsXyXyXsXsXsXyXyXsXyXsXsXsXyXyXyXyXyXsXsXsXyXyXyXyXsXyXeX4XnXC.@ # & % # % E.bXbXbXE.# X g 4XeXeXeXeXeXeXnXg @ % & @ @ # bX% % 4XeXpXpXyXyXyXyXyXyXeXeXeXX % 4X4X4XnXE.g * E.bX# X & bXbXbX# & bXbX% @ = % @ @ & bX% @ N.bXbXbXC.X X E.eXeXyXyXyXyXyXyXsXsXsXsXsXyXyXyXsXyXyXyXyXsXyXsXsXyXyXyXsXsXsXsXsXyXyXyXyXyXyX",
"dXdXdXdXdXdXdXsXsXyXyXyXsXdXVXMXVXZXZXVXCXCXCXAXAXAXDXDXFXFXg ).].N.IXh T.l l j 6 g V.+ zXhXI.I.I.I.I.hXjXjXkXlXlXlXlXjXZ.S.S.Z.Z.Z.Z.N.lXvXlXlXkXjXhXhXI.I.I.hXV.{.}.}.}.].'.|.T.'.R.j |.R.|.R.D.HXFXFXDXDXCXAXAXZXVXVXZXVXVXMXMXMXsXdXdXdXdXdXsXyXyXsXsXsXsXsXyXyXyXsXsXdXsXyXyXsXyXyXyXyXyXyXyXyXyXsXdXdXsXyXyXyXsXsXdXsXsXyXyXsXdXdXdXdXdXsXsXyXyXyXsXsXsXyXsXdXsXsXyXyXyXsXdXdXsXyXdXsXyXyXyXyXsXsXdXdXdXdXsXyXyXsXsXsXsXsXyXyXyXsXsXdXsXyXyXsXyXyXyXyXyXyXyXyXyXsXdXdXsXyXyXyXsXsXdXsXsXyXyXsXdXdXdXdXdXsXsXyXyXyXsXsXsXyXsXdXsXsXyXyXyXsXdXdXsXyXdXsXyXyXyXeXeXeX4X# X # % N.bXbXnXnXnXbX$ $ nXnXeXyXpXyXmXeXnXE.# # # # % V.bX& X E.eXeXyXyXyXsXdXsXsXyXmXeXB.X $ $ X X $ N.nXnXnX$ # XnXnXnX% # E.bXN.# # # # & E.bXV.h bXbXnX4X4X* B.eXeXyXyXsXsXsXsXyXyXyXsXsXdXsXyXyXsXyXyXyXyXyXyXyXyXyXsXdXdXsXyXyXyXsXsXdXsXsXyX",
"dXdXdXdXdXdXdXdXdXdXZXZXZXZXZXMXVXZXZXZXZXAXAXAXAXAXDXFXHXSX+ ]./.(.IX& T.l z l l l l 6 zXhXI.I.I.I.I.hXhXjXkXlXlXkXkXlX= Z.S.S.S.Z.S.N.lXlXlXlXjXhXhXhXI.I.F.hXR.{.'.{.'._.'.V.].}.x l |.j '.6 GXJXHXFXFXFXAXAXAXAXCXVXZXZXZXZXZXZXZXZXdXdXdXdXVXMXVXdXdXdXdXdXdXdXVXMXMXVXdXdXVXMXMXVXdXdXdXVXMXMXVXdXVXMXMXMXVXdXdXdXdXdXdXdXVXMXVXdXdXdXdXdXdXdXdXdXdXdXdXMXVXdXdXdXdXdXdXdXdXdXMXVXdXdXdXdXdXdXdXdXdXdXdXdXVXMXVXdXdXdXdXdXdXdXVXMXMXVXdXdXVXMXMXVXdXdXdXVXMXMXVXdXVXMXMXMXVXdXdXdXdXdXdXdXVXMXVXdXdXdXdXdXdXdXdXdXdXdXdXMXVXdXdXdXdXdXdXdXdXdXMXVXdXdXdXdXsXpXBXmXmXE.C. XnXnXnXnXnXnXnXnX# C.nXnXmXmXpXsXMXmXmXnXnXnXbXbXbXbXnXV.& mXmXmXVXsXdXdXdXdXdXsXmXmXmXmXE.E.E. XmXmXmXmXmXB. XnXnXnXnXN.X C.nXnXnXbXbXbXnXnXnXnXnXnXnXmXmXmXmXBXmXmXVXdXdXdXdXdXdXdXVXMXMXVXdXdXVXMXMXVXdXdXdXVXMXMXVXdXVXMXMXMXVXdXdXdXdXdXdXdX",
"ZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXVXVXZXZXZXAXAXAXAXAXDXDXFXHXSX+ `.g JXIX& T.z z z z l l g = jXhXI.I.I.I.hXjXjXkXlXlXlXkXlXZ.Z.Z.Z.Z.Z.k jXlXlXkXkXjXjXhXhXI.I.I.hXR.|.'.}.}.}.}.j '.}.j j '.T.|.& GXGXHXHXFXFXAXAXAXCXCXZXZXZXZXZXZXZXZXZXZXZXZXZXMXVXZXZXZXVXVXZXZXZXZXZXVXVXMXVXMXVXVXZXZXZXZXZXVXMXVXMXMXVXVXZXZXZXZXVXVXVXZXZXZXMXMXZXZXZXZXZXZXZXZXZXZXZXZXVXMXVXZXZXZXZXZXZXVXVXMXZXZXZXZXZXZXZXZXZXZXZXZXZXMXVXZXZXZXVXVXZXZXZXZXZXVXVXMXVXMXVXVXZXZXZXZXZXVXMXVXMXMXVXVXZXZXZXZXVXVXVXZXZXZXMXMXZXZXZXZXZXZXZXZXZXZXZXZXVXMXVXZXZXZXZXZXZXVXVXMXZXZXZXZXZXZXVXBXBXBXmXmXmXnXmXmXmXmXnXnXnX# E.mXmXmXmXMXMXMXmXmXmXmXnXnXnXnXnXnXnXmXmXBXVXVXVXZXVXVXVXVXVXVXmXmXBXBXBXBXBXBXBXBXBXBXmXmXmXmXmXmXmXE.mXmXnXnXnXnXnXnXnXmXmXmXmXBXBXBXBXBXBXMXVXVXZXVXVXVXZXZXZXZXZXVXVXMXVXMXVXVXZXZXZXZXZXVXMXVXMXMXVXVXZXZXZXZXVXVXVXZXZX",
"ZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXVXCXCXCXAXAXAXAXDXDXFXHXHXHX+ [.+ IXIX& T.z l l z l l E.KXZ.jXI.I.I.hXhXjXkXlXlXlXlXlXlXlXF.Z.N.Z.Z.lXlXlXkXkXkXjXjXhXhXI.I.I.F.`.{.{.'.'.|.T.j `._.j l j |.`.N.GXGXGXFXFXFXFXAXCXCXAXAXAXZXZXZXZXZXZXZXZXZXZXZXVXZXZXZXVXMXMXVXVXVXVXZXZXZXZXVXMXVXZXZXZXZXZXZXZXVXMXVXZXZXZXZXVXVXVXMXMXMXVXZXZXVXVXZXZXZXZXZXZXZXZXZXZXZXZXZXVXVXVXVXVXVXVXVXVXVXVXZXZXZXZXZXZXZXZXZXZXZXZXZXVXZXZXZXVXMXMXVXVXVXVXZXZXZXZXVXMXVXZXZXZXZXZXZXZXVXMXVXZXZXZXZXVXVXVXMXMXMXVXZXZXVXVXZXZXZXZXZXZXZXZXZXZXZXZXZXVXVXVXVXVXVXVXVXVXVXVXZXZXZXZXZXZXZXVXVXBXBXBXBXmXBXBXmXmXmXnX X# XmXmXBXBXVXVXMXVXBXBXBXmXmXmXmXmXmXmXBXBXVXVXVXVXVXMXMXMXVXZXZXBXmXBXBXBXBXBXBXBXBXBXBXBXBXBXmXmXmXmXmXmXmXmXmXmXmXmXmXBXBXBXBXBXBXBXBXVXVXVXMXVXZXVXVXMXMXVXVXVXVXZXZXZXZXVXMXVXZXZXZXZXZXZXZXVXMXVXZXZXZXZXVXVXVXMXMXMXVXZX",
"ZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXAXCXCXCXCXCXCXDXDXDXFXFXHXHX+ (.JXIXIX+ R.z z l l z j UXUXg V.gXI.I.hXhXjXkXkXlXlXlXlXlXlXkXlXlXkXlXlXlXlXkXkXkXkXjXhXhXhXI.hXN.`.{.{.}.}.'.j 6 `.}.j R.+ '.x JXJXGXGXGXFXFXDXDXDXCXAXAXAXAXAXZXZXZXZXZXZXZXZXZXVXZXZXVXMXMXVXVXVXMXVXVXVXVXZXVXVXZXZXZXVXVXZXZXZXVXVXVXVXVXVXVXMXMXVXVXVXVXVXZXZXVXVXZXZXZXZXZXZXZXZXZXZXZXZXZXZXVXVXVXVXVXVXVXVXVXVXZXZXZXZXZXZXZXZXZXZXZXZXZXVXZXZXVXMXMXVXVXVXMXVXVXVXVXZXVXVXZXZXZXVXVXZXZXZXVXVXVXVXVXVXVXMXMXVXVXVXVXVXZXZXVXVXZXZXZXZXZXZXZXZXZXZXZXZXZXZXVXVXVXVXVXVXVXVXVXVXZXZXZXZXZXZXZXZXZXVXBXBXBXmXVXBXBXmXmXmXE.X mXmXmXmXBXVXVXMXZXZXVXmXmXBXBXBXmXmXBXBXMXMXMXMXMXVXVXVXVXMXZXZXVXMXVXVXVXVXVXVXVXVXVXVXVXVXVXVXMXmXmXmXmXmXmXmXmXmXBXBXBXBXVXVXZXZXZXZXZXZXZXMXZXZXVXMXMXVXVXVXMXVXVXVXVXZXVXVXZXZXZXVXVXZXZXZXVXVXVXVXVXVXVXMXMXVXVXVXVXVXZX",
"ZXZXZXZXZXZXZXZXZXZXZXZXAXAXAXAXAXCXCXCXCXAXDXDXDXFXFXHXHXJXB.g JXIXIX& R.z z z l l g UXUXh l o N.gXzXkXkXkXkXkXlXlXkXlXlXlXkXkXkXkXlXlXlXlXkXkXkXkXjXhXjXzXV.+ |.{.}.}.}.|.6 6 [.|.g + & `.g JXJXGXGXGXFXFXFXDXDXAXAXAXAXAXAXAXAXAXZXZXZXZXZXZXCXZXZXCXCXCXCXCXCXCXCXCXCXCXCXCXCXAXZXAXCXCXCXZXZXCXCXCXCXCXCXCXCXCXCXCXCXCXCXZXZXCXCXZXZXZXZXZXZXZXZXZXZXZXZXZXCXCXCXCXCXCXCXCXCXCXZXZXZXZXZXZXZXZXZXZXZXZXZXZXCXZXZXCXCXCXCXCXCXCXCXCXCXCXCXCXCXAXZXAXCXCXCXZXZXCXCXCXCXCXCXCXCXCXCXCXCXCXCXZXZXCXCXZXZXZXZXZXZXZXZXZXZXZXZXZXCXCXCXCXCXCXCXCXCXCXZXZXZXZXZXZXZXZXZXZXZXZXZXZXMXZXZXCXmXmXmXE.X E.mXmXmXMXMXCXCXZXZXZXCXMXCXZXZXCXMXMXMXMXCXCXCXCXCXCXCXCXCXZXZXCXCXZXZXZXZXZXZXZXZXZXZXZXZXZXCXMXMXCXMXCXCXMXMXCXZXZXZXZXZXZXZXZXZXZXZXZXZXZXCXZXZXCXCXCXCXCXCXCXCXCXCXCXCXCXCXAXZXAXCXCXCXZXZXCXCXCXCXCXCXCXCXCXCXCXCXCXCXZX",
"AXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXCXCXAXAXAXAXFXFXFXDXFXHXHXJXh & JXIXIX= R.z z z z l V.UXUX& l + h j g (.zXzXkXlXlXlXkXlXlXlXlXlXkXkXlXlXkXkXkXkXkXjXjXlXgXg j 6 |.{.}.{.}.j l j [.].+ N.& [.* IXGXGXGXHXHXFXFXFXDXDXAXAXAXAXAXAXAXAXAXAXAXAXAXAXCXAXAXAXCXCXCXCXCXCXCXCXCXAXAXCXCXAXAXAXAXCXAXAXAXCXCXAXAXCXCXCXCXCXCXCXCXCXCXAXAXAXCXAXAXAXAXAXAXAXAXAXAXAXAXAXCXCXCXAXAXAXAXAXCXCXCXAXAXAXAXAXAXAXAXAXAXAXAXAXCXAXAXAXCXCXCXCXCXCXCXCXCXAXAXCXCXAXAXAXAXCXAXAXAXCXCXAXAXCXCXCXCXCXCXCXCXCXCXAXAXAXCXAXAXAXAXAXAXAXAXAXAXAXAXAXCXCXCXAXAXAXAXAXCXCXCXAXAXAXAXAXAXAXAXAXAXAXAXAXCXAXAXCXmXmXmXmXX B.mXmXCXCXAXCXCXAXAXAXCXCXAXAXAXCXCXAXAXCXCXCXCXCXCXCXCXCXCXAXAXCXCXAXAXAXAXAXAXAXAXAXAXAXAXAXCXCXCXAXAXAXAXAXCXCXCXAXAXAXAXAXAXAXAXAXAXAXAXAXCXAXAXAXCXCXCXCXCXCXCXCXCXAXAXCXCXAXAXAXAXCXAXAXAXCXCXAXAXCXCXCXCXCXCXCXCXCXCXAX",
"AXAXAXAXAXAXAXAXAXAXAXAXAXAXAXCXCXAXAXAXFXFXFXFXFXFXFXFXHXJXJXSXJXIXIXxXR.l l z z j UXUXUX& V.g & j l j g V.gXzXzXlXlXlXlXlXlXlXvXkXlXlXkXkXlXlXzXgXD.g j l l 6 |.}.{.}.|.6 l l R.).+ KXfX(.(.LXGXJXJXJXHXHXFXHXFXFXDXAXAXAXAXAXAXAXAXAXAXAXAXAXCXAXAXAXCXCXCXCXCXAXAXAXAXAXCXCXCXAXAXAXAXAXAXAXAXCXCXCXAXAXAXAXAXAXCXCXCXCXAXAXAXCXCXAXAXAXAXAXAXAXAXAXAXAXAXCXCXAXAXAXAXAXAXAXAXAXCXAXAXAXAXAXAXAXAXAXAXAXAXAXCXAXAXAXCXCXCXCXCXAXAXAXAXAXCXCXCXAXAXAXAXAXAXAXAXCXCXCXAXAXAXAXAXAXCXCXCXCXAXAXAXCXCXAXAXAXAXAXAXAXAXAXAXAXAXCXCXAXAXAXAXAXAXAXAXAXCXAXAXAXAXAXAXAXAXAXAXAXAXAXCXAXAXAXCXMXCXCXbXnXCXAXAXAXCXCXCXAXAXAXAXAXAXAXAXCXCXCXAXAXAXAXAXAXCXCXCXCXAXAXAXCXCXAXAXAXAXAXAXAXAXAXAXAXAXCXCXAXAXAXAXAXAXAXAXAXCXAXAXAXAXAXAXAXAXAXAXAXAXAXCXAXAXAXCXCXCXCXCXAXAXAXAXAXCXCXCXAXAXAXAXAXAXAXAXCXCXCXAXAXAXAXAXAXCXCXCXCXAXAX",
"AXAXAXAXAXAXAXAXAXAXAXAXAXAXAXDXAXAXFXFXFXFXFXFXHXHXGXGXJXJXJXJXIXIXIXxXh l l l l + UXUXUX(.x KX& x l l l l j j h (.zXzXlXlXlXlXkXkXlXkXlXzXgXV.h j j l l l l 6 |.}.}.}.R.l z l 6 R.Z.UXfXh N.LXJXJXJXJXGXGXFXFXFXFXDXDXFXAXAXAXAXAXAXAXAXAXAXAXCXCXAXAXAXAXAXAXAXAXAXAXCXCXCXAXCXCXAXAXAXAXAXAXCXCXAXAXCXCXAXAXAXAXAXAXAXAXAXAXAXCXCXAXAXAXAXAXAXAXAXAXAXAXAXCXAXAXAXAXAXAXAXAXAXAXCXAXAXAXAXAXAXAXAXAXAXAXAXAXCXCXAXAXAXAXAXAXAXAXAXAXCXCXCXAXCXCXAXAXAXAXAXAXCXCXAXAXCXCXAXAXAXAXAXAXAXAXAXAXAXCXCXAXAXAXAXAXAXAXAXAXAXAXAXCXAXAXAXAXAXAXAXAXAXAXCXAXAXAXAXAXAXAXAXAXAXAXAXAXCXCXAXAXAXAXAXAXAXAXAXCXCXCXCXAXCXCXAXAXAXAXAXAXCXCXAXAXCXCXAXAXAXAXAXAXAXAXAXAXAXCXCXAXAXAXAXAXAXAXAXAXAXAXAXCXAXAXAXAXAXAXAXAXAXAXCXAXAXAXAXAXAXAXAXAXAXAXAXAXCXCXAXAXAXAXAXAXAXAXAXAXCXCXCXAXCXCXAXAXAXAXAXAXCXCXAXAXCXCXAXAXAXAXAXAXAXAXAXAX",
"AXAXAXAXAXAXAXAXDXDXDXDXDXAXAXDXFXFXFXDXDXDXDXFXHXHXGXGXJXGXGXLXLXLXIXIXg l l l l NXUXUXUXfXh KXD.j z z z l l l j 6 + & A.jXlXlXjXD.A.N.* g j l z l l l l l z 6 }.'._.|.j l z l 6 V.D.UXKX& fXLXJXJXJXGXGXGXGXFXHXFXFXDXFXDXDXDXDXDXDXAXAXAXAXAXAXDXAXAXAXAXAXAXAXAXDXDXDXAXAXAXDXDXDXDXAXAXAXDXDXDXAXAXAXAXDXDXDXAXAXAXAXAXAXAXDXDXDXAXAXAXAXAXDXDXDXDXDXAXAXDXAXAXAXDXDXDXDXAXAXAXAXDXAXDXDXDXDXDXDXAXAXAXAXAXAXDXAXAXAXAXAXAXAXAXDXDXDXAXAXAXDXDXDXDXAXAXAXDXDXDXAXAXAXAXDXDXDXAXAXAXAXAXAXAXDXDXDXAXAXAXAXAXDXDXDXDXDXAXAXDXAXAXAXDXDXDXDXAXAXAXAXDXAXDXDXDXDXDXDXAXAXAXAXAXAXDXAXAXAXAXAXAXAXCXDXDXDXAXAXAXDXDXDXDXAXAXAXDXDXDXAXAXAXAXDXDXDXAXAXAXAXAXAXAXDXDXDXAXAXAXAXAXDXDXDXDXDXAXAXDXAXAXAXDXDXDXDXAXAXAXAXDXAXDXDXDXDXDXDXAXAXAXAXAXAXDXAXAXAXAXAXAXAXAXDXDXDXAXAXAXDXDXDXDXAXAXAXDXDXDXAXAXAXAXDXDXDXAXAXAXAXAXAXAX",
"FXFXFXFXFXFXDXDXDXFXFXFXFXDXDXDXFXFXFXDXDXFXGXGXHXJXGXGXGXGXJXIXIXIXIXIX* l l l 6 UXUXUXUXUX* KXUXg l l l z j j V.fXfX* S.- - = N.Z.S.Z.g j j j l z l + R.l l 6 |.'.}.R.j l z l o g gXUXUX* IXIXIXJXJXGXGXGXGXGXHXHXFXFXFXFXFXFXFXFXDXDXFXFXFXFXFXDXDXDXFXFXFXDXDXDXFXFXFXFXFXDXDXFXDXDXDXDXDXDXFXDXDXDXFXFXFXFXDXDXDXFXFXFXDXDXDXFXFXFXFXFXDXDXDXFXFXFXFXDXDXDXFXFXFXDXDXDXDXDXFXFXFXDXDXDXFXFXFXFXDXDXFXFXFXFXFXDXDXDXFXFXFXDXDXDXFXFXFXFXFXDXDXFXDXDXDXDXDXDXFXDXDXDXFXFXFXFXDXDXDXFXFXFXDXDXDXFXFXFXFXFXDXDXDXFXFXFXFXDXDXDXFXFXFXDXDXDXDXDXFXFXFXDXDXDXFXFXFXFXDXDXFXFXFXFXFXDXDXDXFXFXFXDXDXDXDXFXFXFXFXDXDXFXDXDXDXDXDXDXFXDXDXDXFXFXFXFXDXDXDXFXFXFXDXDXDXFXFXFXFXFXDXDXDXFXFXFXFXDXDXDXFXFXFXDXDXDXDXDXFXFXFXDXDXDXFXFXFXFXDXDXFXFXFXFXFXDXDXDXFXFXFXDXDXDXFXFXFXFXFXDXDXFXDXDXDXDXDXDXFXDXDXDXFXFXFXFXDXDXDXFXFXFXDXDX",
"FXFXFXHXFXFXDXFXFXFXFXFXFXFXDXDXFXFXFXDXFXGXGXGXHXJXGXGXGXJXJXIXIXIXIXUXB.j l l + UXUXUXUXUXO KXUX% j z l R.o C.fXfXfXN.S.S.S.S.S.S.S.- fXfXfXC.j l g * R.l l + |.|.].g j z l 6 O * UXUXUXN.IXLXIXJXJXGXGXGXGXGXHXHXFXDXFXFXFXFXFXFXFXFXDXFXFXFXHXFXFXFXFXFXDXDXFXFXHXFXFXFXDXDXFXFXDXFXFXFXFXFXFXFXDXDXDXFXFXHXFXFXFXDXDXFXFXFXFXHXFXHXFXFXDXFXFXFXFXFXFXFXDXDXFXFXFXDXDXDXDXDXFXHXFXDXFXFXFXFXFXFXFXFXDXFXFXFXHXFXFXFXFXFXDXDXFXFXHXFXFXFXDXDXFXFXDXFXFXFXFXFXFXFXDXDXDXFXFXHXFXFXFXDXDXFXFXFXFXHXFXHXFXFXDXFXFXFXFXFXFXFXDXDXFXFXFXDXDXDXDXDXFXHXFXDXFXFXFXFXFXFXFXFXDXFXFXFXHXFXFXFXFXDXDXDXFXFXFXFXFXFXDXDXFXFXDXFXFXFXFXFXFXFXDXDXDXFXFXHXFXFXFXDXDXFXFXFXFXHXFXHXFXFXDXFXFXFXFXFXFXFXDXDXFXFXFXDXDXDXDXDXFXHXFXDXFXFXFXFXFXFXFXFXDXFXFXFXHXFXFXFXFXFXDXDXFXFXHXFXFXFXDXDXFXFXDXFXFXFXFXFXFXFXDXDXDXFXFXHXFXFXFXDXDXFXFXFX",
"HXHXHXHXFXFXFXHXHXFXFXFXHXFXFXFXFXHXFXGXGXGXGXGXJXJXGXGXJXJXIXIXKXcXcXcXKXg l j (.UXUXUXUXUXO KXUXgXh z j g E.fXfXfXfXB.S.S.S.S.S.S.S.= fXC.fXfXV.h N.U.+ j 6 + `.{.`.V.g z j C.- - KXUXUXIXIXIXIXIXIXLXGXGXGXfXJXHXGXGXGXHXFXFXFXHXHXHXFXFXFXHXHXHXHXHXFXFXFXFXHXHXFXFXFXFXFXFXHXFXFXFXFXFXFXFXFXHXFXFXFXFXFXFXHXHXHXFXFXFXHXHXHXHXHXHXFXFXFXHXHXFXFXFXHXFXFXFXFXHXFXFXFXFXFXFXHXHXFXFXFXHXFXFXFXHXHXHXFXFXFXHXHXHXHXHXFXFXFXFXHXHXFXFXFXFXFXFXHXFXFXFXFXFXFXFXFXHXFXFXFXFXFXFXHXHXHXFXFXFXHXHXHXHXHXHXFXFXFXHXHXFXFXFXHXFXFXFXFXHXFXFXFXFXFXFXHXHXFXFXFXHXFXFXFXHXHXHXFXFXFXHXHXHXHXHXFXFXFXFXHXHXFXFXFXFXFXFXHXFXFXFXFXFXFXFXFXHXFXFXFXFXFXFXHXHXHXFXFXFXHXHXHXHXHXHXFXFXFXHXHXFXFXFXHXFXFXFXFXHXFXFXFXFXFXFXHXHXFXFXFXHXFXFXFXHXHXHXFXFXFXHXHXHXHXHXFXFXFXFXHXHXFXFXFXFXFXFXHXFXFXFXFXFXFXFXFXHXFXFXFXFXFXFXHXHXHXFXFXFXHXHX",
"HXHXHXFXGXGXHXHXFXGXGXGXGXHXHXGXGXHXHXGXGXGXGXGXJXJXGXJXJXIXIXIXIXIXUXUXUXO z g Y.H.; J.PXUXB.PXUXUXO 6 C.fXfXfXfXfXD.N.S.S.S.S.S.S.S.= B.fXfXfXNX. D.A.zXvXgXg /._.g vXg l g UXH.UXUXUXUXUXIXIXIXIXIXLXGXGXGXGXJXJXGXGXHXHXGXGXGXGXHXHXFXGXGXHXHXHXHXHXGXGXFXHXHXGXGXGXGXGXGXFXHXGXGXHXGXGXFXFXGXFXHXGXGXGXGXGXGXFXHXHXFXGXFXHXHXHXHXFXGXGXHXHXFXGXGXGXGXHXHXGXGXHXHXGXGXGXGXGXHXFXGXGXHXHXGXGXGXGXHXHXFXGXGXHXHXHXHXHXGXGXFXHXHXGXGXGXGXGXGXFXHXGXGXHXGXGXFXFXGXFXHXGXGXGXGXGXGXFXHXHXFXGXFXHXHXHXHXFXGXGXHXHXFXGXGXGXGXHXHXGXGXHXHXGXGXGXGXGXHXFXGXGXHXHXGXGXGXGXHXHXFXGXGXHXHXHXHXHXGXGXFXHXHXGXGXGXGXGXGXFXHXGXGXHXGXGXFXFXGXFXHXGXGXGXGXGXGXFXHXHXFXGXFXHXHXHXHXFXGXGXHXHXFXGXGXGXGXHXHXGXGXHXHXGXGXGXGXGXHXFXGXGXHXHXGXGXGXGXHXHXFXGXGXHXHXHXHXHXGXGXFXHXHXGXGXGXGXGXGXFXHXGXGXHXGXGXFXFXGXFXHXGXGXGXGXGXGXFXHXHXFXGXFXHX",
"JXJXJXGXGXHXHXHXGXGXGXGXGXHXHXGXGXJXJXGXGXGXGXJXJXJXLXIXIXIXIXIXIXIXUXUXUXA.j g ; ; : ; ; ; A.H.H.H.O fXfXfXfXfXfXfXB.= S.S.S.S.S.S.S.& fXfXB.D.D.= kXkXkXkXlXlX(.V.D.cXg 6 UXUXU.UXUXUXUXUXUXIXIXIXIXLXLXGXGXJXJXGXGXJXJXGXGXGXGXGXGXJXJXGXGXJXHXHXHXGXGXGXJXJXGXGXGXGXGXGXGXJXGXGXHXHXGXGXGXJXGXGXJXGXGXGXGXGXGXGXGXJXJXGXGXJXHXHXHXGXGXHXHXHXGXGXGXGXGXHXHXGXGXHXJXGXGXGXGXGXHXGXGXHXHXGXGXGXGXGXGXJXJXGXGXJXHXHXHXGXGXGXJXJXGXGXGXGXGXGXGXJXGXGXHXHXGXGXGXJXGXGXJXGXGXGXGXGXGXGXGXJXJXGXGXJXHXHXHXGXGXHXHXHXGXGXGXGXGXHXHXGXGXHXJXGXGXGXGXGXHXGXGXHXHXGXGXGXGXGXGXJXJXGXGXJXHXHXHXGXGXGXJXJXGXGXGXGXGXGXGXJXGXGXHXHXGXGXGXJXGXGXJXGXGXGXGXGXGXGXGXJXJXGXGXJXHXHXHXGXGXHXHXHXGXGXGXGXGXHXHXGXGXHXJXGXGXGXGXGXHXGXGXHXHXGXGXGXGXGXGXJXJXGXGXJXHXHXHXGXGXGXJXJXGXGXGXGXGXGXGXJXGXGXHXHXGXGXGXJXGXGXJXGXGXGXGXGXGXGXGXJXJXGXGXJX",
"JXJXJXGXGXJXJXJXGXGXGXGXGXGXJXJXGXGXJXGXGXGXGXJXJXLXIXIXIXIXIXIXIXUXUXUXUXUX+ N.; : : : : : - cXcXcXO fXfXfXfXfXfXfX+ N.S.S.S.S.S.S.Z.D.fX+ vXlXzXgXlXkXkXkXlXkXzX* UXgX+ vXUXUXUXUXUXUXUXUXUXIXIXIXIXIXLXLXLXJXJXGXGXJXJXGXGXGXGXGXGXJXJXGXGXJXJXJXJXGXGXJXJXJXGXGXGXGXGXGXJXJXGXGXJXJXGXGXGXJXJXGXJXJXGXGXGXGXGXGXGXJXJXGXGXJXJXJXJXGXGXJXJXJXGXGXGXGXGXGXJXJXGXGXJXGXGXGXGXJXJXGXGXJXJXGXGXGXGXGXGXJXJXGXGXJXJXJXJXGXGXJXJXJXGXGXGXGXGXGXJXJXGXGXJXJXGXGXGXJXJXGXJXJXGXGXGXGXGXGXGXJXJXGXGXJXJXJXJXGXGXJXJXJXGXGXGXGXGXGXJXJXGXGXJXGXGXGXGXJXJXGXGXJXJXGXGXGXGXGXGXJXJXGXGXJXJXJXJXGXGXJXJXJXGXGXGXGXGXGXJXJXGXGXJXJXGXGXGXJXJXGXJXJXGXGXGXGXGXGXGXJXJXGXGXJXJXJXJXGXGXJXJXJXGXGXGXGXGXGXJXJXGXGXJXGXGXGXGXJXJXGXGXJXJXGXGXGXGXGXGXJXJXGXGXJXJXJXJXGXGXJXJXJXGXGXGXGXGXGXJXJXGXGXJXJXGXGXGXJXJXGXJXJXGXGXGXGXGXGXGXJXJXGXGXJX",
"JXJXJXJXGXJXJXJXGXGXGXGXGXGXJXJXJXGXJXJXLXLXLXIXIXLXIXIXIXIXIXIXUXUXUXUXUXUXO - ; : : : : : - cXcXcXH.* fXfXfXfXfXfXN.S.S.S.S.S.S.S.B.fXfXC.kXcXN.PXlXlXlXlXlXzXzXkXPXfXC.UXUXUXUXUXUXUXUXUXUXUXIXIXIXIXLXLXIXIXJXLXJXJXGXGXGXGXGXGXGXJXJXGXGXJXJXJXJXJXGXJXJXJXGXGXGXGXGXJXJXJXGXJXJXGXGXGXGXJXJXGXGXJXJXGXGXGXGXGXGXJXJXJXGXJXJXJXJXJXGXJXJXJXGXGXGXGXGXGXJXJXJXGXJXJXGXGXGXJXJXGXJXJXGXGXGXGXGXGXGXJXJXGXGXJXJXJXJXJXGXJXJXJXGXGXGXGXGXJXJXJXGXJXJXGXGXGXGXJXJXGXGXJXJXGXGXGXGXGXGXJXJXJXGXJXJXJXJXJXGXJXJXJXGXGXGXGXGXGXJXJXJXGXJXJXGXGXGXJXJXGXJXJXGXGXGXGXGXGXGXJXJXGXGXJXJXJXJXJXGXJXJXJXGXGXGXGXGXJXJXJXGXJXJXGXGXGXGXJXJXGXGXJXJXGXGXGXGXGXGXJXJXJXGXJXJXJXJXJXGXJXJXJXGXGXGXGXGXGXJXJXJXGXJXJXGXGXGXJXJXGXJXJXGXGXGXGXGXGXGXJXJXGXGXJXJXJXJXJXGXJXJXJXGXGXGXGXGXJXJXJXGXJXJXGXGXGXGXJXJXGXGXJXJXGXGXGXGXGXGXJXJXJXGXJX",
"JXJXJXJXLXIXJXJXIXLXLXLXLXLXLXJXJXLXIXIXLXLXIXIXIXIXIXIXIXIXIXUXUXUXUXUXUXUXA.- ; : : : : : - cXcXcXY.- - - C.fXfXfXB.Z.S.S.S.S.S.N.fXfXfX* jXN.N.D.D.gXlXlXlXlXkXlX* A.H.gXUXUXUXUXUXUXUXUXUXUXUXIXIXIXIXLXIXIXIXIXIXIXLXLXLXLXLXIXJXJXJXLXIXJXJXJXJXIXLXIXJXJXLXLXLXLXLXJXJXLXLXJXJXLXLXLXLXIXJXIXLXJXJXIXLXLXLXLXIXJXJXLXLXJXJXJXJXJXLXIXJXJXIXLXLXLXLXLXLXJXJXLXIXJXLXLXIXJXLXIXJXIXLXLXLXLXLXIXJXJXJXLXIXJXJXJXJXIXLXIXJXJXLXLXLXLXLXJXJXLXLXJXJXLXLXLXLXIXJXIXLXJXJXIXLXLXLXLXIXJXJXLXLXJXJXJXJXJXLXIXJXJXIXLXLXLXLXLXLXJXJXLXIXJXLXLXIXJXLXIXJXIXLXLXLXLXLXIXJXJXJXLXIXJXJXJXJXIXLXIXJXJXLXLXLXLXLXJXJXLXLXJXJXLXLXLXLXIXJXIXLXJXJXIXLXLXLXLXIXJXJXLXLXJXJXJXJXJXLXIXJXJXIXLXLXLXLXLXLXJXJXLXIXJXLXLXIXJXLXIXJXIXLXLXLXLXLXIXJXJXJXLXIXJXJXJXJXIXLXIXJXJXLXLXLXLXLXJXJXLXLXJXJXLXLXLXLXIXJXIXLXJXJXIXLXLXLXLXIXJXJXLXLXJX",
"IXIXIXIXIXIXIXIXIXIXIXLXLXLXLXIXIXIXIXIXIXIXIXIXIXIXIXIXIXUXUXUXUXUXUXUXUXU.A.H.; : : : : : - cXcXcXcX- U.- fXfXfXfXD.A.S.S.S.S.- fXfXfXfXC.* vXvXkXjXI.B.U.lXkXkXkXA.: : : ; gXUXUXUXUXUXUXUXUXUXUXUXIXIXIXIXIXIXIXIXIXLXLXLXIXIXIXIXIXIXLXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXLXIXIXIXLXLXLXLXIXIXIXLXIXIXIXIXIXIXIXIXIXIXLXIXIXIXIXIXIXIXIXIXIXIXIXIXLXLXLXLXIXIXIXIXIXIXLXIXIXLXIXIXIXLXLXLXIXIXIXIXIXIXLXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXLXIXIXIXLXLXLXLXIXIXIXLXIXIXIXIXIXIXIXIXIXIXLXIXIXIXIXIXIXIXIXIXIXIXIXIXLXLXLXLXIXIXIXIXIXIXLXIXIXLXIXIXIXLXLXLXIXIXIXIXIXIXLXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXLXIXIXIXLXLXLXLXIXIXIXLXIXIXIXIXIXIXIXIXIXIXLXIXIXIXIXIXIXIXIXIXIXIXIXIXLXLXLXLXIXIXIXIXIXIXLXIXIXLXIXIXIXLXLXLXIXIXIXIXIXIXLXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXIXLXIXIXIXLXLXLXLXIXIXIXLXIXIXIXIXIXIXIXIXIXIXLXIXIX"
};

View File

@ -1,24 +0,0 @@
/* XPM */
const char *b__xpm[] = {
/* columns rows colors chars-per-pixel */
"16 15 3 1",
" c gray20",
". c #12120000FFFF",
"X c None",
/* pixels */
"XX.XXXXXXXXXXXXX",
"XX.XXXXXXXXXXXXX",
".....XXXXXXXXXXX",
"XX.XXXXXXXXXXXXX",
"XX.XX XXXX",
"XXXXX XXX",
"XXXXX XXXX XXX",
"XXXXX XXXX XXX",
"XXXXX XXXX",
"XXXXX XXX",
"XXXXX XXXX XXX",
"XXXXX XXXX XXX",
"XXXXX XXX",
"XXXXX XXXX",
"XXXXXXXXXXXXXXXX"
};

View File

@ -1,24 +0,0 @@
/* XPM */
const char *c__xpm[] = {
/* columns rows colors chars-per-pixel */
"16 15 3 1",
" c gray20",
". c #12120000FFFF",
"X c None",
/* pixels */
"XX.XXXXXXXXXXXXX",
"XX.XXXXXXXXXXXXX",
".....XXXXXXXXXXX",
"XX.XXXXXXXXXXXXX",
"XX.XXXX XXXXX",
"XXXXXX XXXX",
"XXXXX XX XXX",
"XXXXX XXXX XXXX",
"XXXXX XXXXXXXXX",
"XXXXX XXXXXXXXX",
"XXXXX XXXX XXXX",
"XXXXX XX XXX",
"XXXXXX XXXX",
"XXXXXXX XXXXX",
"XXXXXXXXXXXXXXXX"
};

View File

@ -1,27 +0,0 @@
/* XPM */
const char *check_xpm[] = {
/* columns rows colors chars-per-pixel */
"16 15 6 1",
" c black",
". c gray25",
"X c #808080808080",
"o c #D4D4D0D0C8C8",
"O c gray100",
"+ c None",
/* pixels */
"++++++++++++++++",
"++XXXXXXXXXXXX++",
"++X..........o++",
"++X.OOOOOOOOOo++",
"++X.OOOOOOO Oo++",
"++X.OOOOOO Oo++",
"++X.O OOO Oo++",
"++X.O O OOo++",
"++X.O OOOo++",
"++X.OO OOOOo++",
"++X.OOO OOOOOo++",
"++X.OOOOOOOOOo++",
"++Xooooooooooo++",
"++++++++++++++++",
"++++++++++++++++"
};

View File

@ -1,90 +0,0 @@
/* XPM */
const char *del__xpm[] = {
/* columns rows colors chars-per-pixel */
"16 15 69 1",
" c black",
". c #0C0C0C0C0C0C",
"X c gray5",
"o c gray9",
"O c #191919191919",
"+ c gray11",
"@ c #262625252424",
"# c #313131313131",
"$ c #323232323232",
"% c #353534343232",
"& c #373735353333",
"* c #373737373737",
"= c #383838383737",
"- c #3E3E3E3E3E3E",
"; c #414141414141",
": c #575755555252",
"> c #555555555555",
", c #5D5D5A5A5757",
"< c gray35",
"1 c gray36",
"2 c #646464646464",
"3 c gray42",
"4 c #70706E6E6A6A",
"5 c #71716F6F6B6B",
"6 c #818181818181",
"7 c #868686868686",
"8 c #878787878686",
"9 c #888888888787",
"0 c #8F8F8C8C8787",
"q c gray55",
"w c #8F8F8E8E8D8D",
"e c #979793938D8D",
"r c gray57",
"t c #969695959292",
"y c gray59",
"u c #9F9F9F9F9F9F",
"i c #A3A39F9F9999",
"p c #A0A0A0A0A0A0",
"a c gray64",
"s c #AAAAA6A6A0A0",
"d c #AEAEACACA7A7",
"f c #A9A9A9A9A9A9",
"g c #B1B1AEAEA7A7",
"h c #B3B3B0B0A9A9",
"j c #B7B7B4B4ADAD",
"k c #B9B9B7B7B1B1",
"l c #BEBEBBBBB5B5",
"z c #BCBCBCBCBCBC",
"x c #C2C2BFBFB8B8",
"c c #C3C3C0C0B8B8",
"v c #C3C3C0C0B9B9",
"b c #C7C7C3C3BBBB",
"n c #C6C6C3C3BCBC",
"m c gray78",
"M c #CBCBC8C8C0C0",
"N c #CFCFCBCBC4C4",
"B c #C8C8C8C8C8C8",
"V c gray80",
"C c #D2D2CECEC6C6",
"Z c #D3D3CFCFC7C7",
"A c #D0D0D0D0D0D0",
"S c LightGray",
"D c gray86",
"F c #DDDDDDDDDDDD",
"G c gray90",
"H c gray93",
"J c #F4F4F4F4F4F4",
"K c #F6F6F6F6F6F6",
"L c None",
/* pixels */
"LLLLN*LLLLLLLLLL",
"LLLLk=0LLLLLLLLL",
"LLLZt &LLLLLLLLL",
"LLLv9<-iLLLLLLLL",
"LLZtB1p%LL L",
"LLlyH1F$eLLLLLLL",
"LCwAH1Ff@cLLLLLL",
"LdaJHuFS>5LLLLLL",
"n8KJH FSm+sLLLLL",
"LrqJHDFS3:xLLLLL",
"Lb#DHGFzohLLLLLL",
"LL46HGF2,LLLLLLL",
"LLgOHGF LLLLLLLL",
"LLX..X...LLLLLLL",
"LLM;V7.XjLLLLLLL"
};

View File

@ -1,106 +0,0 @@
/* XPM */
const char *delcross_xpm[] = {
/* columns rows colors chars-per-pixel */
"16 15 85 1",
" c #3F3F14141818",
". c #4C4C19192121",
"X c #656522222626",
"o c #797927272C2C",
"O c #6E6E24243333",
"+ c #82822A2A2D2D",
"@ c #919130303434",
"# c #949431313535",
"$ c #979732323434",
"% c #979732323B3B",
"& c #9E9E35353D3D",
"* c #9E9E34343F3F",
"= c #A0A036363939",
"- c #A5A538383C3C",
"; c #A7A73A3A3E3E",
": c #ACAC3B3B3E3E",
"> c #B5B53D3D3D3D",
", c #9E9E34344848",
"< c #A5A539394242",
"1 c #AEAE3D3D4040",
"2 c #A3A337374D4D",
"3 c #B7B73F3F4343",
"4 c #B3B33F3F4747",
"5 c #B5B53F3F4545",
"6 c #B3B33C3C5353",
"7 c #B1B13D3D5454",
"8 c #B3B33C3C5656",
"9 c #B5B53D3D5959",
"0 c #B7B740404141",
"q c #BDBD42424545",
"w c #B7B741414848",
"e c #B3B340405C5C",
"r c #BFBF45455E5E",
"t c #C3C345454C4C",
"y c #D0D04B4B5252",
"u c #C9C948486666",
"i c #CFCF4B4B6868",
"p c #D0D04C4C6A6A",
"a c #D2D24C4C6C6C",
"s c #E4E457577575",
"d c #E2E258587676",
"f c #E7E75B5B7979",
"g c #EAEA5B5B7A7A",
"h c #E8E85C5C7979",
"j c #EAEA5C5C7A7A",
"k c #F1F160607B7B",
"l c #F1F162627F7F",
"z c #F4F464648080",
"x c #F6F666668080",
"c c #F5F564648282",
"v c #F7F766668585",
"b c #FAFA69698484",
"n c #FFFF6D6D8686",
"m c #FCFC6B6B8888",
"M c #FFFF6D6D8989",
"N c #FFFF6F6F8B8B",
"B c #FFFF71718989",
"V c #FFFF74748F8F",
"C c #FFFF83839B9B",
"Z c #FFFF89899B9B",
"A c #FFFF89899D9D",
"S c #FFFF8D8DA2A2",
"D c #FFFF9393A5A5",
"F c #FFFF9595A6A6",
"G c #FFFF9E9EA7A7",
"H c #FFFFA6A6ABAB",
"J c #FFFFA5A5B1B1",
"K c #FFFFAFAFB1B1",
"L c #FFFFADADB4B4",
"P c #FFFFB0B0B2B2",
"I c #FFFFB0B0B9B9",
"U c #FFFFB5B5B8B8",
"Y c #FFFFB4B4BCBC",
"T c #FFFFBBBBBBBB",
"R c #FFFFBCBCBBBB",
"E c #FFFFB8B8BDBD",
"W c #FFFFC0C0BEBE",
"Q c #FFFFC0C0C2C2",
"! c #FFFFC4C4C2C2",
"~ c #FFFFC3C3C4C4",
"^ c #FFFFC4C4C7C7",
"/ c #FFFFC7C7C6C6",
"( c #FFFFC7C7C7C7",
") c #FFFFCCCCC9C9",
"_ c None",
/* pixels */
"_^jY____________",
"_DqtJ________S__",
"_Fh;5C_____Iym__",
"__Eg10l___c4V___",
"____Aw3vQN>M____",
"_____~p-&<d_____",
"______L%:7______",
"_____(9@#=6_____",
"____/8+sUa$Z____",
"___)eXi___z*/___",
"___fO2T____rx___",
"__G.oB_____W,!__",
"__n uR______bK__",
"__PkH___________",
"________________"
};

View File

@ -1,32 +0,0 @@
/* XPM */
const char *help__xpm[] = {
/* columns rows colors chars-per-pixel */
"16 15 11 1",
" c #46464B4B5C5C",
". c #FFFFCCCC0000",
"X c #FAFAF3F30000",
"o c #FBFBE2E24949",
"O c #4C4C2D2D9B9B",
"+ c #7A7A7E7E8D8D",
"@ c #59594F4FBFBF",
"# c #65655B5BEFEF",
"$ c #FFFFFFFFABAB",
"% c #82829494F7F7",
"& c None",
/* pixels */
"&&&&++++++++&&&&",
"&&++XXXXXXXo &&",
"&+XX$$@@@@$$X. &",
"&+X$$@@%#@@$$X +",
"+X$$$@#$$@@$$$o ",
"+X$$$$$$%@O$$$X ",
"+X$$$$$%@O$$$$X ",
"+X$$$$$@O$$$$$o ",
"+X$$$$$$$$$$$Xo ",
"+oX$$$$@@$$$$X. ",
"&+XX$$$@@$$XX. &",
"&& oXX$$$$Xo. &&",
"&&& oXXXo &&&",
"&&&&&& &&&&&",
"&&&&&&&&&&&&&&&&"
};

View File

@ -1,71 +0,0 @@
/* XPM */
const char *help_xpm[] = {
/* columns rows colors chars-per-pixel */
"16 15 50 1",
" c #25254A4A8787",
". c #27274D4D8D8D",
"X c #282850509292",
"o c #2A2A53539898",
"O c #2A2A54549A9A",
"+ c #2B2B55559B9B",
"@ c #2D2D5959A3A3",
"# c #2D2D5A5AA5A5",
"$ c #2E2E5C5CA8A8",
"% c #33336666BBBB",
"& c #35356A6AC1C1",
"* c #36366B6BC2C2",
"= c #37376E6EC9C9",
"- c #43437777CDCD",
"; c #48487B7BCECE",
": c #4E4E7F7FD0D0",
"> c #52528282D0D0",
", c #63638E8ED5D5",
"< c #69699292D7D7",
"1 c #71719898D9D9",
"2 c #79799E9EDBDB",
"3 c #7C7CA0A0DCDC",
"4 c #8989A9A9DFDF",
"5 c #8C8CACACE0E0",
"6 c #9595B2B2E3E3",
"7 c #9A9AB6B6E4E4",
"8 c #9B9BB7B7E5E5",
"9 c #A6A6BFBFE8E8",
"0 c #A8A8C0C0E8E8",
"q c #ADADC4C4E9E9",
"w c #B1B1C7C7EBEB",
"e c #B8B8CCCCECEC",
"r c #BEBED0D0EEEE",
"t c #C4C4D5D5F0F0",
"y c #CBCBD9D9F1F1",
"u c #CCCCDADAF2F2",
"i c #D2D2DFDFF4F4",
"p c #D9D9E4E4F5F5",
"a c #DCDCE6E6F6F6",
"s c #DFDFE8E8F7F7",
"d c #E2E2EAEAF8F8",
"f c #EAEAF0F0FAFA",
"g c #EDEDF2F2FBFB",
"h c #F0F0F5F5FCFC",
"j c #F5F5F8F8FDFD",
"k c #F7F7F9F9FDFD",
"l c #FAFAFCFCFEFE",
"z c #FDFDFEFEFFFF",
"x c gray100",
"c c None",
/* pixels */
"ccc%%%%%%%o-cccc",
"ccc%urw073%4-ccc",
"ccc%iurw07%k4>cc",
"cc9$$$<0w0%kk4$c",
"c1 @2,O <w%%%%$c",
"6 o8yg8+ 4e074%c",
"#++..a9+o&te07%c",
" ++o4x*++Xute0%c",
" ++.x;+++ pute%c",
" ++o *++o=sput%c",
"1.+ x9++ qfdpu%c",
"c: o oo 5jhfdp%c",
"cc6$$$:ylkjhfd%c",
"ccc%xxxzzlkjhf%c",
"ccc%%%%%%%%%%%%c"
};

View File

@ -1,24 +0,0 @@
/* XPM */
const char *l__xpm[] = {
/* columns rows colors chars-per-pixel */
"16 15 3 1",
" c gray20",
". c #12120000FFFF",
"X c None",
/* pixels */
"XX.XXXXXXXXXXXXX",
"XX.XXXXXXXXXXXXX",
".....XXXXXXXXXXX",
"XX.XXXXXXXXXXXXX",
"XX.XX XXXXXXXXX",
"XXXXX XXXXXXXXX",
"XXXXX XXXXXXXXX",
"XXXXX XXXXXXXXX",
"XXXXX XXXXXXXXX",
"XXXXX XXXXXXXXX",
"XXXXX XXXXXXXXX",
"XXXXX XXXXXXXXX",
"XXXXX XXXX",
"XXXXX XXXX",
"XXXXXXXXXXXXXXXX"
};

View File

@ -1,24 +0,0 @@
/* XPM */
const char *m__xpm[] = {
/* columns rows colors chars-per-pixel */
"16 15 3 1",
" c gray20",
". c #12120000FFFF",
"X c None",
/* pixels */
"XX.XXXXXXXXXXXXX",
"XX.XXXXXXXXXXXXX",
".....XXXXXXXXXXX",
"XX.XXXXXXXXXXXXX",
"XX.XXXXXXXXXXXXX",
"XXXXX XXX XX",
"XXXXX XXX XX",
"XXXXX X XX",
"XXXXX X XX",
"XXXXX X X X XX",
"XXXXX X X X XX",
"XXXXX X X XX",
"XXXXX X X XX",
"XXXXX XX XX XX",
"XXXXXXXXXXXXXXXX"
};

View File

@ -1,24 +0,0 @@
/* XPM */
const char *n__xpm[] = {
/* columns rows colors chars-per-pixel */
"16 15 3 1",
" c gray20",
". c #12120000FFFF",
"X c None",
/* pixels */
"XX.XXXXXXXXXXXXX",
"XX.XXXXXXXXXXXXX",
".....XXXXXXXXXXX",
"XX.XXXXXXXXXXXXX",
"XX.XX XXXX XXX",
"XXXXX XXX XXX",
"XXXXX XX XXX",
"XXXXX XX XXX",
"XXXXX X X XXX",
"XXXXX X X XXX",
"XXXXX XX XXX",
"XXXXX XX XXX",
"XXXXX XXX XXX",
"XXXXX XXXX XXX",
"XXXXXXXXXXXXXXXX"
};

View File

@ -1,85 +0,0 @@
/* XPM */
const char *new__xpm[] = {
/* columns rows colors chars-per-pixel */
"16 15 64 1",
" c black",
". c gray10",
"X c #373737373737",
"o c #434343434343",
"O c #464646464646",
"+ c #484848484848",
"@ c #525251515050",
"# c #565656565656",
"$ c #595958585353",
"% c #5F5F5F5F5F5F",
"& c #606060606060",
"* c gray38",
"= c #676767676767",
"- c DimGray",
"; c #6A6A6A6A6A6A",
": c #6E6E6D6D6A6A",
"> c gray43",
", c #6F6F6F6F6F6F",
"< c gray44",
"1 c #767676767676",
"2 c #797979797979",
"3 c #7C7C7C7C7C7C",
"4 c #7F7F7F7F7F7F",
"5 c #818181818181",
"6 c #8D8D8D8D8D8D",
"7 c #8E8E8E8E8E8E",
"8 c #939393939393",
"9 c gray58",
"0 c #959595959595",
"q c gray59",
"w c gray60",
"e c #9A9A9A9A9A9A",
"r c #A4A4A1A19696",
"t c #A8A8A6A69C9C",
"y c #A7A7A7A7A7A7",
"u c gray66",
"i c #B1B1AFAFA5A5",
"p c #B3B3B1B1A8A8",
"a c #BDBDBBBBAFAF",
"s c gray70",
"d c #CDCDCACABCBC",
"f c #C8C8C8C8C8C8",
"g c #CACACACACACA",
"h c #CDCDCDCDCDCD",
"j c gray81",
"k c gray83",
"l c #D5D5D5D5D5D5",
"z c #D7D7D7D7D7D7",
"x c #D8D8D8D8D8D8",
"c c gray86",
"v c #DFDFDFDFDFDF",
"b c #E7E7E4E4D3D3",
"n c #E4E4E4E4E4E4",
"m c #E7E7E7E7E7E7",
"M c gray91",
"N c gray92",
"B c #EEEEEEEEEEEE",
"V c #EFEFEFEFEFEF",
"C c #F1F1F1F1F1F1",
"Z c gray95",
"A c #F3F3F3F3F3F3",
"S c #F6F6F6F6F6F6",
"D c gray100",
"F c None",
/* pixels */
"FFFFFFFFFFFFFFFF",
"FFFFFFFFFFFFFFFF",
"FFFFFFFa@-------",
"FFFFFFaOZBnzhf,;",
"FFFFFaOZCmcjf<0$",
"FFFFaOZANvkf<y=t",
"FFFaOZABnzg<e3:d",
"FFaOZACmch#ewXiF",
"Fa>9755>%+2q.rFF",
"b;sxxxklf*6.rFFF",
"p8SSSSSSu4.rFFFF",
"1MDDDDDV&.rFFFFF",
"ooooooo+ rFFFFFF",
"FFFFFFFFFFFFFFFF",
"FFFFFFFFFFFFFFFF"
};

View File

@ -1,76 +0,0 @@
/* XPM */
const char *nut__xpm[] = {
/* columns rows colors chars-per-pixel */
"16 15 55 1",
" c #7F7F00000000",
". c #000013137F7F",
"X c #030315157F7F",
"o c #6C6C41416060",
"O c #808007070707",
"+ c #808009090909",
"@ c #838313131313",
"# c #848412121212",
"$ c #868618181818",
"% c #88881D1D1D1D",
"& c #88881E1E1E1E",
"* c #8A8A24242424",
"= c #8E8E30303030",
"- c #92923C3C3C3C",
"; c #949442424242",
": c #969648484848",
"> c #98984E4E4E4E",
", c #9A9A54545454",
"< c #9D9D5A5A5A5A",
"1 c #A1A165656565",
"2 c #A3A36B6B6B6B",
"3 c #A5A56F6F6F6F",
"4 c #A5A571717171",
"5 c #A7A777777777",
"6 c #A9A97D7D7D7D",
"7 c #0A0A1C1C8181",
"8 c #0C0C1C1C8080",
"9 c #0D0D1F1F8282",
"0 c #151525258484",
"q c #151525258585",
"w c #171728288686",
"e c #1F1F2F2F8888",
"r c #242432328A8A",
"t c #2A2A38388C8C",
"y c #2D2D3B3B8D8D",
"u c #61616A6A9F9F",
"i c #64646C6CA0A0",
"p c #74747C7CA6A6",
"a c #77777E7EA7A7",
"s c #AFAF8F8F8F8F",
"d c #B3B39B9B9B9B",
"f c #83838989ABAB",
"g c #89898E8EADAD",
"h c #8D8D9292AEAE",
"j c #8F8F9494AFAF",
"k c #9B9B9F9FB3B3",
"l c #B5B5A1A1A1A1",
"z c #B7B7A7A7A7A7",
"x c #B9B9ADADADAD",
"c c #A7A7A9A9B7B7",
"v c #BBBBB3B3B3B3",
"b c #B3B3B4B4BBBB",
"n c #BDBDB9B9B9B9",
"m c #B9B9BABABDBD",
"M c None",
/* pixels */
"# @nMMMM",
" MMMMebMMM:5MMMM",
" MMMc9.MMMs=MMMM",
" ......pMMM#xMMM",
" h........0<1MMM",
" Mc......tkd*MMM",
" MMuX....bMM&lMM",
" MMy.....jMM1<MM",
" MM......rMMx#MM",
"+>d7.MM...fMM=sM",
"z4*$,dMMa.wmM5:M",
"MMMz2*$,dgqiMv#n",
"MMMMMMz2*$o8MM;6",
"MMMMMMMMMz2*$,3-",
"MMMMMMMMMMMMz2%O"
};

View File

@ -1,24 +0,0 @@
/* XPM */
const char *p__xpm[] = {
/* columns rows colors chars-per-pixel */
"16 15 3 1",
" c gray20",
". c #12120000FFFF",
"X c None",
/* pixels */
"XX.XXXXXXXXXXXXX",
"XX.XXXXXXXXXXXXX",
".....XXXXXXXXXXX",
"XX.XXXXXXXXXXXXX",
"XX.XX XXXXX",
"XXXXX XXXX",
"XXXXX XXX XXXX",
"XXXXX XXX XXXX",
"XXXXX XXXX",
"XXXXX XXXXX",
"XXXXX XXXXXXXXX",
"XXXXX XXXXXXXXX",
"XXXXX XXXXXXXXX",
"XXXXX XXXXXXXXX",
"XXXXXXXXXXXXXXXX"
};

View File

@ -1,87 +0,0 @@
/* XPM */
const char *pan_bg_xpm[] = {
/* columns rows colors chars-per-pixel */
"24 15 66 1",
" c #2A2A35354D4D",
". c #2C2C38384B4B",
"X c #36364A4A6464",
"o c #474757576E6E",
"O c #4D4D5C5C7272",
"+ c #5E5E66667171",
"@ c #606060606060",
"# c #C1C14B4B2B2B",
"$ c #CFCF55553636",
"% c #CBCB75752424",
"& c #BABA6D6D6666",
"* c #CCCC69695656",
"= c #C9C973736666",
"- c #FFFF7F7F7F7F",
"; c #EDEDA0A04C4C",
": c #EFEFA5A54F4F",
"> c #585866668585",
", c #646475759696",
"< c #7D7D89899E9E",
"1 c #72728383A7A7",
"2 c #80808A8A9D9D",
"3 c #86868E8E9D9D",
"4 c #89899999AFAF",
"5 c #8A8A9A9AAEAE",
"6 c #81819292BABA",
"7 c #9696A3A3B4B4",
"8 c #9D9DA7A7BBBB",
"9 c #A3A3ABABBABA",
"0 c #D3D396968D8D",
"q c #D2D297978D8D",
"w c #DDDDA5A59B9B",
"e c #E8E8C3C39393",
"r c #83839999C7C7",
"t c #9090A5A5C3C3",
"y c #9191A5A5C3C3",
"u c #9191A5A5C4C4",
"i c #9292A6A6C5C5",
"p c #9292A7A7C5C5",
"a c #9191A5A5C6C6",
"s c #9393A7A7C6C6",
"d c #9393A7A7C7C7",
"f c #9898A8A8C5C5",
"g c #9898AAAAC5C5",
"h c #9797A7A7C9C9",
"j c #9595A8A8CFCF",
"k c #9B9BB1B1DFDF",
"l c #AAAAB4B4C7C7",
"z c #D4D4C3C3D0D0",
"x c #CDCDDADAE9E9",
"c c #D2D2D8D8E2E2",
"v c #D6D6DCDCE6E6",
"b c #C8C8DADAFDFD",
"n c #D2D2DDDDF0F0",
"m c #D5D5DFDFF1F1",
"M c #E1E1E5E5ECEC",
"N c #F2F2E2E2E2E2",
"B c #F5F5E5E5E2E2",
"V c #F1F1E9E9ECEC",
"C c #EBEBEFEFFBFB",
"Z c #EFEFF5F5F9F9",
"A c #F1F1F4F4FAFA",
"S c #F2F2F5F5FCFC",
"D c #FAFAFBFBFEFE",
"F c #FDFDFEFEFEFE",
"G c gray100",
"H c None",
/* pixels */
"HHHHH@HHHHHHHHHHHHHHHHHH",
"HHHHH@HHHHHHHHHHHHHHHHHH",
"HHHHH@HHHHHHHHHHHHHHHHHH",
"HHHHH@HHHHHHassdssyyygHH",
"H@@@@@@@@@HHsGFGABw0VXHH",
"H@HHH@---@HHiGGAAqe:&XHH",
"H@HHH@---@HHsGGZZ=;%#XHH",
"H@HHH@---@HHpGGvxN*$zXHH",
"H@HHH@---@HHiGc4<f98bXHH",
"H@@@@@@@@@HHuM5Sno23 XHH",
"H@HHHHHHH@HHu7DmkhOl+XHH",
"H@HHHHHHH@HHtCjr61,>.XHH",
"H@HHHHHHH@HHyXXXXXXXXXHH",
"H@HHHHHHH@HHHHHHHHHHHHHH",
"H@@@@@@@@@HHHHHHHHHHHHHH"
};

View File

@ -1,97 +0,0 @@
/* XPM */
const char *pan_both_xpm[] = {
/* columns rows colors chars-per-pixel */
"24 15 76 1",
" c #1B1B22225353",
". c #0D0D0D0D6767",
"X c #0F0F14146161",
"o c #111115156464",
"O c #121219196262",
"+ c #131313136969",
"@ c #131314146C6C",
"# c #111115156F6F",
"$ c #19191A1A6E6E",
"% c #1E1E1E1E6F6F",
"& c #1D1D21217878",
"* c #232330306262",
"= c #282837376262",
"- c #2A2A2A2A7575",
"; c #3C3C3C3C7E7E",
": c #36364A4A6464",
"> c #606060606060",
", c #C1C14B4B2B2B",
"< c #CFCF55553636",
"1 c #CBCB75752424",
"2 c #BABA6D6D6666",
"3 c #CCCC69695656",
"4 c #C9C973736666",
"5 c #FFFF7F7F7F7F",
"6 c #EDEDA0A04C4C",
"7 c #EFEFA5A54F4F",
"8 c #484848488484",
"9 c #5A5A5A5A8E8E",
"0 c #45454B4B9696",
"q c #5F5F5F5F9090",
"w c #656565659292",
"e c #777777779B9B",
"r c #7E7E7E7E9F9F",
"t c #B2B20000FFFF",
"y c #7D7D89899E9E",
"u c #7B7B8888B1B1",
"i c #83838383A1A1",
"p c #89899999AFAF",
"a c #8A8A9A9AAEAE",
"s c #9B9B9B9BADAD",
"d c #9696A3A3B4B4",
"f c #A1A1A1A1B0B0",
"g c #A7A7A7A7B3B3",
"h c #B9B9B9B9BCBC",
"j c #D3D396968D8D",
"k c #D2D297978D8D",
"l c #DDDDA5A59B9B",
"z c #E8E8C3C39393",
"x c #9090A5A5C3C3",
"c c #9191A5A5C3C3",
"v c #9191A5A5C4C4",
"b c #9292A6A6C5C5",
"n c #9292A7A7C5C5",
"m c #9191A5A5C6C6",
"M c #9393A7A7C6C6",
"N c #9393A7A7C7C7",
"B c #9898AAAAC5C5",
"V c #9595A8A8CFCF",
"C c #AAAAB3B3D4D4",
"Z c #D4D4C3C3D0D0",
"A c #C0C0CACAE3E3",
"S c #CDCDDADAE9E9",
"D c #D2D2D8D8E2E2",
"F c #D6D6DCDCE6E6",
"G c #E1E1E5E5ECEC",
"H c #F2F2E2E2E2E2",
"J c #F5F5E5E5E2E2",
"K c #F1F1E9E9ECEC",
"L c #EBEBEFEFFBFB",
"P c #EFEFF5F5F9F9",
"I c #F1F1F4F4FAFA",
"U c #F2F2F5F5FCFC",
"Y c #FAFAFBFBFEFE",
"T c #FDFDFEFEFEFE",
"R c gray100",
"E c None",
/* pixels */
"EEEEE>EEEEEmMMNMMcccBEEE",
"EEEEE>EEEEEMRTRIJljK:EEE",
"EEEEE>EEEEEbRRIIkz72:EEE",
"EEEEE>EEEEEMRRPP461,:EEE",
"E>>>>>>>>>EnRRFSH3<Z:EEE",
"E>EEE>555>EbRDpyu$@0*EEE",
"E>EEE>555>EvGaUCott O%sE",
"E>EEE>555>EvdYA&tttttt-f",
"E>EEE>555>ExLV#tttttttt+",
"E>>>>>>>>>Ec::=Xttttttw9",
"E>EEEEEEE>EEEEEe8ttttt-h",
"E>EEEEEEE>EEEEEE9wttt-sE",
"E>EEEEEEE>EEEEEEE;itqqEE",
"E>EEEEEEE>EEEEEEEh-r-hEE",
"E>>>>>>>>>EEEEEEEEg.fEEE"
};

View File

@ -1,63 +0,0 @@
/* XPM */
const char *pan_shape_xpm[] = {
/* columns rows colors chars-per-pixel */
"30 15 42 1",
" c black",
". c #010101010101",
"X c #070707070707",
"o c #0C0C0C0C0C0C",
"O c #484848484848",
"+ c #FFFF00006E6E",
"@ c #121223238585",
"# c #141424248585",
"$ c #181829298787",
"% c #1D1D2E2E8989",
"& c #1E1E2E2E8989",
"* c #2A2A39398D8D",
"= c #30303E3E8F8F",
"- c #363644449191",
"; c #3A3A48489292",
": c #3C3C49499393",
"> c #42424E4E9595",
", c #484854549797",
"< c #4E4E59599999",
"1 c #5A5A64649D9D",
"2 c #66666F6FA2A2",
"3 c #78787F7FA8A8",
"4 c #39395050D3D3",
"5 c #3C3C5252D4D4",
"6 c #3F3F5555D5D5",
"7 c #42425858D6D6",
"8 c #45455A5AD7D7",
"9 c #47475C5CD7D7",
"0 c #4B4B6060D9D9",
"q c #54546868DCDC",
"w c #5A5A6D6DDEDE",
"e c #5D5D7070DFDF",
"r c #60607373E0E0",
"t c #84848A8AACAC",
"y c #8A8A8F8FAEAE",
"u c #90909595B0B0",
"i c #A2A2A5A5B6B6",
"p c #A8A8AAAAB8B8",
"a c #AEAEB0B0BABA",
"s c #B4B4B5B5BCBC",
"d c #BABABBBBBEBE",
"f c None",
/* pixels */
"ffffOfffffffffffffffffffffffff",
"ffff fffffffffffffffffffffffff",
"ffff fffffffffffffffu%3fffffff",
"ffff fffffffffffffi:=9,$3fffff",
"X .fffffffa<&7rrrq,$3fff",
" fff +++ fffffd2&4rrrrrrrq,$3f",
" fff +++ fffft&1wrrrrrrrrrrq,=",
" fff +++ fff#;qrrrrrrrrrrrrr5,",
" fff +++ fff>6rrrrrrrrrrrq1@,p",
" fffy-rrrrrrrrr8:$2aff",
" fffffff fffd@wrrrrre4&-tfffff",
" fffffff ffff,5rrrq1@<ifffffff",
" fffffff ffffy-r0:$2sfffffffff",
" fffffff ffffd&=*tffffffffffff",
"o offfffffffffffffffffff"
};

View File

@ -1,57 +0,0 @@
/* XPM */
const char *pan_shp_xpm[] = {
/* columns rows colors chars-per-pixel */
"24 15 36 1",
" c #0D0D0D0D6767",
". c #131313136969",
"X c #181818186C6C",
"o c #1A1A1A1A6E6E",
"O c #1E1E1E1E6F6F",
"+ c #242424247272",
"@ c #2A2A2A2A7575",
"# c #303030307878",
"$ c #363636367B7B",
"% c #3C3C3C3C7E7E",
"& c #606060606060",
"* c #FFFF7F7F7F7F",
"= c #424242428181",
"- c #484848488484",
"; c #5A5A5A5A8E8E",
": c #5F5F5F5F9090",
"> c #656565659292",
", c #777777779B9B",
"< c #7D7D7D7D9E9E",
"1 c #7E7E7E7E9F9F",
"2 c #A1A14949D3D3",
"3 c #A6A64D4DD6D6",
"4 c #A9A95050D7D7",
"5 c #AAAA5151D8D8",
"6 c #ACAC5353D9D9",
"7 c #AFAF5656DADA",
"8 c #B5B55C5CDDDD",
"9 c #B8B85F5FDFDF",
"0 c #83838383A1A1",
"q c #8F8F8F8FA7A7",
"w c #9B9B9B9BADAD",
"e c #A1A1A1A1B0B0",
"r c #A7A7A7A7B3B3",
"t c #ADADADADB6B6",
"y c #B9B9B9B9BCBC",
"u c None",
/* pixels */
"uuuuu&uuuuuuuuuuuuuuuuuu",
"uuuuu&uuuuuuuuuuuuuuuuuu",
"uuuuu&uuuuuuuuuuuuuuuuuu",
"uuuuu&uuuuuuuuwOX=<uuuuu",
"u&&&&&&&&&uuuw#46<=Owuuu",
"u&uuu&***&uut+799994@euu",
"u&uuu&***&uuo29999995.uu",
"u&uuu&***&uuq$899999>;uu",
"u&uuu&***&uuu,-99993@yuu",
"u&&&&&&&&&uuuu;>998@wuuu",
"u&uuuuuuu&uuuuu%09::uuuu",
"u&uuuuuuu&uuuuuy@1@yuuuu",
"u&uuuuuuu&uuuuuur euuuuu",
"u&uuuuuuu&uuuuuuuuuuuuuu",
"u&&&&&&&&&uuuuuuuuuuuuuu"
};

View File

@ -1,100 +0,0 @@
/* XPM */
const char *preview__xpm[] = {
/* columns rows colors chars-per-pixel */
"16 15 79 1",
" c gray20",
". c #353535353535",
"X c gray21",
"o c gray22",
"O c gray23",
"+ c #3C3C3C3C3C3C",
"@ c #3E3E3E3E3E3E",
"# c #3F3F3F3F3F3F",
"$ c gray25",
"% c #414141414141",
"& c gray26",
"* c #434343434343",
"= c gray27",
"- c #464646464646",
"; c #484848484848",
": c #494949494949",
"> c gray29",
", c #4B4B4B4B4B4B",
"< c #4C4C4C4C4C4C",
"1 c gray30",
"2 c #505050505050",
"3 c gray32",
"4 c gray33",
"5 c #555555555555",
"6 c #565656565656",
"7 c gray34",
"8 c gray35",
"9 c #5A5A5A5A5A5A",
"0 c #5B5B5B5B5B5B",
"q c #5D5D5D5D5D5D",
"w c #676767676767",
"e c #6D6D6D6D6D6D",
"r c gray43",
"t c #6F6F6F6F6F6F",
"y c gray44",
"u c #727272727272",
"i c gray46",
"p c #777777777777",
"a c gray47",
"s c #7B7B7B7B7B7B",
"d c gray49",
"f c #7E7E7E7E7E7E",
"g c #808080808080",
"h c #848484848484",
"j c #898989898989",
"k c gray54",
"l c #8B8B8B8B8B8B",
"z c gray55",
"x c #8D8D8D8D8D8D",
"c c #909090909090",
"v c gray57",
"b c gray58",
"n c gray59",
"m c #979797979797",
"M c #9A9A9A9A9A9A",
"N c #9B9B9B9B9B9B",
"B c #9D9D9D9D9D9D",
"V c #9F9F9F9F9F9F",
"C c #A0A0A0A0A0A0",
"Z c gray63",
"A c gray64",
"S c #A4A4A4A4A4A4",
"D c #A5A5A5A5A5A5",
"F c gray65",
"G c #A7A7A7A7A7A7",
"H c #A9A9A9A9A9A9",
"J c gray67",
"K c #ACACACACACAC",
"L c gray68",
"P c #AEAEAEAEAEAE",
"I c #B4B4B4B4B4B4",
"U c gray71",
"Y c #B9B9B9B9B9B9",
"T c gray73",
"R c #BBBBBBBBBBBB",
"E c gray74",
"W c gray",
"Q c gray75",
"! c None",
/* pixels */
"!!!!!!!!d.6Q!!!!",
"!!!!!!!coI4j!!!!",
"!!!r,51%P!zq!E!!",
"!!B*DCAW!!F@a$&S",
"!!V:!!!!!!QguJk6",
"!!!-m!!!!!!!!!k0",
"!!!st!!!!!!!!sXG",
"!!Y+n!!!!!!l*5K!",
"!R=f!!!!!!x#N!!!",
"!5t!!!!!!!wp!!!!",
"N+!!!!!!!!HoM!!!",
"8l!!!y5t!!!ZO!!!",
"3n!!99G2h!!b<!!!",
"vOAe>!!L RU.B!!!",
"!h>7T!!!i;=f!!!!"
};

View File

@ -1,30 +0,0 @@
#define static
#include "appico_xpm.xpm"
#include "add__xpm.xpm"
#include "arr_1_xpm.xpm"
#include "arr__xpm.xpm"
#include "assdraw3_xpm.xpm"
#include "b__xpm.xpm"
#include "c__xpm.xpm"
#include "check__xpm.xpm"
#include "del__xpm.xpm"
#include "del_cross_xpm.xpm"
#include "help__xpm.xpm"
#include "help_xpm.xpm"
#include "l__xpm.xpm"
#include "m__xpm.xpm"
#include "n__xpm.xpm"
#include "new__xpm.xpm"
#include "nut__xpm.xpm"
#include "p__xpm.xpm"
#include "pan_bg_xpm.xpm"
#include "pan_both_xpm.xpm"
#include "pan_shape_xpm.xpm"
#include "pan_shp_xpm.xpm"
#include "preview__xpm.xpm"
#include "rot__xpm.xpm"
#include "s__xpm.xpm"
#include "sc_rot__xpm.xpm"
#include "src__xpm.xpm"
#include "transform_xpm.xpm"
#include "uncheck__xpm.xpm"

Some files were not shown because too many files have changed in this diff Show More