Revision history for Changes

0.61    2016/12/05 00:28:00
         * Documentation updates:
            + Better description of EVENTS
            + Update module synopses to use current APIs
         * Perform Tickit 0.61 deprecations:
            + Die in $win->set_on_*
            + Die in $term->bind_event_with_flags
            + Make $win->clear* methods die since they've actually been broken
              for ages anyway and nobody noticed

0.60    2016/11/05 13:28:12
         * Strict type checking when constructing key or mouse event
         * Perform Tickit 0.60 deprecations:
            + Add warnings to HASHification overloads on Tickit::Event::*
            + Add warning to $term->bind_event_default
            + No longer guarantee $win->term object identity
            + Delete $term->set_on_* methods

0.59    2016/10/22 21:15:57
         * Define new layer-neutral Tickit::Event::* classes
         * Perform Tickit 0.59 deprecations:
            + Warn in calls to $win->set_on_*
            + Warn in calls to $term->bind_event_with_flags()
         * Bundled libtickit changes:
            + Add refcounting to all object types
            + Deprecate the _destroy() functions in favour of _unref()

0.58    2016/09/30 20:08:32
         * Added new Tickit::Event instances for Tickit::Term event info
         * Perform Tickit 0.58 deprecations:
            + Die on attempt to set Tickit::Term ->set_on_* event handlers
            + Perl-level IO handles no longer preserved by term instances
            + Announce deprecation of term event info as HASH references

         * Back-compat for perl 5.10.0 lacking mPUSHs - (RT98983)

0.57    2016/08/07 17:05:21
         * Add $win->bind_event; announce the legacy $win->set_on_* as
         * Define new flags-taking ->bind_event methods that check argument
           types; avoid needing $term->bind_event_with_flags

0.56    2016/05/10 18:02:02
         * Perform Tickit 0.56 deprecations:
            + Remove pen observers
            + Remove guarantee that perl-level IO handles are preserved by
            + Add deprecations warnings to Tickit::Term ->set_on_* event
          * Removed Tickit::Term->find_for_term
          * Bundled libtickit changes:
            + Added TICKIT_EV_DESTROY
            + Give EOF-style signal to term output function

0.55    2016/02/09 23:32:13
         * Wrap tickit_term_emit_{key,mouse}
         * Perform Tickit 0.55 deprecations:
            + window set_expose_after_scroll immediately dies
         * Actually honour return values of term event handlers
         * Added $term->bind_event_with_flags and BIND_FIRST
         * Updated documentation to barename =head2 function style

         * Older perls need 'use IO::Handle' before we can ->binmode things

0.54    2015/09/14 10:36:50
         * Allow $window->raise immediately after construction (RT105582)
         * Added more Window unit-test cases
         * Removed remaining Tickit::Widget-based examples and demos
         * Renamed TICKIT_CURSORSHAPE_* constants
         * Tickit::Debug is now backed by libtickit

         * Make destroyed child windows reƫxpose their client area in the
         * Fix for rb_get_cell_active() returning -1 on failure (RT101716)

0.53    2015/06/28 12:39:41
         * Don't "use_ok" Tickit::Widget or subclasses in unit tests

0.52    2015/06/27 00:28:49
         * Split out Tickit::Widget and friends into the Tickit-Widgets
         * Perform 0.52 deprecations:
            + Warn on attempt to disable window expose_after_scroll

         * Remember to add 'return 0' in int-returning event handler function

0.51    2015/03/27 14:01:43
         * Perform 0.51 deprecations:
            + Die on Widgets that don't have WIDGET_PEN_FROM_STYLE
            + Warn on Pen observers
         * Allow #-style comments in style files
         * Added Tickit::Style->load_style_from_DATA shortcut
         * Configuration to not use ALTSCREEN

         * Ensure that raw bte writes to testing pipe don't break under
           PERL_UNICODE (RT102028)
         * Remember to SvGETMAGIC() before looking at SvCUR()

0.50    2015/02/03 23:34:49
         * Perform 0.50 deprecations:
            + Die on Window direct-drawing methods and flushing RenderBuffer
              to a Window
         * Use textn() functions in RenderBuffer instead of text()
         * Use new tickit_term_scrollrect() API
         * Delete various bits of dead code

0.49    2014/12/16 21:11:15
         * Perform 0.49 deprecations:
            + Announce deprecation of Tickit::Pen observers
            + Warn on Widgets that don't have WIDGET_PEN_FROM_STYLE set
            + Die on attempts to disable CHILD_WINDOWS_LATER
         * Allow chaining return of ContainerWidget->{add,remove}

0.48    2014/09/18 20:55:38
         * Perform 0.48 removal deprecations
         * Added Tickit::Test::clear_term
         * Print deprecation warnings from Tickit::Window direct draw methods

         * Test for presence of T:W:HBox at BEGIN time during unit test, to
           avoid error
         * Fix for Tickit::Utils::distribute() with fixed=0 when in
           overallocation mode
         * Ensure that child window on_expose handler is run before containing
           parent, to ensure RB holes are set correctly for underprint
         * Hidden child windows should not count during $win->scroll*
         * Ensure child window key handler propagation doesn't continue after
           a key event has been handled

0.47    2014/09/05 23:22:29
         * Moved Tickit::Widget::HBox/VBox to the Tickit-Widgets dist
         * Remove Tickit::WidgetRole::Penable
         * Support the new 'blink' Pen attribute

         * Bundled libtickit bugfixes:
            + Improved handling of some missing terminfo attributes
            + Respect renderbuffer offset and limits in get_* functions

0.46    2014/05/02 20:16:37
         * Move RenderBuffer and MockTerm entirely into libtickit C library
         * Added $rb->char
         * Add Tickit::Debug support to RenderBuffer

         * Ensure that $rb->skip/skip_at obey masking regions

0.45    2014/04/15 02:47:45
         * Move RenderBuffer's linemask-to-character conversion code into XS/C
           to prepare for RB-in-C
         * Implement most of Tickit::Test::MockTerm logic in C
         * Don't emit INSERTCH or DELETECH events from MockTerm
         * Announce $rb->flush_to_window as deprecated
         * Announce Window direct drawing methods as deprecated
         * Emit deprecation warnings from $term->mode_* and $win->*penattrs
         * Remove the Tickit::WidgetRole::Penable code; replace with a simple
           die message

0.44    2014/04/07 02:03:37
         * Deprecation warnings for pre-0.42-style Window expose/key/mouse
           event handlers
         * Provide $ev->mod_is_{shift,ctrl,alt} shortcut tests
         * Added $rb->linebox_at()
         * Allow ContainerWidgets to provide a method to return only those
           children it wants to focus search on
         * Added Tickit::Debug logging
         * Added focus_child_notify Window ability and :focus-child
           ContainerWidget style tag
         * Use a single RenderBuffer for the entire window/widget tree
         * Added $rb->get_cell accessor for inspecting cell state
         * Ensure that focus searching ability only considers children with
           visible windows
         * Ensure that $rb->mask won't crash with over-sized or negative-
           offset mask rects
         * Clip $win->scroll rect to the actual window bounds
         * Correct explanation of tagged vs. untagges style in docs
         * Fix $win->scrollrect when moving chunks a distance larger than
           their own size
         * Fix $rb->DESTROY with content to not print warnings of unreferenced

0.43    2014/04/01 16:29:58
         * Default TICKIT_CHILD_WINDOWS_LATER on; with env. var to disable it
         * Allow optional $pen argument to $term->{print,clear,erasech}
         * Support flushing of RenderBuffer directly to a Tickit::Term
         * Store pending 'later' geometry changes separately from expose logic
           to ensure correct output
         * Rewrite of Window rendering logic:
            + accumulate damage and run expose logic only on root window
         * Provide a more robust associative version of is_termlog() to avoid
           test logic that depends on exact rendering order
         * Ensure that $win->subwindows works on windows with no subs
         * $win->restore should remember to flush the actual terminal buffer
         * Ensure that RB masks are correctly interpreted during translations

0.42    2014/01/12 13:40:39
         * Added Window on_expose callback type with RenderBuffer
         * Added legacy-detecting $win->set_on_* methods to set new-style
           Window callbacks
         * Perform Widget rendering onto Window using new with_rb expose event
         * Deprecate legacy versions of Window on_expose, on_key, on_mouse
         * Removed CLEAR_BEFORE_RENDER

0.41    2013/12/19 19:17:07
         * Allow cursors to be entirely hidden on a Window
         * Return $text width in columns from $rb->text and $rb->text_at
         * Document that Tickit::Style->load_style* are methods, not functions

         * Fix for T:W:Box - set 'dir' of T:WR:Alignable, not 'style'
         * Fix double-nested container focus management

0.40    2013/09/29 19:08:09
         * New size model; ->requested_{size,lines,cols} which cache
         * Lazy $parent->resize only when required
         * Updated all examples/docs for new ->render_to_rb
         * Print a legacy deprecation warning when constructing a
           ->render-based widget
         * Allow Styled widgets to copy their base class
         * Allow HBox/VBox to take a 'children' ARRAY to constructor

         * Specify minimum required version of Alien::libtermkey to get
           libtermkey >= 0.16
         * Need to force TERM=xterm during sequence testing

0.39    CHANGES:
         * Default expose_after_scroll true
         * Don't ->resize a ::Static if its size hasn't actually changed
         * Allow $win->scrollrect to take a Tickit::Rect instead of 4 ints
         * Added $win->scroll_with_children

         * Fix for libtickit ICH/DCH
         * Bundled libtickit bugfixes:
            + Implement tickit_term_scrollrect ICH/DCH correctly

        **NOTE**: These changes will break Tickit::Widget::Entry prior to
        Tickit-Widgets version 0.11, and so will need updating.

0.38    CHANGES:
         * Added 'drag_stop' and 'drag_outside' mouse events
         * More helpful error message if Tickit::Term constructor fails
         * Support multiple mouse tracking modes in latest libtickit
         * Bundled libtickit updates:

         * Disable experimental smartmatch warnings on recent perls
         * Fixed examples/ for recent API changes
         * Avoid GNU C99 anonymous unions in RenderBuffer cell struct
         * Bugfix to MockTerm's ICH/DCH emulation of horisontal scrollrect

0.37    CHANGES:
         * Allow Style files to use :: in widget type names
         * Added an experiment to test making child window list changes
           asynchronously "later"

         * API fixes in demos
         * Recognise (and truncate) non-integer cursor positions to
         * Ensure that RenderBuffer->setpen can alter already-set attributes

0.36    CHANGES:
         * Added bounds arguments to $rect->linerange
         * Added $rb->eraserect
         * Updated *Box container widgets to use ->render_to_rb

         * Avoid calling $win->clear when using ->render_to_rb
         * Handle $rb->text entirely outside of clipping region

0.35    CHANGES:
         * Give the terminal up to 100msec to initialise before running
         * Added ContainerWidget->find_child and ->focus_next
         * Implement Tab/Shift-Tab as focus movement keys
         * Added style_redraw_keys
         * Keybindings from Style
         * Added ->render_to_rb alternative to ->render method

         * Clean up focus chain when removing a child window that has focus
         * Make sure that RenderBuffer stores UTF-8 text bytes

0.34    CHANGES:
         * Added timeout to Term->input_wait
         * Added Tickit->timer
         * Many internal updates to Window focus code
         * Added Window->cursor_at, ->cursor_shape and ->take_focus
         * Added Widget focus integration, including automatic ':focus' style
         * Added Window->subwindows

0.33    CHANGES:
         * Added Tickit::RenderBuffer; a renamed copy of Tickit::RenderContext
           from CPAN. Re-implemented more in XS/C code
         * Removed Tickit::WidgetRole::Borderable
         * Added 'bool' override for pens, rects and windows, because they are
           all always true

0.32    CHANGES:
         * Allow widgets to declare style keys to cause ->reshape calls
         * Allow Windows to be re-ordered within their parent, better document
           the behaviour of Window ordering
         * Handle mouse drag/drop events at the rootwin level
         * Pass key/mouse event arguments as a structure as well as positional
         * Implement HBox/VBox spacing as style keys
         * Wrap tickit_term_getctl_int()
         * Bundled libtickit updates:
            + Down-convert colours to 8 or 16 colour palettes when on non-
              256color-aware terminals

0.31    CHANGES:
         * Define the behaviour of Tickit::Style on subclasses, allowing for
           transparent or independent subclass types
         * Declare the particular version of Alien::unibilium required
         * Split pens into mutable and immutable forms; deprecate ->clone
         * Added $pen->equiv and ->equiv_attr comparison methods

0.30    CHANGES:
         * Allow modification of widget direct-applied style
         * Split Tickit::Pen into mutable and immutable subclasses
         * Return immutable pens from Tickit::Widget style
         * Cache style pens
         * Added opt-in optional feature to set widget pen from default
           style pen
         * Use default style pen as widget pen in built-in widget classes
         * Pass keyboard modifier state through to key/mouse event handlers
         * Avoid floating-point in Tickit::Utils::distribute()
         * Avoid a memory leak bug in Tickit::Pen and Tickit::Term XS code
         * Set TERM=xterm for whole-system unit testing so we get reliable
           terminal initialisation sequence
         * Bundled libtickit updates:
            + Split implementation of real xterm and other terminfo-driven
              terminal drivers
            + Now requires unibilium for the terminfo-driven driver

         * Currently requires unibilium version v1.1.0, which can be found at

0.29    CHANGES:
         * Added Tickit::Style, and the ability to set state-sensitive style
           information on widgets
         * Added on_click event to Tickit::Widget::Static
         * Redraw a widget after pen change
         * Added Tickit::Utils::distribute()
         * Improvements and modifications to the way ContainerWidget works
           + can ->set_child directly
           + more abstract container logic that doesn't enforce an ordering
           + just stores per-child options
         * Return a Tickit::StringPos from $win->erasech
         * Abort if $win->print is given non-Unicode text
         * Warn if CLEAR_BEFORE_RENDER is still set

0.28    CHANGES:
         * Added $window->close method
         * Make FLOAT_ALL_THE_WINDOWS behaviour default

         * Ensure HBox can handle out-of-space
         * Correctly convert mouse wheel direction in args hash

0.27    BUGFIXES:
         * Important bugfix to bundled libtickit:
            + Fix resize logic in tickit_rectset_add() so it doesn't grow
              the object arbitrarily until it fails

0.26    CHANGES:
         * Re-implement Tickit::RectSet as a libtickit-backed object
         * Expose Tickit::Term->setctl_{int,str} methods
         * New Tickit::Term->bind_event API

0.25    CHANGES:
         * Removed Tickit::Widget::Frame and Tickit::Widget::Box, now they
           have been moved to Tickit-Widgets dist.
         * Added a new, better idea for Tickit::Widget::Box
         * Allow Tickit->new( root => ... )
         * Re-implement Tickit::Rect as a libtickit-backed structure object

0.24    CHANGES:
         * Many improvements to Window scroll logic; allow scroll with
           terminal scrollrect even with obscuring floats
         * Added Rect->add and ->subtract methods
         * Added RectSet->subtract method

         * Correctly adjust pending window damage after ->scrollrect

0.23    CHANGES:
         * Many improvements to Window float logic; beginning of merging float
           and non-float implementations
         * Added $win->bottom and $win->right

0.22    CHANGES:
         * Window focus in/out events, $win->is_focused accessor
         * Added Tickit::RectSet object class
         * Allow Window to store a set of expose regions rather than just a
           boolean flag
         * Added Window expose-after-scroll behaviour

0.21    CHANGES:
         * Wrap tickit_string_count and tickit_string_countmore; provide a
           Tickit::StringPos counter object
         * Have $win->print return a Tickit::StringPos

         * Don't use_ok Tickit::Widget::Entry

0.20    CHANGES:
         * Allow $win->goto outside of its edges, apply clipping
         * Removed Tickit::Widget::Entry; now found in the Tickit-Widgets
         * Updated for latest libtickit

         * Ensure that Static widgets with empty text still behave correctly
         * Fix test skip counts in t/02utils.t

0.19    CHANGES:
         * Allow multi-line Static text
         * Added a stringification overload to Pen to make unit testing easier

         * Better terminal flushing
         * Force TERM=xterm during t/0term-output.t

0.18    CHANGES:
         * Re-implement Term and Pen in XS/C using libtickit (bundled source
           pkg-config driven build)
         * Defined a new Tickit::WidgetRole::Penable
         * Added $rect->linerange
         * Added $win->clearrect
         * Added $win->make_popup to create on-top floating input-stealing

         * Disallow $win->scrollrect if there are any floating windows in the
         * Perform $win->erasech with the entire pen in case 'rv' is set

0.17    CHANGES:
         * $win->hide, $win->show and the concept of hidden windows
         * $win->make_float and the concept of floating windows
         * A better clipping model to handle the above
         * $pen->hasattr
         * Tickit::Test::drain_termlog()
         * Set the CANON_DELBS termkey flag in case of misconfigured terminals
         * Make $tickit->stop a user-visible method

         * Ensure Tickit::Widget::Entry keybindings consume key press events
         * Ensure Tickit::Widget::Static->set_text actually calls ->redraw
         * Pass UTF8 => 1 to unit tests that test Unicode functionality

0.16    CHANGES:
         * Represent mouse wheel events as 'wheel'/'up' or 'wheel'/'down'
         * Fix argument order for Tickit::Rect->translate
         * Allow $term->chpen/->setpen to take a Tickit::Pen object
         * Added Pen->clone, ->copy_from and ->default_from methods
         * Deprecated the pen attribute list returning methods of

         * Account for inter-child spacing when calculating minimum size
           requirements for Tickit::Widget::{H,V}Box

0.15    CHANGES:
         * $term->eraseline is now removed
         * Provide a $tickit->tick method to finer-grained event handling
         * Removed Tickit::RootWindow; the root window is now a regular

         * Force terminal size in t/80tickit.t so it doesn't cause failures on
           oddly-sized terminals

0.14    CHANGES:
         * $term->insertch and ->deletech are now removed
         * Move key input behaviours into Tickit::Term; many other
           refactorings between Tickit and Tickit::Term
         * Renamed $tickit->start / ->stop to ->setup_term / ->teardown_term

0.13    CHANGES:
         * Allow Widget subclasses to disable the clear-before-render
         * Avoid harmless warning about undef during global destruction

         * Skip Unicode-requiring tests unless we know we have a Unicode-aware

0.12    CHANGES:
         * Pass an opaque 'id' value through Pen->add_on_changed into
         * Extend is_display() unit testing function to allow asserting pen
           attributes as well as text-on-display
         * Rewrote many unit tests to use only is_display() and not
         * Deleted now-deprecated Window methods of ->penprint, ->insertch and

0.11    CHANGES:
         * Allow Windows to be created overlapping their parent boundaries;
           clip output - Work In Progress, so far only handles ->print and
           ->erasech, not the scrolling operations
         * Represent on-screen rectangles as first-class Tickit::Rect object,
           pass a 'rect' argument to Window on_expose event
         * More diagnostic output from Tickit::Test::is_termlog failures
         * Support (rarely-used) strikethrough pen attribute
         * No longer depends on Term::TermKey::Async unnecessarily

0.10    CHANGES:
         * Use Perl's ${^UTF8LOCALE} to detect UTF-8ness rather than relying
           on libtermkey's flags. Avoids fragile dependency
         * Use Term::TermKey 0.09's EINTR ability to simplify the main run
         * Split Tickit::Async out into its own distribution

0.09    CHANGES:
         * Move IO::Async-based code out of Tickit into Tickit::Async,
           reimplement a simple IO framework in Tickit itself.
         * Added Window on_expose event that cascades down the Window tree
         * Implement Widget drawing using Window on_expose events rather than
           cascading logic down th Widget tree
         * Print proper deprecation warnings from deprecated Window methods
           penprint, insertch, deletech

0.08    CHANGES:
         * More efficient XS implementation of low-level string length
           handling utilities in Tickit::Util
         * Allow forcing size of child widgets in Tickit::Widget::VBox and
         * Pass region information into Widget->render methods; even if
           currently it is a fixed 0/0/$lines/$cols
         * Accept a pen argmuent to Window->print; deprecate ->penprint
         * Implement Window->scrollrect; deprecate ->insertch and ->deletech
         * Print a deprecation warning if a plain Tickit object is used as an

0.07    CHANGES:
         * Provide (trivial) Tickit::Async subclass for users to prepare for
           IO::Async split
         * Try to find $TERM-specific subclass of Tickit::Term for terminal-
           specific optimisations or abilities
         * Support 256 colour xterm
         * Unit test in more generic SCROLLRECT operation

         * Ensure Tickit::Test and Tickit::Test::MockTerm have a $VERSION

0.06    CHANGES:
         * Shut down terminal state before $SIG{__DIE__}'ing
         * Cope correctly with zero-sized children in {V,H,}Box and Frame
         * Broadcast unhandled keypresses out to sibling windows around the
           widget tree
         * Neater unit testing functions
         * Rearranged code to prepare for abstract/IO::Async split

0.05    CHANGES:
         * Added mouse support
         * Switchable insert/overwrite mode in Entry
         * Markers at beginning/end of Entry to indicate scrolling
         * Reduced API dependency on IO::Async; lazily construct a containing
           Loop in ->run
         * Reduced test-time dependency on IO::Async
         * Export Tickit::Test as real code for out-of-distribution tests
         * Miscellaneous bugfixes and improvements

0.04    CHANGES:
         * Added Tickit::Widget::Frame and ::Box
         * Support text scrolling in Entry
         * Support renderable containers
         * Updated Pen model; first-class objects, observers for updates
         * Support high-intensity colours
         * Entry->text_delete/_splice return the deleted text

0.03    CHANGES:
         * Added Tickit::Widget::Entry
         * Tickit::Pen as first-class object
         * Support more pen attributes - reverse video, alternate font

0.02    CHANGES:
         * Bind Ctrl-C to $loop->loop_stop by default
         * Neater root widget and run API
         * Added SYNOPSIS examples to most widget types; added examples/
         * Window 'on_key' event handling
         * Keep cursor hidden unless it's on a focused window

0.01    First version, released on an unsuspecting world.