2016-03-13 1 views
0

Il me manque probablement quelque chose de conceptuel sur cairo. Je voudrais attirer l'aide de la classe d'aide suivante:Le Caire: saisir l'ensemble du dessin comme un motif

struct GroupLock { 
    GroupLock(Graphics &g) : g_(g) { 
     cairo_push_group(g_.cr); 
    } 

    ~GroupLock() { 
     cairo_pop_group_to_source(g_.cr); 
     cairo_paint(g_.cr); 
     cairo_surface_flush(g_.surface); 
     XFlush(g_.display); 
    } 
private: 
    Graphics &g_; 
}; 

Toutes mes fonctions de dessin sont de la forme:

void drawSomething(Graphics &g) { 
    GroupLock lock{g}; (void)lock; 
    ... // some drawing 
} 

Chaque appel à une telle fonction de dessin définit la source (en vertu de l'utilisation GroupLock) et rend la source précédente inaccessible. Comment puis-je modifier ce code pour "concaténer" la source s à la place? Je voudrais être en mesure de saisir tout le dessin comme modèle en faisant:

cairo_pattern_t *p_ = cairo_get_source(g_.cr); 
cairo_pattern_reference(p_); 

Répondre

0

Après avoir lutté pendant des heures, voilà! Tout ce qui devait être fait est de modifier le constructeur pour lire comme ceci:

p_ = cairo_get_source(g_.cr); 
cairo_pattern_reference(p_); 

cairo_push_group(g_.cr); 
cairo_set_source (g_.cr, p_); 
cairo_paint(g_.cr); 
cairo_pattern_destroy(p_); 
+0

Pourrait vouloir sélectionner votre réponse. Se montre mieux comme étant résolu. – oldtechaa

+0

@oldtechaa Basé sur l'absence de votes, il semble que les gens n'aient trouvé ni la question ni la réponse utile. Je me demande s'ils font des choses d'une autre façon dont je ne suis pas au courant ... – AlwaysLearning

+0

J'essaierais de le regarder plus mais j'ai peur de ne pas utiliser le C++ et ce n'est pas la zone du Caire que je suis le plus bien informé. Je regardais simplement les vieilles questions [tag: cairo] et j'ai trouvé ça. – oldtechaa