2018年3月28日

utils.js

共通 JavaScript 変数と関数


utils.js:

.pragma library

const trolltechGreen = Qt.rgba(141/255, 192/255, 48/255)
const trolltechPurple = Qt.rgba(131/255, 124/255, 172/255)

const buttonTextColor = Qt.rgba(0.0, 0.47843137254902, 1.0, 1.0)

function colorName(color) {
    const tos = Object.prototype.toString;

    function formatElement(e) {
        return ("00" + Math.round(255*e).toString(16)).slice(-2);
    }

    const typeString = tos.call(color);
    const typeName = typeString.match(/[a-z]+/gi)[1];
    if (typeName === "String") {
        return "";
    }

    const r = formatElement(color.r);
    const g = formatElement(color.g);
    const b = formatElement(color.b);
    const a = formatElement(color.a);

    return "#%1%2%3%4".arg(a).arg(r).arg(g).arg(b);
}

const monoFont = function() {
    if (Qt.platform.os == "linux") {
        return Qt.font({ family: "DejaVuSansMono" });
    } else if (Qt.platform.os == "windows") {
        return Qt.font({ family: "Lucida Console" });
    } else if (Qt.platform.os == "osx") {
        return Qt.font({ family: "Osaka", styleName: "Regular-Mono" });
    } else {
        return Qt.font({ family: "Lucida Console" });
    }
}();

function grayFor(color) {
    return ((255 * color.r * 11 + 255 * color.g * 16 + 255 * color.b * 5) / 32) / 255;
}

function textColorFor(aBackgroundColor) {
    return grayFor(aBackgroundColor) > 0.5 ? "black" : "white";
}

function randomNumberBetween(first, last) {
    return first + Math.floor(Math.random() * (last - first + 1));
}

function classNameOf(object) {
    return object.toString().replace(/\(.*$/, "");
}

var qtVersionNumber = function() {
    const component = Qt.application.version.split(".");
    return Number(component[0]+ ("0" + component[1]).substring(-2) + ("0" + component[2]).substring(-2));
}();

function dumpObjectTree(object) {
    function traverse(object, level) {
        if (!object.children) {
            return;
        }

        for (var index in object.children) {
            var line = "";
            for (var _ = 0; _ < level; ++_) {
                line += "    ";
            }
            const child = object.children[index];
            line += classNameOf(child);
            if (child.objectName) {
                line += " (%1)".arg(child.objectName);
            }
            print(line)
            traverse(child, level + 1);
        }
    }

    traverse(object, 0);
}

説明


変数の説明

trolltechGreen

Trolltech の緑色。

trolltechPurple

Trolltech の紫色。

buttonTextColor

ボタンテキスト色。

monoFont

各プラットフォームでの代表的な固定幅フォント名。

qtVersionNumber

Qt のバージョンナンバーを MNNPP 形式の整数で保持する。Qt 5.8.1 ならば 50801、Qt 5.9 ならば 50900。

関数の説明

String colorName(color color)

色名のアルファ値を省略せずに常に #aarrggbb 形式の文字列で返す。

Number grayFor(color color)

指定された色をグレイ化する。Qt C++ の qGray() と同じ。

String textColorFor(color aBackgroundColor)

指定された背景色に対してはっきり見えるテキスト色を "white" か "black" で返す。

Number randomNumberBetween(int first, int last)

first を下限、last を上限として乱数を返す。

String classNameOf(QObject object)

QML オブジェクトの C++ クラス名を返す。

dumpObjectTree(object)

ビジュアルツリー構造を表示する。

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。