Search in sources :

Example 6 with FontData

use of com.ray3k.skincomposer.data.FontData in project skin-composer by raeleus.

the class DialogFonts method produceAtlas.

private boolean produceAtlas() {
    try {
        if (atlas != null) {
            atlas.dispose();
            atlas = null;
        }
        if (!main.getAtlasData().atlasCurrent) {
            main.getAtlasData().writeAtlas();
            main.getAtlasData().atlasCurrent = true;
        }
        atlas = main.getAtlasData().getAtlas();
        for (FontData font : fonts) {
            BitmapFontData fontData = new BitmapFontData(font.file, false);
            Array<TextureRegion> regions = new Array<>();
            for (String path : fontData.imagePaths) {
                FileHandle file = new FileHandle(path);
                if (!file.exists()) {
                    file = fontData.fontFile.sibling(fontData.fontFile.nameWithoutExtension() + ".png");
                }
                TextureRegion region = atlas.findRegion(file.nameWithoutExtension());
                if (region != null) {
                    regions.add(region);
                }
            }
            fontMap.put(font, new BitmapFont(fontData, regions, true));
        }
        return true;
    } catch (Exception e) {
        Gdx.app.error(getClass().getName(), "Error while attempting to generate drawables.", e);
        main.getDialogFactory().showDialogError("Drawables Error...", "Error while attempting to generate drawables. Open log?");
        return false;
    }
}
Also used : Array(com.badlogic.gdx.utils.Array) TextureRegion(com.badlogic.gdx.graphics.g2d.TextureRegion) BitmapFontData(com.badlogic.gdx.graphics.g2d.BitmapFont.BitmapFontData) FileHandle(com.badlogic.gdx.files.FileHandle) FreeTypeFontData(com.ray3k.skincomposer.data.FreeTypeFontData) FontData(com.ray3k.skincomposer.data.FontData) BitmapFontData(com.badlogic.gdx.graphics.g2d.BitmapFont.BitmapFontData) BitmapFont(com.badlogic.gdx.graphics.g2d.BitmapFont)

Example 7 with FontData

use of com.ray3k.skincomposer.data.FontData in project skin-composer by raeleus.

the class DialogFactory method recentFiles.

public void recentFiles() {
    SelectBox<RecentFile> selectBox = new SelectBox(main.getSkin());
    Dialog dialog = new Dialog("Recent Files...", main.getSkin(), "bg") {

        @Override
        protected void result(Object object) {
            super.result(object);
            if ((boolean) object) {
                if (selectBox.getSelected() != null) {
                    FileHandle file = selectBox.getSelected().getFileHandle();
                    if (file.exists()) {
                        main.getProjectData().load(file);
                        Array<DrawableData> drawableErrors = main.getProjectData().verifyDrawablePaths();
                        Array<FontData> fontErrors = main.getProjectData().verifyFontPaths();
                        if (drawableErrors.size > 0 || fontErrors.size > 0) {
                            main.getDialogFactory().showDialogPathErrors(drawableErrors, fontErrors);
                        }
                    }
                }
            }
        }
    };
    dialog.getTitleTable().getCells().first().padLeft(5.0f);
    Array<RecentFile> recentFiles = main.getProjectData().getRecentFiles();
    recentFiles.reverse();
    selectBox.setItems(recentFiles);
    selectBox.addListener(main.getHandListener());
    selectBox.getList().addListener(main.getHandListener());
    dialog.text("Select a file to open");
    dialog.getContentTable().row();
    dialog.getContentTable().add(selectBox).padLeft(10.0f).padRight(10.0f).growX();
    dialog.getContentTable().getCells().first().pad(10.0f);
    dialog.getButtonTable().defaults().padBottom(10.0f).minWidth(50.0f);
    dialog.button("OK", true).key(Input.Keys.ENTER, true);
    dialog.button("Cancel", false).key(Input.Keys.ESCAPE, false);
    dialog.getButtonTable().getCells().first().getActor().addListener(main.getHandListener());
    dialog.getButtonTable().getCells().get(1).getActor().addListener(main.getHandListener());
    dialog.show(main.getStage());
}
Also used : DrawableData(com.ray3k.skincomposer.data.DrawableData) SelectBox(com.badlogic.gdx.scenes.scene2d.ui.SelectBox) Dialog(com.badlogic.gdx.scenes.scene2d.ui.Dialog) FileHandle(com.badlogic.gdx.files.FileHandle) FreeTypeFontData(com.ray3k.skincomposer.data.FreeTypeFontData) FontData(com.ray3k.skincomposer.data.FontData) RecentFile(com.ray3k.skincomposer.data.ProjectData.RecentFile)

Example 8 with FontData

use of com.ray3k.skincomposer.data.FontData in project skin-composer by raeleus.

the class DialogFonts method fontNameDialog.

private void fontNameDialog(Array<FileHandle> files, int index) {
    if (index < files.size) {
        try {
            final FileHandle fileHandle = files.get(index);
            final TextField textField = new TextField(FontData.filter(fileHandle.nameWithoutExtension()), getSkin());
            final Dialog nameDialog = new Dialog("Enter a name...", getSkin(), "bg") {

                @Override
                protected void result(Object object) {
                    if ((Boolean) object) {
                        String name = textField.getText();
                        addFont(name, fileHandle);
                    }
                }

                @Override
                public boolean remove() {
                    fontNameDialog(files, index + 1);
                    return super.remove();
                }
            };
            nameDialog.getTitleTable().padLeft(5.0f);
            nameDialog.button("OK", true);
            nameDialog.button("Cancel", false);
            nameDialog.getButtonTable().getCells().first().getActor().addListener(main.getHandListener());
            nameDialog.getButtonTable().getCells().get(1).getActor().addListener(main.getHandListener());
            final TextButton button = (TextButton) nameDialog.getButtonTable().getCells().first().getActor();
            nameDialog.getButtonTable().padBottom(15.0f);
            textField.setTextFieldListener((TextField textField1, char c) -> {
                if (c == '\n') {
                    if (!button.isDisabled()) {
                        String name1 = textField1.getText();
                        if (addFont(name1, fileHandle)) {
                            nameDialog.hide();
                        }
                    }
                    main.getStage().setKeyboardFocus(textField1);
                }
            });
            textField.addListener(main.getIbeamListener());
            nameDialog.getContentTable().defaults().padLeft(10.0f).padRight(10.0f).padTop(5.0f);
            nameDialog.text("Please enter a name for the new font: ");
            nameDialog.getContentTable().row();
            nameDialog.getContentTable().add(textField).growX();
            nameDialog.getContentTable().row();
            nameDialog.text("Preview:");
            nameDialog.getContentTable().row();
            LabelStyle previewStyle = new LabelStyle();
            previewStyle.font = new BitmapFont(fileHandle);
            Table table = new Table(getSkin());
            table.setBackground("white");
            BitmapFontData bitmapFontData = new BitmapFontData(fileHandle, false);
            if (Utils.brightness(Utils.averageEdgeColor(new FileHandle(bitmapFontData.imagePaths[0]))) > .5f) {
                table.setColor(Color.BLACK);
            } else {
                table.setColor(Color.WHITE);
            }
            table.add(new Label("Lorem Ipsum", previewStyle)).pad(5.0f);
            nameDialog.getContentTable().add(table);
            nameDialog.key(Keys.ESCAPE, false);
            button.setDisabled(!FontData.validate(textField.getText()));
            textField.addListener(new ChangeListener() {

                @Override
                public void changed(ChangeListener.ChangeEvent event, Actor actor) {
                    boolean disable = !FontData.validate(textField.getText());
                    if (!disable) {
                        for (FontData data : main.getJsonData().getFonts()) {
                            if (data.getName().equals(textField.getText())) {
                                disable = true;
                                break;
                            }
                        }
                    }
                    button.setDisabled(disable);
                }
            });
            nameDialog.setColor(1.0f, 1.0f, 1.0f, 0.0f);
            textField.setFocusTraversal(false);
            if (!Utils.doesImageFitBox(new FileHandle(bitmapFontData.imagePaths[0]), maxTextureWidth, maxTextureHeight)) {
                showAddFontSizeError(fileHandle.nameWithoutExtension());
            } else {
                nameDialog.show(getStage());
                getStage().setKeyboardFocus(textField);
                textField.selectAll();
            }
        } catch (Exception e) {
            Gdx.app.error(getClass().getName(), "Error creating preview font from file", e);
            main.getDialogFactory().showDialogError("Preview Error...", "Error creating preview font from file. Check file paths.\n\nOpen log?");
        }
    } else {
        // after all fonts are processed
        if (main.getProjectData().areResourcesRelative()) {
            main.getProjectData().makeResourcesRelative();
        }
    }
}
Also used : TextButton(com.badlogic.gdx.scenes.scene2d.ui.TextButton) Table(com.badlogic.gdx.scenes.scene2d.ui.Table) BitmapFontData(com.badlogic.gdx.graphics.g2d.BitmapFont.BitmapFontData) FileHandle(com.badlogic.gdx.files.FileHandle) FreeTypeFontData(com.ray3k.skincomposer.data.FreeTypeFontData) FontData(com.ray3k.skincomposer.data.FontData) BitmapFontData(com.badlogic.gdx.graphics.g2d.BitmapFont.BitmapFontData) Label(com.badlogic.gdx.scenes.scene2d.ui.Label) LabelStyle(com.badlogic.gdx.scenes.scene2d.ui.Label.LabelStyle) Dialog(com.badlogic.gdx.scenes.scene2d.ui.Dialog) Actor(com.badlogic.gdx.scenes.scene2d.Actor) TextField(com.badlogic.gdx.scenes.scene2d.ui.TextField) ChangeListener(com.badlogic.gdx.scenes.scene2d.utils.ChangeListener) BitmapFont(com.badlogic.gdx.graphics.g2d.BitmapFont)

Example 9 with FontData

use of com.ray3k.skincomposer.data.FontData in project skin-composer by raeleus.

the class DialogFonts method refreshTable.

public void refreshTable() {
    fontsTable.clear();
    fontsTable.defaults().growX().pad(5.0f);
    if (fonts.size == 0 && freeTypeFonts.size == 0) {
        fontsTable.add(new Label("No fonts have been set!", getSkin()));
    } else {
        if (fonts.size > 0) {
            Label label = new Label("Bitmap Fonts", getSkin(), "required");
            label.setAlignment(Align.center);
            fontsTable.add(label);
            fontsTable.row();
        }
        for (FontData font : fonts) {
            Button button = new Button(getSkin(), "color-base");
            Label label = new Label(font.getName(), getSkin());
            label.setTouchable(Touchable.disabled);
            button.add(label).left();
            button.addListener(main.getHandListener());
            Button renameButton = new Button(getSkin(), "settings-small");
            renameButton.addListener(new ChangeListener() {

                @Override
                public void changed(ChangeListener.ChangeEvent event, Actor actor) {
                    renameDialog(font);
                    event.setBubbles(false);
                }
            });
            renameButton.addListener(new InputListener() {

                @Override
                public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
                    event.setBubbles(false);
                    return true;
                }
            });
            button.add(renameButton).padLeft(15.0f);
            TextTooltip toolTip = new TextTooltip("Rename Font", main.getTooltipManager(), getSkin());
            renameButton.addListener(toolTip);
            LabelStyle style = new LabelStyle();
            style.font = fontMap.get(font);
            style.fontColor = Color.WHITE;
            label = new Label("Lorem Ipsum", style);
            label.setAlignment(Align.center);
            label.setTouchable(Touchable.disabled);
            Table bg = new Table(getSkin());
            bg.setBackground("white");
            BitmapFontData bf = new BitmapFontData(font.file, false);
            if (bf.imagePaths.length > 0) {
                FileHandle file = new FileHandle(bf.imagePaths[0]);
                if (!file.exists()) {
                    file = bf.fontFile.sibling(bf.fontFile.nameWithoutExtension() + ".png");
                }
                if (Utils.brightness(Utils.averageEdgeColor(file)) < .5f) {
                    bg.setColor(Color.WHITE);
                } else {
                    bg.setColor(Color.BLACK);
                }
            }
            bg.add(label).pad(5.0f).grow();
            button.add(bg).padLeft(15).growX();
            Button closeButton = new Button(getSkin(), "delete-small");
            final FontData deleteFont = font;
            closeButton.addListener(new ChangeListener() {

                @Override
                public void changed(ChangeListener.ChangeEvent event, Actor actor) {
                    fonts.removeValue(deleteFont, true);
                    main.getProjectData().setChangesSaved(false);
                    BitmapFontData bitmapFontData = new BitmapFontData(deleteFont.file, false);
                    for (String path : bitmapFontData.imagePaths) {
                        FileHandle imagefile = new FileHandle(path);
                        drawables.removeValue(new DrawableData(imagefile), false);
                    }
                    for (Array<StyleData> datas : main.getJsonData().getClassStyleMap().values()) {
                        for (StyleData data : datas) {
                            for (StyleProperty property : data.properties.values()) {
                                if (property != null && property.type.equals(BitmapFont.class) && property.value != null && property.value.equals(deleteFont.getName())) {
                                    property.value = null;
                                }
                            }
                        }
                    }
                    main.getUndoableManager().clearUndoables();
                    main.getRootTable().refreshStyleProperties(true);
                    main.getRootTable().refreshPreview();
                    event.setBubbles(false);
                    refreshTable();
                }
            });
            closeButton.addListener(new InputListener() {

                @Override
                public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
                    event.setBubbles(false);
                    return true;
                }
            });
            button.add(closeButton).padLeft(5.0f).right();
            toolTip = new TextTooltip("Delete Font", main.getTooltipManager(), getSkin());
            closeButton.addListener(toolTip);
            if (styleProperty == null && customProperty == null) {
                button.setTouchable(Touchable.childrenOnly);
            } else {
                final FontData fontResult = font;
                button.addListener(new ChangeListener() {

                    @Override
                    public void changed(ChangeListener.ChangeEvent event, Actor actor) {
                        result(fontResult);
                        hide();
                    }
                });
            }
            fontsTable.add(button);
            fontsTable.row();
        }
        if (freeTypeFonts.size > 0) {
            Label label = new Label("FreeType Fonts", getSkin(), "required");
            label.setAlignment(Align.center);
            fontsTable.add(label).spaceTop(20.0f);
            fontsTable.row();
        }
        for (FreeTypeFontData font : freeTypeFonts) {
            Button button = new Button(getSkin(), "color-base");
            Label label = new Label(font.name, getSkin());
            label.setTouchable(Touchable.disabled);
            button.add(label).left();
            button.addListener(main.getHandListener());
            Button renameButton = new Button(getSkin(), "settings-small");
            renameButton.addListener(new ChangeListener() {

                @Override
                public void changed(ChangeListener.ChangeEvent event, Actor actor) {
                    freeTypeSettingsDialog(font);
                    event.setBubbles(false);
                }
            });
            renameButton.addListener(new InputListener() {

                @Override
                public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
                    event.setBubbles(false);
                    return true;
                }
            });
            button.add(renameButton).padLeft(15.0f);
            TextTooltip toolTip = new TextTooltip("Rename Font", main.getTooltipManager(), getSkin());
            renameButton.addListener(toolTip);
            LabelStyle style = new LabelStyle();
            style.font = font.bitmapFont;
            style.fontColor = Color.WHITE;
            label = new Label("Lorem Ipsum", style);
            label.setAlignment(Align.center);
            label.setTouchable(Touchable.disabled);
            Table bg = new Table(getSkin());
            bg.setBackground("white");
            bg.add(label).pad(5.0f).grow();
            button.add(bg).padLeft(15).growX();
            Button closeButton = new Button(getSkin(), "delete-small");
            final FreeTypeFontData deleteFont = font;
            closeButton.addListener(new ChangeListener() {

                @Override
                public void changed(ChangeListener.ChangeEvent event, Actor actor) {
                    freeTypeFonts.removeValue(deleteFont, true);
                    main.getProjectData().setChangesSaved(false);
                    for (Array<StyleData> datas : main.getJsonData().getClassStyleMap().values()) {
                        for (StyleData data : datas) {
                            for (StyleProperty property : data.properties.values()) {
                                if (property != null && property.type.equals(BitmapFont.class) && property.value != null && property.value.equals(deleteFont.name)) {
                                    property.value = null;
                                }
                            }
                        }
                    }
                    main.getUndoableManager().clearUndoables();
                    main.getRootTable().refreshStyleProperties(true);
                    main.getRootTable().refreshPreview();
                    event.setBubbles(false);
                    refreshTable();
                }
            });
            closeButton.addListener(new InputListener() {

                @Override
                public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
                    event.setBubbles(false);
                    return true;
                }
            });
            button.add(closeButton).padLeft(5.0f).right();
            toolTip = new TextTooltip("Delete Font", main.getTooltipManager(), getSkin());
            closeButton.addListener(toolTip);
            if (styleProperty == null && customProperty == null) {
                button.setTouchable(Touchable.childrenOnly);
            } else {
                final FreeTypeFontData fontResult = font;
                button.addListener(new ChangeListener() {

                    @Override
                    public void changed(ChangeListener.ChangeEvent event, Actor actor) {
                        result(fontResult);
                        hide();
                    }
                });
            }
            fontsTable.add(button);
            fontsTable.row();
        }
    }
}
Also used : Table(com.badlogic.gdx.scenes.scene2d.ui.Table) BitmapFontData(com.badlogic.gdx.graphics.g2d.BitmapFont.BitmapFontData) FileHandle(com.badlogic.gdx.files.FileHandle) FreeTypeFontData(com.ray3k.skincomposer.data.FreeTypeFontData) FontData(com.ray3k.skincomposer.data.FontData) BitmapFontData(com.badlogic.gdx.graphics.g2d.BitmapFont.BitmapFontData) Label(com.badlogic.gdx.scenes.scene2d.ui.Label) LabelStyle(com.badlogic.gdx.scenes.scene2d.ui.Label.LabelStyle) Array(com.badlogic.gdx.utils.Array) StyleProperty(com.ray3k.skincomposer.data.StyleProperty) DrawableData(com.ray3k.skincomposer.data.DrawableData) TextTooltip(com.badlogic.gdx.scenes.scene2d.ui.TextTooltip) FreeTypeFontData(com.ray3k.skincomposer.data.FreeTypeFontData) InputListener(com.badlogic.gdx.scenes.scene2d.InputListener) TextButton(com.badlogic.gdx.scenes.scene2d.ui.TextButton) Button(com.badlogic.gdx.scenes.scene2d.ui.Button) Actor(com.badlogic.gdx.scenes.scene2d.Actor) ChangeListener(com.badlogic.gdx.scenes.scene2d.utils.ChangeListener) InputEvent(com.badlogic.gdx.scenes.scene2d.InputEvent) StyleData(com.ray3k.skincomposer.data.StyleData)

Example 10 with FontData

use of com.ray3k.skincomposer.data.FontData in project skin-composer by raeleus.

the class DialogFonts method addFont.

private boolean addFont(String name, FileHandle file) {
    if (FontData.validate(name)) {
        try {
            main.getProjectData().setChangesSaved(false);
            FontData font = new FontData(name, file);
            // remove any existing FontData that shares the same name.
            if (fonts.contains(font, false)) {
                FontData deleteFont = fonts.get(fonts.indexOf(font, false));
                BitmapFontData deleteFontData = new BitmapFontData(deleteFont.file, false);
                for (String path : deleteFontData.imagePaths) {
                    FileHandle imagefile = new FileHandle(path);
                    drawables.removeValue(new DrawableData(imagefile), false);
                }
                fonts.removeValue(font, false);
            }
            BitmapFontData bitmapFontData = new BitmapFontData(file, false);
            for (String path : bitmapFontData.imagePaths) {
                DrawableData drawable = new DrawableData(new FileHandle(path));
                drawable.visible = false;
                if (!drawables.contains(drawable, false)) {
                    main.getAtlasData().atlasCurrent = false;
                    drawables.add(drawable);
                }
            }
            produceAtlas();
            fonts.add(font);
            Array<TextureRegion> regions = new Array<>();
            for (String path : bitmapFontData.imagePaths) {
                FileHandle imageFile = new FileHandle(path);
                regions.add(atlas.findRegion(imageFile.nameWithoutExtension()));
            }
            fontMap.put(font, new BitmapFont(bitmapFontData, regions, true));
            sortBySelectedMode();
            refreshTable();
        } catch (Exception e) {
            Gdx.app.error(getClass().getName(), "Error creating font from file", e);
            main.getDialogFactory().showDialogError("Font Error...", "Error creating font from file. Check file paths.\n\nOpen log?");
        }
        return true;
    } else {
        return false;
    }
}
Also used : Array(com.badlogic.gdx.utils.Array) TextureRegion(com.badlogic.gdx.graphics.g2d.TextureRegion) DrawableData(com.ray3k.skincomposer.data.DrawableData) BitmapFontData(com.badlogic.gdx.graphics.g2d.BitmapFont.BitmapFontData) FileHandle(com.badlogic.gdx.files.FileHandle) FreeTypeFontData(com.ray3k.skincomposer.data.FreeTypeFontData) FontData(com.ray3k.skincomposer.data.FontData) BitmapFontData(com.badlogic.gdx.graphics.g2d.BitmapFont.BitmapFontData) BitmapFont(com.badlogic.gdx.graphics.g2d.BitmapFont)

Aggregations

FontData (com.ray3k.skincomposer.data.FontData)14 FreeTypeFontData (com.ray3k.skincomposer.data.FreeTypeFontData)12 FileHandle (com.badlogic.gdx.files.FileHandle)8 BitmapFont (com.badlogic.gdx.graphics.g2d.BitmapFont)7 DrawableData (com.ray3k.skincomposer.data.DrawableData)7 BitmapFontData (com.badlogic.gdx.graphics.g2d.BitmapFont.BitmapFontData)6 TextButton (com.badlogic.gdx.scenes.scene2d.ui.TextButton)6 Array (com.badlogic.gdx.utils.Array)6 Actor (com.badlogic.gdx.scenes.scene2d.Actor)5 Label (com.badlogic.gdx.scenes.scene2d.ui.Label)5 Table (com.badlogic.gdx.scenes.scene2d.ui.Table)5 TextField (com.badlogic.gdx.scenes.scene2d.ui.TextField)5 ChangeListener (com.badlogic.gdx.scenes.scene2d.utils.ChangeListener)5 StyleData (com.ray3k.skincomposer.data.StyleData)5 LabelStyle (com.badlogic.gdx.scenes.scene2d.ui.Label.LabelStyle)4 SelectBox (com.badlogic.gdx.scenes.scene2d.ui.SelectBox)4 Button (com.badlogic.gdx.scenes.scene2d.ui.Button)3 Dialog (com.badlogic.gdx.scenes.scene2d.ui.Dialog)3 ListStyle (com.badlogic.gdx.scenes.scene2d.ui.List.ListStyle)3 ScrollPane (com.badlogic.gdx.scenes.scene2d.ui.ScrollPane)3