All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.guigarage.flatterfx.emoji.EmojiFactory Maven / Gradle / Ivy

The newest version!
package com.guigarage.flatterfx.emoji;

import java.util.ArrayList;
import java.util.List;

import javafx.geometry.VPos;
import javafx.scene.Node;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.text.Text;
import javafx.scene.text.TextFlow;

import com.guigarage.flatterfx.controls.RichTextFlow;
import com.guigarage.flatterfx.emoji.controls.EmojiIconView;

public class EmojiFactory {

	private static EmojiFactory instance;

	private EmojiFactory() {
	}

	public static EmojiFactory getInstance() {
		if (instance == null) {
			instance = new EmojiFactory();
		}
		return instance;
	}

	public List createChildrenForTextFlow(String text) {
		return createChildrenForTextFlow(text, 64.0);
	}

	public List createChildrenForTextFlow(String text, double size) {
		List ret = new ArrayList();
		Text currentText = null;
		for (int i = 0; i < text.length(); i++) {
			int codePoint = text.codePointAt(i);

			if (codePoint >= 0xF300 && codePoint <= 0xF6FF) {
				currentText = null;
				ret.add(createEmojiView(codePoint, size));
			} else {
				if (currentText == null) {
					currentText = new Text();
					currentText.getStyleClass().add("emoji-text");
					currentText.setTextOrigin(VPos.CENTER);
					ret.add(currentText);
				}
				currentText.setText(currentText.getText() + text.charAt(i));
			}
		}
		return ret;
	}

	public TextFlow create(String text) {
		return create(text, 64.0);
	}

	public TextFlow create(String text, double size) {
		TextFlow flow = new RichTextFlow();
		flow.getChildren().addAll(createChildrenForTextFlow(text, size));
		return flow;
	}

	public ImageView createEmojiView(int codePoint) {
		return createEmojiView(codePoint, 64.0);
	}

	public ImageView createEmojiView(Emoji emoji) {
		return createEmojiView(emoji.getCodePoint(), 64.0);
	}

	public ImageView createEmojiView(int codePoint, double size) {
		return createEmojiView(Emoji.getByCodePoint(codePoint), size);
	}

	public ImageView createEmojiView(Emoji emoji, double size) {
		ImageView view = new EmojiIconView(emoji);
		view.setFitHeight(size);
		view.setFitWidth(size);
		return view;
	}

	public Image createEmojiImage(int codePoint) {
		return new Image(EmojiFactory.class.getResource(
				"1" + Integer.toHexString(codePoint) + ".png").toString());
	}

	public Image createEmojiImage(Emoji emoji) {
		return createEmojiImage(emoji.getCodePoint());
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy