JMonkeyEngine Contributions Lemur Versions Save

Lemur is a jMonkeyEngine-based UI toolkit.

lemur-props-v1.1.0

5 years ago

I guess this is the first 'official' release of this utility package that makes it simple to create debug-style property panels to control various settings using bean properties.

This version is a minor update over the 1.0 release.

Change log:

  • Added Double property support.

v1.11.0

5 years ago

This is a long overdue release containing many community patches, bug fixes, and some new features.

Full change log:

  • Added IconComponent.setIconSize() to force the size of the icon before scaling.
  • Added additional PopupState.showModalPopup() convenience methods that take a background color.
  • Modified PopupState to automatically call runEffect("open") and runEffect("close") if the popup is a Panel (or subclass).
  • Added SpatialTweens.focusOn() to set the focus to a particular spatial as part of animation.
  • Fixed PopupState to take the current guiNode's scaling into account when calculating screen size for the blocker quad.
  • Worked around an NPE in PopupState caused be a JME bug on Node.getWorldBound() when the node is empty.
  • Added PickState methods for better managing "cursor interest" in the form of a request/release API.
  • Modified GuiGlobals to have methods for calling the new PickState request/release API for cursor enabling.
  • Modified GuiGlobals.setCursorEnabled(boolean) to internally call the new PickState.request/release calls. A new GuiGlobals.setCursorEnabled(boolean, force:boolean) method was added in case it is necessary to force the old behavior.
  • Modified PopupState to automatically call GuiGlobals.requestCursorEnabled() and releaseCursorEnabled() when opening/closing popups. This may be a breaking change for some applications.
  • Added a GuiGlobals.srgbaColor() method for conditionally creating linear colors from SRGB colors based on whether gamma is enabled or not.
  • Modified the groovy style API to (by default) use srgbaColor() internally. A flag can be specified to turn this off.
  • Fixed a bug in TextEntryComponent where the font wasn't being kept when changed. This caused issues like cursor positions being wrong, etc..
  • Deprecated Lemur's BaseAppState so apps know to prefer JME's built in version.
  • Fixed issue #53 where Panel.runEffect() would incorrectly return false for effects with no channel.
  • Fixed issue #54 where texture scaling was not being reapplied to cloned QuadBackgroundComponents.
  • Modified the GUI bucket picking code to dynamically say the Ray min/max Z values based on the world bounds of the root spatial. This should fix issue #55 as well as several other problems caused by GUI elements above z=1000. Also, negative Z GUI values are properly supported now, also.
  • Fixed an issue with key repeats in TextEntryComponent and lwjgl3 which seems to separate 'pressed' events from 'repeating' events for some reason. See PR 65.
  • Fixed the toString() of KeyAction to add the closing bracket ']'.
  • Modified TabbedPanel to expose a tab selection model, support get/set of selected tab, expose the list of tabs, and added insert/remove functionality. This meets and exceeds feature request #59
  • Fixed a bug in DragHandler where ortho dragging wasn't properly translating child spatials.
  • Enhanced DragHandler to allow indirect manipulation of a spatial by specifying a draggable locator Function. Useful for things like titlebar based dragging.
  • Set sourceCompatibility to 1.7 and turned on detailed warnings.
  • Fixed a bunch of deprecation and 'unchecked' warnings.
  • Part of that was a conversion from extending the internal BaseAppState to JME's BaseAppState which is a potentially breaking change for any application code that extends Lemur app states but expects enable()/disable() instead of onEnable()/onDisable().
  • Added a Button.click() method to allow calling code to manually trigger a button click.
  • Added Button.ButtonAction.Hover for notifying listeners about when the mouse is hovering over a button. This is useful for implementing things like repeating actions, etc.
  • Updated the built-in glass style to add repeat to slider +/- buttons.

lemur-proto-v1.10.0

5 years ago

Minor update.

Change log:

  • Modified OptionPanelState and OptionPanel to automatically request/release the cursor using the new GuiGlobals.request/releaseCursorEnabled(). This may be irrelevant if OptionPanelState is converted to use PopupState as it should be.
  • Set sourceCompatibility to 1.7 and turned on warnings.
  • Fixed some issues related to deprecation warnings and 'unchecked' generics warnings.
  • Part of that was a conversion from extending the internal BaseAppState to JME's BaseAppState which is a potentially breaking change for any application code that extends Lemur app states but expects enable()/disable() instead of onEnable()/onDisable(). In this case, just OptionPanelState.

v1.10.1

7 years ago

A feature update that also includes several bug fixes. Highlights include refactoring DocumentModel usage, mouse wheel support, and a PasswordField.

Full change list for this release:

  • Added a proper toString() method to the LayerComparator.
  • Added a 'debug mode' to the PickEventSession which lets a caller selectively raise the logging level for a particular instance.
  • Removed a leftover unused 'index' field in GuiControl.
  • Added support for GuiUpdateListeners to GuiControl so that things like child GuiComponents can hook into the controlUpdate() without having to create another full control themselves.
  • Modified GuiControl to lazily instantiate its listener lists.
  • Added a TextField(DocumentModel) convenience constructor.
  • Added a DocumentModel.createCaratReference() method that returns a versioned reference for the carat position.
  • Fixed TextEntryComponent to be more reactive to external DocumentModel changes and it now uses that even for its own internal changes to the document.
  • Breaking change: DocumentModel has been moved to the com.simsilica.lemur.text package and is now an interface. Make sure any of your classes that use DocumentModel directly import it from the new location. If you instantiate a DocumentModel directly then now you will instantiate DefaultDocumentModel instead. Sorry. It needed to be done and was only going to get worse the longer I waited.
  • Added a DocumentModelFilter class that is a DocumentModel that wraps other DocumentModels to provide filtering and transformation. Callers can do simple filtering with Guava Functions and Subclasses can override the methods to provide more advanced transformation and input filtering.
  • Added a TextFilters class with a bunch of default input and output implementations for commonly used things.
  • Refactored TextField a bit to make it easier to subclass and override the model or TextEntryComponent.
  • Added a PasswordField that is auto-wired with some useful DocumentModelFilter behavior suitable for password fields. Includes stylable attributes for setting the output character and allowed input characters.
  • Fixed a bug where focus wasn't cleared for objects removed from the scene graph. The fix is a bit of a hack but there really isn't any other way. This fixes issues #42 and #28.
  • Modified the MouseAppState to pass along the scroll wheel information to the PickEventSessions. PickEventSession was modified to then pass on the appropriate scroll values and deltas to the MouseMotionEvents and CursorMotionEvents. CursorMotionEvent was enhanced to have getScrollValue() and getScrollDelta() methods.
  • Added an insert(String) method to DocumentModel and its implementations that allows bulk-insertion of text instead of just one character at a time
  • Fixed GuiGlobals to not crash under certain circumstances if the build info isn't available. Fixes issue #38
  • Fixed the human-readable names for some of the joystick-related input.Button constants.
  • Fixed an issue with mouse button events sending the wrong mouse wheel delta to cursor event listeners. Fixes issue #49

lemur-proto-v1.9.1

7 years ago

A minor patch release that includes mouse wheel scrolling for ListBox and some more appropriate effect/list action triggering.

Changes in this release:

  • Added mouse wheel support to ListBox based on the new scroll support in Lemur 1.10.1.
  • Fixed some handling of ListAction events and the related effect triggers. Down and Up should be properly delivered as well as considering the whole list box in entered/exited/activate/deactivated states. Currently, moving over the scroll bar will still 'deactivate'.

v1.9.1

7 years ago

A feature update release including several bug fixes. The highlights include basic key/joystick based focus navigation and a new PopupState useful for popping up temporary UI dialogs, popup-menus, etc..

Full change list for this release:

  • Fixed a bug in RollupPanel.setContents(null) where removing the existing contents was causing problems if the rollup panel was closed.
  • Fixed a code-spotted bug where setting a null layout would have caused an NPE.
  • Added basic focus navigation support including simple default implementations in the standard GUI elements.
  • Modified KeyAction to support SHIFT_DOWN in addition to CONTROL_DOWN.
  • Upated TextEntryComponent to hook up some standard keys to focus actions for single line text fields.
    Tab = Next, Shift+Tab = Previous, Enter = Next, Up = Up, Down = Down.
  • Added a ModifiedKeyInputEvent that extends JME's normal KeyInputEvent to provide modifier flags for alt, ctrl, shift, etc.. Modified the KeyInterceptorState to wrap KeyInputEvents in this event for delivery to the listeners. Listeners that want the modifiers (unfortunately) must cast to the more specific event class.
  • Added a KeyModifiers class and moved the key modifier bit constants to it.
  • Modified SpringGridLayout to keep its children in a LinkedHashMap so that the initial ordering is still available.
  • Made buttons "focusable" so that they can participate in focus navigation.
  • Added a focusColor and focusShadowColor to Button to indicate focus.
  • Added support for ButtonAction.FocusGained and ButtonAction.FocusLost button actions.
  • Added Button.EFFECT_FOCUS, Button.EFFECT_UNFOCUS effect triggers.
  • Fixed Button to update the active highlight color if it changes while the button has highlighting on.
  • Consolidated pressed/released/click handling into the main Button class and hooked up the focus activation event to pressed/released/click handling.
  • Added trace logging to InputMapper that logs the raw events received from JME.
  • Fixed a bug where Label's shadow text component wasn't picking up the max width if set.
  • Added method an AbstractCursorEvent.getLocation() convenience method for getting the event location as a Vector2f.
  • Added a general PopupState for managing modal and non-modal popups that can be closed by simply clicking outside of the popped up panel (or optionally block those events).
  • Added PopupState as a built-in state in GuiGlobals.

lemur-proto-v1.8.1

7 years ago

Mostly a bug fix release and to support some of the newer Lemur features like proper focus management.

The big update is a prototype for a DragAndDropControl and related framework. This can be used to add drag-and-drop container support to any JME Spatial.

Changes in this release:

  • Fixed a missing body of the default constructor for ColorChooser.
  • OptionPanelState now requests focus for the option panel when shown.
  • Added additional information to the exception rethrown when CallMethodAction catches an IllegalArgumentException.
  • Fixed a bug in CallMethodAction where the wrong method could be selected if it had the same name but invalid argument types.
  • Added additional trace logging to CallMethodAction
  • Initial drag-and-drop support. See the new com.simsilica.lemur.dnd package.

v1.8.2

7 years ago

A bug fix release over version 1.8.1 that includes:

  • Fixed a typo in the MathApi used by the style loader language. Now properly supports vec2().
  • Fixed a bug in Button where the highlight off state wasn't triggered if the button was disabled but highlight was on.
  • Fixed a bug in Tweens to support primitive arguments in the callMethods() tween.
  • Fixed a bug where the cursor of a text field would be invisible if the alpha value had never been set.
  • Fixed a bug in QuadBackgroundComponent and TbtQuadBackgroundComponent where the cached collision data wasn't being cleared on resize causing mouse picking to fail if the objects increased in size.

lemur-proto-v1.7.1

7 years ago

Incremental release over 1.6.1.

Includes:

  • Added ListAction command support to ListBox along with default effect triggering. Currently includes actions similar to for buttons: Down, Up, Click, Entered, Exited
  • Fixed a bug in CallMethodAction where it wasn't searching for methods in the superclasses. Also added another trace() logging call.

v1.8.1

8 years ago

This release is identical to 1.7.1 except that it has been recompiled to work with jMonkeyEngine 3.1.0 alpha4 or better. jME has refactored the Application class into an interface so all app states or anything else referencing the Application class need to be recompiled.

All future releases of Lemur will be alpha4 compatible or better. 1.7.1 is planned to be the last pre-alpha4 compatible release.

For reference, the 1.7.1 changes:

  • Added InputMapper.hasMappings() method to return true if a FunctionId has inputs associated with it.
  • Added InputMapper.getMappings(FunctionId) to return all of the input mappings currently associated with a particular function.
  • Added InputMapper.getFunctionIds() to return all FunctionIds that are registered with the InputMapper, either associated with inputs or with function listeners. (Useful for displaying configuration screens.)
  • Added InputMapper support for InputConfigListener so that applications can choose to be notified about changes to input mappings.
  • Added Label.setMaxWidth() which is a stylable attribute that constrains the width of the lable, forcing text to wrap and grow vertically if it exceeds that width. This helps with setting up layouts that include Labels that might wrap anyway because of other layout constraints. Because of the single-shot nature of preferred size calculation, it can't deal with components that change height because their width was constrained later.
  • Refactored MouseAppState and TouchAppState to share a common base class that contains the duplicate code.
  • Added a PickState interface that can be used to grab either the MouseAppState or TouchAppState depending on which is being used. This insulates applications from having to care.
  • Modified the pick states and pick session to support a 'pick layers' concept to provide better control over the order in which the layers are checked for collisions. By default, the GUI layer is checked and then the SCENE layer but the applications can now add their own layers by changing this ordering with PickState.setPickLayerOrder()
  • Pegged the JME dependency at alpha3 since the next version will be alpha4+ specific.