Skip to content

Releases: jMonkeyEngine-Contributions/Lemur

Lemur version 1.7.1

28 Mar 06:59
Compare
Choose a tag to compare

This release includes some InputMapper enhancements that make it easier to inspect existing mappings and functions. This is useful for implementing configuration UIs or making smarter default mappings.

Also, the scene picking system now supports layers for the different viewports to make it easier to manage the order in which viewports are picked.

Finally, this is the last release that will work with jMonkeyEngine prior to alpha4. All future releases will be alpha4+ compatible only. jME has refactored the Application class into an interface so all app states or anything else referencing the Application class need to be recompiled.

Updates in this release:

  • 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.

LemurProto version 1.6.1

28 Mar 06:54
Compare
Choose a tag to compare
Pre-release

This is functionally equivalent to the 1.5.1 release except that it has been recompiled to work with jME v3.1.0 alpha4 or better.

jME 3.1.0 alpha4 has reorganizing the Application classes and requires a recompile for anything referring to Application like app states, etc..

Lemur version 1.6.1

01 Mar 03:04
Compare
Choose a tag to compare

This release includes some minor fixes over the last one and a few improvements. The only real new feature is the effects and animation system that allows for styled animations to be added to any GUI element.

This should be a safe drop-in replacement for 1.5.x

This release is also the first to be posted to the public jcenter repository and can now easily be directly incorporated into gradle or maven builds:
com.simsilica:lemur:1.6.1

Updates in this release:

  • Fixed an issue in DefaultRangedValueModel where the 'value' field
    was used directly instead of calling getValue(). This made it harder
    for subclasses to implement custom behavior.
  • Added a Slider(model, ElementId) constructor.
  • Modified the style Attributes class to auto-merge Map-based attribute values
    using the same override logic that the Attributes class itself uses.
  • Added a basic animation system and GUI element stylable effects API.
  • Added a setEffects() method to Panel that is stylable. Also added a few
    other runEffect(), addEffect(), etc. methods related to the new animation
    system.
  • Modified Button to automatically attempt to run effects for the various
    button events.
  • Modified CommandMap to support null values in the addCommands() call
    that can be used to clear out any previously added values.
  • Fixed a bug in Container where children that called removeFromParent()
    left the layout in an inconsistent state. Now a regular detachChild()
    will check the layout first before detaching the child.
  • Added getLastVersion() and getObjectVersion() methods to VersionedReference.
  • Converted some System.out.println() warnings in InputMapper to actual log
    warns.
  • Added AnimationState to the default states setup in GuiGlobals.
  • Fixed joystick axis event processing to pay attention to the reported dead
    zone of the axis. It will take the max of the specific axis' dead zone and the global
    InputManager.getAxisDeadZone().
  • Fixed a bug in InputMapper where key mappings that had negative scale
    weren't triggering negative state in state listeners.
  • Fixed QuadBackgroundComponent and TbtQuadBackgroundComponent to allow setting
    the alpha even if the color has not been set. Color defaults to white in that
    case.
  • Updated TextField and TextEntryComponent to support a 'preferred line count'
    property which helps set the preferred height of a text field based on the
    current font and a line count.
  • Modified TextEntryComponent to properly implement ColoredComponent and support
    alpha.
  • Fixed an IndexOutOfBoundsException in TextEntryComponent when setting text to "".
  • Added Button constructor that takes just text and ElementId.
  • Modified scene picking to deal with ortho cameras correctly. Now it's only
    the Gui bucket that is special case.
  • Modified scene picking to adhere to camera viewport limits.
  • Fixed DragHandler to allow external z-value changes in 2D dragging.
  • Added textureCoordinateScale property to QuadBackgroundComponent.

LemurProto version 1.5.1

01 Mar 03:07
Compare
Choose a tag to compare

A minor feature release over 1.4.x mostly to sync up with the new maven/gradle public repo release in jcenter.

Can now be retrieved from jcenter with the following maven/gradle dependency:
com.simsilica:lemur-proto:1.5.1

Updates:

  • Modified OptionPanel and OptionPanelState to run effects on
    open or close.
  • Added a VersionedReferenceList that can be used to watch several
    VersionedReferences for changes.

Lemur version 1.5.2

09 Nov 07:33
Compare
Choose a tag to compare

This has just a few bug fixes and small improvements over version 1.5.1:
https://github.com/jMonkeyEngine-Contributions/Lemur/releases/tag/v1.5.1

It should be a safe drop-in replacement.

This release is a baselining before adding some new features that will bump the major version up.

Note: if you find this project useful to you in they "Hey, I'd like to buy that guy lunch sometime" kind of way... consider becoming a patron: https://www.patreon.com/pspeed42

Current required dependencies (same as 1.5.1):

guava (newer than 12)
slf4j-api-1.7.5 (and a logging adapter)
jme core 3.1
optionally: groovy-all.jar 2.1.9 or later if you want style file support

Bug fixes and patches in this release:

  • Added Documented annotation to StyleAttribute so that it shows up in the javadoc. (oops)
  • Fixed bug in Panel where insets were not applied during setInsets() if an InsetsComponent had been previously set (or insets were set a second time).
  • Fixed a bug with up/down event processing in Button. It was possible to receive up events when no down event was received. Now every down gets an up and there are no ups without downs.
  • Added an additional constructor to Container that takes a layout and elementId.
  • Added a simplified SpringGridLayout constructor that just takes the axes for axis ordering.
  • Modified DefaultMouseListener to have more configurable click detection. A click threshold can be specified on the constructor instead of being hard-coded to three. Also, the click detection is done with an easily overridable method.
  • Fixed IconComponent to allow setting the alpha value even if a color has not been set. Color defaults to white in that case.

LemurProto version 1.4.2

09 Nov 07:39
Compare
Choose a tag to compare
Pre-release

This is a minor bug fix and small enhancement update over version 1.4.1.
https://github.com/jMonkeyEngine-Contributions/Lemur/releases/tag/proto-v1.4.1

Was built with Lemur 1.5.2 but should still be compatible with 1.5.1.

Note: if you find this project useful to you in they "Hey, I'd like to buy that guy lunch sometime" kind of way... consider becoming a patron: https://www.patreon.com/pspeed42

Changelog:

  • Added an additional constructor to OptionPanel to allow specification of the ElementId for the panel.
  • Fixed ListBox to properly set the alpha of the selector.
  • Fixed GridPanel to set the alpha of its children when they are added if the panel has an alpha configured.
  • Added some additional show() methods to OptionPanelState that allow the panel's ElementId to be specified.

LemurProto version 1.4.1

07 Sep 06:21
Compare
Choose a tag to compare
Pre-release

Post project conversion and move release... lots of new stuff over the last proto release.

This is an add-on to the regular Lemur distribution that has some components that are currently in "prototype" state. These will eventually be moved to the main library after they have been properly broken in.

Depends on Lemur 1.5.1 or better.

Note: if you find this project useful to you in they "Hey, I'd like to buy that guy lunch sometime" kind of way... consider becoming a patron: https://www.patreon.com/pspeed42

Changelog:

  • Added Action and ActionButton for having a more general
    way of passing around "actions" that can be reused in
    various buttons. Eventually this gets expanded into
    toolbar buttons, menu buttons, etc.
  • Added an OptionPanel similar to Swing's JOptionPane. It
    can be used to present a message or simple set of
    options to the user.
  • Added an OptionPanelState that can be used to modally
    present OptionPanel's to the user.
  • Added setSelection() and getSelection() to list.SelectionModel
    for more easily setting/getting a single selection.
  • Fixed GridPanel to update its displayed values if the model
    has changed. Prior to this, add/remove/set on the model
    was not reflected properly in the grid.
  • Fixed ListBox to reset its slider range when the list model
    changes.
  • Fixed ListBox to reset the selector element if the grid has
    been reshaped() (ie: children have been laid out again)
    This fixes a bug where the selector wasn't resized when
    the list resized. It also fixes a bug where the selector
    disappeared if newly moved to the end of the list because
    of model changes.
  • Fixed ListBox to clamp the selection to the end of the list
    if the model changes.
  • Fixed ListBox to keep the list in the same place if items
    are added after the current visible base.
  • Added a ProtoDemo to demonstrate (and test) some of the proto
    elements.
  • Fixed ListBox to properly apply its outer style as "list.container"
    instead of just "list"
  • Added a glass-styles.groovy to augment the default glass style
    with styling for the ListBox and OptionPanel elements. These
    styles are automatically loaded when the glass style is
    loaded.
  • Fixed ListBox to properly pass style through on all constructors
    that take style as a parameter.
  • Added ListBox.set/getCellRenderer() for changing the cell rendering
    strategy at runtime.
  • Modified DefaultCellRenderer to take an optional Function<T, String> for
    doing the value to string transform. Also moved the value to String
    conversion into its own protected method to make it easy for subclasses
    to do more advanced custom behavior if desired.
  • Fixed a bug where the initial internal setModel() was failing to set
    the default empty model when the passed model was null... because null
    was the same as the existing model.
  • Added style attribute support for ListBox.visibleItems and ListBox.cellRenderer.
  • Fixed some bugs where applying styles was throwing NPEs because there was
    no model or selector yet.
  • Debounced some update churn in SelectionModel when calling add() and fixed
    the simmilar check in setSelection()
  • Fixed a bug in ListBox where the item selector might start out the wrong size
    when first displayed.
  • Added EmptyAction for cases where an action button is desired with no action.
    Useful for stubbing out actions for UIs or passing a null action to the option
    panel for "Ok".
  • Added CallMethodAction that delegates to a specified method on some object.
  • Added a ColorChooser component that presents an HS selection panel and a separate
    B slider.

LemurProps version 1.0.1

07 Sep 06:29
Compare
Choose a tag to compare
Pre-release

Post project conversion and move release of the LemurProps extension.

This library adds a simple property panel that uses reflection to auto-build a panel of property editors.

Depends on Lemur v1.5.1 or better.

Note: if you find this project useful to you in they "Hey, I'd like to buy that guy lunch sometime" kind of way... consider becoming a patron: https://www.patreon.com/pspeed42

Lemur version 1.5.1 with JME SDK 3.1 compatibility

06 Sep 21:12
Compare
Choose a tag to compare

Finally! Another Lemur release. This release includes a ton of changes that have been waiting for JME 3.1 to be in released state. (This is my first github release, so be gentle.)

Now that the project has been moved to github, it's a good time to get new binaries up and start a new versioning scheme. Given that there were only 4 official releases prior to this, I've seeding the minor version with 5.

Note: if you find this project useful to you in they "Hey, I'd like to buy that guy lunch sometime" kind of way... consider becoming a patron: https://www.patreon.com/pspeed42

Current required dependencies:

  • guava (newer than 12)
  • slf4j-api-1.7.5 (and a logging adapter)
  • jme core 3.1
  • optionally: groovy-all.jar 2.1.9 or later if you want style file support

The changes in this release, in no particular order:

  • Fixed an error message in SpringGridLayout to refer to itself properly.
  • Modified GuiGlobals to have a protected getAssetManager() field.
  • Fixed a bug in PickEventSession when using non-Viewport root pick roots.
  • Added setters/getters for MouseAppState's includeDefaultNodes field that
    controls if pick roots are automatically added during initialize.
  • Fixed Slider to not add the drag handler to the slider range. It was a
    leftover from when drag events weren't delivered to the capture properly
    and now left the strange behavior of dragging in the slider range causing
    the button to move.
  • Added Axis.getDirection() to return one of the constant Vector3f.UNIT_X,
    UNIT_Y, or UNIT_Z depending on the axis value.
  • Added Slider.getValueForLocation() which can be used to calculate where
    in the model's range a particular local coordinate represents. Useful
    for a variety of range-related listener behavior.
  • Updated GuiControl.setPreferredSize() to throw an illegal argument exception
    if the specified size is negative.
  • Fixed GuiControl.setSize() to not mutate the passed in size.
  • GuiControl.setSize() passes the original size to GuiControl listeners instead
    of the child-mutated size.
  • Fixed a small sizing issue in BorderLayout where it was always passing
    through 0 for the z size when setting the size of children. Now it passes
    through the size that was passed to reshape.
  • Added Button.removeClickCommands()
  • Added Container.clearChildren()
  • Modified PickEventSession to keep its pick roots in a SafeArrayList for
    garbage-free iteration.
  • Added setAlpha()/getAlpha() to ColoredComponent and modified all ColoredComponent
    implementors to have the new methods.
  • Added Panel.setAlpha() and Panel.getAlpha() for setting the alpha of just
    the panel and it's components or of all children recursively. Useful
    for fading in/out entire UI hierarchies.
  • Fixed a bug in DefaultRangedValueModel where changes to min and max value weren't
    incrementing the version.
  • Added some more trace level logging to the Styles class to help users debug
    style issues.
  • Added styling attributes for Panel.alpha and Panel.preferredSize
  • Added vec3() and vec2() functions to the style API
  • Fixed GuiControl to clamp the passed size to min 0,0,0 during reshape.
  • Added a check for negative sizes to GuiControl.setSize().
  • Refactored how named layer ordering is done in GuiControl by creating a separte
    ComponentStack class that can enforce a total ordering based on named layers.
    Soooo much simpler. All of the other GUI elements were modified to use it.
    The breaking change is for any custom GUI element that relied on the old weird
    component ordering methods as they are now gone.
  • Added setIcon() to label to set an icon-layer component. (This was made easy
    by the above refactoring and is long overdue.)
  • Breaking fix: modified how TextComponent's z offset is used to be more sensible
    and to properly affect the next layer in the stack. This directly affects
    shadowOffset and any styling using shadowOffset probably needs the sign of
    its z component flipped. The new default shadow offset is now (1, -1, -1)
  • Added FocusChangeListener and FocusChangeEvent support. GuiControl now has
    add/removeFocusChangeListener() methods for registering listeners that will
    be notified when the control loses or gains focus.
  • Fixed a bug in SpringGridLayout where a minorFill wasn't getting handled
    right if major file was set to ForcedEven and minorFill was not.
  • Fixed a bug in CursorEvent deliver if the captured spatial was removed before
    the up event was received. The attempt to deliver move events was throwing
    NPEs. Now it just returns the current event consumption state instead.
  • Panel now has a "border" property in addition to "background", so all
    regular GUI elements can now have separate borders and backgrounds.
  • GuiControl can now be "focusable" even if none of it's child components are
    by using the setFocusable() method.
  • Added a Slider constructor that takes Axis, ElementId, and style.
  • Gave TbtQuadBackgroundComponent a proper toString() method.
  • Gave SpringGridLayout a proper toString() method.
  • Added some style-less constructors for Label and Container.
  • Modified IconComponent and QuadBackgroundComponent to set AlphaDiscardThreshold
    instead of just alphaTest since alphaTest is a no-op in JME 3.1. (Note: this
    is a breaking change for 3.0 because it's Unshaded.j3md doesn't have an
    AlphaDiscardThreshold.)
  • Styles.DEFAULT_STYLE changed to Styles.ROOT_STYLE to better reflect what it's
    for... also the constant was changed from "default" to "root".
  • Styles now supports a user-defined default style that will be used for style
    application when no other style is defined. Useful for globally setting
    a UI's look and feel.
  • Modified some Styles trace logging to include more info.
  • GuiGlobals font loading modified to set AlphaDiscardThreshold in addition to
    alphaTest since alphaTest is a no-op in JME 3.1. (Note: this
    is a breaking change for 3.0 because it's Unshaded.j3md doesn't have an
    AlphaDiscardThreshold.)
  • Added a TextField constructor that takes just text and element ID.
  • Fixed a syntax error in StyleApi.groovy's vec2() helper function.