1

このwiki 記事(v1.5.* 用のもの) から素晴らしい WMを取得した次のバイナリ クロックがあります。

binClock = wibox.widget.base.make_widget()
binClock.radius = 1.5
binClock.shift = 1.8
binClock.farShift = 2
binClock.border = 1
binClock.lineWidth = 1
binClock.colorActive = beautiful.bg_focus 

binClock.fit = function(binClock, width, height)
    local size = math.min(width, height)
    return 6 * 2 * binClock.radius + 5 * binClock.shift + 2 * binClock.farShift + 2 * binClock.border + 2 * binClock.border, size
end

binClock.draw = function(binClock, wibox, cr, width, height)
    local curTime = os.date("*t")

    local column = {}
    table.insert(column, string.format("%04d", binClock:dec_bin(string.sub(string.format("%02d", curTime.hour), 1, 1))))
    table.insert(column, string.format("%04d", binClock:dec_bin(string.sub(string.format("%02d", curTime.hour), 2, 2))))
    table.insert(column, string.format("%04d", binClock:dec_bin(string.sub(string.format("%02d", curTime.min), 1, 1))))
    table.insert(column, string.format("%04d", binClock:dec_bin(string.sub(string.format("%02d", curTime.min), 2, 2))))
    table.insert(column, string.format("%04d", binClock:dec_bin(string.sub(string.format("%02d", curTime.sec), 1, 1))))
    table.insert(column, string.format("%04d", binClock:dec_bin(string.sub(string.format("%02d", curTime.sec), 2, 2))))

    local bigColumn = 0
    for i = 0, 5 do
        if math.floor(i / 2) > bigColumn then
            bigColumn = bigColumn + 1
        end
        for j = 0, 3 do
            if string.sub(column[i + 1], j + 1, j + 1) == "0" then 
                active = false 
            else 
                active = true 
            end 
            binClock:draw_point(cr, bigColumn, i, j, active)
        end
    end
end

binClock.dec_bin = function(binClock, inNum)
    inNum = tonumber(inNum)
    local base, enum, outNum, rem = 2, "01", "", 0
    while inNum > (base - 1) do
        inNum, rem = math.floor(inNum / base), math.fmod(inNum, base)
        outNum = string.sub(enum, rem + 1, rem + 1) .. outNum
    end
    outNum = inNum .. outNum
    return outNum
end

binClock.draw_point = function(binClock, cr, bigColumn, column, row, active)
    cr:arc(binClock.border + column * (2 * binClock.radius + binClock.shift) + bigColumn * binClock.farShift + binClock.radius,
        binClock.border + row * (2 * binClock.radius + binClock.shift) + binClock.radius, 2, 0, 2 * math.pi)
    if active then
        cr:set_source_rgba(0, 0.5, 0, 1)
    else
        cr:set_source_rgba(0.5, 0.5, 0.5, 1)
    end
    cr:fill()
end

binClocktimer = timer { timeout = 1 }
binClocktimer:connect_signal("timeout", function() binClock:emit_signal("widget::updated") end)
binClocktimer:start()

まず、何かがデフォルトで Lua にまだ含まれていない場合、それはこれが awesome の構成ファイルで使用されるためです。:)

OK、実際に必要なのはガイダンスです。私は現在、Lua にあまり詳しくないので、学ぶことができるように、いくつかのガイダンスを尋ねるだけです。:)

OK、最初に、このコードは通常のバイナリ クロックを出力しますが、通常のバイナリ クロックの場合のように、ドットの 23、34、34 の設定ではなく、すべての列に 4 つのドット (44、44、44) があります。このコードでそれを制御しているのは何ですか? 私はそれで支払うことができるように。

次に、色を制御するものは何ですか? 今は灰色の背景とかなり濃い緑色ですが、両方を明るくしたいと思います。

平滑化を制御するものは何ですか? 現在、円を出力していますが、代わりに正方形を出力するとどうなるかを確認したいと考えています。

私が助けを必要としているのはこれだけです。必要なもののコードとドキュメントを教えていただければ、それで十分です。:)

また、誰かがコメントを追加するのに十分親切であれば、それも素晴らしいでしょう. 非常に詳細なコメントである必要はありませんが、少なくとも、それぞれが何をするかについてのアイデアを提供するところまでです。:)

編集:

色を変更するものを見つけたので、それを理解しました。最初の変数はどれも、それが正方形か円かを制御しません。:)

4

1 に答える 1

1

draw_point 関数はドットを描画します。

描画関数の 2 つのループは、出力を作成するものであり、列がどこから来るかです。23/34/34 のレイアウトを行うには、外側のループのカウンターに基づいて最初の X ポイントをスキップする内側のループを変更する必要があります。

于 2013-07-02T20:15:35.557 に答える