web-dev-qa-db-ja.com

Notify -osd-音量/明るさの通知バーを変更します

Ubuntu 14.10を実行していますが、通知に使用されるデフォルトのアイコンを変更できることがわかりました(基本的にnotification-audio-volume-high.svgなどを現在のテーマに追加(スクリーンショットを参照)

Brightness notify-bubble with custom icon

これは素晴らしいことですが、左側のアイコンのようにするために、バーの外観(通知バブル内の明るさ/音量の値を示すもの)を変更できるかどうか疑問に思っていました。

このバーに保存されているアイコンはどこかにありますか?その外観を記述したXMLファイルはどこかにありますか?

ありがとう

2
wa4557

パッケージの内容を見ると、デーモンでハードコードされているようです。 gauge と呼ばれます。再構築する必要があります。

  1. ソースを取得:

    _apt-get source notify-osd
    Sudo apt-get build-dep notify-osd
    cd notify-osd-0.9.35+14.04.20140213/
    _
  2. 必要なものを変更する
    _src/default.c_、サイズとサイズ制限

    _#define DEFAULT_GAUGE_SIZE           0.625f
    #define DEFAULT_GAUGE_OUTLINE_WIDTH  0.125f
    [...]
            property_gauge_size = g_param_spec_double (
                                    "gauge-size",
                                    "gauge-size",
                                    "Size/height (in em) of gauge/indicator",
                                    0.5f,
                                    1.0f,
    [...]
            property_gauge_outline_width = g_param_spec_double (
                                    "gauge-outline-width",
                                    "gauge-outline-width",
                                    "Width/thickness (in em) of gauge-outline",
                                    0.1f,
                                    0.2f,
    _

    _src/bubble.c_、それを描く関数。

    _// color-, alpha-, radius-, width-, height- and gradient-values were determined
    // by very close obvervation of a SVG-mockup from the design-team
    static void
    _draw_value_indicator (cairo_t* cr,
                           gint     value,             // value to render: 0 - 100
                           gint     start_x,           // top of surrounding rect
                           gint     start_y,           // left of surrounding rect
                           gint     width,             // width of surrounding rect
                           gint     height,            // height of surrounding rect
                           gint     outline_thickness) // outline-thickness
    {
    [...]
    _
  3. Debパッケージを再構築します

    _debuild -us -uc
    Sudo dpkg --force-depends -i ../notify-osd_0.9.35+14.04.20140213-0ubuntu1_AMD64.deb
    _

    modified notify-osd gauge

例:

  1. 色、この例の静かな赤、グラデーションポイントを試してください:RGB(0.9f、0.6f、0.6f)、(0.5f、0.3f、0.3f)&(0.4f、0.2f、0.2f)

    _bubble.c_、_// draw value-bar_の下の_draw_value_indicator()関数:

    _        gradient = cairo_pattern_create_linear (0.0f,
                                                    start_y +
                                                    outline_thickness,
                                                    0.0f,
                                                    start_y +
                                                    outline_height -
                                                    2 * outline_thickness);
            cairo_pattern_add_color_stop_rgba (gradient,
                                               0.0f,
                                               0.9f,
                                               0.6f,
                                               0.6f,
                                               1.0f);
            cairo_pattern_add_color_stop_rgba (gradient,
                                               0.75f,
                                               0.5f,
                                               0.3f,
                                               0.3f,
                                               1.0f);
            cairo_pattern_add_color_stop_rgba (gradient,
                                               1.0f,
                                               0.4f,
                                               0.2f,
                                               0.2f,
                                               1.0f);
    
            cairo_set_source (cr, gradient);
            cairo_fill (cr);
    _

    Cairoドキュメントの cairo_pattern_add_color_stop_rgba() を参照してください。

    _/*_&_*/_を使用してアウトライン描画命令にコメントを付けてください。黒のアウトラインはありません。丸いバーの場合は_bar_radius = outline_height / 2;_です。

    _// draw bar-background
    /*
    cairo_set_line_width (cr, outline_thickness);
    cairo_set_source_rgba (cr, 0.0f, 0.0f, 0.0f, 0.5f);
    draw_round_rect (cr,
    [...]
    cairo_fill (cr);
    cairo_pattern_destroy (gradient);
    */
    //bar_radius = outline_radius;
    bar_radius = outline_height / 2;
    bar_width  = outline_width - 2 * outline_radius;
    //bar_height = outline_height - outline_radius;
    
    // draw value-bar
    _
  2. サイズが_1.2f_になり、アイコンでよく見える

    _#define DEFAULT_GAUGE_SIZE           1.2f
    [...]
        property_gauge_size = g_param_spec_double (
                                "gauge-size",
                                "gauge-size",
                                "Size/height (in em) of gauge/indicator",
                                0.5f,
                                5.0f,
    _
  3. ここでなぜ切り取られたのかは、バグに違いありません。

    _bubble.c_では、代わりにEM2PIXELS (defaults_get_icon_size (d), d) / 5.0fを使用して、EM2PIXELS (defaults_get_gauge_size (d), d)を使用してゲージの描画領域の高さを設定する必要があります。

    その行を置き換えます:

    _void
    _refresh_indicator (Bubble* self)
    {
    [...]
        // create temp. scratch surface
        normal = cairo_image_surface_create (
                CAIRO_FORMAT_ARGB32,
                EM2PIXELS (defaults_get_bubble_width (d), d) -
                3 * EM2PIXELS (defaults_get_margin_size (d), d) -
                EM2PIXELS (defaults_get_icon_size (d), d)
                + 2 * BUBBLE_CONTENT_BLUR_RADIUS,
                EM2PIXELS (defaults_get_icon_size (d), d) / 5.0f
                + 2 * BUBBLE_CONTENT_BLUR_RADIUS);
    _

    に:

    _void
    _refresh_indicator (Bubble* self)
    {
    [...]
        // create temp. scratch surface
        normal = cairo_image_surface_create (
                CAIRO_FORMAT_ARGB32,
                EM2PIXELS (defaults_get_bubble_width (d), d) -
                3 * EM2PIXELS (defaults_get_margin_size (d), d) -
                EM2PIXELS (defaults_get_icon_size (d), d)
                + 2 * BUBBLE_CONTENT_BLUR_RADIUS,
                EM2PIXELS (defaults_get_gauge_size (d), d)
                + 2 * BUBBLE_CONTENT_BLUR_RADIUS);
    _

    example of custom notify-osd gauge

1
user.dz