6 changed files with 128 additions and 4 deletions
@ -0,0 +1,89 @@ |
|||||
|
package com.sparrowwallet.sparrow.control; |
||||
|
|
||||
|
import com.sparrowwallet.drongo.protocol.ScriptChunk; |
||||
|
import javafx.beans.property.SimpleStringProperty; |
||||
|
import javafx.beans.property.StringProperty; |
||||
|
import javafx.event.EventHandler; |
||||
|
import javafx.geometry.Point2D; |
||||
|
import javafx.scene.Cursor; |
||||
|
import javafx.scene.control.Label; |
||||
|
import javafx.scene.effect.DropShadow; |
||||
|
import javafx.scene.input.MouseEvent; |
||||
|
import javafx.scene.layout.StackPane; |
||||
|
import javafx.scene.shape.Rectangle; |
||||
|
import javafx.scene.text.Font; |
||||
|
import javafx.scene.text.Text; |
||||
|
import javafx.stage.Popup; |
||||
|
import org.fxmisc.richtext.event.MouseOverTextEvent; |
||||
|
import org.fxmisc.richtext.model.TwoDimensional; |
||||
|
|
||||
|
import java.time.Duration; |
||||
|
|
||||
|
import static org.fxmisc.richtext.model.TwoDimensional.Bias.Backward; |
||||
|
|
||||
|
public class TextDecoration extends StackPane { |
||||
|
private StringProperty label = new SimpleStringProperty(); |
||||
|
|
||||
|
private Rectangle rectangle; |
||||
|
private Text text; |
||||
|
|
||||
|
public TextDecoration(String label, String description, String styleClass) { |
||||
|
rectangle = new Rectangle(); |
||||
|
rectangle.setArcHeight(10); |
||||
|
rectangle.setArcWidth(10); |
||||
|
rectangle.getStyleClass().add("text-decoration-box"); |
||||
|
|
||||
|
DropShadow drop = new DropShadow(); |
||||
|
drop.setWidth(2); |
||||
|
drop.setHeight(2); |
||||
|
drop.setOffsetX(1); |
||||
|
drop.setOffsetY(1); |
||||
|
drop.setRadius(2); |
||||
|
rectangle.setEffect(drop); |
||||
|
|
||||
|
text = new Text(label); |
||||
|
text.setFont(Font.getDefault()); |
||||
|
text.getStyleClass().add("text-decoration-label"); |
||||
|
|
||||
|
if(styleClass != null) { |
||||
|
rectangle.getStyleClass().add(styleClass); |
||||
|
} |
||||
|
|
||||
|
getChildren().addAll(rectangle, text); |
||||
|
|
||||
|
this.labelProperty().addListener((ob, o, n) -> { |
||||
|
// expand the rectangle
|
||||
|
double width = TextUtils.computeTextWidth(text.getFont(), this.getLabel(), 0.0D) + 2; |
||||
|
rectangle.setWidth(width); |
||||
|
rectangle.setHeight(text.getFont().getSize()); |
||||
|
}); |
||||
|
|
||||
|
setLabel(label); |
||||
|
|
||||
|
Popup popup = new Popup(); |
||||
|
Label popupMsg = new Label(); |
||||
|
popupMsg.getStyleClass().add("tooltip"); |
||||
|
popup.getContent().add(popupMsg); |
||||
|
|
||||
|
text.setOnMouseEntered(event -> { |
||||
|
popupMsg.setText(description); |
||||
|
popup.show(this, event.getScreenX(), event.getScreenY() + 10); |
||||
|
}); |
||||
|
text.setOnMouseExited(event -> { |
||||
|
popup.hide(); |
||||
|
}); |
||||
|
text.setCursor(Cursor.DEFAULT); |
||||
|
} |
||||
|
|
||||
|
public final StringProperty labelProperty() { |
||||
|
return label; |
||||
|
} |
||||
|
|
||||
|
public final String getLabel() { |
||||
|
return label.get(); |
||||
|
} |
||||
|
|
||||
|
public final void setLabel(String value) { |
||||
|
this.label.set(value); |
||||
|
} |
||||
|
} |
Loading…
Reference in new issue