private void refreshDrawableDisplayNormal() {
        var contentGroup = new HorizontalGroup();
        contentGroup.center().wrap(true).space(5.0f).wrapSpace(5.0f).rowAlign(Align.left);
        contentTable.add(contentGroup).grow();
    
        DrawableData selectedDrawable = null;
        if (property != null) {
            selectedDrawable = atlasData.getDrawable((String) property.value);
        } else if (customProperty != null) {
            selectedDrawable = atlasData.getDrawable((String) customProperty.getValue());
        }
        
        for (var drawable : drawables) {
            Button drawableButton;
        
            if ((property != null || customProperty != null) && drawable.type != DrawableType.FONT) {
                drawableButton = new Button(getSkin(), selectedDrawable == drawable ? "color-base-selected" : "color-base");
                drawableButton.addListener(new ChangeListener() {
                    @Override
                    public void changed(ChangeListener.ChangeEvent event, Actor actor) {
                        result(drawable);
                        hide();
                    }
                });
                drawableButton.addListener(handListener);
            } else {
                drawableButton = new Button(getSkin(), "color-base-static");
            }
            contentGroup.addActor(drawableButton);
        
            Table table = new Table();
            drawableButton.add(table).width(sizes[MathUtils.floor(zoomSlider.getValue())]).height(sizes[MathUtils.floor(zoomSlider.getValue())]);
        
            var subTable = new Table();
            table.add(subTable).growX();
        
            var image = new Image(getSkin(), drawable.type.iconName);
            subTable.add(image).spaceRight(5);
            
            var label = new Label(drawable.type == null ? "error" : drawable.type.formattedName, getSkin());
            subTable.add(label);
            
            if (showingOptions && drawable.type != DrawableType.FONT) {
                //more button
                var button = new Button(getSkin(),  "more");
                subTable.add(button).right().expandX();
                button.addListener(handListener);
                button.addListener(new MoreClickListener(drawable));
                //prevent click from activating parent button.
                button.addListener(new ChangeListener() {
                    @Override
                    public void changed(ChangeEvent event, Actor actor) {
                        event.setBubbles(false);
                    }
                });
            } else {
                subTable.add().expandX();
            }
        
            //preview
            table.row();
            Container bg = new Container();
            bg.setClip(true);
            bg.setBackground(getSkin().getDrawable("white"));
            bg.setColor(drawable.bgColor);
        
            image = new Image(atlasData.getDrawablePairs().get(drawable));
            if (MathUtils.isEqual(zoomSlider.getValue(), 1)) {
                image.setScaling(Scaling.fit);
                bg.fill(false);
            } else {
                image.setScaling(Scaling.stretch);
                bg.fill();
            }
            bg.setActor(image);
            table.add(bg).grow();
        
            //name
            table.row();
            label = new Label(drawable.name, getSkin());
            label.setEllipsis("...");
            label.setEllipsis(true);
            label.setAlignment(Align.center);
            table.add(label).colspan(6).growX().width(sizes[MathUtils.floor(zoomSlider.getValue())]);
        
            //Tooltip
            Tooltip toolTip = (Main.makeTooltip(drawable.name, tooltipManager, getSkin()));
            label.addListener(toolTip);
        }
    }
Recreates the drawables array only including visible drawables.
core/src/com/ray3k/skincomposer/dialog/DialogDrawables.java