rtk.debug
to true. Previously math.random()
was used with a fixed seed, which significantly weakened random number generation for other uses.rtk.Window.onclose()
event handler is now invoked on all script exit conditions if the window is openrtk.Window.w
or rtk.Window.h
attributes to nil (which denotes autosizing) within an event handler (#20)rtk.Image:blur()
before the image has been loadedtable.tostring()
halign
/ valign
parameters for rtk.Window:open()
sometimes not being respectedrtk.Entry.caret
reflects the correct position before firing rtk.Entry.onchange
(#19)xml
module, which can be used to parse a subset of XML. The API is in preview and is not considered stable. Feedback appreciated.rtk.Slider
's API has been promoted to stable (however vertical orientiation is not yet implemented)auto
for rtk.Viewport.vscrollbar
that will reserve space for the scrollbar if scrolling is required to see all contentrtk.Window
now supports relative values (i.e. between 0 and 1.0 inclusive) for minw
, minh
, maxw
, and maxh
attributesrtk.Widget.hotzone
attribute, which allows adjusting the area around the widget's normal boundary where mouse interactions will register. This can be useful to allow a widget to be clickable even if the user inadvertently clicks within the margin or spacing in a box, for example, which in particular can improve UX on touch screensonkeypress
events when any descendant of the container is focusedrtk.Viewport.vscrollbar
is set to hover
(default) the scrollbar now becomes visible when the mouse enters anywhere within the viewport, rather than only when near the scrollbar gutterrtk.Window
autosizing (i.e. when width or height is not set) when the window contains "greedy" widgets that want to fill their parent containers as much as possiblertk.Window:open()
now defaults to center alignmentrtk.Widget.onclick
, rtk.Widget.ondoubleclick
, and rtk.Widget.onlongpress
no longer require rtk.Widget.autofocus
to be explicitly set or have a custom rtk.Widget.onmousedown
handler to fire. They will be invoked on all widgets unless rtk.Widget.onmousedown
explicitly returns false to disable this behaviorrtk.Widget.autofocus
now defaults to true if an onclick
is set on the widget, but it can be explicitly set to false
to never autofocusrtk.Application.status
textrtk.Text.text
rtk.Image.icon()
are no longer automatically recolored when the image is found in an image path that was registered without an explicit icon stylertk.Image.icon()
rtk.Popup.onopen
and rtk.Popup.onclose
event handlersrtk.Popup.autoclose
to be able to distinguish between clicks that occur outside the popup but still within the ReaScript window, or outside the window entirelyrtk.Popup.overlay
to be themedcolorname#aa
where colorname
is the name of the color and aa
is the hex code of the alpha channel. For example, bg='chartreuse#7f'
rtk.Text.color
which is now default. Unless the attribute is explicitly set, the text color will use rtk.themes.text
from either the dark theme or the light theme, depending on the luminance of the background the text will be rendered overrtk.Entry.icon
) to take into account parent's background when the widget has a translucent background such that it that would blend with the parent's background colorrtk.Widget.bg
or rtk.Widget.ghost
are set as these do not affect geometryrtk.tick
that increments with each gfx update cycle, and add rtk.Event.tick
to reflect the tick at which the event occurredminw
/minh
but the minimum size would exceed the allowed cell size in a boxmaxw
cell attribute for expanded cells in rtk.HBox
rtk.Box.spacing
was non-zerortk.Viewport.vscrollbar
was set to always
rtk.ImageBox
borders and background color is drawn even if rtk.ImageBox.image
is nilrtk.ImageBox.bg
, if set, when determining which luma-adaptive image variant to usertk.Widget.w
and rtk.Widget.h
to 0, or to rtk.Attribute.NIL
(nil was already supported)rtk.Widget.bg
to nilrtk.Window.x
and rtk.Window.y
with undocked windowsrtk.scale.value
to rtk.Widget.minw
, minh
, maxw
, and maxh
when rtk.Widget.scalability
allows itrtk.Button
when the button label wrapsrtk.Window.title
as the first positional value during initialization. In principle this is a breaking change however it never actually worked properly, so this just removes a broken feature.rtk.Window.onclose
could fire multiple times when the window closesrtk.Window
when the border attribute was setrtk.Window
when REAPER's native UI scaling was enabledrtk.Window
attributesrtk.Window
padding is now accounted for by the resize grip when rtk.Window.borderless
is truertk.Button
would not always respect the parent container's bounding boxrtk.Popup.opened
attribute which wasn't being properly updated to reflect current statertk.Popup.anchor
is defined and rtk.scale.value
is > 1rtk.Popup.autoclose
enabled could inadvertently close when rtk.touchscroll
was enabledrtk.Popup
at the same time as its rtk.Popup.anchor
widget is hiddenrtk.Entry
could be drawn outside its boxrtk.Viewport
even when rtk.Viewport.vscrollbar
is set to never
rtk.Viewport
has non-zero paddingrtk.FlowBox
would only ever use a single column if it contained any greedy children (e.g. those using relative dimensions, or belonging to a box container with expand
or fillw
cell attributes set)rtk.FlowBox
could layout with zero columnsrtk.Spacer
failing to take into account padding when calculating its sizertk.Window
to ensure widget draw functions that reference rtk.Window.in_window
reflect the proper state visuallyrtk.Widget.cursor
was not being respected when long-pressing over a widget with rtk.touchscroll
enabledrtk.Widget.onclick
no longer fires if rtk.Widget.onlongpress
fires and its handler returns true to mark the event as handledrtk.Entry
background when its parent container's background changestargetidx
parameter for rtk.Container:reorder()
previously required offseting the index by 1 of the target was after the widget's current cell position, which is now fixed. Technically this is a breaking API change, but the previous semantics were extremely counterintuitive and this API was not widely used by scripts so this is being slipped in as a bug fix.rtk.log
timestampsrtk.touchscroll
is enabledrtk.Window
now supports automatic sizing based on its contents when rtk.Window.w
and/or rtk.Window.h
are nil at the time rtk.Window:open()
is called, which is now the default behaviorrtk.Slider
, which currently in beta and will be promoted in the next minor releasertk.Window.resizable
which controls the resizability of undocked windowsupdate
callback passed to rtk.queue_animation()
now receives the animation table as the 4th argumentrtk.Entry
's value attribute can be be received as the first positional argumentrtk.Text.text
on a fixed-width text widget (optimization)rtk.Window:get_normalized_y()
rtk.Container
when rtk.Container.padding
is nonzerortk.Entry.value
changesrtk.Entry.placeholder
when calculating the entry widget's intrinsic sizealpha
attribute for rtk.Window
rtk.OptionMenu:onchange()
when explicitly passing false to the trigger argument of rtk.OptionMenu:select()
even if the selected item changedrtk.scale.framebuffer
when dockedrtk.Window:onresize()
handler fires when dock state changesrtk.Window.x
and rtk.Window.y
attributesrtk.Window:open()
alignment options when reopening windows on Macs with Retina displaysrtk.Window:close()
is calledrtk.scale.framebuffer
, which indicates the ratio of the internal gfx frame buffer to the OS window geometryrtk.font.multiplier
on reflowrtk.Window:open()
is called with constrain optionrtk.Window.w
or rtk.Window.h
attribute, fixed a bug where the other dimension would end up being halved on MacOS systems with Retina displaysInitial release marking API stability.