2010-11-18 4 views

Répondre

0

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.
+0

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

+0

G_DEFINE_TYPE (RButton, rbutton, GTK_TYPE_BUTTON) statique void rbutton_class_init (RButtonClass * klass) { ((GtkWidgetClass *) klass) -> expose_event = rbutton_expose; } – Rubinium

+0

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

0

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.