Problème bizarre avec FontConfig

Codes specifiques à Linux
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Problème bizarre avec FontConfig

Message par Guimauve »

Bonjour à tous,

Voilà j'ai un programme dont les textes de l'interface ne s'affiche pas avec la "Font" prévue par le système. J'ai beau chercher partout dans le code, je ne vois rien. En revanche, lorsque lance le programme depuis le terminal j'ai deux lignes qui s'ajoutent :
Fontconfig error: line 1: unknown encoding
Fontconfig error: Cannot load default config file
Cela ne semble pas être un bogue puisque dans PB puisque j'ai un autre programme, plus petit mais qui utilise les mêmes gadgets et ils appellent tout les deux les commandes FontRequester(), LoadFont() et SetGadgetFont(), mais celui-ci fonctionne parfaitement. Les deux programmes sont compilés avec PB 4.60 Final X64 et sous Linux Mint 12 x64 avec Gnome-Shell (Gnome 3).

Je suis présentement à court d'idée sur les pistes à suivre, des suggestions ???

Merci à l'avance.
Guimauve
Avatar de l’utilisateur
MetalOS
Messages : 1492
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Re: Problème bizarre avec FontConfig

Message par MetalOS »

Salut Guimauve,

Tu aurais une source pour tester ? Je suis sous Ubuntu 10.04 LTS, pour voir si ca fait la même chose.
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: Problème bizarre avec FontConfig

Message par Guimauve »

Bonjour MetalOS,

Le problème c'est que le code source fait 24668 lignes de code et l'autre fait 8506 lignes de code. Cependant avec le 2e programme, j'ai remarqué que lorsque le code contient des commandes en lien avec les fichiers XML les erreurs en lien avec FontConfig apparaissent. Jusqu'à maintenant, je n'ai pas encore réussi à reproduire le problème avec un code simple.

Pour ce qui est de Ubuntu 10.04, je n'ai pour souvenir d'un tel problème puisque j'ai déjà testé le programme sous cet OS sans problème. Le problème vient définitivement de la version 11.10 dont Linux Mint 12 est un dérivé.

A+
Guimauve
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: Problème bizarre avec FontConfig

Message par Guimauve »

Voilà j'ai réussi à simplifier au maximum le code (j'ai passé de 8600 à 422 lignes)

Le code suivant est celui qui pose le problème.

Attention, il faut le compiler et lancer le programme depuis le terminal avec la commande /home/votre_nom/BasicMesh

Code : Tout sélectionner

#ProgramName = "Basic-Mesh"
#Version = "V1." 

Enumeration 
  
  #MainWin
  
  #Panel_BasicMesh
  
  ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  ; <<<<< Constantes pour la définition du cube <<<<<
  
  #Frame_Cube_Geometry
  #Text_Cube_Width
  #String_Cube_Width
  #Text_Cube_Height
  #String_Cube_Height 
  #Text_Cube_Depth
  #String_Cube_Depth
  
  #Frame_Cube_Mapping
  #Option_Cube_Single_Texture
  #Option_Cube_Multiple_Texture
  
  #Frame_Cube_Mesh
  #Option_Cube_Single_SubMesh
  #Option_Cube_Multiple_SubMesh
  
  #Frame_Cube_Texture  
   
EndEnumeration 

Macro GadgetDown(GadgetID)
  
  GadgetY(GadgetID) + GadgetHeight(GadgetID)
  
EndMacro

Macro GadgetRight(GadgetID)

  GadgetX(GadgetID) + GadgetWidth(GadgetID)
  
EndMacro

Procedure GeometryGadgetGroup(PosX.l, PosY.l, FrameWidth.l, FirstGadget.l, LastGadget.l)
  
  FrameHeight = 25 + ((LastGadget - FirstGadget + 1) >> 1) * 30
  
  Frame3DGadget(FirstGadget, PosX, PosY, FrameWidth, FrameHeight, "")
  
  Y = PosY + 20
  W1 = FrameWidth * 2 / 3 - 10
  W2 = FrameWidth - W1 - 10
  
  For GadgetID = FirstGadget + 1 To LastGadget Step 2
    
    TextGadget(GadgetID, PosX + 5, Y, W1, 25, "", #PB_Text_Center)
    StringGadget(GadgetID + 1, PosX + 5 + W1, Y, W2, 25, "")
    Y + 30
    
  Next
  
EndProcedure

Procedure OptionnalGadgetGroup(PosX.l, PosY.l, FrameWidth.l, FrameID.l, LastOptionID.l)
  
  FrameHeight = 25 + (LastOptionID - FrameID) * 25
  
  Frame3DGadget(FrameID, PosX, PosY, FrameWidth, FrameHeight, "")
  
  PosY + 20
  FirstOptionID = FrameID + 1
  
  For OptionID = FirstOptionID To LastOptionID
    
    OptionGadget(OptionID, PosX + 5, PosY, FrameWidth - 10, 25, "")
    PosY + 25
    
  Next
  
EndProcedure

Procedure TrackBarGadgetGroup(PosX, PosY, FrameWidth, FirstGadget.l, LastGadget.l)

  FrameHeight = 25 + ((LastGadget - FirstGadget + 1) >> 1) * 30
  Frame3DGadget(FirstGadget, PosX, PosY, FrameWidth, FrameHeight, "")
  PosY + 20

  For TrackBarID = FirstGadget + 1 To LastGadget Step 2
    
    TrackBarGadget(TrackBarID, PosX + 5, PosY, FrameWidth - 40, 25, 0, 0, #PB_TrackBar_Ticks)
    TextGadget(TrackBarID + 1, GadgetRight(TrackBarID), PosY, 30, 25, "", #PB_Text_Center)
    PosY + 30
    
  Next
  
EndProcedure 

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Déclaration de la Structure <<<<<

Structure Matrix44
  
  e11.d
  e12.d
  e13.d
  e14.d

EndStructure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les observateurs <<<<<

Macro GetMatrix44e11(MatrixA)
  
  MatrixA\e11
  
EndMacro

Macro GetMatrix44e12(MatrixA)
  
  MatrixA\e12
  
EndMacro

Macro GetMatrix44e13(MatrixA)
  
  MatrixA\e13
  
EndMacro

Macro GetMatrix44e14(MatrixA)
  
  MatrixA\e14
  
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs <<<<<

Macro SetMatrix44e11(MatrixA, P_e11)
  
  GetMatrix44e11(MatrixA) = P_e11
  
EndMacro

Macro SetMatrix44e12(MatrixA, P_e12)
  
  GetMatrix44e12(MatrixA) = P_e12
  
EndMacro

Macro SetMatrix44e13(MatrixA, P_e13)
  
  GetMatrix44e13(MatrixA) = P_e13
  
EndMacro

Macro SetMatrix44e14(MatrixA, P_e14)
  
  GetMatrix44e14(MatrixA) = P_e14
  
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Set - Noeud avec noeuds enfants <<<<<

Procedure SetMatrix44XMLNode(CurrentNode, *MatrixA.Matrix44)
  
  If ParentXMLNode(CurrentNode) = #Null
    StructNode = CreateXMLNode(CurrentNode)
    SetXMLNodeName(StructNode, "Matrix44")
  Else
    StructNode = CurrentNode
  EndIf
  
  FieldNode = CreateXMLNode(StructNode)
  SetXMLNodeName(FieldNode, "Line1")
  SetXMLAttribute(FieldNode, "e11", StrD(GetMatrix44e11(*MatrixA)))
  SetXMLAttribute(FieldNode, "e12", StrD(GetMatrix44e12(*MatrixA)))
  SetXMLAttribute(FieldNode, "e13", StrD(GetMatrix44e13(*MatrixA)))
  SetXMLAttribute(FieldNode, "e14", StrD(GetMatrix44e14(*MatrixA)))

EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Get - Noeud avec noeuds enfants <<<<<

Procedure GetMatrix44XMLNode(CurrentNode, *MatrixA.Matrix44)
  
  If ParentXMLNode(CurrentNode) = #Null
    StructNode = ChildXMLNode(CurrentNode)
    If GetXMLNodeName(StructNode) = "Matrix44"
      Success = #True
    EndIf
  Else
    Success = #True
    StructNode = CurrentNode
  EndIf
  
  If Success = #True
    
    FieldNode = ChildXMLNode(StructNode)
    
    While FieldNode
      
      Select GetXMLNodeName(FieldNode)
          
        Case "Line1"
          SetMatrix44e11(*MatrixA, ValD(GetXMLAttribute(FieldNode, "e11")))
          SetMatrix44e12(*MatrixA, ValD(GetXMLAttribute(FieldNode, "e12")))
          SetMatrix44e13(*MatrixA, ValD(GetXMLAttribute(FieldNode, "e13")))
          SetMatrix44e14(*MatrixA, ValD(GetXMLAttribute(FieldNode, "e14")))
                
      EndSelect
      
      FieldNode = NextXMLNode(FieldNode)
      
    Wend
    
  EndIf
  
  ProcedureReturn Success
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Déclaration de la Structure <<<<<

Structure MeshEditor

  PrefFileName.s

EndStructure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les observateurs <<<<<

Macro GetMeshEditorPrefFileName(MeshEditorA)

  MeshEditorA\PrefFileName

EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs <<<<<

Macro SetMeshEditorPrefFileName(MeshEditorA, P_PrefFileName)

  GetMeshEditorPrefFileName(MeshEditorA) = P_PrefFileName

EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Reset <<<<<

Macro ResetMeshEditor(MeshEditorA)
  
  SetMeshEditorPrefFileName(MeshEditorA, "")

EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Initialize <<<<<

Procedure InitializeMeshEditor(*MeshEditorA.MeshEditor)
  
  UsePNGImageDecoder()
  
  Path.s = GetPathPart(ProgramFilename())
  SetCurrentDirectory(Path)

  SetMeshEditorPrefFileName(*MeshEditorA, #ProgramName + ".pref")

EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Routine de fermeture du programme <<<<<

Procedure ShutDownMeshEditor(*MeshEditorA.MeshEditor)
  
  CloseWindow(#MainWin)
  ResetMeshEditor(*MeshEditorA)
  
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Routine de rafraichissement du programme <<<<<

Procedure RefreshMeshEditor(*MeshEditorA.MeshEditor)
  
  SetGadgetState(#Panel_BasicMesh, 0)

EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Ouverture de la fenètre principale <<<<<

Procedure OpenMeshEditorWindow(*MeshEditorA.MeshEditor)
  
  If OpenWindow(#MainWin, 50,50,750,500, "Basic-Mesh")

    PanelGadget(#Panel_BasicMesh, 5, 5, WindowWidth(#MainWin) - 60, WindowHeight(#MainWin) - 10)
      
      ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      ; <<<<< Gadgets pour la définition du cube <<<<<
      
      AddGadgetItem(#Panel_BasicMesh, 0, "Cube")
      TabH = GetGadgetAttribute(#Panel_BasicMesh, #PB_Panel_TabHeight)
      
      GeometryGadgetGroup(5, 5, 225, #Frame_Cube_Geometry, #String_Cube_Depth)
      OptionnalGadgetGroup(5, GadgetDown(#Frame_Cube_Geometry) - TabH + 5, 225, #Frame_Cube_Mapping, #Option_Cube_Multiple_Texture)
      OptionnalGadgetGroup(5, GadgetDown(#Frame_Cube_Mapping) - TabH + 5, 225, #Frame_Cube_Mesh, #Option_Cube_Multiple_SubMesh)
      
      SetGadgetText(#Frame_Cube_Geometry, "Size")
      SetGadgetText(#Text_Cube_Width, "Width")
      SetGadgetText(#Text_Cube_Height, "Height")
      SetGadgetText(#Text_Cube_Depth, "Depth")
      SetGadgetText(#Frame_Cube_Mapping, "UV Mapping Type")
      SetGadgetText(#Option_Cube_Single_Texture, "Single Texture")
      SetGadgetText(#Option_Cube_Multiple_Texture, "One Texture per face")
      SetGadgetText(#Frame_Cube_Mesh, "Mesh Style")
      SetGadgetText(#Option_Cube_Single_SubMesh, "Single Sub-Mesh")
      SetGadgetText(#Option_Cube_Multiple_SubMesh, "One Sub-Mesh per face")
      
      ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      ; <<<<< Gadgets pour la définition du cône <<<<<
     
      AddGadgetItem(#Panel_BasicMesh, 1, "Cône")
      
      ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      ; <<<<< Gadgets pour la définition du cylindre <<<<<

      AddGadgetItem(#Panel_BasicMesh, 2, "Cylindre")

      ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      ; <<<<< Gadgets pour la définition de la capsule <<<<<
      
      AddGadgetItem(#Panel_BasicMesh, 3, "Capsule")

      ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      ; <<<<< Gadgets pour la définition de la sphère <<<<<
      
      AddGadgetItem(#Panel_BasicMesh, 4, "Sphère")

      ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      ; <<<<< Gadgets pour la définition du tore <<<<<
      
      AddGadgetItem(#Panel_BasicMesh, 5, "Tore")

      ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      ; <<<<< Gadgets pour la définition de la Sphère géodésique <<<<<
      
      AddGadgetItem(#Panel_BasicMesh, 6, "Sphère Geodesic")

      ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      ; <<<<< Gadgets pour la définition de la flèche <<<<<
      
      AddGadgetItem(#Panel_BasicMesh, 7, "Flèche")
 
      ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      ; <<<<< Gadgets pour la définition du trièdre <<<<<
      
      AddGadgetItem(#Panel_BasicMesh, 8, "Trièdre")

      ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      ; <<<<< Gadgets pour la définition d'un noeud <<<<<
      
      AddGadgetItem(#Panel_BasicMesh, 9, "Noeuds Tubulaire")
 
    CloseGadgetList()
    
  EndIf 
  
EndProcedure 

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Gestion des évènements <<<<<

Procedure MeshEditorEventManager(*MeshEditorA.MeshEditor)
  
  Repeat

    EventID = WaitWindowEvent()
    
    Select EventID
        
      Case #PB_Event_Menu
        
        Select EventMenu()
            
        EndSelect
        
      Case #PB_Event_Gadget
        
        Select EventGadget()

        EndSelect
        
    EndSelect

  Until EventID = #PB_Event_CloseWindow

EndProcedure 

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Routine d'initialisation du programme <<<<<

InitializeMeshEditor(MeshEditor.MeshEditor)

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Ouverture de la fenètre principale <<<<<

OpenMeshEditorWindow(MeshEditor)

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Gestion des évènements <<<<<

MeshEditorEventManager(MeshEditor)

; <<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< FIN DU FICHIER <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<
Normalement si ce code bogue sur votre système le terminal devrait avoir ceci d'affiché
guimauve@guimauve-Desktop ~ $ /home/guimauve/test/BasicMesh
Fontconfig error: line 1: unknown encoding
Fontconfig error: Cannot load default config file
De plus, si le code bogue, les caractères accentué devrait s'afficher correctement mais en plus petit.

Pour avoir le code qui ne bogue pas, il faut commenter les commandes (ligne no. 168 à 224) :

Code : Tout sélectionner

SetMatrix44XMLNode(CurrentNode, *MatrixA.Matrix44)
GetMatrix44XMLNode(CurrentNode, *MatrixA.Matrix44)
Je tiens à rappeler :

Linux Mint 12 x64 + Gnome-Shell (Gnome 3)
PureBasic 4.60 x64

A+
Guimauve
Avatar de l’utilisateur
MetalOS
Messages : 1492
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Re: Problème bizarre avec FontConfig

Message par MetalOS »

Je vient de tester et aucun problèmes pour ma part.

Ubuntu 10.04 LTS (x86)
Gnome 2.30.2
PB 4.60
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: Problème bizarre avec FontConfig

Message par Guimauve »

Bonjour à tous,

@MetalOS : Je ne suis pas étonné, le problème est apparu lors de mon passage de Linux Mint 11 (Ubuntu 11.04) à Linux Mint 12 (Ubuntu 11.10). J'ai jamais eu de problème avant.

Moi ce que je ne comprend pas, c'est comment la librairie XML peut avoir une influence sur FontConfig, affectant à la fois l'affichage des textes de l'interface graphique ainsi que les fenêtres de requête (Open/SaveFileRequester, FontRequester). Je suis, comment dire, complètement largué.

La seule chose que je vois dans le domaine du possible est un conflit entre GTK+ 2.0 et GTK+ 3.0 mais là faudrait avoir l'avis de Fred ou Freak sur le sujet.

A+
Guimauve
Avatar de l’utilisateur
MetalOS
Messages : 1492
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Re: Problème bizarre avec FontConfig

Message par MetalOS »

Il se peut que la librairie "libxslt" présent dans gnome 2 soit différente dans Gnome 3, se qui peut poser ce genre de problème. Enfin je ne suis pas sur mais c'est une piste à creuser.

http://doc.ubuntu-fr.org/xslt
Répondre