2016-12-30 4 views
4

Est-il possible d'accéder et de changer un contexte GtkDrawingArea en dehors de son draw_callback? Si oui, je serais très heureux si vous avez fourni un exemple court (n'importe quelle langue) ou me montrer où je devrais regarder. Tous les exemples que j'ai trouvés jusqu'ici dessinaient dans le rappel, c'est pourquoi je questionne la possibilité.Accéder au contexte de Le Caire en dehors d'un GtkDrawingArea draw_callback

Répondre

3

Dans GTK + 2, cela était certainement possible en utilisant l'interaction GDK et Cairo pour obtenir un contexte Cairo à partir d'une fenêtre GdkWindow. Dans GTK + 3, ce que vous demandez probablement, vous pouvez toujours le faire d'une certaine manière, avec this et this.

Cela ressemble à une manifestation classique du problème XY. Avec l'interaction Cairo de GTK + 3, vous pouvez maintenant just queue a draw signal for only the specific clip region you want. Écrivez simplement votre callback de manière générique et dessinez seulement ce qui est nécessaire dans la région découpée.

J'espère que les docs suffiront, mais si non, faites le moi savoir. Je n'ai tout simplement pas le temps de préparer un exemple pour le moment.

2

Répondre en retard est un peu bizarre, mais je viens de rencontrer un problème similaire, alors voici mes deux cents pour la postériorité.

Généralement, vous ne souhaitez pas émettre de commandes Cairo dans le contexte de DrawingArea en dehors du rappel ::draw. En même temps, vous voulez généralement dessiner des éléments en dehors du gestionnaire ::draw (par exemple, des calculs de dessin longs). Si c'est votre cas, alors vous devriez créer un contexte Cairo supplémentaire (un hors écran) et dessiner dans celui-ci (éventuellement dans un autre thread si vous faites quelque chose de long). Ensuite, à l'intérieur de la peinture ::draw handler en utilisant ce contexte hors écran comme une surface (j'espère que ma terminologie est correcte en ce qui concerne le contexte, la surface, la peinture, le dessin, mais vous avez l'idée).

Un bon exemple de cela est dans la documentation GTK + sur custom drawing, jetez un oeil à la fonction draw_cb.