Un Device Context est une structure qui définit un ensemble d'objets graphiques et leurs attributs associés, ainsi que les modes graphiques.
Les objets graphiques comprennent entre autre, un crayon à dessin (wxPen), un pinceau pour peindre (wxBrush), une surface bitmap pour afficher des images ou des dessins (wxBitmap), une palette pour définir le jeu des couleurs disponibles (wxColour)...
un wxDC est un contexte de périphérique sur lequel il est possible de dessiner des graphiques et du texte.
Le contexte de périphérique est destiné à représenter un bon nombre de périphériques de sortie, et ce de façon générique, avec la même API utilisée pour tous.
Certaines de ces classes sont créées temporairement pour dessiner sur une fenêtre.
Il s'agit de: wxScreenDC , wxClientDC , wxPaintDC et wxWindowDC.
Le tableau suivant décrit les circonstances dans lesquelles vous devez utiliser ces classes.
wxScreenDC | Utilisez cette option pour peindre sur l'écran. ( par opposition à une fenêtre individuelle ) |
wxClientDC | Utilisez cette option pour peindre sur la zone client de la fenêtre, mais ne pas l'utiliser dans un wxPaintEvent |
wxPaintDC | Utilisez cette option pour peindre sur la zone cliente d'une fenêtre, mais seulement à partir d'un wxPaintEvent |
wxWindowDC | Utilisez cette option pour peindre sur toute la surface d'une fenêtre, y compris les décorations. Cela peut ne pas être disponible sur les plates-formes non-Windows |
wxDC est une classe de base abstraite qui ne peut être créée directement.
Vous devrez utiliser wxPaintDC , wxClientDC , wxWindowDC , wxScreenDC , wxMemoryDC ou wxPrinterDC.
La classe wxBitmap encapsule le concept d'un bitmap dépendant de la plateforme, monochromes ou couleur.
Les méthodes utilisées pour créer un bitmap sont spécifiques à la plateforme.
Une image bitmap créée dynamiquement ou chargée à partir d'un fichier peut être sélectionnée dans un Device Contexts de mémoire. ( Voir l'exemple ci-dessous avec wx.wxMemoryDC )
Pour créer un bitmap et dessiner dessus:
frame = wx.wxFrame( wx.NULL, -1, "Device Contexts", wx.wxDefaultPosition, wx.wxDefaultSize, wx.wxDEFAULT_FRAME_STYLE) panel = wx.wxPanel(frame, -1) memDC = wx.wxMemoryDC() bitmap = wx.wxBitmap(120, 120) memDC:SelectObjectAsSource(bitmap) memDC:SetBackground(wx.wxRED_BRUSH) memDC:Clear() memDC:SetPen(wx.wxBLACK_PEN) memDC:SetBrush(wx.wxTRANSPARENT_BRUSH) memDC:DrawRectangle(10, 10, 100, 100) memDC:SelectObjectAsSource(wx.wxNullBitmap) panel:Connect(wx.wxEVT_MOUSEWHEEL, function() local dc = wx.wxClientDC(panel) dc:DrawBitmap(bitmap, 0, 0, false) dc:delete() end) frame:Show() wx.wxGetApp():MainLoop()
Pour charger et afficher une image:
-- Chargement d'une image local monImage = wx.wxBitmap("../image.XYZ",wx.wxBITMAP_TYPE_XYZ) -- Affichage de monImage panel:Connect(wx.wxEVT_PAINT, function() local dc = wx.wxPaintDC(panel) dc:DrawBitmap(monImage, posx, posy, false) dc:delete() end)
Ci-dessous, liste des formats autorisés par Lua.
wx.wxBITMAP_TYPE_INVALID wx.wxBITMAP_TYPE_BMP wx.wxBITMAP_TYPE_BMP_RESOURCE wx.wxBITMAP_TYPE_RESOURCE wx.wxBITMAP_TYPE_ICO wx.wxBITMAP_TYPE_ICO_RESOURCE wx.wxBITMAP_TYPE_CUR wx.wxBITMAP_TYPE_CUR_RESOURCE wx.wxBITMAP_TYPE_XBM wx.wxBITMAP_TYPE_XBM_DATA wx.wxBITMAP_TYPE_XPM wx.wxBITMAP_TYPE_XPM_DATA wx.wxBITMAP_TYPE_TIF wx.wxBITMAP_TYPE_TIF_RESOURCE wx.wxBITMAP_TYPE_GIF wx.wxBITMAP_TYPE_GIF_RESOURCE wx.wxBITMAP_TYPE_PNG wx.wxBITMAP_TYPE_PNG_RESOURCE wx.wxBITMAP_TYPE_JPEG wx.wxBITMAP_TYPE_JPEG_RESOURCE wx.wxBITMAP_TYPE_PNM wx.wxBITMAP_TYPE_PNM_RESOURCE wx.wxBITMAP_TYPE_PCX wx.wxBITMAP_TYPE_PCX_RESOURCE wx.wxBITMAP_TYPE_PICT wx.wxBITMAP_TYPE_PICT_RESOURCE wx.wxBITMAP_TYPE_ICON wx.wxBITMAP_TYPE_ICON_RESOURCE wx.wxBITMAP_TYPE_ANI wx.wxBITMAP_TYPE_IFF wx.wxBITMAP_TYPE_TGA wx.wxBITMAP_TYPE_ANY
Une icône* est une petite image rectangulaire généralement utilisée pour désigner une application.
Elle diffère d'un wx.wxBitmap en ayant toujours un masque qui lui est associé pour la transparence.
Sur certaines plates-formes, les icônes et les bitmaps sont mis en oeuvre de manière identique, car il n'y a pas de distinction réelle entre un wx.wxBitmap avec un masque et une icône, et il n'y a pas de format icône spécifique.
Cependant, certaines plates-formes comme Windows, font la distinction, si une catégorie distincte est fournie.
Il est généralement souhaitable d'associer une icône à une frame.
Les icônes peuvent également être utilisées à d'autres fins, par exemple avec wx.wxTreeCtrl et wx.wxListCtrl.
Une icône attribuée à un cadre sera supprimé lorsque le cadre sera supprimé.
Sous Windows, l'icône ne sera pas rechargée si elle a déjà été utilisée.
La façon de charger une icône dans un programme est similaire à celle utilisée avec un bitmap.
Exemple de code pour changer l'icône d'une frame:
local icon = wx.wxIcon(.."/Images/monIcon.ico", wx.wxBITMAP_TYPE_ICO) local icon = wx.wxIcon( .."/Images/monIcon.png", wx.wxBITMAP_TYPE_PNG ) frame = wx.wxFrame(wx.wx.NULL, -1, "Mon petit programme") -- Changement de l'icône de la frame. ( 16x16 ou 32x32 ) local newIcon = wx.wxIcon( "../Images/monIcon.png", wx.wxBITMAP_TYPE_PNG ) frame:SetIcon(newIcon)
Le pen (crayon) est un outil de dessin.
Il est utilisé pour tracer des lignes et peindre le contour des rectangles, ellipses, etc.
Il a une couleur, une largeur et un style.
Il existe quelques couleurs prédéfinies.
wx.wxNullPen wx.wxBLACK_DASHED_PEN wx.wxBLACK_PEN wx.wxCYAN_PEN wx.wxGREEN_PEN wx.wxGREY_PEN wx.wxLIGHT_GREY_PEN wx.wxMEDIUM_GREY_PEN wx.wxRED_PEN wx.wxTRANSPARENT_PEN wx.wxWHITE_PEN
Il existe aussi quelques styles prédéfinies.
wx.wxCAP_BUTT wx.wxCAP_PROJECTING wx.wxCAP_ROUND wx.wxDOT wx.wxDOT_DASH wx.wxSOLID wx.wxLONG_DASH wx.wxSHORT_DASH wx.wxUSER_DASH wx.wxJOIN_BEVEL wx.wxJOIN_MITER wx.wxJOIN_ROUND wx.wxTRANSPARENT wx.wxSTIPPLE_MASK_OPAQUE wx.wxSTIPPLE_MASK wx.wxSTIPPLE wx.wxBDIAGONAL_HATCH wx.wxCROSSDIAG_HATCH wx.wxFDIAGONAL_HATCH wx.wxCROSS_HATCH wx.wxHORIZONTAL_HATCH wx.wxVERTICAL_HATCH
Le "pen" se construit de la façon suivante.
local pen = wx.wxPen(const wx.wxColour &colour, -- la couleur int width = 1, -- l'épaisseur wx.wxSOLID -- le style )
Une brosse est un outil de dessin pour remplissage dans les zones.
Elle est utilisée pour peindre l'arrière-plan de rectangles, d'ellipses, etc.
Elle a une couleur et un style. ( dans la mesure du possible, les mêmes styles que pour le crayon )wx.wxNullBrush wx.wxBLUE_BRUSH wx.wxGREEN_BRUSH wx.wxWHITE_BRUSH wx.wxBLACK_BRUSH wx.wxGREY_BRUSH wx.wxMEDIUM_GREY_BRUSH wx.wxLIGHT_GREY_BRUSH wx.wxTRANSPARENT_BRUSH wx.wxCYAN_BRUSH wx.wxRED_BRUSH
La "brosse" se construit de la façon suivante.
local brosse = wx.wxBrush(const wx.wxColour &colour, -- couleur wx.wxSOLID -- style )
Une palette est une table qui mappe des valeurs de pixels aux couleurs RVB.
Elle permet aux couleurs d'une image bitmap à faible profondeur, par exemple, d'être mis en correspondance avec les couleurs disponibles dans un présentoir.
La notion de palettes devient de plus en plus obsolète de nos jours et seul le port MSW utilise encore une palette d'origine.
Tous les autres ports utilisent le code générique qui est juste un tableau de couleurs.