Revision history for Changes

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.