Texto+

Prévia do widget

Este widget serve para criar uma caixa de texto customizada, com mais funções de personalização que a nativa do StreamElements, como possibilidade de adicionar fontes customizadas e contorno nas letras.
Agradecimentos especiais para a Dabs, do Pra Quem Gosta, por me permitir publicar este widget que eu fiz pra uso dela ^^

Te ajudei? Me manda um cafézinho ^^

[email protected]

Índice:

Guia de configuração

Antes de começar, se você não sabe instalar um widget no StreamElements, veja aqui como instalar.

Mensagem

Nesse campo você vai digitar o texto que vai aparecer na tela. Entretanto, uma das funções do Texto+ é permitir alterar esse texto temporariamente direto pelo OBS Studio, pela função de interagir. Assim que o overlay for atualizado, o texto voltará ao conteúdo original.

Um exemplo de caso de uso seria:
Caso você receba convidados com frequência no seu canal, você pode alterar rapidamente o nome que está no overlay, sem logar no StreamElements.

Fonte

Aqui você escolhe qual a fonte do texto. Caso você tenha um arquivo de fonte baixado e queira utilizar, renomeie a extensão do arquivo para ".mp3" e carregue como se fosse um áudio.

Formatação

Aqui você configura a formatação do seu texto, como o nível do negrito, tamanho, alinhamento, cor, entre outros.

Contorno

Aqui você configura se seu texto terá algum contorno em volta, e a cor. Não recomendo utilizar contornos muito grandes, pois as bordas tendem a ficar levemente quebradas.

Códigos

Veja aqui como instalar um widget customizado no StreamElements.

HTML

<body
    data-customFontCheckbox="{{customFontCheckbox}}"
    data-italic="{{fontItalic}}"
    data-strokeSize="{{strokeSize}}"
    >
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link href="https://fonts.googleapis.com/css2?family={{googleFont}}:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap" rel="stylesheet">

    <textarea id="main" value="{{message}}" oninput="txtChange(this)">{{message}}</textarea>
    <textarea id="border" value="{{message}}">{{message}}</textarea>

</body>

CSS

:root {
    --fontWeigth: {{fontWeigth}};
    --fontColor: {{fontColor}};
    --fontSize: {{fontSize}}px;
    --googleFont: '{{googleFont}}';
    --textAlign: {{textAlign}};
    --lineHeight: {{lineHeight}};
    --strokeSize: {{strokeSize}};
    --strokeColor: {{strokeColor}};
}

@font-face {
    font-family: customFont;
    src: url("{{customFontLink}}")
}

body {
    position: relative;
    overflow: hidden;
    margin: 0;
    padding: 0;
}

textarea {
    position: absolute;
    width: 100%;
    height: 100%;
    box-sizing: border-box;
    padding: calc(var(--strokeSize) * var(--fontSize) * 0.005);

    font-size: var(--fontSize);
    font-family: var(--googleFont);
    line-height: var(--lineHeight);
    text-align: var(--textAlign);
    font-weight: var(--fontWeigth);
    color: var(--fontColor);

    background: none;
    border: none;
    resize: none;
    overflow: hidden;
    outline: 0;

    &::placeholder {
        color: var(--fontColor);
        opacity: 100%!important;
    }

    &#main {
        z-index: 10;
    }

    &#border {
        z-index: 1;
        text-shadow: 
            calc(var(--strokeSize) * var(--fontSize) * -0.005) calc(var(--strokeSize) * var(--fontSize) * -0.005) 0 var(--strokeColor),
            0 calc(var(--strokeSize) * var(--fontSize) * -0.005) 0 var(--strokeColor),
            calc(var(--strokeSize) * var(--fontSize) * 0.005) calc(var(--strokeSize) * var(--fontSize) * -0.005) 0 var(--strokeColor),
            calc(var(--strokeSize) * var(--fontSize) * 0.005) 0 0 var(--strokeColor),
            calc(var(--strokeSize) * var(--fontSize) * 0.005) calc(var(--strokeSize) * var(--fontSize) * 0.005) 0 var(--strokeColor),
            0 calc(var(--strokeSize) * var(--fontSize) * 0.005) 0 var(--strokeColor),
            calc(var(--strokeSize) * var(--fontSize) * -0.005) calc(var(--strokeSize) * var(--fontSize) * 0.005) 0 var(--strokeColor),
            calc(var(--strokeSize) * var(--fontSize) * -0.005) 0 0 var(--strokeColor);
    }
}

body[data-customFontCheckbox="true"] textarea {
    font-family: customFont;
}

body[data-italic="true"] textarea {
    font-style: italic;
}

body[data-strokeSize="0"] #border {
    display: none;
}

Javascript

function txtChange(html) {
    document.querySelector('#border').value = html.value
}

Fields

{
    "credits1": {
        "type": "checkbox",
        "value": true,
        "label": "Detalhes de como fazer a configuração podem ser encontrados no site toolbox.danifluffy.dev :)",
        "group": "Texto+ | DaniFluffyCat ^^"
    },
    "credits2": {
        "type": "text",
        "label": "Você pode copiar o link abaixo:",
        "value": "toolbox.danifluffy.dev",
        "group": "Texto+ | DaniFluffyCat ^^"
    },
    "message": {
        "group": "Mensagem",
        "type": "text",
        "label": "Mensagem",
        "value": "Seu texto vem aqui"
    },
    "googleFont": {
        "group": "Fonte",
        "type": "googleFont",
        "label": "Selecione a fonte:",
        "value": "Roboto"
    },
    "customFontCheckbox": {
        "group": "Fonte",
        "type": "checkbox",
        "label": "Usar fonte customizada"
    },
    "customFontLink": {
        "group": "Fonte",
        "type": "sound-input",
        "label": "Carregue a fonte customizada (Renomeie a extensão para '.mp3'):"
    },
    "fontWeigth": {
        "group": "Formatação",
        "type": "slider",
        "label": "Nivel de negrito:",
        "value": 300,
        "min": 100,
        "max": 800,
        "step": 100
    },
    "fontItalic": {
        "group": "Formatação",
        "type": "checkbox",
        "label": "Itálico"
    },
    "fontColor": {
        "group": "Formatação",
        "type": "colorpicker",
        "label": "Cor",
        "value": "#000000"
    },
    "fontSize": {
        "group": "Formatação",
        "type": "number",
        "label": "Tamanho:",
        "value": 24,
        "min": 0,
        "max": 1000,
        "step": 1
    },
    "textAlign": {
        "group": "Formatação",
        "type": "dropdown",
        "label": "Alinhamento do texto:",
        "value": "center",
        "options": {
            "left": "Alinhar à esquerda",
            "center": "Alinhar ao centro",
            "right": "Alinhar à direita",
            "justify": "Justificar"
        }
    },
    "lineHeight": {
        "group": "Formatação",
        "type": "number",
        "label": "Altura da linha:",
        "value": 1,
        "min": 0,
        "max": 5,
        "step": 0.1
    },
    "strokeSize": {
        "group": "Contorno",
        "type": "slider",
        "label": "Tamanho do contorno:",
        "value": 0,
        "min": 0,
        "max": 10,
        "step": 0.1
    },
    "strokeColor": {
        "group": "Contorno",
        "type": "colorpicker",
        "label": "Cor do contorno:",
        "value": "#000000"
    }
}

Te ajudei? Me manda um cafézinho ^^

[email protected]