-- x.neo.pub.window @ sys-everest -- This API is the reference definition of how the windowing system works in KittenOS NEO. Implementing this API, by definition, makes your process the controller of windowing on the system, which means you control Icecap security dialogs. ...and that's why r.neo.* access is heavily restricted unless the user uses the Advanced Settings panel. The API gives you a function: (w, h, title) -> window This function creates a window. NOTE: The width can never be smaller than 8, under any circumstances. Trying to will cause the width to be forced to 8. Window fields: id: Window ID. setSize(w, h): Changes the size of the window, and sends the line events (even if the size doesn't change) NOTE: The width can never be smaller than 8, under any circumstances. Trying to will cause the width to be forced to 8. getDepth(): Returns the depth of the screen the window is on. span(x, y, text, bg, fg): Draws a span onto the screen. This function will error if the Everest instance is dead. (Others won't.) recommendPalette(pal): If the window is focused, sets the first #pal palette entries to the given RGB values. This is meant only as a hint to Everest, and may be ignored. Returns the amount of entries set. NOTE: Up to 4 colours may be used by the implementation as "base" colours, and thus cannot be set as past of a palette to prevent any use of the application-controlled indexes in the major UI. This is because the palette-setting interface leads to graphics issues with multi-tasking, even in those programs not using the interface, so a set of reliable colours is required to keep a multitasking system usable in these edge cases. close(): Close the window. Events: api, id, "key", ka, kc, down api, id, "touch"/"drag"/"drop", lx, ly, ix, iy, button api, id, "scroll", lx, ly, ix, iy, amount api, id, "clipboard", text api, id, "close" api, id, "focus", hasFocus api, id, "line", lineIndex Palette advice for artists: *Use 16-colour images*, and ensure the viewer software uses the palette functions. Always use a 2x4 grid to check cell colour limits. If your palette contains any reserved colour, make it last in the palette, so that they are not wasted if not used. Notes on UI design: The UI design is heavily monochrome. core (neoux supported): "[textheretext]": This means a text field. It should preferably right- align text if too much is inside, ensuring that what is being written can be read. The enter button should do nothing, and the backspace/delete buttons should both remove the last Unicode character. "": This means a button. Space or enter should activate it. additional: "◢": Resize widget. Drag-dropping should cause a resize. This need not occur until the drop is completed. Standardized by Izaya. The non-GUI way to do this is for ctrl-arrows to resize the window. -- This is released into the public domain. -- No warranty is provided, implied or otherwise.