Return to FunctionReference page
Function
SWF!ButtonRecord SWFButton_addCharacter(SWFButton button, SWFCharacter character, byte state);
Purpose
- Adds a character object (shape, etc) to a button.
Parameters
SWFButton button - The button object to attach the character to.
SWFCharacter character - The character object to attach.
byte state - Which of the four possible button states this character will be used in. Can be one, several, or even all of them. Check under "states" for SWFButton in ValueReference for possible values.
Returns
A new SWF!ButtonRecord object. If you want to adjust the character after you've added it to the button (i.e. it's position), you'll need to keep it.
Language
- C
Ming version
- (unknown). At least 0.4.0.beta5 and onwards, likely earlier versions as well.
Notes
None as yet
Example
Note - this example is in C, and works fine with gcc and Ming 0.4.0.beta5. Try it. :)
1 #define BOX_HEIGHT 200
2 #define BOX_WIDTH 300
3
4 #include <stdio.h>
5 #include <stdlib.h>
6 #include <ming.h>
7
8
9 int main(void)
10 {
11 // General variables
12 SWFDisplayItem buttons_display_item;
13 int i;
14 SWFDisplayItem mc_display_item;
15 SWFMovieClip movie_clip;
16 SWFDisplayItem shape_display_item;
17 SWFShape shape_object;
18 SWFMovie my_movie;
19 SWFAction my_movie_action;
20
21 // Fill styles we create
22 SWFFillStyle dark_blue_fill;
23 SWFFillStyle light_blue_fill;
24 SWFFillStyle green_fill;
25
26 // Variables used for the play button
27 SWFAction play_action;
28 SWFButton play_button;
29 SWFButtonRecord play_record_down;
30 SWFButtonRecord play_record_over;
31 SWFButtonRecord play_record_up;
32 SWFShape play_shape_down;
33 SWFShape play_shape_over;
34 SWFShape play_shape_up;
35
36 // Variables used for the stop button
37 SWFAction stop_action;
38 SWFButton stop_button;
39 SWFButtonRecord stop_record_down;
40 SWFButtonRecord stop_record_over;
41 SWFButtonRecord stop_record_up;
42 SWFShape stop_shape_down;
43 SWFShape stop_shape_over;
44 SWFShape stop_shape_up;
45
46
47 // Initialise the movie structure in memory
48 Ming_init();
49 my_movie = newSWFMovieWithVersion(7);
50
51 // Set the desired compression level for the output (9 = maximum compression)
52 Ming_setSWFCompression(9);
53
54 // Adjust the dimensions of the movie
55 SWFMovie_setDimension(my_movie, 800, 600);
56
57 // Set the frame rate for the movie to 24 frames per second
58 SWFMovie_setRate(my_movie, 24.0);
59
60 // Ensure the movie starts out in the "stopped" state
61 my_movie_action = newSWFAction("_root.stop();");
62 SWFMovie_add(my_movie, (SWFBlock) my_movie_action);
63
64 // Create the fill styles we'll be using
65 light_blue_fill = newSWFSolidFillStyle(0x00, 0x00, 0xf0, 0xff);
66 dark_blue_fill = newSWFSolidFillStyle(0x00, 0x00, 0x90, 0xff);
67 green_fill = newSWFSolidFillStyle(0x00, 0xcc, 0x00, 0xff);
68
69 // *** Create the Play button ***
70
71 // Create a shape to be used in the play button for its "UP" state
72 play_shape_up = newSWFShape();
73 SWFShape_setRightFillStyle(play_shape_up, dark_blue_fill); // Use the dark blue fill
74 SWFShape_setLine(play_shape_up, 1, 0x00, 0x00, 0x00, 0xff);
75 SWFShape_movePenTo(play_shape_up, 220.0, 500.0);
76 SWFShape_drawLine(play_shape_up, 25, 25);
77 SWFShape_drawLine(play_shape_up, -25, 25);
78 SWFShape_drawLine(play_shape_up, 0, -50);
79
80 // Create a shape to be used in the play button for its "MOUSE OVER" state
81 play_shape_over = newSWFShape();
82 SWFShape_setRightFillStyle(play_shape_over, light_blue_fill); // Use the light blue fill
83 SWFShape_setLine(play_shape_over, 1, 0x00, 0x00, 0x00, 0xff);
84 SWFShape_movePenTo(play_shape_over, 220.0, 500.0);
85 SWFShape_drawLine(play_shape_over, 25, 25);
86 SWFShape_drawLine(play_shape_over, -25, 25);
87 SWFShape_drawLine(play_shape_over, 0, -50);
88
89 // Create a shape to be used in the play button for its "DOWN" state
90 play_shape_down = newSWFShape();
91 SWFShape_setRightFillStyle(play_shape_down, green_fill); // Use the green fill
92 SWFShape_setLine(play_shape_down, 1, 0x00, 0x00, 0x00, 0xff);
93 SWFShape_movePenTo(play_shape_down, 220.0, 500.0);
94 SWFShape_drawLine(play_shape_down, 25, 25);
95 SWFShape_drawLine(play_shape_down, -25, 25);
96 SWFShape_drawLine(play_shape_down, 0, -50);
97
98 // Create an empty button object we can use
99 play_button = newSWFButton();
100
101 // Add the shapes to the button for its various states
102 play_record_up = SWFButton_addCharacter(play_button, (SWFCharacter) play_shape_up, SWFBUTTON_UP|SWFBUTTON_HIT);
103 play_record_over = SWFButton_addCharacter(play_button, (SWFCharacter) play_shape_over, SWFBUTTON_OVER);
104 play_record_down = SWFButton_addCharacter(play_button, (SWFCharacter) play_shape_down, SWFBUTTON_DOWN);
105
106 // Add the Play action to the play button
107 play_action = newSWFAction("_root.play();");
108 SWFButton_addAction(play_button, play_action, SWFBUTTON_MOUSEUP);
109
110 // *** Create the Stop button ***
111
112 // Create a shape to be used in the stop button for its "UP" state
113 stop_shape_up = newSWFShape();
114 SWFShape_setRightFillStyle(stop_shape_up, dark_blue_fill); // Use the dark blue fill
115 SWFShape_setLine(stop_shape_up, 1, 0x00, 0x00, 0x00, 0xff);
116 SWFShape_movePenTo(stop_shape_up, 150.0, 500.0);
117 SWFShape_drawLine(stop_shape_up, 50, 0);
118 SWFShape_drawLine(stop_shape_up, 0, 50);
119 SWFShape_drawLine(stop_shape_up, -50, 0);
120 SWFShape_drawLine(stop_shape_up, 0, -50);
121
122 // Create a shape to be used in the stop button for its "MOUSE OVER" state
123 stop_shape_over = newSWFShape();
124 SWFShape_setRightFillStyle(stop_shape_over, light_blue_fill); // Use the light blue fill
125 SWFShape_setLine(stop_shape_over, 1, 0x00, 0x00, 0x00, 0xff);
126 SWFShape_movePenTo(stop_shape_over, 150.0, 500.0);
127 SWFShape_drawLine(stop_shape_over, 50, 0);
128 SWFShape_drawLine(stop_shape_over, 0, 50);
129 SWFShape_drawLine(stop_shape_over, -50, 0);
130 SWFShape_drawLine(stop_shape_over, 0, -50);
131
132 // Create a shape to be used in the stop button for its "DOWN" state
133 stop_shape_down = newSWFShape();
134 SWFShape_setRightFillStyle(stop_shape_down, green_fill); // Use the green fill
135 SWFShape_setLine(stop_shape_down, 1, 0x00, 0x00, 0x00, 0xff);
136 SWFShape_movePenTo(stop_shape_down, 150.0, 500.0);
137 SWFShape_drawLine(stop_shape_down, 50, 0);
138 SWFShape_drawLine(stop_shape_down, 0, 50);
139 SWFShape_drawLine(stop_shape_down, -50, 0);
140 SWFShape_drawLine(stop_shape_down, 0, -50);
141
142 // Create an empty button object we can use
143 stop_button = newSWFButton();
144
145 // Add the shapes to the button for its various states
146 stop_record_up = SWFButton_addCharacter(stop_button, (SWFCharacter) stop_shape_up, SWFBUTTON_UP|SWFBUTTON_HIT);
147 stop_record_over = SWFButton_addCharacter(stop_button, (SWFCharacter) stop_shape_over, SWFBUTTON_OVER);
148 stop_record_down = SWFButton_addCharacter(stop_button, (SWFCharacter) stop_shape_down, SWFBUTTON_DOWN);
149
150 // Add the Stop action to the stop button
151 stop_action = newSWFAction("_root.stop();");
152 SWFButton_addAction(stop_button, stop_action, SWFBUTTON_MOUSEUP);
153
154 // *** Create the movie clip container for the buttons ***
155
156 // Embed the buttons in a movie clip
157 movie_clip = newSWFMovieClip();
158 mc_display_item = SWFMovieClip_add(movie_clip, (SWFBlock) play_button);
159 mc_display_item = SWFMovieClip_add(movie_clip, (SWFBlock) stop_button);
160
161 // Advance the movie clip one frame, else it doesn't get displayed
162 SWFMovieClip_nextFrame(movie_clip);
163
164 // Add the movie clip to the main movie
165 buttons_display_item = SWFMovie_add(my_movie, movie_clip);
166
167 // Set the movie clip to be shown higher in the display stack than the main movie
168 SWFDisplayItem_setDepth(buttons_display_item, 100);
169
170 // ***** Create the "main movie" (a box) here *****
171
172 // Create the shape object we want
173 shape_object = newSWFShape();
174 SWFShape_setLine(shape_object, 1, 0x00, 0x00, 0x00, 0xff);
175 SWFShape_setRightFillStyle(shape_object, light_blue_fill);
176 SWFShape_drawLine(shape_object, BOX_WIDTH, 0.0);
177 SWFShape_drawLine(shape_object, 0.0, BOX_HEIGHT);
178 SWFShape_drawLine(shape_object, -(BOX_WIDTH), 0.0);
179 SWFShape_drawLine(shape_object, 0.0, -(BOX_HEIGHT));
180
181 // Add the shape object to the movie
182 shape_display_item = SWFMovie_add(my_movie, (SWFBlock) shape_object);
183
184 // Set the display depth for the image
185 SWFDisplayItem_setDepth(shape_display_item, 10);
186
187 // Move to 100, 100
188 SWFDisplayItem_moveTo(shape_display_item, 150.00, 100.0);
189
190 // Progressively move the square down and to the right
191 for (i = 0; i <= 250; i++)
192 {
193 SWFMovie_nextFrame(my_movie);
194 SWFDisplayItem_move(shape_display_item, 2, 2);
195 }
196
197 // Save the swf movie file to disk
198 SWFMovie_save(my_movie, "ming-test-controlbar.swf");
199
200 // Free the memory allocated in this function
201 destroySWFMovie(my_movie);
202 destroySWFShape(shape_object);
203 destroySWFMovieClip(movie_clip);
204 destroySWFButton(stop_button);
205 destroySWFButton(play_button);
206 destroySWFFillStyle(dark_blue_fill);
207 destroySWFFillStyle(light_blue_fill);
208 destroySWFFillStyle(green_fill);
209 return EXIT_SUCCESS;
210 }