Notify -osd - altera a barra de notificação de volume / brilho

2

Estou executando o Ubuntu 14.10 e descobri que é possível alterar os ícones padrão usados para notificações (basicamente adicionando notification-audio-volume-high.svg etc. ao seu tema atual (ver captura de tela))

Embora isso seja ótimo, fiquei me perguntando se é possível alterar a aparência da barra (aquela que mostra qual é o valor do brilho / volume na bolha de notificação) para torná-la mais parecida com o ícone à esquerda.

Existem alguns ícones armazenados para esta barra? Existe algum lugar em um arquivo XML que descreve sua aparência?

Obrigado

    
por wa4557 06.12.2014 / 11:19

1 resposta

1

Ao examinar o conteúdo do pacote, ele parece estar codificado no daemon. É chamado de medidor . Você precisa reconstruí-lo.

  1. Obter fonte:

    apt-get source notify-osd
    sudo apt-get build-dep notify-osd
    cd notify-osd-0.9.35+14.04.20140213/
    
  2. Modifique as coisas de que você precisa em src/default.c , tamanhos e amp; limites de tamanho

    #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 , função que o desenha.

    // 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. Reconstrua o pacote deb

    debuild -us -uc
    sudo dpkg --force-depends -i ../notify-osd_0.9.35+14.04.20140213-0ubuntu1_amd64.deb
    

Exemplo:

  1. Cor, experimente este exemplo em vermelho, pontos de gradiente: RGB (0,9f, 0,6f, 0,6f), (0,5f, 0,3f, 0,3f) & amp; (0.4f, 0.2f, 0.2f)

    Na função bubble.c , _draw_value_indicator() abaixo de // draw value-bar :

            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);
    

    Veja cairo_pattern_add_color_stop_rgba () em Cairo doc's.

    Comente as instruções de desenho de contorno usando /* & amp; */ , então não há contorno preto, bar_radius = outline_height / 2; para barra bem arredondada.

    // 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. Tamanho para 1.2f , para ter boa aparência com o ícone

    #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. Aqui porque foi cortado, deve ser um bug.

    Em bubble.c , em vez de EM2PIXELS (defaults_get_icon_size (d), d) / 5.0f , deve usar EM2PIXELS (defaults_get_gauge_size (d), d) para definir a altura da área de desenho para o medidor.

    Substitua essa linha:

    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);
    

    para:

    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);
    

por user.dz 05.01.2015 / 09:58