Dunst: Barra de progresso como plano de fundo da notificação

Criado em 11 abr. 2017  ·  7Comentários  ·  Fonte: dunst-project/dunst

Ser capaz de usar o valor de %p para preencher o plano de fundo como um progresso seria legal (ou seja, com um valor de progresso de 25%, o quarto esquerdo da notificação pode ser preenchido com mais brilho que o resto)

Feature graphics

Comentários muito úteis

@mid-kid Bem, acho que é a própria definição de "o que é chique". Todos nós temos um gosto diferente. Eu pessoalmente não gosto de ter a largura total em segundo plano. Mas obrigado pelo seu envio. Nunca pensei em mudar a cor do quadro.

Na verdade, o que estou ansioso para pesquisar são algumas opções significativas para dar a todos a capacidade de especificar uma geometria para sua própria barra de progresso.

Todos 7 comentários

Achei que eu veria se eu poderia descobrir como implementar isso sozinho. Eu literalmente nunca escrevi nada em C antes, então não consegui descobrir como adicionar opções de configuração para a cor e outras coisas (agora ele usa uma cor de fundo um pouco mais brilhante), mas eu tenho uma barra de progresso simples funcionando se alguém realmente quer um o suficiente para usar um garfo de baixa qualidade.

Ei, eu testei seu garfo,não respeita a opção shrink . Se o volume for 100 por cento, a barra está, na verdade, em 50 por cento. Parece funcionar bem se shrink não estiver definido. Isso está errado, veja o comentário de acompanhamento.

Também não usaria a altura total da notificação como barra de progresso. Como um hack rápido, usei bg_height/8 e ficou muito mais bonito. (Espero que você use um algoritmo muito mais sofisticado para determinar a altura da barra de progresso.)

A adição de opções deve ser feita em vários arquivos, mas pode ser feita diretamente. Mas não sei se vale a pena adicionar uma opção para isso. IMHO Eu simplesmente adicioná-lo como um novo recurso sem configuração.

É uma ordem simples de bug de ação:

Veja bg_width / 100 * (cl->n->progress - 1) :

Se eu desativar shrink , minhas notificações terão 300px de largura. Então 300/100 == 3 e vezes a barra de progresso, isso determina a largura. Tudo bem.

Se eu ativar shrink , minha notificação com barra de progresso será reduzida para 185px de largura. Aqui está 185/100 == 1 . Na verdade, é 1.85 , mas os bits atrás da vírgula ficam truncados. O erro é quase a metade, o que explica os 50%.

Alterar a ordem (primeiro multiplicando e depois dividindo) resolverá o problema.

@bebehei Obrigado pela ajuda! Atualizei meu garfo. Eu enviaria um PR, mas sinto que pelo menos gostaria de ter uma opção de configuração para ativar/desativar as barras de progresso primeiro ... Acho que vou analisar isso mais tarde e ver se consigo descobrir Fora.

O título desta edição me deu as expectativas erradas sobre o que seu patch fez. Então, decidi que poderia torná-lo mais sofisticado:

Aqui está o patch:

diff --git a/src/x11/x.c b/src/x11/x.c
index 9f7ac20..3430892 100644
--- a/src/x11/x.c
+++ b/src/x11/x.c
@@ -565,14 +565,22 @@ static dimension_t x_render_layout(cairo_t *c, colored_layout *cl, colored_layou
         double bg_half_height = settings.notification_height/2.0;
         int pango_offset = (int) floor(h/2.0);

+        int progress_width = cl->n->progress > 0 ? bg_width * (cl->n->progress - 1) / 100 : bg_width;
+
         if (first) bg_height += settings.frame_width;
         if (last) bg_height += settings.frame_width;
         else bg_height += settings.separator_height;

         cairo_set_source_rgb(c, cl->frame.r, cl->frame.g, cl->frame.b);
-        cairo_rectangle(c, bg_x, bg_y, bg_width, bg_height);
+        cairo_rectangle(c, bg_x, bg_y, progress_width, bg_height);
         cairo_fill(c);

+        if (progress_width != bg_width) {
+                cairo_set_source_rgb(c, cl->frame.r - 0.2, cl->frame.g - 0.2, cl->frame.b - 0.2);
+                cairo_rectangle(c, bg_x + progress_width, bg_y, bg_width - progress_width, bg_height);
+                cairo_fill(c);
+        }
+
         /* adding frame */
         bg_x += settings.frame_width;
         if (first) {
@@ -582,13 +590,26 @@ static dimension_t x_render_layout(cairo_t *c, colored_layout *cl, colored_layou
                 if (!last) bg_height -= settings.separator_height;
         }
         bg_width -= 2 * settings.frame_width;
+        if (progress_width < settings.frame_width) {
+                progress_width = 0;
+        } else if (progress_width - settings.frame_width > bg_width) {
+                progress_width = bg_width;
+        } else {
+                progress_width -= settings.frame_width;
+        }
         if (last)
                 bg_height -= settings.frame_width;

         cairo_set_source_rgb(c, cl->bg.r, cl->bg.g, cl->bg.b);
-        cairo_rectangle(c, bg_x, bg_y, bg_width, bg_height);
+        cairo_rectangle(c, bg_x, bg_y, progress_width, bg_height);
         cairo_fill(c);

+        if (progress_width != bg_width) {
+                cairo_set_source_rgb(c, cl->bg.r - 0.2, cl->bg.g - 0.2, cl->bg.b - 0.2);
+                cairo_rectangle(c, bg_x + progress_width, bg_y, bg_width - progress_width, bg_height);
+                cairo_fill(c);
+        }
+
         bool use_padding = settings.notification_height <= (2 * settings.padding) + h;
         if (use_padding)
             dim.y += settings.padding;

@mid-kid Bem, acho que é a própria definição de "o que é chique". Todos nós temos um gosto diferente. Eu pessoalmente não gosto de ter a largura total em segundo plano. Mas obrigado pelo seu envio. Nunca pensei em mudar a cor do quadro.

Na verdade, o que estou ansioso para pesquisar são algumas opções significativas para dar a todos a capacidade de especificar uma geometria para sua própria barra de progresso.

775 foi mesclado, considerarei isso resolvido.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

progandy picture progandy  ·  4Comentários

atomheartother picture atomheartother  ·  6Comentários

knopwob picture knopwob  ·  5Comentários

phuhl picture phuhl  ·  3Comentários

existme picture existme  ·  4Comentários