Comment rendre GtkBtton plus rond?Création d'un arrondi GtkButton
Répondre
Il existe plusieurs options.
- Modifiez le style. Il n'y a pas d'option d'arrondi dans l'ensemble de base. Certains moteurs de thème peuvent fournir une spécification ou une circularité d'image de bordure, mais cela ne fonctionnera pas partout.
- Forcer un thème qui ressemble à celui que vous voulez. Ce n'est pas trop dur, il suffit de charger une chaîne gtkrc qui spécifie le thème que vous voulez. Vous devrez vous assurer que les utilisateurs ont le thème ou sont d'accord avec la solution de repli.
- Sous-classe le bouton et dessine-le vous-même. Une solution consiste à définir une bordure et un relief sur 0, à conditionner une image et à répondre aux événements de changement d'état pour utiliser les images de pré-éclairage (hover) appropriées. Une autre méthode consiste à réécrire l'événement d'exposition et à dessiner le bouton comme vous le souhaitez.
La réponse acceptée dit:
Il n'y a pas d'option de circularité dans le jeu de base.
Eh bien, il y a maintenant! Dans des cas particuliers
https://developer.gnome.org/gtk3/stable/GtkButton.html
, les boutons peuvent être arrondi en ajoutant la classe de style .circular.
Ainsi, par exemple .:
gtk_style_context_add_class(
gtk_widget_get_style_context(GTK_WIDGET(button)),
"circular"
);
Cela fonctionne en utilisant à la fois des thèmes standards, Adwaita et HighContrast.
Il existe cependant un problème: Cela ne fonctionne que de manière satisfaisante pour les boutons qui n'ont pas de propriétés expand
définies ou qui ne sont pas mis à niveau manuellement. Je ne ai pas compris si cela peut être fait pour travailler avec expand
ed taille, comme avec le bouton élargi que je voulais pour cela, je reçois des coins arrondis, mais avec des régions plates sur les côtés. :/Ma conjecture est que les développeurs n'ont pas pensé, ou se sont souciés de soutenir les plus gros boutons ayant la classe de style circular
. Je demanderai peut-être un jour à IRC.
- 1. Création de SelectionBorder: Bit dans le visage par arrondi décimal?
- 2. GTK Modification Couleur de fond GtkButton
- 3. gtkbutton changement de couleur de police
- 4. Arrondi UIBarButtonItems
- 5. Zone de texte riche arrondi sélection de coin arrondi
- 6. Arrondi dans Ada
- 7. UIView arrondi avec ombre?
- 8. Flotteur arrondi en Ruby
- 9. Arrondi des objets DateHeure
- 10. Arrondi double - 0,5 - sprintf
- 11. Arrondi incohérent dans Ruby?
- 12. CSS3 Inversé Coin arrondi
- 13. Arrondi uitableview image Coins
- 14. JavaScript: Arrondi question
- 15. BigDecimal arrondi question
- 16. UISegmentedControl sans arrondi?
- 17. Excel arrondi décimal
- 18. rectangle arrondi dans pygtk
- 19. Arrondi dans PHP
- 20. Entité Cadre Arrondi
- 21. contrôle de coin arrondi
- 22. Arrondi Java Problème
- 23. Dessin arrondi acculé NSTextFieldCell
- 24. Comment faire "joli arrondi"?
- 25. GtkButton ne montre que du texte mais pas d'image
- 26. Supprimer le remplissage d'image de GtkButton (bordure intérieure)?
- 27. Comment supprimer la bordure "selected" autour de GtkButton?
- 28. NSNumberFormatter et arrondi pourcentage valeur
- 29. C++ Arrondi aux _nths placer
- 30. Comment dessiner un NSImage arrondi
Merci pour cette suggestion. Pouvez-vous poster avec un exemple où le bouton de dessin est entrepris dans la méthode d'événement d'exposition. – boom
G_DEFINE_TYPE (RButton, rbutton, GTK_TYPE_BUTTON) statique void rbutton_class_init (RButtonClass * klass) { ((GtkWidgetClass *) klass) -> expose_event = rbutton_expose; } – Rubinium
Remplacer gtk_button_paint dans les domaines suivants: gint rbutton_expose statique (GtkWidget * widget, evenement GdkEventExpose *) { if (GTK_WIDGET_DRAWABLE (widget de)) { GtkWidget * enfant = GTK_BIN (widget de) -> enfant; GtkButton * button = GTK_BUTTON (widget); GtkStateType state_type = GTK_WIDGET_STATE (widget); GtkShadowType shadow_type = bouton-> enfoncé?GTK_SHADOW_IN: GTK_SHADOW_OUT; _gtk_button_paint (bouton, & event-> area, type_type, type_ombre, "button", "buttondefault"); si (enfant) \t gtk_container_propagate_expose (GTK_CONTAINER (widget), enfant, événement); } return FALSE; } – Rubinium