mirror of
https://github.com/sojamo/controlp5
synced 2024-11-16 11:17:56 +01:00
543 lines
13 KiB
Java
543 lines
13 KiB
Java
|
package main.java.src2.main.java.controlP5.controlP5;
|
||
|
|
||
|
/**
|
||
|
* controlP5 is a processing gui library.
|
||
|
*
|
||
|
* 2006-2015 by Andreas Schlegel
|
||
|
*
|
||
|
* This library is free software; you can redistribute it
|
||
|
* and/or modify it under the terms of the GNU Lesser
|
||
|
* General Public License as published by the Free Software
|
||
|
* Foundation; either version 2.1 of the License, or (at
|
||
|
* your option) any later version. This library is
|
||
|
* distributed in the hope that it will be useful, but
|
||
|
* WITHOUT ANY WARRANTY; without even the implied warranty
|
||
|
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||
|
* See the GNU Lesser General Public License for more
|
||
|
* details.
|
||
|
*
|
||
|
* You should have received a copy of the GNU Lesser General
|
||
|
* Public License along with this library; if not, write to
|
||
|
* the Free Software Foundation, Inc., 59 Temple Place,
|
||
|
* Suite 330, Boston, MA 02111-1307 USA
|
||
|
*
|
||
|
* @author Andreas Schlegel (http://www.sojamo.de)
|
||
|
* @modified ##date##
|
||
|
* @version ##version##
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
import processing.core.PFont;
|
||
|
import processing.core.PGraphics;
|
||
|
|
||
|
/**
|
||
|
* A custom label using controlP5's BitFonts or PFont based
|
||
|
* ControlFonts.
|
||
|
*
|
||
|
*
|
||
|
* @see ControlFont
|
||
|
* @example controllers/ControlP5Textlabel
|
||
|
*
|
||
|
*/
|
||
|
public class Label implements CDrawable {
|
||
|
|
||
|
public static boolean isToUpperCaseDefault = true;
|
||
|
protected int _myLetterSpacing = 0;
|
||
|
protected boolean isMultiline;
|
||
|
protected boolean isFixedSize;
|
||
|
protected ControllerStyle _myControllerStyle = new ControllerStyle( );
|
||
|
protected boolean isVisible = true;
|
||
|
protected int _myColor = 0xffffffff;
|
||
|
protected boolean isColorBackground;
|
||
|
protected boolean isToUpperCase = isToUpperCaseDefault;
|
||
|
protected boolean changed;
|
||
|
protected int _myColorBackground = 0xffffffff;
|
||
|
protected int _myHeight = -1;
|
||
|
protected int _myWidth = -1;
|
||
|
protected String _myText = "";
|
||
|
protected ControlFont _myFontLabel;
|
||
|
protected int _myLineHeight = 0;
|
||
|
protected int alignX = ControlP5.LEFT;
|
||
|
protected int alignY = ControlP5.LEFT;
|
||
|
protected int textAlign = ControlP5.LEFT;
|
||
|
public static int paddingX = 4;
|
||
|
public static int paddingY = 4;
|
||
|
public int _myPaddingX = paddingX;
|
||
|
public int _myPaddingY = paddingY;
|
||
|
protected Labeltype _myLabeltype;
|
||
|
protected int _myTextHeight = 1;
|
||
|
protected float offsetYratio = 0;
|
||
|
private ControlP5 cp5;
|
||
|
|
||
|
private Label( Label theLabel ) {
|
||
|
_myText = theLabel.getText( );
|
||
|
isToUpperCase = theLabel.isToUpperCase( );
|
||
|
_myLetterSpacing = theLabel.getLetterSpacing( );
|
||
|
_myLineHeight = theLabel.getLineHeight( );
|
||
|
_myFontLabel = theLabel.getFont( );
|
||
|
_myLabeltype = theLabel.getLabeltype( );
|
||
|
}
|
||
|
|
||
|
public Label( ControlP5 theControlP5 , String theValue ) {
|
||
|
init( theControlP5 , theValue , 0 , 0 , _myColor );
|
||
|
}
|
||
|
|
||
|
public Label( ControlP5 theControlP5 , String theValue , int theWidth , int theHeight , int theColor ) {
|
||
|
init( theControlP5 , theValue , theWidth , theHeight , theColor );
|
||
|
}
|
||
|
|
||
|
private void init( ControlP5 theControlP5 , String theValue , int theWidth , int theHeight , int theColor ) {
|
||
|
cp5 = theControlP5;
|
||
|
_myWidth = theWidth;
|
||
|
_myHeight = theHeight;
|
||
|
_myText = theValue;
|
||
|
_myColor = theColor;
|
||
|
setLabeltype( new SinglelineLabel( ) );
|
||
|
setFont( cp5.controlFont );
|
||
|
setLabeltype( new SinglelineLabel( ) );
|
||
|
set( _myText );
|
||
|
_myControllerStyle = new ControllerStyle( );
|
||
|
}
|
||
|
|
||
|
Label setLabeltype( Labeltype theType ) {
|
||
|
_myLabeltype = theType;
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
Labeltype getLabeltype( ) {
|
||
|
return _myLabeltype;
|
||
|
}
|
||
|
|
||
|
public Label align( int[] a ) {
|
||
|
alignX = a[ 0 ];
|
||
|
alignY = a[ 1 ];
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
public Label align( int theX , int theY ) {
|
||
|
alignX = theX;
|
||
|
alignY = theY;
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
public Label alignX( int theX ) {
|
||
|
alignX = theX;
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
public Label alignY( int theY ) {
|
||
|
alignY = theY;
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
public int[] getAlign( ) {
|
||
|
return new int[] { alignX , alignY };
|
||
|
}
|
||
|
|
||
|
public Label setPadding( int thePaddingX , int thePaddingY ) {
|
||
|
_myPaddingX = thePaddingX;
|
||
|
_myPaddingY = thePaddingY;
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
public Label setPaddingX( int thePaddingX ) {
|
||
|
_myPaddingX = thePaddingX;
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
public Label setPaddingY( int thePaddingY ) {
|
||
|
_myPaddingY = thePaddingY;
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
public void draw( PGraphics theGraphics , int theX , int theY , ControllerInterface< ? > theController ) {
|
||
|
if ( isVisible ) {
|
||
|
getLabeltype( ).draw( this , theGraphics , theX , theY , theController );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void draw( PGraphics theGraphics , int theX , int theY , int theW , int theH ) {
|
||
|
if ( isVisible ) {
|
||
|
getLabeltype( ).draw( this , theGraphics , theX , theY , theW , theH );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@Override public void draw( PGraphics theGraphics ) {
|
||
|
if ( isVisible ) {
|
||
|
_myFontLabel.adjust( theGraphics , this );
|
||
|
draw( theGraphics , 0 , 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void draw( PGraphics theGraphics , int theX , int theY ) {
|
||
|
if ( isVisible ) {
|
||
|
theGraphics.pushMatrix( );
|
||
|
theGraphics.translate( _myControllerStyle.marginLeft , _myControllerStyle.marginTop );
|
||
|
theGraphics.translate( theX , theY );
|
||
|
|
||
|
if ( isColorBackground ) {
|
||
|
|
||
|
float ww = getStyle( ).paddingRight + getStyle( ).paddingLeft;
|
||
|
if ( getStyle( ).backgroundWidth > -1 ) {
|
||
|
ww += _myControllerStyle.backgroundWidth;
|
||
|
} else {
|
||
|
ww += _myFontLabel.getWidth( );
|
||
|
}
|
||
|
float hh = getStyle( ).paddingBottom + getStyle( ).paddingTop;
|
||
|
if ( getStyle( ).backgroundHeight > -1 ) {
|
||
|
hh += getStyle( ).backgroundHeight;
|
||
|
} else {
|
||
|
hh += _myFontLabel.getHeight( );
|
||
|
}
|
||
|
theGraphics.fill( _myColorBackground );
|
||
|
theGraphics.rect( 0 , 1 , ww , hh );
|
||
|
}
|
||
|
theGraphics.translate( _myControllerStyle.paddingLeft , _myControllerStyle.paddingTop );
|
||
|
_myFontLabel.draw( theGraphics , this );
|
||
|
theGraphics.popMatrix( );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public Label hide( ) {
|
||
|
return setVisible( false );
|
||
|
}
|
||
|
|
||
|
public Label show( ) {
|
||
|
return setVisible( true );
|
||
|
}
|
||
|
|
||
|
public Label setVisible( boolean theValue ) {
|
||
|
isVisible = theValue;
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
public Label updateFont( ControlFont theFont ) {
|
||
|
return setFont( theFont );
|
||
|
}
|
||
|
|
||
|
public Label set( String theValue ) {
|
||
|
return setText( theValue );
|
||
|
}
|
||
|
|
||
|
public Label setText( String theValue ) {
|
||
|
_myText = theValue;
|
||
|
setChanged( true );
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
public Label setFixedSize( boolean theValue ) {
|
||
|
isFixedSize = theValue;
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
public boolean isFixedSize( ) {
|
||
|
return !isMultiline && isFixedSize;
|
||
|
}
|
||
|
|
||
|
public String getText( ) {
|
||
|
return _myText;
|
||
|
}
|
||
|
|
||
|
public String getTextFormatted( ) {
|
||
|
return getLabeltype( ).getTextFormatted( );
|
||
|
}
|
||
|
|
||
|
public ControllerStyle getStyle( ) {
|
||
|
return _myControllerStyle;
|
||
|
}
|
||
|
|
||
|
public Label setWidth( int theWidth ) {
|
||
|
_myWidth = theWidth;
|
||
|
setChanged( true );
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
public Label setHeight( int theHeight ) {
|
||
|
_myHeight = theHeight;
|
||
|
setChanged( true );
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
public int getWidth( ) {
|
||
|
return _myLabeltype.getWidth( );
|
||
|
}
|
||
|
|
||
|
public int getHeight( ) {
|
||
|
return _myLabeltype.getHeight( );
|
||
|
}
|
||
|
|
||
|
public int getOverflow( ) {
|
||
|
return getLabeltype( ).getOverflow( );
|
||
|
}
|
||
|
|
||
|
public Label setMultiline( boolean theValue ) {
|
||
|
isMultiline = theValue;
|
||
|
_myLabeltype = ( isMultiline ) ? new MultilineLabel( ) : new SinglelineLabel( );
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
public Label toUpperCase( boolean theValue ) {
|
||
|
isToUpperCase = theValue;
|
||
|
setChanged( true );
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
public ControlFont getFont( ) {
|
||
|
return _myFontLabel;
|
||
|
}
|
||
|
|
||
|
public Label setFont( int theBitFontIndex ) {
|
||
|
ControlP5.logger.warning( "BitFont is now of type PFont, use setFont(PFont) instead." );
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
public Label setFont( PFont thePFont ) {
|
||
|
return setFont( new ControlFont( thePFont ) );
|
||
|
}
|
||
|
|
||
|
public Label setFont( ControlFont theFont ) {
|
||
|
setLineHeight( theFont.getSize( ) );
|
||
|
_myFontLabel = new ControlFont( theFont.getFont( ) , theFont.getSize( ) );
|
||
|
_myFontLabel.init( this );
|
||
|
setChanged( true );
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
public Label setSize( int theSize ) {
|
||
|
_myFontLabel.setSize( theSize );
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
protected boolean isChanged( ) {
|
||
|
return changed;
|
||
|
}
|
||
|
|
||
|
protected Label setChanged( boolean theValue ) {
|
||
|
changed = theValue;
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
Label setTextHeight( int theHeight ) {
|
||
|
_myTextHeight = theHeight;
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
public int getTextHeight( ) {
|
||
|
return _myFontLabel.getTextHeight( );
|
||
|
}
|
||
|
|
||
|
public int getLineHeight( ) {
|
||
|
return _myLineHeight;
|
||
|
}
|
||
|
|
||
|
public Label setOffsetY( int theValue ) {
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
public Label setOffsetYratio( float theValue ) {
|
||
|
offsetYratio = theValue;
|
||
|
setChanged( true );
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
public float getOffsetYratio( ) {
|
||
|
return offsetYratio;
|
||
|
}
|
||
|
|
||
|
public Label setLineHeight( int theValue ) {
|
||
|
_myLineHeight = theValue;
|
||
|
setChanged( true );
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
public Label setColor( int theValue , boolean theFlag ) {
|
||
|
setColor( theValue );
|
||
|
setFixedSize( theFlag );
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
public Label setColor( int theColor ) {
|
||
|
_myColor = theColor;
|
||
|
setChanged( true );
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
public int getColor( ) {
|
||
|
return _myColor;
|
||
|
}
|
||
|
|
||
|
public Label setColorBackground( int theColor ) {
|
||
|
enableColorBackground( );
|
||
|
_myColorBackground = theColor;
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
public Label disableColorBackground( ) {
|
||
|
isColorBackground = false;
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
public Label enableColorBackground( ) {
|
||
|
isColorBackground = true;
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
public int getLetterSpacing( ) {
|
||
|
return _myLetterSpacing;
|
||
|
}
|
||
|
|
||
|
public Label setLetterSpacing( int theValue ) {
|
||
|
_myLetterSpacing = theValue;
|
||
|
setChanged( true );
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
public boolean isMultiline( ) {
|
||
|
return isMultiline;
|
||
|
}
|
||
|
|
||
|
public boolean isVisible( ) {
|
||
|
return isVisible;
|
||
|
}
|
||
|
|
||
|
public boolean isToUpperCase( ) {
|
||
|
return isToUpperCase;
|
||
|
}
|
||
|
|
||
|
protected Label copy( ) {
|
||
|
return new Label( this );
|
||
|
}
|
||
|
|
||
|
|
||
|
public static void setUpperCaseDefault( boolean theValue ) {
|
||
|
isToUpperCaseDefault = theValue;
|
||
|
}
|
||
|
|
||
|
interface Labeltype {
|
||
|
|
||
|
void draw( Label theLabel , PGraphics theGraphics , int theX , int theY , ControllerInterface< ? > theController );
|
||
|
|
||
|
void draw( Label theLabel , PGraphics theGraphics , int theX , int theY , int theW , int theH );
|
||
|
|
||
|
int getWidth( );
|
||
|
|
||
|
int getHeight( );
|
||
|
|
||
|
int getOverflow( );
|
||
|
|
||
|
String getTextFormatted( );
|
||
|
}
|
||
|
|
||
|
class SinglelineTextfield extends SinglelineLabel {
|
||
|
|
||
|
public String getTextFormatted( ) {
|
||
|
return _myText;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class SinglelineLabel implements Labeltype {
|
||
|
|
||
|
private void align( PGraphics theGraphics , int theAlignX , int theAlignY , int theW , int theH ) {
|
||
|
int x = 0;
|
||
|
int y = 0;
|
||
|
switch ( theAlignX ) {
|
||
|
case ( ControlP5.CENTER ):
|
||
|
x = ( theW - _myFontLabel.getWidth( ) ) / 2;
|
||
|
break;
|
||
|
case ( ControlP5.LEFT ):
|
||
|
x = _myPaddingX;
|
||
|
break;
|
||
|
case ( ControlP5.RIGHT ):
|
||
|
x = theW - _myFontLabel.getWidth( ) - _myPaddingX;
|
||
|
break;
|
||
|
case ( ControlP5.LEFT_OUTSIDE ):
|
||
|
x = -_myFontLabel.getWidth( ) - _myPaddingX;
|
||
|
break;
|
||
|
case ( ControlP5.RIGHT_OUTSIDE ):
|
||
|
x = theW + _myPaddingX;
|
||
|
break;
|
||
|
}
|
||
|
switch ( theAlignY ) {
|
||
|
case ( ControlP5.CENTER ):
|
||
|
y = theH / 2 + _myFontLabel.getTop( ) - _myFontLabel.getCenter( );
|
||
|
break;
|
||
|
case ( ControlP5.TOP ):
|
||
|
y = 0;
|
||
|
break;
|
||
|
case ( ControlP5.BOTTOM ):
|
||
|
y = theH - _myFontLabel.getHeight( ) - 1;
|
||
|
break;
|
||
|
case ( ControlP5.BASELINE ):
|
||
|
y = theH + _myFontLabel.getTop( ) - 1;
|
||
|
break;
|
||
|
case ( ControlP5.BOTTOM_OUTSIDE ):
|
||
|
y = theH + _myPaddingY;
|
||
|
break;
|
||
|
case ( ControlP5.TOP_OUTSIDE ):
|
||
|
y = -_myFontLabel.getHeight( ) - _myPaddingY;
|
||
|
break;
|
||
|
}
|
||
|
theGraphics.translate( x , y );
|
||
|
}
|
||
|
|
||
|
@Override public void draw( Label theLabel , PGraphics theGraphics , int theX , int theY , int theW , int theH ) {
|
||
|
_myFontLabel.adjust( theGraphics , theLabel );
|
||
|
theGraphics.pushMatrix( );
|
||
|
align( theGraphics , alignX , alignY , theW , theH );
|
||
|
theLabel.draw( theGraphics , theX , theY );
|
||
|
theGraphics.popMatrix( );
|
||
|
}
|
||
|
|
||
|
@Override public void draw( Label theLabel , PGraphics theGraphics , int theX , int theY , ControllerInterface< ? > theController ) {
|
||
|
draw( theLabel , theGraphics , theX , theY , theController.getWidth( ) , theController.getHeight( ) );
|
||
|
}
|
||
|
|
||
|
@Override public int getWidth( ) {
|
||
|
return isFixedSize ? _myWidth : _myFontLabel.getWidth( );
|
||
|
}
|
||
|
|
||
|
@Override public int getHeight( ) {
|
||
|
return _myFontLabel.getHeight( );
|
||
|
}
|
||
|
|
||
|
@Override public int getOverflow( ) {
|
||
|
return -1;
|
||
|
}
|
||
|
|
||
|
@Override public String getTextFormatted( ) {
|
||
|
return ( isToUpperCase ? _myText.toUpperCase( ) : _myText );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class MultilineLabel implements Labeltype {
|
||
|
|
||
|
@Override public void draw( Label theLabel , PGraphics theGraphics , int theX , int theY , int theW , int theH ) {
|
||
|
_myFontLabel.adjust( theGraphics , theLabel );
|
||
|
theLabel.draw( theGraphics , theX , theY );
|
||
|
}
|
||
|
|
||
|
@Override public void draw( Label theLabel , PGraphics theGraphics , int theX , int theY , ControllerInterface< ? > theController ) {
|
||
|
_myFontLabel.adjust( theGraphics , theLabel );
|
||
|
theLabel.draw( theGraphics , theX , theY );
|
||
|
}
|
||
|
|
||
|
@Override public int getWidth( ) {
|
||
|
return _myWidth;
|
||
|
}
|
||
|
|
||
|
@Override public int getHeight( ) {
|
||
|
return _myHeight;
|
||
|
}
|
||
|
|
||
|
@Override public int getOverflow( ) {
|
||
|
return _myFontLabel.getOverflow( );
|
||
|
}
|
||
|
|
||
|
@Override public String getTextFormatted( ) {
|
||
|
return ( isToUpperCase ? _myText.toUpperCase( ) : _myText );
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|