PureBasic

Forums PureBasic
Nous sommes le Jeu 22/Aoû/2019 10:24

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 1 message ] 
Auteur Message
 Sujet du message: Style Editor v1.0
MessagePosté: Sam 30/Déc/2017 15:16 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 25/Juin/2015 16:18
Messages: 262
Salut tout le monde,
Peter (du forum SB) m' a donné un moyen de modifier le style (CSS) par code.
J'en ai profité pour faire un petit éditeur.
Ce n'est qu'un début, mais il vous permet déjà de personnaliser l'interface SB de manière simple.
(Par la suite, j'ajouterai la possibilité d'ajouter une texture, de sélectionner la police, d'utiliser le dégradé...)

Après le changement:
Fermer la fenêtre "Style Editor" --> une chaîne est affichée
la copier et remplacer la ligne "initstyle" dans le code

Code:
; Style Editor v1.0 - Pf shadoko - 2017

Procedure ColorBlend(color1.l, color2.l, blend.f=0.5)
    Protected.w r,g,b,a
    r=  Red(color1) + (Red(color2)     - Red(color1)) * blend
    g=Green(color1) + (Green(color2) - Green(color1)) * blend
    b= Blue(color1) + (Blue(color2) -   Blue(color1)) * blend
    a=Alpha(color1) + (Alpha(color2) - Alpha(color1)) * blend
    ProcedureReturn  RGBA(r,g,b,a)
EndProcedure

Procedure.f min(v1.f,v2.f)
    If v1<v2:ProcedureReturn v1:Else: ProcedureReturn v2:EndIf
EndProcedure

Procedure.f max(v1.f,v2.f)
    If v1>v2:ProcedureReturn v1:Else: ProcedureReturn v2:EndIf
EndProcedure

Procedure.s ReplaceStringpos(t.s,pos,lng,replace.s)
    ProcedureReturn Left(t,pos-1)+replace+Mid(t,pos+lng)
EndProcedure

Procedure.s jscolor(c.l)
  ProcedureReturn "RGBA("+Str(Red(c))+","+Str(Green(c))+","+Str(Blue(c))+","+StrF(Alpha(c)/255)+")"
EndProcedure


;{ ==================================================== editeur de style
Global NewMap gstyle.i()
Global NewMap vstyle.l()
Global styletxt.s
Declare SetStyle()

;{ =================================================== palette_aff
Global wpalette, gpalettecanvas,gpalette_colr, gpalette_colg, gpalette_colb, gpalette_cola,  palette_cle.s

Procedure paletteimgcol(output,col)
    Protected i,j,dx,dy
    StartVectorDrawing(output)
    dx=VectorOutputWidth()
    dy=VectorOutputHeight()
    VectorSourceColor($ff666666)
    FillVectorOutput()
    For j=0 To dy Step 32:AddPathBox(0,j,100,15):Next
    For i=0 To dx Step 32:AddPathBox(i,0,15,100):Next   
    VectorSourceColor($ffaaaaaa)   
    FillPath()
    VectorSourceColor(col)
    FillVectorOutput()   
    StopVectorDrawing()
EndProcedure

Procedure palette_event()
    Protected dx,dy,r,g,b,a,col,gs,txt.s,pd,pf
    r=GetGadgetState(gpalette_colr)
    g=GetGadgetState(gpalette_colg)
    b=GetGadgetState(gpalette_colb)
    a=GetGadgetState(gpalette_cola)
    col=RGBA(r,g,b,a)
    vstyle(palette_cle)=col
    SetStyle()
    paletteimgcol(CanvasVectorOutput(gpalettecanvas),col)
    ;paletteimgcol(CanvasVectorOutput(gstyle(palette_cle)),col)
    gs=gstyle(palette_cle)
    txt=GetGadgetText(gs)
    pd=FindString(txt,"color:")+6
    pf=FindString(txt,";",pd)
    txt=ReplaceStringpos(txt,pd,pf-pd,jscolor(col|$ff000000))
    SetGadgetText(gs,txt)   
EndProcedure

Procedure wpalette_close()
CloseWindow(wpalette)   
EndProcedure

Procedure.s palette_aff(cle.s,callback=0)
    Protected x,y,col
   
    Macro gcol(g,txt,def)
        TextGadget(-1,x-40,y+4,40,24,txt,#PB_Text_Right)
        g=TrackBarGadget(-1,x,y,256,24,0,255)
        BindGadgetEvent(g,@ palette_event())
        SetGadgetState(g,def)
        y+24
    EndMacro
   
    If wpalette:CloseWindow(wpalette):EndIf
    wpalette=OpenWindow(-1, 0, 0, 400,100, "Palette", #PB_Window_SystemMenu | #PB_Window_ScreenCentered):StickyWindow(wpalette,1):BindEvent(#PB_Event_CloseWindow,@ wpalette_close(),wpalette)
    x=45:y=0
    gpalettecanvas=CanvasGadget(-1,305,5,90,90)
    col=vstyle(cle)
    palette_cle=cle
    gcol(gpalette_colr,"Red",Red(col))
    gcol(gpalette_colg,"Green",Green(col))
    gcol(gpalette_colb,"Blue",Blue(col))
    gcol(gpalette_cola,"Alpha",Alpha(col))
    palette_event()
EndProcedure
;}


Procedure initstyle(style.s)
    ! elStyle = document.createElement('style');
    ! elStyle.type= 'text/css';
    ! elHead = document.getElementsByTagName('head')[0];
    ! elHead.appendChild( elStyle );
    Protected j
    j=CreateJSON(-1)
    ParseJSON(j, ReplaceString(style,"'",Chr(34)))
    ExtractJSONMap(JSONValue(j), vstyle())
    FreeJSON(j)
    ForEach vstyle()
        Debug ""+MapKey(vstyle())+" : "+ vstyle()
    Next
    SetStyle()
EndProcedure

Procedure addstyle(class.s, prop.s,p1.s="",p2.s="",p3.s="",p4.s="")
    If p1<>"":prop=ReplaceString(prop,"$1",p1):EndIf
    If p2<>"":prop=ReplaceString(prop,"$2",p2):EndIf
    If p3<>"":prop=ReplaceString(prop,"$3",p3):EndIf
    If p4<>"":prop=ReplaceString(prop,"$4",p4):EndIf
    styletxt+class+"{"+prop+"}"+#CRLF$
EndProcedure

Procedure SetStyle()
    Protected v.l
   
    styletxt=""
    addstyle("body","font: 13px arial; color: #000;")
    addstyle(".spiderwindow-title","font-size: 140%;")
    addstyle(".dijitButtonNode","border: $1px solid rgba(255,255,255,0.5) !important;",Str(1))
    addstyle(".dijitTab","margin: 1px 0px 0px 1px!important;border: 0px!important;")   
    addstyle(".dijitTabChecked,.dijitTabHover,.dijitTabContainerTop-tabs","border: none;")
    addstyle(".dijitTabContainerTop-tabs .dijitTabChecked:before","height: 0px;")
    ;addstyle(".spiderwindow-content","background-image:url('https://cdn.pixabay.com/photo/2017/10/12/21/22/pattern-2846017__340.jpg')")   
    ;addstyle("","");   <--------------------
   
    addstyle(".sbWebBorder,iframe","border: 0px;")
   
    addstyle(".dijitSelectFocused","border: 5px solid #f00!important;padding: 5px;")
    ForEach vstyle()
        v= vstyle()
        Select MapKey(vstyle())
            Case "g_radius"
                addstyle(".spiderwindow,.sbWebBorder,iframe","border-radius: $1px;",Str(v) )
                addstyle(".spiderwindow-content","border-radius: 0 0 $1px $1px;",Str(max(v-vstyle("wb_width"),0)))
                addstyle(".dijitTab","border-radius: $1px $1px 0 0!important;",Str(v))
                addstyle(".dijitTabPaneWrapper ","border-radius: 0 $1px $1px $1px!important;",Str(v))
                addstyle(".dijitButtonNode","border-radius: $1px !important;",Str(v))
                addstyle(".dijitTextBox,.dijitInputField , .dijitCheckBox, .dgrid","border-radius: $1px;",Str(v))
               
               
            Case "wt_back-color"
                addstyle(".spiderwindow","background-color: $1;",jscolor(v))
            Case "wt_color"
                addstyle(".spiderwindow-title","color: $1;",jscolor(v))
            Case "wb_color"
                addstyle(".spiderwindow","border:$1px solid $2;",Str(vstyle("wb_width")),jscolor(v))               
            Case "wc_back-color"
                addstyle(".spiderwindow-content","background-color: $1;",jscolor(v))
            Case "p_back-color"
                addstyle(".dijitTab","background-color: $1!important;",jscolor(ColorBlend(v,$ff000000,0.15)))
                addstyle(".dijitTabChecked,.dijitTabContainerTop-dijitContentPane","background-color: $1!important;",jscolor(ColorBlend(v,$ff000000,0.0)))
            Case "w_shadow"   
                addstyle(".spiderwindow","box-shadow: $1px $1px $2px 0px #000;",Str(v),Str(v*4))
               
               
            Case "b_back-color"
                addstyle(".dijitButtonNode","background: $1 !important;",jscolor(v))
            Case "b_color"
                addstyle(".dijitButtonNode","color: $1 !important;",jscolor(v))
            Case "b_shadow"
                addstyle(".dijitButtonNode","box-shadow: $1px $1px $2px 0px #000 !important;",Str(v),Str(v*4))
                addstyle(" .dijitButtonActive .dijitButtonNode, .dijitToggleButtonChecked .dijitButtonNode","box-shadow: $1px $1px $1px 0px rgba(0,0,0,0.5) inset!important;",Str(v))
                addstyle(".dijitTextBox,.dijitInputField , .dijitCheckBox","border: none;box-shadow: $1px $1px $1px 0px rgba(0,0,0,0.5) inset!important;",Str(v))
                addstyle(".dijitTabChecked,.dijitTabContainerTop-dijitContentPane, .dijitTabContainerBottom-container,.dijitTabContainerTop-container,.dijitTabContainerLeft-container,.dijitTabContainerRight-container","border: 0px;box-shadow: $1px $1px $2px 0px #000 !important;",Str(v),Str(v*4))
               
        EndSelect
    Next
    ! elStyle.innerHTML = v_styletxt;
EndProcedure


Procedure StyleEditor_event()
    Protected j,cle.s,g=EventGadget()
    ForEach gstyle():If g=gstyle():cle=MapKey(gstyle()):Break:EndIf:Next
    Select cle
        Case "g_radius","wb_width","w_shadow","b_shadow"
            vstyle(cle)=GetGadgetState(g):SetStyle()       
        Case "wt_color","wt_back-color","wc_back-color","b_back-color","b_color","wb_color","p_back-color"
            palette_aff(cle)
    EndSelect   
EndProcedure

Procedure StyleEditor_close()
Protected txt.s,j=CreateJSON(-1)
InsertJSONMap(JSONValue(j), vstyle())
txt= "initstyle("+Chr(34)+ReplaceString(ComposeJSON(j),Chr(34),"'")+Chr(34)+")"
!alert(v_txt);
FreeJSON(j)
CloseWindow(EventWindow())   
EndProcedure

Procedure StyleEditor()
    Protected  w,g,px,py,legw=90
   
    Macro deftitre(txt)
        g=TextGadget(-1,0,py,200,16,txt,#PB_Text_Center):SetGadgetColor(g,#PB_Gadget_BackColor,$ffff):py+24
    EndMacro
   
    Macro defbutton(cle,leg,def=0)
        g=ButtonGadget(-1,10,py,180,30,leg+" <div style='display: inline-block; width:50px;background-color:"+jscolor(vstyle(cle))+";'>&nbsp</div>",#PB_Button_Right)
        BindGadgetEvent(g,@ StyleEditor_event()):py+40
        SetGadgetColor(g,#PB_Gadget_BackColor,vstyle(cle))
        gstyle(cle)=g
    EndMacro
   
    Macro deftrackbar(cle,leg,min,max,def=0)
        TextGadget(-1,0,py,legw,20,leg,#PB_Text_Right)
        g=TrackBarGadget(-1,legw,py,100,20,min,max):SetGadgetState(g,vstyle(cle)):BindGadgetEvent(g,@ StyleEditor_event()):py+30
        gstyle(cle)=g
    EndMacro
   
    w=OpenWindow(-1,5,5,200,500,"Style Editor",#PB_Window_SystemMenu):BindEvent(#PB_Event_CloseWindow,@ StyleEditor_close(),w)
    deftitre("General")
    deftrackbar("g_radius","border-radius",0,16,8)
   
    deftitre("Windows")
    defbutton("wc_back-color","Content back-color")
    defbutton("wt_back-color","Title back color")
    defbutton("wt_color","Title text color")
    deftrackbar("wb_width","border-width",0,16,8)
    defbutton("wb_color","border color")
    deftrackbar("w_shadow","Shadow",0,16,8)
   
    deftitre("Button, ...")
    defbutton("b_back-color","back color")
    defbutton("b_color","text color")
    deftrackbar("b_shadow","Shadow",0,8,4)
   
    deftitre("Panel")
    defbutton("p_back-color","backcolor")
   
       
;SetStyle()
EndProcedure

;}

;##########################################################################################################################################################

Procedure exemple()
    Protected g,gc
    OpenWindow(1,230,5,600,600,"Samples",#PB_Window_TitleBar)
    TextGadget(-1,10,10,200,24,"TextGadget")
   
    g=StringGadget(-1,10,50,200,24,"StringGadget")
    g=StringGadget(-1,10,80,200,24,"StringGadget - BackColor")
    SetGadgetColor(g,#PB_Gadget_BackColor,$88ff88)
    g=StringGadget(-1,10,110,200,24,"StringGadget - disabled")
    DisableGadget(g,1)
   
    ButtonGadget(-1,10,160,200,24,"ButtonGadget")
   
    g=ButtonGadget(-1,10,190,200,24,"ButtonGadget-Toggle",#PB_Button_Toggle):SetGadgetState(g,1)
   
    CreateImage(0,190,40,32,#PB_Image_Transparent)
    StartDrawing(ImageOutput(0))
    For i=0 To 100:Circle(Random(200),Random(40),Random(5)+2,Random($ffffffff)):Next
    DrawingMode(#PB_2DDrawing_Transparent)
    DrawText(20,10,"ButtonImageGadget",$000000)
    StopDrawing()
    ButtonImageGadget(-1,10,220,200,32,ImageID(0))
     
   
    g=ComboBoxGadget(-1,10,310,200,20,#PB_ComboBox_Editable)
    AddGadgetItem(g,-1,"ComboBoxGadget")
    SetGadgetState(g,0)
    CheckBoxGadget(-1,10,340,200,24,"CheckBoxGadget")
    OptionGadget(-1,10,370,200,24,"OptionGadget")
   
   
    gc=PanelGadget(-1,230,10,320,200)
    AddGadgetItem(gc,-1,"Panel-1")
    ButtonGadget(-1,10,20,200,24,"ButtonGadget")
    g=ButtonGadget(-1,10,60,200,24,"ButtonGadget"):DisableGadget(g,1)
    StringGadget(-1,10,100,200,20,"StringGadget")
    g=StringGadget(-1,10,130,200,20,"StringGadget"):DisableGadget(g,1)
    AddGadgetItem(gc,-1,"Panel-2")
    AddGadgetItem(gc,-1,"Panel-3")
    CloseGadgetList()
    WebGadget(-1,230,230,320,200,"http://www.spiderbasic.com")

EndProcedure


initstyle("{'g_radius':8,'wt_back-color':3529884003,'wt_color':4294967295,'wc_back-color':4285775307,'b_back-color':4283539158,'b_color':4278190080,'wb_width':5,'wb_color':0,'w_shadow':9,'b_shadow':2,'p_back-color':4285241782}")

exemple()

StyleEditor()  ;  <---- use this function to show editor


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 1 message ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye