Exemplo C # Mono.Cairo para tornar um EventBox transparente

1

Eu preciso criar uma imagem com transparência colocada em cima de outra imagem, dentro de uma janela comum do Gtk #. A primeira imagem deve ser capaz de responder aos cliques do mouse.

A maneira mais simples seria colocar uma imagem dentro de uma caixa de eventos - e dentro da janela. No entanto, EventBox não é transparente por padrão, portanto, mesmo que a própria imagem png tenha áreas transparentes, quando estiver dentro da EventBox, ela será mostrada como um fundo quadrado opaco ao redor da imagem.

Estou ciente de que EventBox pode ser transparente usando Cairo , mas até agora não foi capaz de fazer isso.

Alguém pode fornecer um pequeno exemplo de C # para tornar o EventBox transparente?

Obrigado!

    
por OM55 30.08.2012 / 19:59

1 resposta

0

Respondendo a minha própria pergunta ...:

A solução é tão simples, enquanto eu procurava código complexo para redesenhar o widget ... Tudo o que precisa ser feito é definir o membro EventBox.VisibleWindow como 'false' (é 'true' por padrão). Do que o EventBox não é desenhado e se a imagem dentro do EventBox tiver áreas transparentes, eles mostrarão o que está abaixo.

No exemplo abaixo, é:
mapBox.VisibleWindow = false;
e
pinBox.VisibleWindow = false;

Até onde pude ver, o Z-Order (no qual o Widget está no topo) é determinado pela ordem de desenho na tela (quando o EventBox não é desenhado, o EventBox.GdkWindow.Lower () ou Os membros criados () não estão fazendo nada.

Exemplo:

// Showing a map in an invisible EventBox
EventBox mapBox = new EventBox();
mapBox.Visible = true;
mapBox.VisibleWindow = false;
fixed1.Add(mapBox);
fixed1.Move (mapBox, 0, 0);

Image mapImage = new Image("map.png");
mapImage.Visible = true;
mapBox.Add (mapImage);

// Showing a pin image with transparent areas, in an invisible EventBox, on top of the map
EventBox pinBox = new EventBox();
pinBox.Visible = true;
pinBox.VisibleWindow = false;
fixed1.Add(pinBox);
fixed1.Move (pinBox, 60, 60);

Image pinImage = new Image("redpin.png");
pinImage.Visible = true;
pinBox.Add (pinImage);
    
por OM55 09.09.2012 / 21:11