(We use Semantic Versioning)
- [01/02/25] ZXEcosystem v5.1.0, ZXEcosystem-GUI v3.1.0:
ZXEcosystem: added some new methods to Graphics.h, RGBColor and CppAddons.h
ZXEcosystem-GUI: no changes.
- [05/08/24] Added new constexpr to Graphics.h defining memory size of parts of the original ZX screen.
- [02/08/24] Added new methods to RGBColor and also new functions to CppAddons.h.
- [20/06/24] ZXEcosystem v5.0.0, ZXEcosystem-GUI v3.1.0:
ZXEcosystem: change the interface of different classes for including new functionality, mainly new dithering loading of PNG files; bug fixing.
ZXEcosystem-GUI: new methods for additional functionalities.
- [25/04/24] Implemented the dithering conversion from PNG and included in the tests, in Noise submode and FixedPattern submode.
- [19/05/24] Factorized in a better way the methods for converting PNG imgs into ZX imgs.
- [01/05/24] Changed the way of reducing colors of a PNG palette within a ZX attr cell in order to have only 1 or 2.
- [01/04/24] Completed and tested ok the new DitheringSystem within DoubleGraphic, intended for converting PNG images through dithering.
- [30/03/24] Completed the new ancillary module for color, palette and raster images, and used in Graphics and PNG methods of desktop.
- [27/03/24] Refactored the RGB methods of BrightColors to be more reusable and created new RGB colors and palette classes in the ancillary module.
- [26/03/24] Improved the ordering of colors in cells when converting PNG to ZX image.
- [17/03/24] Changed the RGB definition of colours in a more reusable format. Refactorized the method in DoubleGraphic in charge of processing PNG images to convert them into ZX.
- [16/03/24] Generalized the interface of DoubleGraphic to allow for further conversion modes when reading from PNG files.
- [25/02/24] Fixed an error in the frequency of the CLIC sound; now it is more faithful to the original ROM sound.
- [29/01/24] Fixed a bug in the automatic placement of context menu dialogs.
- [28/01/24] Fixed a memory leak in DimsGraphic and lack of polymorphic deletes in Dialogs.
- [26/01/24] Added new method to FileDialog to get the last path.
- [21/01/24] Added a new append() method to ListWidget that does not call a redraw observer for each element appedend to the list.
- [14/01/23] Changed the interface of some methods of BrightColor to admit RGB values coherently as a pointer to 3 bytes instead of 3 arguments.
- [14/01/23] Added savePNG methods to both Desktop and DoubleGraphic.
- [23/01/23] Added a new method to WidgetList for retrieving the position of the top line shown in the viewport.
- [15/01/23] Now the waitkey_ user routine provided to BASICScreen produces a runtime exception if it returns no key pressed after being called.
- [06/01/23] Fixed a bug in the coords() method of DimsGraphic, that calculated erroneously the coordinates but fortunately was not used in other places.
- [28/12/22] Fixed a bug in the calculation of frequencies from pitches.
- [27/12/22] Changed the interface to create desktops in order to pass to it the sound parameters.
- [18/12/22] Fixed not fully correct behaviour in waitForKey() and waitForNoKey() methods of ZXEco.
- [10/12/22] More precise documentation in the ZXEco keyboard methods and addition of detections of both PC and ZX keys in those methods; their prototypes have thus changed.
- [09/12/22] Added a new method to ZXEco to retrieve the title of the window currently activated.
- [15/10/22] ZXEcosystem v4.3.0, ZXEcosystem-GUI v3.0.0:
ZXEcosystem: added a new areaForPrint() routine to Screen to calculate the bounding area needed to print a given ZX text, a new kFontSize const for the length in memory of all bitmaps of a font, and a new expand-token routine to get the original ZX token text for each token; added new to_string() methods to Bitmpas, Attrmaps and DoubleGraphics; added new intersection operators to Area<> and several new methods to Cursor and Rect; changed the kZeroCur constant by static methods in ZXGraphics.h to get zero/empty cursors, areas and rectangles; moved the align_area() method to Rect class and the calc_text_area() method to Screen class.
ZXEcosystem-GUI: many changes and improvements to existing widgets; changes to the behaviour of the GUI for making it more natural; changes to the exception system to produce less cluttered errors; new ExplanationDialog and non-editable TextEditor; minor bugs fixed.
- [24/07/22] Now the LineInputWidget recognizes key strokes when pressed instead than when unpressed, thus allowing for automatic repetitions of keys since those repetitions produce a sequence of pressings ended by just one unpressing.
- [24/07/22] Now the list of directories in LabelDirBrowser is alphabetically ordered.
- [24/07/22] Fixed a minor bug that left unpaired unclick events available to windows after another windows consumed the corresponding click events.
- [24/07/22] Added a moveTop() method to TextEditorWidget to move the content view for showing the first line at top.
- [24/07/22] Now the FileDialog can skip the overwrite ask to the user if the constructor is told so.
- [26/06/22] Now the widget system produces an exception if some container cannot hold all its children because any of them has changed its needs during the process of setting their drawing zones (e.g., one that can do that is WidgetList). That exception prevents to produce derivative errors more difficult to catch.
- [25/06/22] Fixed a list-scrolls sync bug when changing the position of the list.
- [12/06/22] Changed the observer callback of LabelList to convey a little more information regarding the reason why it has been called. Improved the way of readjusting the viewport of the list in ListWidget by using that information.
- [11/06/22] Added a new argument to the constructor of ExplanationDialog to set UDGs.
- [21/05/22] Added a new method mouseCharPosInViewport() to CanvasWidget to locate the mouse inside the canvas at char resolution.
- [15/05/22] Changed Window::kLengthBars to a constexpr.
- [14/05/22] Changed the constructor of CanvasWidget to admit user's incr. of the scroll slides positions different from 1.
- [08/05/22] Now LineInputWidget substitutes token characters by their nude expansion when changing its text.
- [08/05/22] Changed the constructor of LineInputWidget to admit an alterna- tive font for printing the text. Added to Screen a kFontSize constant to represent the length in memory of all bitmaps of a complete font.
- [25/04/22] Changed the constructor of LineInputWidget to add possible marked area in the edition line; added a new color for that kind of marked area in the window colors class.
- [24/04/22] Fixed a minor bug in LineInputWidget that prevented the cursor to be put at any char after clicking the mouse.
- [24/04/22] Slight modification to the events that, if there is a focused widget, are dealt with by it independently on being covered in its area. Now it is possible to move cursors in a line input widget without clicking on it first, just like the rest of the keys.
- [18/04/22] Fixed a minor bug in the redrawing of ImageWidget.
- [17/04/22] Added a new areaForPrint() routine to Screen to calculate the bounding area needed to print a given ZX text.
- [17/04/22] Added a new expand-token routine to Screen to get the original ZX token text for each token, though without trailing/leading spaces. Used by default in printArea() for dummy printing of texts.
- [17/04/22] Extended the constructor of CanvasWidget to allow for automatic movement of the viewport when the user uses arrow keys or mouse wheel.
- [16/04/22] Added a max() static method to Cursor for getting the most right-below cursor of two; added a bottomRight() method to Rect to get the bottom right corner; fixed the printSize() method to calculate exactly the area used for printing and the print length.
- [15/04/22] Added a new ExplanationDialog for showing inmutable, long texts
- [15/04/22] Added a method to Window to get the wincolors set in it; added a new method to Dialog to get the window colors used in all dialogs; added new to_string() methods to Bitmaps, Attrmaps and DoubleGraphics; moved the align_area method to Rect class and the calc_text_area method to Screen class due to their generality.
- [15/04/22] Added new intersection operators to Area<>; extended the SlideWidget::calcScrollVisibilityForArea() method to cope with the case that scrolls go outside the content -like in canvas-; fixed the behaviour of the canvas when the viewport is flexible; added a kLength(bool witharrows) methd to SlideWidget to return the length of the slide.
- [13/04/22] Changed the internal implementation of ButtonWidget for marking the pressing/unpressing of the button in a more homogeneous way and respecting the possible colors of the label of the button. Also changed the internal implementation of ChoiceWidget to better management of the control color codes of the choice labels, if any.
- [13/04/22] Changed the kZeroCur constant by static methods in ZXGraphics.h to get zero/empty cursors, areas and rectangles.
- [13/04/22] Added a new dialog for showing multi-line info messages.
- [20/02/22] Added a new method to DesktopInterface to return the main parameters of the sound player.
- [12/12/21] Added a method to ChoiceWidget to return the number of existing choices.
- [12/12/21] Changed the internal processing of events of LineInputWidget to be more consistent and allow user's callback to detect enter pressings when the widget is set to automatically lose focus if enter is pressed.
- [09/12/21] Added methods to Widget::CallbackParms for detecting common events more succintly, and to some particular widgets for the same goal.
- [08/12/21] Added a to_string() method to Widget::CallbackParms and fixed a bug when restoring the previous value if pressing ESC in a LineInputWidget.
- [31/10/21] Added a new method to ChoiceWidget to deduce the single choice below a given mouse position. Added a new method to Widget::EventData to deduce whether the event contains mouse coordinates.
- [30/10/21] Fixed a bug in ListWidget that did not update properly the list slides at the first drawing.
- [17/10/21] Changed the constructor of ChoiceWidget to admite choices drawn in horizontal.
- [16/10/21] Changed the behaviour of the down key in a TextEditor to be more natural. Also, no flash in the widget if it is not editable, and now it uses the mouse wheel for displacing the viewable part and the cursor if the latter is visible.
- [12/10/21] Fixed a bug in ListWidget that prevented to update correctly the last interacted line of the list when the mouse were moved or right- clicked.
- [12/10/21] Added the possibility of not being editable to the TextEditor widget, in order to provide some kind of (not with CHRENTER) multi-line labels to the GUI.
- [22/08/21] ZXEcosystem v4.2.0, ZXEcosystem-GUI v2.0.0:
ZXEcosystem: added a ScaledTextPrinter subclass to Screen for printing scaled character bitmaps without affecting the Screen behaviour on its usual scale; added support for simple text clipboard read and write operations; added new control codes and improvements in the management of control codes; added a new version of to_string() to AttrColors to produce shorter texts; fixed some minor bugs.
ZXEcosystem-GUI: New trace system that allows to dump into console exhaustive traces while drawing Widgets; changed the drawing system of Widget for a more consistent and safe one; added a new TextEditorWidget that provides basic text edition in a rectangle with automatic word wrapping; new Form module to the GUI to represent sets of widgets that are related within a container; new way of showing menu dialogs suitable for context menus; now you can have DEEP containers with no tabs, i.e., whose selected child must be selected programmatically; many improvements in the code and behaviour of widget placement, drawing and behaviour; minor bug fixes.
- [21/08/21] Re-written the internals of ListWidget, CanvasWidget for a more consistent and unified behaviour of both scrolls, and added class methods to SlideWidget to refactor some functionality needed by any container with two orthogonal slides for scrolling.
- [19/08/21] Re-written the internal behaviour of WidgetList to clear the code and get a more consistent behaviour.
- [19/08/21] Changed the changeBounds() of WidgetSlide to return whether the bounds have changed and the widget redrawn and to admit the possibility of not redrawing the widget even when it changes.
- [18/08/21] Changed the behaviour of lists for a) not losing the selected element when lost focus and b) fixing a bug when clicking on the scrolls and the cursored line was right at the extreme of viewport.
- [17/08/21] Changed the drawing system of Widget for a more consistent and safe one. This has changed the interface in several methods.
- [16/08/21] Improved the redrawing of the widget system to be more coherent and complete; now, any change in a widget dimensions produces all necessary redrawings in the tree.
- [16/08/21] Added a new method to CanvasWidget for changing the drawing callback. Also, improved the help of the class.
- [16/08/21] Moved the recalcDrawingZones() method of Widget to the private section, where it belongs, and created a redrawAll() and drawAll() methods in Widget for drawing/redrawing all the widgets of the tree without bothering with calling the sequence of steps for that.
- [15/08/21] Created a trace system for Widget that allows to dump into console exhaustive traces while drawing; it can be enabled/disabled from client code.
- [15/08/21] Changed the redraw() behaviour to redraw from the top of the tree at all times, in order to better adjust the widgets when one change its dimensions but affects others arbitrarily far from it.
- [13/08/21] Now it is possible to know which exact widget was unfit in the tree when an unfit error raises. Also, a new trace method is added to Widget to display all details of the current drawing status of a widget and its children.
- [09/08/21] Added the possibility of having DEEP containers with no tabs, i.e., which selected child must be selected programmatically.
- [05/08/21] Added the possibility of WidgetList to move the viewport to show the cursored line either at the top or at the bottom, automatically depending on the length of the last displacement of that line.
- [05/08/21] Added a new CHR for control code: EDIT. Added a new function to detect all control codes, including those that do not affect printing, and added a function that returns the name of a control code character.
- [05/08/21] Added a new method to WidgetBase to get the current UDGs ptr and fixed a bug within WidgetList that prevented to use the UDGs set externally.
- [05/08/21] Added a new version of to_string() to AttrColors in order to produce shorter texts.
- [01/08/21] Added a new "addCallback()" method to Widget for sequencing already registered callbacks in a given widget.
- [27/07/21] Added a new Form module to the GUI to represent sets of widgets that are related within a container and affect some underlying data when the user interacts with them.
- [25/07/21] Changed the way some GUI events are considered that needs focus Now some keys (motion-related) and the mouse wheel do not need to occur on a focusable widget; if the last known position of the mouse is on the widget they will work.
- [25/07/21] Added a new way of showing menu dialogs suitable for context menus.
- [25/07/21] Added suitable constructors from CharCursor to At, which lacked them.
- [25/07/21] Added a method to Screen::ScaledTextPrinter to get the pixel rectangle where the next character will be printed.
- [24/07/21] Now ESC key ends the edition in a LineInputWidget recovering the text existing before that edition, and ENTER may be set to unfocus the widget if desired.
- [24/07/21] Added a better looking 64-columns font for small scale printing and a new method to the scaler subclass to get the underlying Screen.
- [24/07/21] Fixed a bug in the move constructor of Bitmap.
- [23/07/21] Added a missing include dependency in DialogsCommon.h.
- [26/06/21] Added a TextEditorWidget that provides basic text edition in a rectangle with automatic word wrapping.
- [30/05/21] Added a ScaledTextPrinter subclass to Screen for printing scaled character bitmaps without affecting the Screen behaviour on its usual scale.
- [23/05/21] Added support for simple text clipboard read and write operations.
- [16/05/21] ZXEcosystem v4.1.0, ZXEcosystem-GUI v1.0.0:
ZXEcosystem: Printing chars defined directly by their bitmaps and filling char rectangles on the ZX screen; added PgDown and PgUp keys to the desktop; decolouring rectangles within the ZX screen; enhanced timing of sounds; new direct accesses to the ZX window in the desktop; enhanced display refreshes and accesses to the border of the ZX screen; extended documentation and miscellaneous functionality of classes; and a number of minor bug fixes.
ZXEcosystem-GUI: Better placing nd hiding of tooltip texts; flexible size ListWidgets ; better behaviour of cursored lines in lists for widgets; new SwitchWidget; hiding/showing deploy button in CombBox; automatic ID generation for widget at creation; more powerful placing of dialogs; extended documentation and miscellaneous functionality on widget classes; and a number of minor bug fixes.
- [15/05/21] Added a putChar() method to Screen to put a char defined directly by its bitmap. Also, added a printRectangle() method to fill a rectangle with a given character.
- [15/05/21] Added a method to LinearGraphic to return a pointer to the data of the graphic if it is not external and not onebyte.
- [09/05/21] Prepare a little better the list of result codes from BaseDialog for being extended.
- [04/05/21] Added new methods to DesktopInterface for checking whether a key is a number, a letter or a function.
- [01/05/21] Added some more constant for referring to ASCII codes, and also some more routines to detect what part of the ascii code table a character is in.
- [01/05/21] Fixed a bug in CanvasWidget that prevented to show the tooltip set by its user.
- [27/04/21] Fixed a bug in the calculation of the bounds of the scrolls in the SlideWidget::scrollVisibility method.
- [27/04/21] Added a new method to CanvasWidget to get the maximum coords for the viewport.
- [27/04/21] Changed the tooltip behaviour to dissappear when any event (not only mouse) occurs.
- [25/04/21] Modified the tooltip drawing area to be put one char line below the cursor in order to not being hidden by the mouse.
- [25/04/21] Added new methods to CanvasWidget to deal with events in the canvas, including key inputs. Also, added a new method to move manually the viewport.
- [25/04/21] Added new method to Widget to get the window colours assigned to the widget.
- [25/04/21] Fixed a minor bug that prevented the CanvasWidget to call the user's callback sometimes.
- [25/04/21] Fixed minor bugs in several widgets that got drawn when they were invisible.
- [24/04/21] Changed the constructor of ListWidget to admit the specificatin of the list not being flexible in some direction.
- [24/04/21] Fixed a bug in the calculations of the area assigned to flexible widgets when they belonged to a horizontal container.
- [22/04/21] Got rid of an exception when the "redraw()" widget method is called on an invisible widget; now it just do nothing.
- [21/04/21] Added a new method to ListWidget to put the cursored line at the beginning or at the end of the list.
- [18/04/21] Added new methods to ListWidget to count the number of lines in the list, to get the current cursored line and possible number of shown lines, and to move the cursored line a number of lines up or down. Also added the PageUp and PageDown keys to the list events processing.
- [18/04/21] Added the PageUp and PageDown keys to the desktop interface.
- [17/04/21] Fixed the setTooltip() for the ListWidget. Also, set the method as virtual for any container to overload if needed for deploying the action to one of its ancestors.
- [15/04/21] Added a new method to ListWidget to distinguish whether the user has tried to go beyond the existing list content.
- [13/04/21] Changed the behaviour of the ListWidget for not wrapping around the cursored line if there are more lines than visible on the list area.
- [06/04/21] Added a new parameter to FileBrowserWidget and to FileDialog for specifying the initial content of the filename edit field.
- [05/04/21] Added new methods to FileBrowserWidget for deciding whether the last event was on the file or on the tree lists. Also, added a method to reload the currently displayed list of files from the disk and another one to get the current path in the browser.
- [04/04/21] Added a go-up button in FileBrowserWidget for an easier browsing along the tree.
- [03/04/21] Moved the tooltiptext of a ListWidget from its main inner container to its nude list.
- [01/04/21] Fixed a minor bug in CounterWidget that did not show the correct colours when disabled.
- [01/04/21] Added a new widget: SwitchWidget for on/off selections.
- [01/04/21] Added a new method in ZXEco to know whether we are executing in the context of a previous refresh() code.
- [31/03/21] Fixed a bug in LineInputWidget that produced an exception when erasing the first character without erasing first the next ones.
- [30/03/21] Fixed a bug in the placement of the tooltips that produced errors when they where to be placed above the cursor.
- [29/03/21] Fixed a bug that might produce errors when destroying a Window (it did not mark its widgets as undrawn, which caused trouble if they are reused in another window and manipulated before opening that other one).
- [29/03/21] Added methods to ComboWidget for setting manually the selected element.
- [29/03/21] Changed the internal implementation of the ComboWidget constructor for recognizing the initial text if it coincides with one of the list entries, and for having an updated selection at all times if the user re-writes the edition field.
- [23/03/21] Added a method to ChoiceWidget to get the list of choices as labels.
- [23/03/21] Added a method to ListWidget to get the last line that the user interacted with.
- [21/03/21] Fixed a bug in ChoiceWidget that prevented to change the selection before drawing the widget.
- [21/03/21] Fixed a bug in ComboBox that prevented to visualize the tooltip when hovering the edit zone.
- [20/03/21] Changed the ComboBox for admitting a flag to show/hide the deploy button.
- [20/03/21] Changed the interface of Dialog for allowing to force the dimensions of dialogs.
- [20/03/21] Fixed a minor bug in ListWidget that prevented to be focused when empty.
- [19/03/21] Added the possibility of placing dialogs at concrete positions in addition to the previous default centering.
- [16/03/21] Enhanced the functionality of Widget IDs and of the inserter of widgets in windows in order to support automatic generation of IDs for avoiding duplicates.
- [08/03/21] Add isGotFocus() and isLostFocus() methods to the Widget::EvenData class.
- [06/03/21] Now the setText() method of InputLineWidget discards all ctrl chars from the given text. No good in having ctrl chars in an editable txt.
- [03/03/21] Added a subRegion() method in Screen to get the subregion within the contained Screen if the screen at hand was created as a subscreen
- [28/02/21] Added the possibility of decolouring the screen of ZXEco only in a rectangle.
- [28/02/21] Fixed a bug in the setByte() method of LinearGraphic when the graphic object is a sub-area of another one.
- [28/02/21] Added width() and height() methods to PalettizedWindow.
- [26/02/21] Changed the size of the internal buffer for sound favouring a more precise timing for play.
- [21/02/21] Added parameters to the SoundMonoProducer routine type in order to pass the size of and index in the buffered data.
- [19/02/21] Added the possibility of neverending sounds to DesktopSDL2, and of pausing/unpausing an async playing.
- [23/01/21] Added a new to_string method to the PalettizedWindow::Rectangle class.
- [18/01/21] Added a new to_string method to the RawGeometry class in the ZXEco. Also, fixed the way of converting Cursor to string in order to do it well even when cursor is negative.
- [17/01/21] Deleted (internally) the offset of the ZX palette; now, it starts at color 0.
- [17/01/21] Added a method to get unsafe accesses to the desktop window of the ZXEco object.
- [27/12/20] Changed the internal management of the border of the screen for a one based on individual pixels instead of a single palette color and added methods for updating and refreshing rectangles on the border.
- [27/12/20] Added new types to the ZXGraphics.h module to support border pixel coordinates, cursors, areas and rectangles.
- [26/12/20] Added a new method to ZXEco to pass the ZX Screen data to the desktop window without refreshing that window on the desktop (unlike the refresh() method does). Added another method to refresh the window on the desktop without passing the ZX screen data previously.
- [25/12/20] Added a rectangle optional parameter to the refresh() method of PalettizedWindow for a finer granularity in refreshes.
- [12/12/20] Fixed some minor warnings when compiling with -O3 and set compilation option to -O3.
- [21/11/20] v4.0.0: Changed to C++17 standard from the original C++11; a companion sub-library for making up GUIs that includes a widget toolkit, window managing and some common dialogs; a new, more consistent, powerful and clearer system of geometrical and of color classes; subscreens with the same functionality of the Screen class but limited to a smaller area; a different method to refresh the display that better balances the computation time between the user program and the library; improved desktop event system and keyboard set of keys; improvements in printing on the Screen and in defining its current colours for easier and more informative coding; a number of minor bug fixes:
- [20/11/20] Renamed an internal variable in the DEBUGPREFFIX macro for avoiding clashes with external vars.
- [20/11/20] Added "<<" methods to Screen to facilitate printing operations and added "At" class as synonym of "CharCursor" for the same reason.
- [19/11/20] Added "<<" methods to Colors class to modify colors more easily and less verbosely.
- [18/11/20] Renamed BR_* and FL_* to BRIGHT_* and FLASH_* for clarity; added INVERSE_* and OVER_* and explicit constructors/classes Paper{} and Ink{} to improve robustness by reducing mistakes in creating AttrColors objects.
- [17/11/20] Fixed a bug in loading png files as graphics that produced writings past the graphic memory.
- [15/11/20] Added protection to refreshCode() in order to avoid nested calls.
- [01/11/20] Added maximum value constants to the graphical values (coords, distances, etc.).
- [12/10/20] Added a new INTERNALERROR macro for indicating internal errors (exceptions).
- [27/09/20] Added a method to Desktop to get the current text-events enabled state.
- [31/08/20] Improved and shortened the traces preffix in debugging.
- [16/08/20] Added a new Interval template class for dealing more elegantly with unidimensional intervals.
- [12/08/20] Required minimum C++ version: C++17.
- [01/08/20] Added a table of names for the key IDs in DesktopInterface and added some more keys.
- [01/08/20] Added a constructor to PointingStatus.
- [30/07/20] Added enable/disable methods in DesktopInterface to enable/disable the generation of typed utf-8 char recognizing events.
- [27/07/20] Put as public the RawGeometry type within ZXEco to have access to the raw geometry of the window.
- [26/07/20] Changed the Event type in DesktopInterface to capture all interesting events in the window, not only the general window ones, and changed and improved the management of events in ZXEco in order to access keyboard and mouse both through the traditional state methods (not bothering with events) and through direct events in the events list, which allows the user to manage those events as they are received by the window, not processed by the ZXEco class.
- [26/07/20] Changed ListOfEvents to use std::vector instead of std::list.
- [18/07/20] Added equality operators and clicked() method to PointingStatus.
- [05/07/20] Added a to_string method to PointingStatus.
- [04/07/20] Added a new routine in ZXChars to remove ctrl codes from ZX strings.
- [04/07/20] Added a new optional parameter to Screen::print() to limit the printing to a given max number of printable chars.
- [03/07/20] Added some new methods to Cursor class for common basic functionality of cursors.
- [30/06/20] Added a new method to Screen that calculates the size occupied by any printing as though the printing would be effectively done.
- [29/06/20] Deprecated the ZXString class in favour of an easier to use zxString() function.
- [27/06/20] Added functionality to create subscreens, i.e., Screen objects that refer to a region in another Screen (also created sub-DimGraphics and sub-LinearGraphics). All the operations on a Screen are possible in a sub- screen, and they can be nested indefinetily (but at the cost of increasing computational cost in the operations).
- [26/06/20] Made private the data of all graphics in order to protect them from undesired accesses.
- [26/06/20] Dropped one of the constructors for Bitmap, Attrmap, DoubleGraphic and LinearGraphic (the one that takes ownership of external data) since that has little sense / utility.
- [26/06/20] Changed the color classes and constants to more rational and easier to use definitions.
- [25/06/20] Renamed EuclideanColor to BrightColor for accuracy.
- [21/06/20] Changed the old Screen class by a new one that uses the new system of cursor, area and rectangle. Substituted the Graphic class by two, more robust and elegant Bitmap and Attrmap classes.
- [19/06/20] Renamed OriginalScreen to BASICScreen for the sake of precision in the terms.
- [19/06/20] Dropped all the methods in Screen to manipulate indirectly the internal bitmap and attrmap; now it is responsibility of the user to do those manipulations directly.
- [19/06/20] Dropped the main callback in Screen previously used for transf- orming the ZX layout to the display bitmap by dividing it into parts. Now the Screen is transformed entirely in the ZXEco class at every refresh.
- [19/06/20] Merged the two methods for refreshCode() in ZXEco for simplicity and changed the order of parameters of the resulting method slightly.
- [19/06/20] Changed the internal implementation of the refreshes in the ZXEco class for refreshing the entire screen at once at every refresh instead of doing part of the job while modifying the Screen graphics. In this way, now there are much more work that the program can do in the same time, only at the expense of a longer refreshing time every refresh period.
- [18/06/20] Renamed the timeToSwapInkAndPaperByFlash method to inkAndPaperSwappedByFlash to more accurately mean a true value during a period of time and not at an event.
- [15/06/20] Modified Screen::info to use the new classes in Graphics.
- [15/06/20] Added a new system of classes for representing cursors, areas and rectangles needed by graphics.
- [14/06/20] Removed "noexcept" from to_string() methods in color classes and from a number of methods in the Screen class.
- [13/06/20] v3.1.0: Bugs fixed and some additions for improving the functionality of the library for different purposes. In particular, more robust keyboard mappings, a new "decoloured" mode for showing the display (without disturbing the ZX functionality on the screen), and closer behaviour of some methods to the original ZX:
- [13/06/20] Added a desktopKeyPressed() method to check whether any key, not only the ZX ones, is pressed or released.
- [13/06/20] Added decolour mode to ZXEco to show (without affecting the ZX Screen data) an attribute grid on the display and some guides on the border.
- [12/06/20] Added more keys that could be recognized by the desktop system and made the mapping from keys more intelligent and robuts: now, it adapts to the existing keyboard layout and also ignores automatically those keyboard key symbols that do not have any mapping to physical keys in one pressing action.
- [10/06/20] Changed the CLS behaviour of the full interpreter to mimic the one of the original ZX, that does not use space characters to clear the screen.
- [08/06/20] Changed the TAB control character to have 2 arguments instead of 1 in order to mimic the original ZX behaviour (where the 2 argument is ignored but must be specified).
- [07/06/20] Added a new method in Screen to get the current bitmap font and another one for getting the current UDGs bitmap.
- [06/06/20] Included a default value in the last parameter of the OriginalScreen constructor in order to construct those screens whenever their use with keyboard is not important.
- [06/06/20] Added a new method for comparing graphics. Added a new method to Graphic to calculate the bitmap similarity between two Graphics. Added new methods to Screen to find a char bitmap in a font or in the ZX graphic blocks. Add a new method to Screen to get a copy of the current font.
- [01/05/20] Fixed a bug in the main zxecosystem.h file to avoid multiple inclusions of VER constant.
- [28/12/19] Added a public method to OriginalScreen to copy global colors into current colors.
- [24/12/19] FIxed a bug in printing TAB in the original screen mode when the target is before the current position.
- [24/12/19] Increased precision of circle drawing to mimic more closely the one of the ZX, specially with small circles.
- [23/12/19] v3.0.0: Many changes in the structure of modules and files, and in particular in the the Screen class API, for a more elegant and consistent programming; also, new functionality added for replicating the exact ZX Spectrum BASIC screen behaviour:
- [23/12/19] Fixed a bug in printing TAB control char.
- [23/12/19] Dropped the restrictions on ink == paper == contrast; now they can be contrast at the same time; in that case, ink is set to black and paper to white.
- [23/12/19] Changed conversion from numbers to strings for printing in order to print closer to the format of the original ZX.
- [15/12/19] Fixed behaviour of new line printing.
- [15/12/19] Better management of right arrow ctrl char in OriginalScreen and new method to do a new line in OriginalScreen without doing scrolls.
- [15/12/19] Improved and cleaned the management of scrolls in printing/inputing in OriginalScreen.
- [15/12/19] Enabled the possibility of placing the text cursor at any out- of-screen position in Screen.
- [09/12/19] Dropped the limitation to [-2pi, 2pi] of the arc in drawing arcs.
- [07/12/19] Added support for expanding tokens both in input and in print to Screen.
- [07/12/19] Added a convertor from keyboard pressings into ascii codes in Keyboard.
- [07/12/19] Created OriginalScreen class for using the screen as in the original ZX (cursors, colors, channels, etc.).
- [07/12/19] Renamed some setters and getters for Attrmap in Screen.
- [06/12/19] Moved input() method to Screen, and clarified the Screen documentation to set it as using a flat model for coordinates.
- [1/12/19] Moved colors classes, printstr and graphics classes to their own modules, separate from the core ones, in a new "base" set of modules. Also, renamed PrintStr to ZXString.
- [1/12/19] Moved all screen methods to Screen and deleted from ZXEco. Dropped all set* and get* methods for colors in favour of the common colorsAndModes() method in Screen. Also renamed ColorsAndModes for a shorter Colors name and made it to derive from AttrColors, since it is an extension.
- [1/12/19] Created a new method in Keyboard that takes care of the keyboard interpretation in the context of user inputs.
- [30/11/19] Dropped ALWAYS mode of refreshing the screen due to its little utility and slowness. Also, dropped printAt() and operator<<() for the same reasons.
- [30/11/19] Moved some functionality from ZXEco to Screen since the synchronization of the Screen with the Window is now done entirely through the Screen callback, thus making unnecessary the ZXEco wrappers.
- [23/11/19] Dropped ON, OFF and other constants for flash, bright, etc., and added support for transparent bright and flash in the different color classes. Changed some color classes for improved simplicity and coherence.
- [13/10/19] v2.0.0: Relevant changes and improvements in the API and functionality (not in performance):
- [13/10/19] Dropped all unnecessary "this->" and "inline".
- [13/10/19] Changed all "toString()" methods to the most common "to_string()".
- [12/10/19] Fixed documentation of membranes, that incorrectly said that a pressed key was a 0.
- [12/10/19] Added missing control codes and their recognition in ISCHRCTRL().
- [11/10/19] Fixed a wrong use of CONTRAST in colors. Now it is closer to the one in the ZX.
- [08/10/19] Fixed the wrong calculation of frequencies for beep inside the Beep constructor; now the beeps are identical to the ones in the original ZX.
- [07/10/19] Changed implementation of setInk(), setPaper() and printChar() in Screen to fix an invalid way of using transparent and contrast colors. Also, added new methods to Screen and ZXEco to put colors in a cell taking into account existing colors in the cell.
- [06/10/19] Changed prototype of drawing routines both in ZXEco and Screen to not having them duplicated (once without colors, once with colors).
- [06/10/19] Added methods to Screen to poke data in the display and calling properly the callback function; also for calculating coordinates from offsets in Graphic class.
- [05/10/19] Added the possibility of creating Screens with external storage; added new constructor to Screen and modified (backward-compatible) the existing activate() method in ZXEco.
- [05/10/19] Changed the prototype of the constructor of Graphic that deals with characters to use alternative fonts if needed. Changed Screen class to set the font bitmap.
- [04/10/19] Minor fixes in the code of inputCommon() in ZXEco for a more consistent use of the keyboard. Fix bug in the name of KeySymbols in Keyboard.cpp, where it appeared as KeySymbol.
- [03/10/19] Changed prototype of refresh() methods in ZXEco to cope with additional paremeters (a call back after each refresh for, for instance, update keyboad or timing) and more efficient parameter passing. Also, added exception throwing in non-periodic refresh for the case PERIODIC mode is used there.
- [29/09/19] Added new method to ZXEco for forcing a capslock state in the keyboard by simulating key pressings.
- [28/09/19] Added methods to wait for key and no key, and changes in keyboard, in ZXEco, and also for checking key and no key in Keyboard classes. Inserted a sleep during synchronous playings of sound in Beep in order not to consume too much CPU. Fixed a bug inside input() that made the text to be reprinted even when keys were unpressed (not changing the text).
- [22/09/19] Added a number of constants of character codes in ZXScreen.h. Added a new toString() method to ColorsAndModes. Changed CHRINV by CHRINVALID. Changed the structure of directories for the library and also its cmake.
- [21/09/19] Added a new method print(c) to Screen and ZXEco to print one char without updating cursor.
- [16/9/19] Changed "zx" namespace by "zxeco" and the ZX class by ZXEco, for compatibility with the ZXLib.
- [4/1/19] v1.1.1: Slightly improved rendering times and first release with GPLv3 license.
- [13/10/18] v1.0.1: Second variant, with less heavy coordinate system, non publicly available, intended for all source to be available through GNU 3.
- [13/11/16] v1.0.0: The first, public version, non-source available