]>
Commit | Line | Data |
---|---|---|
1 | How to add new bitmaps to wxWindows UI elements | |
2 | =============================================== | |
3 | ||
4 | 0. Introduction | |
5 | --------------- | |
6 | ||
7 | Since the introduction of wxArtProvider class, it is no longer desired to | |
8 | hardcode art resources (e.g. icons and toolbar or button bitmaps) into the | |
9 | code. This was previously done either by including the bitmap in win32 | |
10 | resource file (include/wx/msw/wx.rc) or by including XPM files in the code. | |
11 | ||
12 | wxArtProvider should be used instead, to allow users to customize the look of | |
13 | their wxWindows app. This technote is a detailed description of steps needed | |
14 | when adding new bitmap/icon. | |
15 | ||
16 | 1. Adding new resource | |
17 | ---------------------- | |
18 | ||
19 | (Please see wxArtProvider reference documentation for explanation of "art ID" | |
20 | and "art client" terms.) | |
21 | ||
22 | First of all, you have to add new wxArtID constant to include/wx/artprov.h. | |
23 | Look for "Art IDs" and add new definition to the list, e.g. | |
24 | #define wxART_MY_BITMAP _T("my_bitmap") | |
25 | ||
26 | Add it to docs/latex/wx/artprov.tex, too. | |
27 | ||
28 | It may happen that the intended use of the new resource doesn't fit into any | |
29 | of defined client categories (search for "Art clients" in the header). In case | |
30 | the new resource is part of a larger category, you need to define a new | |
31 | client. Just add it to the list of existing clients (and don't forget to | |
32 | update artprov.tex): | |
33 | #define wxART_MY_CLIENT _T("my_client_C") | |
34 | (Note that you *have* to add the trailing "_C"!) | |
35 | ||
36 | Alternatively, you may use wxART_OTHER when accessing the resource if the | |
37 | bitmap is standalone. | |
38 | ||
39 | Once the header is updated, it's time to add XPM file with the bitmap to | |
40 | $(wx)/art. Add it to $(wx)/art if it is platform-independent or to | |
41 | $(wx)/art/$(toolkit) if it is something specific to one of the toolkits. Note | |
42 | that "specific to one of the toolkits" doesn't mean that the bitmap is *used* | |
43 | by only one toolkit, but that it doesn't make sense for any of the others! For | |
44 | example, a GTK wxART_WARNING icon ($(wx)/art/gtk/warning.xpm) is specific to | |
45 | wxGTK, but new_dir.xpm makes sense even under wxMSW even though it is | |
46 | currently only used by the generic file dialog. Remember that wxArtProvider | |
47 | can be used by users, not only the library. | |
48 | ||
49 | Finally, wxDefaultArtProvider in $(wx)/src/common/artstd.cpp must be updated. | |
50 | This consists of two steps: | |
51 | ||
52 | a) add #include line for your XPM file, e.g. #include "../../art/my_bmp.xpm" | |
53 | b) add ART(...) line to wxDefaultArtProvider::CreateBitmap(). The first | |
54 | argument is wxArtID, the other is XPM file name (w/o extension), e.g. | |
55 | ART(wxART_MY_BITMAP, my_bmp) | |
56 | ||
57 | That's all. The bitmap is now available to wxArtProvider users. | |
58 | ||
59 | Note: there's no difference between icons and bitmaps, always treat them as | |
60 | bitmaps inside wx(Default)ArtProvider. | |
61 | ||
62 | 2. Accessing the resource | |
63 | ------------------------- | |
64 | ||
65 | The file that will use the bitmap needs to include "wx/artprov.h". The code to | |
66 | access the bitmap (or icon) is trivial: | |
67 | ||
68 | wxBitmap bmp = wxArtProvider::GetBitmap(wxART_MY_BITMAP, wxART_MY_CLIENT); | |
69 | // this would be "wxBitmap bmp(my_bmp_xpm);" before | |
70 | wxIcon icon = wxArtProvider::GetIcon(wxART_MY_ICON, wxART_MY_CLIENT); | |
71 | ||
72 | Substitute wxART_MY_CLIENT in the example with a suitable client ID. If the | |
73 | client is wxART_OTHER you may write only | |
74 | ||
75 | wxArtProvider::GetBitmap(wxART_MY_BITMAP). | |
76 | ||
77 | 3. Providing a demo | |
78 | ------------------- | |
79 | ||
80 | It is highly desirable to let the users know what stock bitmaps are available | |
81 | in wxWindows. The "artprov" sample serves this purpose: it contains a browser | |
82 | dialog that displays all available art resources. | |
83 | ||
84 | It has to be updated to accomodate for new bitmaps. Fortunately, this is | |
85 | trivial: open $(wx)/samples/artprov/artbrows.cpp in text editor and | |
86 | ART_ICON(wxART_MY_BITMAP) line to the FillBitmaps() function. | |
87 | ||
88 | Similarly, if you add a new client, please update FillClients() by adding new | |
89 | client to the end of the list. | |
90 | ||
91 | === EOF === | |
92 | ||
93 | Version: $Id$ |