Comme j'étais nouveau en programmation, je n'ai pas eu le temps de beaucoup coder sur ce projet (car j'apprends sans cesse de nouvelles choses, sans parler des grandes poses que j'ai réalisé).
Mais je peux vous dire maintenant que le projet avance bien, et ce pour mon plus grand plaisir
Je vous poste dans quelques screens, et un code en python (le code en C++ n'ai pas à jours malheureusement. Je le ferai quand le code python sera impecable (plus rapides à programmer et à faire les testes).
Les nouveautés sont des nouveaux widgets (progressBar, Layout, Slide, TextArray et bientôt EditText), une gestion d'un multi clipping (on peu clipter un widget parent qui va clipter des widgets filles eux même clipter (vous allez comprendre avec un screen), une gestion des positions et des tailles par rapport à l'écran (sa semble facile, mais ce fut un bordel :p )
Brefs, ormis mon anglais désastreu, la majorité du code est stable. Seul soucis : le code bouffe trop de CPU, faudrait que j'optimise tout sa un jour (sa prends vraiment beaucoup de charge).
Allez, voici un bout de code qui montre comment tout ceci est facilement géré :
#!/usr/bin/python3
#-*- coding:utf-8 -*-
from Window import Window
from Image import Image
from Label import Label
from Button import Button
from CheckBox import CheckBox
from CheckCircle import CheckCircle
from Widget import *
from Layout import Layout
from Frame import Frame
from SelectionMenu import SelectionMenu
from TextArray import TextArray
from Label import Label
from Slide import Slide
from ProgressBar import ProgressBar
import sfml as sf
import time
window = Window(sf.VideoMode(800,600,32), "teste", backgroundColor = sf.Color.GREEN, framerateLimit=3)
progress = ProgressBar(window, sf.Rectangle(sf.Vector2(), sf.Vector2(100, 20)))
progress2 = ProgressBar(window, sf.Rectangle(sf.Vector2(0, 200), sf.Vector2(100, 20)))
progress3 = ProgressBar(window, sf.Rectangle(sf.Vector2(0, 300), sf.Vector2(100, 20)))
progress4 = ProgressBar(window, sf.Rectangle(sf.Vector2(0, 400), sf.Vector2(100, 20)))
progress5 = ProgressBar(window, sf.Rectangle(sf.Vector2(0, 430), sf.Vector2(100, 20)))
#textArray = TextArray(window, label=Label(None, "coucou je viens d'écrire \n mon premier text array, j'espère qu'il vous plaira mes jeunes amis !", font=sf.Font.from_file("DejaVuSans.ttf")), alignment=Position.Center)
#textArray.setPos(sf.Vector2(150, 150))
#background0 = Image(None, "Ressources/Images/image.jpg", delTextureCreated = False)
#background1 = Image(None, "Ressources/Images/FirstMenu.jpg", delTextureCreated = False)
#window.backgroundImage = background0
slide = Slide(window, rect=sf.Rectangle(sf.Vector2(100, 30), sf.Vector2(500, 20)), step=1, inStep=5, values=sf.Vector2(0, 50))
slide.clipRect=sf.Rectangle(sf.Vector2(), sf.Vector2(500, 10))
slide._forground.clipRect = sf.Rectangle(sf.Vector2(7, 7), sf.Vector2(20, 15))
slide2 = Slide(window, rect=sf.Rectangle(sf.Vector2(100, 230), sf.Vector2(500, 20)), step=1, inStep=5, values=sf.Vector2(0, 50))
slide3 = Slide(window, rect=sf.Rectangle(sf.Vector2(100, 330), sf.Vector2(500, 20)), step=1, inStep=5, values=sf.Vector2(0, 50))
slide4 = Slide(window, rect=sf.Rectangle(sf.Vector2(100, 430), sf.Vector2(500, 20)), step=1, inStep=5, values=sf.Vector2(0, 50))
slide5 = Slide(window, rect=sf.Rectangle(sf.Vector2(100, 470), sf.Vector2(500, 20)), step=1, inStep=5, values=sf.Vector2(0, 50))
#frame = Frame(window, sf.Rectangle(sf.Vector2(10, 10), sf.Vector2(400, 300)), title="frame")
#layout = SelectionMenu(window, permanentActivation=True)
#layout.spacing = sf.Vector2(10, 10)
#box = CheckBox(window, sf.Rectangle(sf.Vector2(100, 100), sf.Vector2(50, 50)))
#box2 = CheckBox(None, sf.Rectangle(sf.Vector2(20, 20), sf.Vector2(50, 50)))
#box3 = CheckBox(None, sf.Rectangle(sf.Vector2(20, 20), sf.Vector2(50, 50)))
#box4 = CheckBox(None, sf.Rectangle(sf.Vector2(20, 20), sf.Vector2(100, 100)))
#box5 = CheckBox(None, sf.Rectangle(sf.Vector2(20, 20), sf.Vector2(100, 100)))
#layout.addWidget(box, sf.Vector2(1, 0), sf.Vector2(1, 1))
#layout.addWidget(box2, sf.Vector2(1, 1), sf.Vector2(1, 1))
#layout.addWidget(box3, sf.Vector2(0, 2), sf.Vector2(1, 1))
#layout.addWidget(box4, sf.Vector2(2, 1), sf.Vector2(1, 1))
#layout.addWidget(box5, sf.Vector2(1, 1), sf.Vector2(1, 1))
#layout.posOrigin = Position.Center
#layout.pos = sf.Vector2(400, 300)
#layout.setAllActiveMouseKeyboard(sf.Keyboard.RETURN, sf.Mouse.LEFT)
#layout.canFocus = False
#print(layout[(sf.Vector2(0, 1))])
while window.is_open:
window.update()
Ce qui donne :
http://img13.imageshack.us/img13/5234/k9y.png Le premier Slide a été clipté ainsi que son "bouton bleu" (slide._forground). Comme vous le voié, aucun débordement n'a été fait lors de la superposition du clipte. Les progressBar utilisent d'ailleurs le clipping pour afficher le widget de devant. Les slides et les progress bar sont connecté par une manière assez artisanal je vous l'accorde (il n'y a pas de slot encore, et je me demande si je vais en implémenté). Quelques bugs subsistent encore avec une taille de vue initiale différente de la taille du Render auquel elle est lié (se sera corriger dans la journée
).
Je donnerai très prochainement un exemple d'intéraction entre différent menu d'un jeu vidéo par exemple.
Voila, merci encore
.
édit : problème avec un resize pour le clipping réglé, la preuve en screen :
http://img838.imageshack.us/img838/2731/rpnh.png (oui j'ai déplacer un peu le premier slide pour faire quelque test avec un côter droit sortant de la fenêtre initial). Pour utiliser ce code, vous devez prendre cette version de pysfml :
https://github.com/Gaulois94/python-sfml car règle des problèmes au niveau de l'héritage avec sf.RenderWindow et sf.RenderTexture (j'attends que sonkun valide le code envoyé).
édit 2 : pendant que je suis a montrer différent Widget, voici un TextArray coupé par tranches de mots, dont le text est centré :
http://img593.imageshack.us/img593/4489/ufwu.png .