platform/core/csapi/opentk.git
11 years agoFix issue #19
Stefanos A. [Fri, 20 Dec 2013 22:31:42 +0000 (23:31 +0100)]
Fix issue #19

Don't filter window messages passed to our window (see
http://blogs.msdn.com/b/oldnewthing/archive/2005/02/09/369804.aspx).
Additionally, return the correct values for all messages we are actually
handling and clean up unmanaged memory after we are done with the
window.

11 years agoExplicitly set WindowProcedure calling convention
Stefanos A. [Fri, 20 Dec 2013 22:29:47 +0000 (23:29 +0100)]
Explicitly set WindowProcedure calling convention

11 years agoSimplify ProcessEvents implementation
Stefanos A. [Fri, 20 Dec 2013 07:42:36 +0000 (08:42 +0100)]
Simplify ProcessEvents implementation

Instead of combining PeekMessage+GetMessage, we can simply call
PeekMessage(Remove) to achieve the same effect. This also allows us to
remove the IsIdle property, which is no longer used anywhere.

11 years agoThreads with message pump require STA comparment
Stefanos A. [Thu, 19 Dec 2013 09:39:36 +0000 (10:39 +0100)]
Threads with message pump require STA comparment

May affect issue #19

11 years agoReplace Wgl.GetCurrentDC with cached dc
Stefanos A. [Wed, 18 Dec 2013 13:51:00 +0000 (14:51 +0100)]
Replace Wgl.GetCurrentDC with cached dc
 with

11 years agoNo point in using 16bpp color
Stefanos A. [Wed, 18 Dec 2013 13:29:18 +0000 (14:29 +0100)]
No point in using 16bpp color

11 years agoCleaned up temporary context construction
Stefanos A. [Wed, 18 Dec 2013 13:29:06 +0000 (14:29 +0100)]
Cleaned up temporary context construction

The temporary context is now retained until the actual context has been
constructed. If we don't do this, then WGL_ARB_create_context may fail
to work correctly on specific GPUs (e.g. Intel). This may affect issue
#19.

11 years agoFixed GetModesARB implementation
Stefanos A. [Wed, 18 Dec 2013 13:16:49 +0000 (14:16 +0100)]
Fixed GetModesARB implementation

The correct way to query number of available pixel formats is to use
Wgl.Arb.GetPixelFormatAttrib(NumberPixelFormatsArb), not
Wgl.Arb.ChoosePixelFormats. This fixes an issue where Intel drivers
would fail to report any pixel formats in GetModesARB, even when
WGL_ARB_pixel_format is supported.

11 years agoMinor code cleanup
Stefanos A. [Tue, 17 Dec 2013 22:31:04 +0000 (23:31 +0100)]
Minor code cleanup

11 years agoUse gdi32 implementations of functions
Stefanos A. [Tue, 17 Dec 2013 21:35:30 +0000 (22:35 +0100)]
Use gdi32 implementations of functions

Several functions are defined in both gdi32 and opengl32. Using the
opengl32/wgl versions did not appear to help with issue #19. Let's use
the gdi32 version instead, as suggested here:
https://www.opengl.org/wiki/Platform_specifics:_Windows#The_WGL_functions

11 years agoLoad opengl32.dll before gdi32.dll
Stefanos A. [Tue, 17 Dec 2013 20:24:25 +0000 (21:24 +0100)]
Load opengl32.dll before gdi32.dll

According to
http://stackoverflow.com/questions/199016/wglcreatecontext-in-c-sharp-failing-but-not-in-managed-c,
opengl32.dll must be loaded before gdi32.dll. Affect issue #19.

11 years agoMinor code cleanup
Stefanos A. [Tue, 17 Dec 2013 15:40:15 +0000 (16:40 +0100)]
Minor code cleanup

No need to wrap Wgl.DescribePixelFormat, just call it directly.

11 years agoUse opengl32 instead of gdi32 throughout
Stefanos A. [Tue, 17 Dec 2013 15:39:45 +0000 (16:39 +0100)]
Use opengl32 instead of gdi32 throughout

Since we are dynamically loading opengl32.dll, we are supposed to use
the wgl version of functions that exist in both opengl32 and gdi32 dlls.

11 years agoCorrected the entrypoint for wglChoosePixelFormat
Stefanos A. [Tue, 17 Dec 2013 15:38:56 +0000 (16:38 +0100)]
Corrected the entrypoint for wglChoosePixelFormat

11 years agoClean up shader error detection
Stefanos A. [Tue, 17 Dec 2013 11:09:00 +0000 (12:09 +0100)]
Clean up shader error detection

11 years agoUpdated author information (2/2)
Stefanos A. [Mon, 16 Dec 2013 11:43:11 +0000 (12:43 +0100)]
Updated author information (2/2)

11 years agoUpdated author information
Stefanos A. [Mon, 16 Dec 2013 10:07:05 +0000 (11:07 +0100)]
Updated author information

11 years agoUse 16bit depth in GraphicsMode.Default
Stefanos A. [Mon, 16 Dec 2013 09:44:37 +0000 (10:44 +0100)]
Use 16bit depth in GraphicsMode.Default

16bits appear to be better supported than 24bits on virtual machines.

11 years agoGraphicsContext cannot be released by finalizer
Stefanos A. [Mon, 16 Dec 2013 09:43:56 +0000 (10:43 +0100)]
GraphicsContext cannot be released by finalizer

On many/most platforms, GraphicsContexts can only be released by the
thread where they are current. This means that the user must call
GraphicsContext.Dispose() or risk a resource leak.

Since we cannot release contexts on the finalizer thread, we should keep
strong references, instead of weak references, until the user explicitly
calls Dispose().

This patch fixes issues with SDL2 crashing when running the MonoGame
WindowsGL test suite.

11 years agoImproved diagnostics
Stefanos A. [Mon, 16 Dec 2013 09:39:54 +0000 (10:39 +0100)]
Improved diagnostics

This helps when tracking down GraphicsContext-related issues in SDL2.

11 years agoAdded hack for MonoGame compatibility
Stefanos A. [Mon, 16 Dec 2013 09:39:11 +0000 (10:39 +0100)]
Added hack for MonoGame compatibility

MonoGame uses reflection to access internal APIs. We need to keep these
available until this is fixed downstream.

11 years agoProtect against recursion in Closing event
Stefanos A. [Mon, 16 Dec 2013 09:37:59 +0000 (10:37 +0100)]
Protect against recursion in Closing event

Misbehaving clients that shall not be named here may call
GameWindow.Close() inside the GameWindow.Closing event. This causes
recursion in SDL2, crashing the application.

This patch adds a guard to protect against recursion when calling
GameWindow.Close().

11 years agoAdded overloads for compatibility with svn r3127
Stefanos A [Mon, 16 Dec 2013 00:55:05 +0000 (01:55 +0100)]
Added overloads for compatibility with svn r3127

Several projects are still using the last svn revision from the
sourceforge repository (r3127). These overloads provide an upgrade path
from r3127 to OpenTK 1.1.

11 years agoNormalized xml doc file paths 1.1-b3
Stefanos A [Sun, 15 Dec 2013 22:18:33 +0000 (23:18 +0100)]
Normalized xml doc file paths

11 years agoRemoved lib/ and *.nupkg from zip archive
Stefanos A [Sun, 15 Dec 2013 22:08:53 +0000 (23:08 +0100)]
Removed lib/ and *.nupkg from zip archive

11 years agoFixed build order in Nsis configuration
Stefanos A [Sun, 15 Dec 2013 22:08:19 +0000 (23:08 +0100)]
Fixed build order in Nsis configuration

11 years agoAdded Dependencies folder to Nsis installer
Stefanos A [Sun, 15 Dec 2013 22:07:56 +0000 (23:07 +0100)]
Added Dependencies folder to Nsis installer

11 years agoFixed build in Nsis configuration
Stefanos A [Sun, 15 Dec 2013 21:33:28 +0000 (22:33 +0100)]
Fixed build in Nsis configuration

11 years agoUpdated OpenGL documentation to Khronos r24522
Stefanos A [Sun, 15 Dec 2013 21:32:32 +0000 (22:32 +0100)]
Updated OpenGL documentation to Khronos r24522

11 years agoFixed deprecation warning
Stefanos A [Sun, 15 Dec 2013 21:02:32 +0000 (22:02 +0100)]
Fixed deprecation warning

11 years agoEliminated cls-compliance warnings in BlittableValueType
Stefanos A [Sun, 15 Dec 2013 21:02:21 +0000 (22:02 +0100)]
Eliminated cls-compliance warnings in BlittableValueType

11 years agoEliminated cls-compliance warnings in the math library
Stefanos A [Sun, 15 Dec 2013 21:02:08 +0000 (22:02 +0100)]
Eliminated cls-compliance warnings in the math library

11 years agoEliminated CLS-compliance warnings in the bindings
Stefanos A [Sun, 15 Dec 2013 21:01:45 +0000 (22:01 +0100)]
Eliminated CLS-compliance warnings in the bindings

11 years agoFixed memory corruption on string return type marshaling
Stefanos A [Sun, 15 Dec 2013 19:57:25 +0000 (20:57 +0100)]
Fixed memory corruption on string return type marshaling

11 years agoMerge branch 'no-reflect' of https://github.com/opentk/opentk
Stefanos A [Sun, 15 Dec 2013 17:30:47 +0000 (18:30 +0100)]
Merge branch 'no-reflect' of https://github.com/opentk/opentk

Conflicts:
OpenTK.sln

11 years agoCompatibility fixes for Mono 2.10
parallels [Sun, 15 Dec 2013 17:27:24 +0000 (18:27 +0100)]
Compatibility fixes for Mono 2.10

The Mono 2.10 compiler fails when compiling extern methods that are not
marked as DllImport. We fix that by adding a method body that throws a
NotImplementedException instead.

Additionally, MonoDevelop 2.8 cannot open sln files with ToolsVersion 12.
The fix is to change ToolsVersion to 11.

11 years agoMerge branch 'no-reflect'
Stefanos A [Sun, 15 Dec 2013 16:37:25 +0000 (17:37 +0100)]
Merge branch 'no-reflect'

Conflicts:
OpenTK.sln
Source/Bind/FuncProcessor.cs
Source/OpenTK/Graphics/ES11/ES11.cs
Source/OpenTK/Graphics/ES11/ES11Core.cs
Source/OpenTK/Graphics/ES11/ES11Delegates.cs
Source/OpenTK/Graphics/ES20/ES20.cs
Source/OpenTK/Graphics/OpenGL/GL.cs
Source/OpenTK/Graphics/OpenGL/GLCore.cs
Source/OpenTK/Graphics/OpenGL/GLDelegates.cs
Source/OpenTK/Graphics/OpenGL/GLObsolete.cs

11 years agoMaintain backwards compatibility with 1.1
Stefanos A [Sun, 15 Dec 2013 15:58:33 +0000 (16:58 +0100)]
Maintain backwards compatibility with 1.1

11 years agoMerge master into no-reflect
Stefanos A [Sun, 15 Dec 2013 15:36:37 +0000 (16:36 +0100)]
Merge master into no-reflect

11 years agoBuild UpdateVersion before OpenTK
Stefanos A. [Sun, 15 Dec 2013 14:36:24 +0000 (15:36 +0100)]
Build UpdateVersion before OpenTK

11 years agoGenerate debug symbols in release builds
Stefanos A. [Sun, 15 Dec 2013 14:36:12 +0000 (15:36 +0100)]
Generate debug symbols in release builds

11 years agoImproved WindowState changes on SDL2 backend
Stefanos A. [Sun, 15 Dec 2013 14:35:57 +0000 (15:35 +0100)]
Improved WindowState changes on SDL2 backend

SDL2 fails to report several different WindowState changes. OpenTK uses
a number of hacks to make it work to some extent, however real fixes
will have to be implemented upstream.

11 years agoMerge branch 'sdlres'
Stefanos A [Sun, 15 Dec 2013 12:51:29 +0000 (13:51 +0100)]
Merge branch 'sdlres'

11 years agoUpdated solution to VS2013 format.
Stefanos A. [Sun, 15 Dec 2013 12:47:29 +0000 (13:47 +0100)]
Updated solution to VS2013 format.

11 years agoAdded nuget.exe to project items
Stefanos A. [Sun, 15 Dec 2013 12:47:19 +0000 (13:47 +0100)]
Added nuget.exe to project items

11 years agoCommitted nuget cmdline tool to source control
Stefanos A. [Sun, 15 Dec 2013 12:36:00 +0000 (13:36 +0100)]
Committed nuget cmdline tool to source control

This appears to be the simplest (only?) way to use nuget in a
cross-platform manner.

11 years agoMerge branch 'nuget'
Stefanos A [Sun, 15 Dec 2013 12:23:16 +0000 (13:23 +0100)]
Merge branch 'nuget'

11 years agoAdd OpenTK.dll.config as content
Stefanos A [Sun, 15 Dec 2013 12:21:22 +0000 (13:21 +0100)]
Add OpenTK.dll.config as content

11 years agoMonoDevelop insists on making these changes
Stefanos A [Sun, 15 Dec 2013 12:05:06 +0000 (13:05 +0100)]
MonoDevelop insists on making these changes

11 years agoUpdated description
Stefanos A [Sun, 15 Dec 2013 12:04:29 +0000 (13:04 +0100)]
Updated description

11 years agoGenerate nuget package for OpenTK.GLControl
Stefanos A [Sun, 15 Dec 2013 12:03:56 +0000 (13:03 +0100)]
Generate nuget package for OpenTK.GLControl

11 years agoGenerate xml documentation for OpenTK.GLControl
Stefanos A [Sun, 15 Dec 2013 12:01:39 +0000 (13:01 +0100)]
Generate xml documentation for OpenTK.GLControl

11 years agoImproved nuget version information
Stefanos A [Sun, 15 Dec 2013 11:02:43 +0000 (12:02 +0100)]
Improved nuget version information

11 years agoDo not commit build timestamp to repository
Stefanos A [Sun, 15 Dec 2013 11:02:01 +0000 (12:02 +0100)]
Do not commit build timestamp to repository

11 years agoGenerate both build timestamp and version information
Stefanos A [Sun, 15 Dec 2013 11:01:26 +0000 (12:01 +0100)]
Generate both build timestamp and version information

11 years agoDelay VisualInfo construction (fixes #17)
parallels [Sat, 14 Dec 2013 10:54:55 +0000 (11:54 +0100)]
Delay VisualInfo construction (fixes #17)

In OpenTK 1.1, GraphicsMode queries the platform for a mode id lazily.
By delaying VisualInfo selection until the GraphicsContext is constructed
we ensure that a concrete GraphicsMode is selected and ready for use.

11 years agoCopy build artifact to root directory regardless of artifact name
Stefanos A [Fri, 13 Dec 2013 23:20:39 +0000 (00:20 +0100)]
Copy build artifact to root directory regardless of artifact name

11 years agoAdded release notes for OpenTK
Stefanos A [Fri, 13 Dec 2013 23:19:18 +0000 (00:19 +0100)]
Added release notes for OpenTK

11 years agoAdded nuget lib directory to gitignore
Stefanos A [Fri, 13 Dec 2013 23:19:03 +0000 (00:19 +0100)]
Added nuget lib directory to gitignore

11 years agoAdded nuget build target to OpenTK.sln
Stefanos A [Fri, 13 Dec 2013 09:52:11 +0000 (10:52 +0100)]
Added nuget build target to OpenTK.sln

11 years agoAdded nuget build target
Stefanos A [Fri, 13 Dec 2013 09:51:34 +0000 (10:51 +0100)]
Added nuget build target

This will create a nupkg file for OpenTK and copy it to the base
directory. Version information is currently hardcoded to 1.1 (this
should be fixed.)

11 years agoImplemented resolution change workaround on SDL2
Stefanos A [Thu, 12 Dec 2013 23:07:13 +0000 (00:07 +0100)]
Implemented resolution change workaround on SDL2

SDL2 does not support changing display resolutions independently of an
SDL window. As a workaround, if the user uses ChangeResolution and then
makes a GameWindow fullscreen, we use old-style SDL fullscreen which
changes the resolution. If the user makes a GameWindow fullscreen
without calling ChangeResolution first, we use the new
fullscreen-desktop mode to match the other OpenTK backends.

11 years agoCache size of char
Stefanos A [Mon, 9 Dec 2013 22:46:07 +0000 (23:46 +0100)]
Cache size of char

BlittableValueType<char> caches the size of the type parameter. This
way, we avoid calling Marshal.SizeOf repeatedly for every keyboard
event.

11 years agoEliminated memory allocations in Keyboard events
Stefanos A [Mon, 9 Dec 2013 22:44:51 +0000 (23:44 +0100)]
Eliminated memory allocations in Keyboard events

11 years agoDo not generate KeyPress events for non-printable characters
Stefanos A [Mon, 9 Dec 2013 22:43:36 +0000 (23:43 +0100)]
Do not generate KeyPress events for non-printable characters

11 years agoMerge branch 'enumfix'
Stefanos A [Sun, 8 Dec 2013 20:07:46 +0000 (21:07 +0100)]
Merge branch 'enumfix'

11 years agoRegenerated bindings
Stefanos A [Sun, 8 Dec 2013 15:20:30 +0000 (16:20 +0100)]
Regenerated bindings

11 years agoAdded overloads for compatibility with 1.0 and 1.1 APIs
Stefanos A [Sun, 8 Dec 2013 15:20:22 +0000 (16:20 +0100)]
Added overloads for compatibility with 1.0 and 1.1 APIs

11 years agoMaintain Obsolete property when cloning a function
Stefanos A [Sun, 8 Dec 2013 15:20:04 +0000 (16:20 +0100)]
Maintain Obsolete property when cloning a function

11 years agoCreate convenience overloads based on wrappers, not entry points
Stefanos A [Sun, 8 Dec 2013 15:19:46 +0000 (16:19 +0100)]
Create convenience overloads based on wrappers, not entry points

It makes sense to generate convenience overloads for each relevant
wrapper function, instead of each entry point. This way, we generate
convenience overloads for every wrapper in overrides.xml (even wrappers
for background compatibility), which would otherwise be ignored.

11 years agoFix for issue #16 "X11 misreported as unsupported platform"
parallels [Sun, 8 Dec 2013 11:38:06 +0000 (12:38 +0100)]
Fix for issue #16 "X11 misreported as unsupported platform"

11 years agoIgnore missing comments warning
Stefanos A [Fri, 6 Dec 2013 18:33:03 +0000 (19:33 +0100)]
Ignore missing comments warning

The OpenGL manpages do not include extension methods. Ignore this
warning to let more important ones shine through.

11 years agoRegenerated bindings
Stefanos A. [Fri, 6 Dec 2013 17:37:11 +0000 (18:37 +0100)]
Regenerated bindings

11 years agoUpdated to Revision 24389
Stefanos A. [Fri, 6 Dec 2013 17:37:03 +0000 (18:37 +0100)]
Updated to Revision 24389

11 years agoImproved handling of enum parameters
Stefanos A. [Fri, 6 Dec 2013 17:36:31 +0000 (18:36 +0100)]
Improved handling of enum parameters

When a function parameter matches a strongly-typed enum, the parameter
type is explicitly set to that enum. This fixes issues with function
parameters referring to enums whose names change after translation.

11 years agoCleaned up instructions for Converter.exe
Stefanos A. [Fri, 6 Dec 2013 17:28:38 +0000 (18:28 +0100)]
Cleaned up instructions for Converter.exe

11 years agoUpdated license information
Stefanos A [Fri, 6 Dec 2013 08:23:56 +0000 (09:23 +0100)]
Updated license information

11 years agoAdded methods for 1.0 compatibility
Stefanos A [Fri, 6 Dec 2013 08:23:43 +0000 (09:23 +0100)]
Added methods for 1.0 compatibility

11 years agoMoved license files to license/ folder
Stefanos A. [Thu, 5 Dec 2013 23:47:38 +0000 (00:47 +0100)]
Moved license files to license/ folder

This is simply a cosmetic change, to reduce clutter on the root
Dependencies/ directory.

11 years agoUpdated dependency documentation
Stefanos A. [Thu, 5 Dec 2013 23:46:32 +0000 (00:46 +0100)]
Updated dependency documentation

Added license files for ikvm, monolinker and cecil. Added usage
instructions for monolinker.

11 years agoSplit binaries for library and supporting tools
Stefanos A. [Thu, 5 Dec 2013 17:43:47 +0000 (18:43 +0100)]
Split binaries for library and supporting tools

Tools now go to the Binaries/Tools/[Debug|Release] directory. OpenTK
remains at BInaries/OpenTK/[Debug|Release].

Mono.Cecil and IKVM now reside under the Dependencies/managed/
directory.

11 years agoClientRectangle should not affect window location
Stefanos A. [Thu, 5 Dec 2013 16:44:13 +0000 (17:44 +0100)]
ClientRectangle should not affect window location

Fixes issue #13

11 years agoMerge remote-tracking branch 'origin/master' into no-reflect
Stefanos A [Thu, 5 Dec 2013 13:53:37 +0000 (14:53 +0100)]
Merge remote-tracking branch 'origin/master' into no-reflect

11 years agoMove installer to destination directory 1.1-b2
Stefanos A. [Thu, 5 Dec 2013 11:05:26 +0000 (12:05 +0100)]
Move installer to destination directory

This reduces the garbage left behind by the installer generation script.

11 years agoStreamlined nsis installer
Stefanos A. [Thu, 5 Dec 2013 11:04:58 +0000 (12:04 +0100)]
Streamlined nsis installer

OpenAL is now included in the Dependencies/ folder and NShader is no
longer linked to by the installer.

11 years agoIgnore generated installers
Stefanos A. [Thu, 5 Dec 2013 11:04:15 +0000 (12:04 +0100)]
Ignore generated installers

11 years agoCorrected zip build script
Stefanos A. [Thu, 5 Dec 2013 10:42:01 +0000 (11:42 +0100)]
Corrected zip build script

Excluded items are now really excluded.

11 years agoReduce temporary string allocations
Stefanos A [Thu, 5 Dec 2013 10:20:58 +0000 (11:20 +0100)]
Reduce temporary string allocations

Instead of modifying the name of an OpenGL symbol on the managed side,
before copying it to the unmanaged side, we perform the modification
directly on the unmanaged side. This reduces the total amount of
allocations in OpenTK by ~30% (673496 bytes in 10750 objects compared
to 930272 bytes in 15243 objects before this modification.)

11 years agoAdded debug arguments in release builds
Stefanos A [Thu, 5 Dec 2013 08:14:13 +0000 (09:14 +0100)]
Added debug arguments in release builds

11 years agoGenerate debug symbols in release builds
Stefanos A [Thu, 5 Dec 2013 08:13:50 +0000 (09:13 +0100)]
Generate debug symbols in release builds

11 years agoUpdated project files
Stefanos A. [Thu, 5 Dec 2013 08:03:12 +0000 (09:03 +0100)]
Updated project files

Generate debug symbols on release builds. Remove unused resx file that
referenced WinForms.

11 years agoImplemented manual marshaling of string parameters
Stefanos A [Wed, 4 Dec 2013 21:32:56 +0000 (22:32 +0100)]
Implemented manual marshaling of string parameters

11 years agoCorrect convenience wrapper implementation
Stefanos A [Wed, 4 Dec 2013 21:26:30 +0000 (22:26 +0100)]
Correct convenience wrapper implementation

11 years agoConvert string[] callsites to IntPtr
Stefanos A [Wed, 4 Dec 2013 20:22:33 +0000 (21:22 +0100)]
Convert string[] callsites to IntPtr

This fixes the signature mismatch between the new marshaling code and
the callsites.

11 years agoImplemented marshaling for string arrays
Stefanos A [Wed, 4 Dec 2013 19:33:19 +0000 (20:33 +0100)]
Implemented marshaling for string arrays

This allows functions such as GL.ShaderSource to run on Mono without
crashing.

11 years agoRegenerated bindings
Stefanos A [Tue, 3 Dec 2013 08:10:45 +0000 (09:10 +0100)]
Regenerated bindings

11 years agoClean up wrapper generation
Stefanos A [Tue, 3 Dec 2013 08:10:36 +0000 (09:10 +0100)]
Clean up wrapper generation

We can now apply multiple WrapperTypes values to a single parameter.

11 years agoUpdate WrapperTypes values for [Flags]
Stefanos A [Tue, 3 Dec 2013 08:09:19 +0000 (09:09 +0100)]
Update WrapperTypes values for [Flags]

11 years agoRemoved duplicate ldarg
Stefanos A [Tue, 3 Dec 2013 07:59:48 +0000 (08:59 +0100)]
Removed duplicate ldarg

11 years agoWorkaround for #5
Stefanos A. [Mon, 2 Dec 2013 22:39:36 +0000 (23:39 +0100)]
Workaround for #5

WS_CLIPCHILDREN and WS_CLIPSIBLINGS appear to cause flickering on
specific video cards. OpenGL appears to work correctly without these, so
we'll disable them to return to OpenTK 1.0 behavior.