2 * Copyright (C) 2007 Benjamin Otte <otte@gnome.org>
3 * 2007 Pekka Lampila <pekka.lampila@iki.fi>
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor,
18 * Boston, MA 02110-1301 USA
26 #include <pango/pangocairo.h>
28 #include "swfdec_text_field.h"
29 #include "swfdec_text_field_movie.h"
30 #include "swfdec_as_strings.h"
31 #include "swfdec_debug.h"
32 #include "swfdec_as_native_function.h"
33 #include "swfdec_as_internal.h"
34 #include "swfdec_as_context.h"
35 #include "swfdec_as_object.h"
36 #include "swfdec_as_frame_internal.h"
37 #include "swfdec_internal.h"
38 #include "swfdec_player_internal.h"
41 swfdec_text_field_movie_int_to_color (SwfdecAsContext
*cx
, int value
)
44 value
= (0xffffff + 1) + value
% (0xffffff + 1);
46 value
= value
% (0xffffff + 1);
49 return SWFDEC_COLOR_COMBINE (value
>> 16 & 0xff, value
>> 8 & 0xff,
53 // does nothing but calls valueOf
55 swfdec_text_field_movie_set_readonly (SwfdecAsContext
*cx
,
56 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
59 SwfdecTextFieldMovie
*text
;
61 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "");
64 swfdec_as_value_to_number (cx
, &argv
[0]);
68 * Native properties: Text
71 swfdec_text_field_movie_do_get_text (SwfdecAsContext
*cx
,
72 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
75 SwfdecTextFieldMovie
*text
;
77 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "");
79 SWFDEC_AS_VALUE_SET_STRING (ret
, swfdec_text_field_movie_get_text (text
));
83 swfdec_text_field_movie_do_set_text (SwfdecAsContext
*cx
,
84 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
87 SwfdecTextFieldMovie
*text
;
90 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "s", &value
);
92 swfdec_text_field_movie_set_text (text
, value
, FALSE
);
94 if (text
->variable
!= NULL
) {
95 if (text
->text
->html
) {
96 swfdec_text_field_movie_set_listen_variable_text (text
,
97 swfdec_text_field_movie_get_html_text (text
));
99 swfdec_text_field_movie_set_listen_variable_text (text
,
100 swfdec_text_field_movie_get_text (text
));
106 swfdec_text_field_movie_get_html (SwfdecAsContext
*cx
, SwfdecAsObject
*object
,
107 guint argc
, SwfdecAsValue
*argv
, SwfdecAsValue
*ret
)
109 SwfdecTextFieldMovie
*text
;
111 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "");
113 SWFDEC_AS_VALUE_SET_BOOLEAN (ret
, text
->text
->html
);
117 swfdec_text_field_movie_set_html (SwfdecAsContext
*cx
, SwfdecAsObject
*object
,
118 guint argc
, SwfdecAsValue
*argv
, SwfdecAsValue
*ret
)
120 SwfdecTextFieldMovie
*text
;
123 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "b", &value
);
125 swfdec_as_value_to_number (cx
, &argv
[0]);
127 text
->text
->html
= value
;
129 // FIXME: resize? invalidate?
133 swfdec_text_field_movie_get_htmlText (SwfdecAsContext
*cx
,
134 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
137 SwfdecTextFieldMovie
*text
;
139 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "");
141 if (text
->style_sheet_input
) {
142 SWFDEC_AS_VALUE_SET_STRING (ret
, text
->style_sheet_input
);
143 } else if (text
->text
->html
) {
144 SWFDEC_AS_VALUE_SET_STRING (ret
,
145 swfdec_text_field_movie_get_html_text (text
));
147 SWFDEC_AS_VALUE_SET_STRING (ret
,
148 swfdec_text_field_movie_get_text (text
));
153 swfdec_text_field_movie_set_htmlText (SwfdecAsContext
*cx
,
154 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
157 SwfdecTextFieldMovie
*text
;
160 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "s", &value
);
162 swfdec_text_field_movie_set_text (text
, value
, text
->text
->html
);
164 if (text
->variable
!= NULL
) {
165 if (text
->text
->html
) {
166 swfdec_text_field_movie_set_listen_variable_text (text
,
167 swfdec_text_field_movie_get_html_text (text
));
169 swfdec_text_field_movie_set_listen_variable_text (text
,
170 swfdec_text_field_movie_get_text (text
));
176 swfdec_text_field_movie_get_length (SwfdecAsContext
*cx
, SwfdecAsObject
*object
,
177 guint argc
, SwfdecAsValue
*argv
, SwfdecAsValue
*ret
)
179 SwfdecTextFieldMovie
*text
;
181 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "");
183 SWFDEC_AS_VALUE_SET_INT (ret
, g_utf8_strlen (text
->input
->str
, -1));
187 * Native properties: Input
190 swfdec_text_field_movie_get_condenseWhite (SwfdecAsContext
*cx
,
191 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
194 SwfdecTextFieldMovie
*text
;
196 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "");
198 SWFDEC_AS_VALUE_SET_BOOLEAN (ret
, text
->condense_white
);
202 swfdec_text_field_movie_set_condenseWhite (SwfdecAsContext
*cx
,
203 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
206 SwfdecTextFieldMovie
*text
;
209 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "b", &value
);
211 swfdec_as_value_to_number (cx
, &argv
[0]);
213 text
->condense_white
= value
;
217 swfdec_text_field_movie_get_maxChars (SwfdecAsContext
*cx
,
218 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
221 SwfdecTextFieldMovie
*text
;
223 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "");
225 if (text
->text
->max_chars
!= 0) {
226 SWFDEC_AS_VALUE_SET_INT (ret
, text
->text
->max_chars
);
228 SWFDEC_AS_VALUE_SET_NULL (ret
);
233 swfdec_text_field_movie_set_maxChars (SwfdecAsContext
*cx
,
234 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
237 SwfdecTextFieldMovie
*text
;
239 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "");
244 swfdec_as_value_to_number (cx
, &argv
[0]);
245 text
->text
->max_chars
= swfdec_as_value_to_integer (cx
, &argv
[0]);
249 swfdec_text_field_movie_get_multiline (SwfdecAsContext
*cx
,
250 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
253 SwfdecTextFieldMovie
*text
;
255 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "");
257 SWFDEC_AS_VALUE_SET_BOOLEAN (ret
, text
->text
->multiline
);
261 swfdec_text_field_movie_set_multiline (SwfdecAsContext
*cx
,
262 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
265 SwfdecTextFieldMovie
*text
;
268 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "b", &value
);
270 swfdec_as_value_to_number (cx
, &argv
[0]);
272 text
->text
->multiline
= value
;
276 swfdec_text_field_movie_get_restrict (SwfdecAsContext
*cx
,
277 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
280 SwfdecTextFieldMovie
*text
;
282 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "");
284 if (text
->restrict_
!= NULL
) {
285 SWFDEC_AS_VALUE_SET_STRING (ret
, text
->restrict_
);
287 SWFDEC_AS_VALUE_SET_NULL (ret
);
292 swfdec_text_field_movie_set_restrict (SwfdecAsContext
*cx
,
293 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
296 SwfdecTextFieldMovie
*text
;
300 swfdec_as_value_to_number (cx
, &argv
[0]);
302 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "s", &value
);
304 if (SWFDEC_AS_VALUE_IS_UNDEFINED (&argv
[0]) ||
305 SWFDEC_AS_VALUE_IS_NULL (&argv
[0])) {
306 text
->restrict_
= NULL
;
308 text
->restrict_
= value
;
313 swfdec_text_field_movie_get_selectable (SwfdecAsContext
*cx
,
314 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
317 SwfdecTextFieldMovie
*text
;
319 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "");
321 SWFDEC_AS_VALUE_SET_BOOLEAN (ret
, text
->text
->selectable
);
325 swfdec_text_field_movie_set_selectable (SwfdecAsContext
*cx
,
326 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
329 SwfdecTextFieldMovie
*text
;
332 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "b", &value
);
334 swfdec_as_value_to_number (cx
, &argv
[0]);
336 text
->text
->selectable
= value
;
342 swfdec_text_field_movie_do_get_type (SwfdecAsContext
*cx
,
343 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
346 SwfdecTextFieldMovie
*text
;
348 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "");
350 if (text
->text
->editable
) {
351 SWFDEC_AS_VALUE_SET_STRING (ret
, SWFDEC_AS_STR_input
);
353 SWFDEC_AS_VALUE_SET_STRING (ret
, SWFDEC_AS_STR_dynamic
);
358 swfdec_text_field_movie_do_set_type (SwfdecAsContext
*cx
,
359 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
362 SwfdecTextFieldMovie
*text
;
366 swfdec_as_value_to_number (cx
, &argv
[0]);
368 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "s", &value
);
370 if (!g_strcasecmp (value
, SWFDEC_AS_STR_input
)) {
371 text
->text
->editable
= TRUE
;
372 } else if (!g_strcasecmp (value
, SWFDEC_AS_STR_dynamic
)) {
373 text
->text
->editable
= FALSE
;
380 swfdec_text_field_movie_do_get_variable (SwfdecAsContext
*cx
,
381 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
384 SwfdecTextFieldMovie
*text
;
386 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "");
388 if (text
->variable
) {
389 SWFDEC_AS_VALUE_SET_STRING (ret
, text
->variable
);
391 SWFDEC_AS_VALUE_SET_NULL (ret
);
396 swfdec_text_field_movie_do_set_variable (SwfdecAsContext
*cx
,
397 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
400 SwfdecTextFieldMovie
*text
;
404 swfdec_as_value_to_number (cx
, &argv
[0]);
406 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "s", &value
);
408 if (SWFDEC_AS_VALUE_IS_UNDEFINED (&argv
[0]) ||
409 SWFDEC_AS_VALUE_IS_NULL (&argv
[0]) || value
== SWFDEC_AS_STR_EMPTY
) {
413 swfdec_text_field_movie_set_listen_variable (text
, value
);
417 * Native properties: Info
420 swfdec_text_field_movie_get_textHeight (SwfdecAsContext
*cx
,
421 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
424 SwfdecTextFieldMovie
*text
;
427 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "");
429 swfdec_text_field_movie_get_text_size (text
, NULL
, &height
);
430 SWFDEC_AS_VALUE_SET_NUMBER (ret
, SWFDEC_TWIPS_TO_DOUBLE (height
));
434 swfdec_text_field_movie_get_textWidth (SwfdecAsContext
*cx
,
435 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
438 SwfdecTextFieldMovie
*text
;
441 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "");
443 swfdec_text_field_movie_get_text_size (text
, &width
, NULL
);
444 SWFDEC_AS_VALUE_SET_NUMBER (ret
, SWFDEC_TWIPS_TO_DOUBLE (width
));
448 * Native properties: Background & border
451 swfdec_text_field_movie_get_background (SwfdecAsContext
*cx
,
452 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
455 SwfdecTextFieldMovie
*text
;
457 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "");
459 SWFDEC_AS_VALUE_SET_BOOLEAN (ret
, text
->text
->background
);
463 swfdec_text_field_movie_set_background (SwfdecAsContext
*cx
,
464 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
467 SwfdecTextFieldMovie
*text
;
470 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "b", &value
);
472 swfdec_as_value_to_number (cx
, &argv
[0]);
474 if (text
->text
->background
!= value
) {
475 text
->text
->background
= value
;
476 swfdec_movie_invalidate (SWFDEC_MOVIE (text
));
481 swfdec_text_field_movie_get_backgroundColor (SwfdecAsContext
*cx
,
482 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
485 SwfdecTextFieldMovie
*text
;
487 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "");
489 SWFDEC_AS_VALUE_SET_NUMBER (ret
,
490 SWFDEC_COLOR_R (text
->background_color
) << 16 |
491 SWFDEC_COLOR_G (text
->background_color
) << 8 |
492 SWFDEC_COLOR_B (text
->background_color
));
496 swfdec_text_field_movie_set_backgroundColor (SwfdecAsContext
*cx
,
497 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
500 SwfdecTextFieldMovie
*text
;
504 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "i", &value
);
506 color
= swfdec_text_field_movie_int_to_color (cx
, value
);
507 if (text
->background_color
!= color
) {
508 text
->background_color
= color
;
509 swfdec_movie_invalidate (SWFDEC_MOVIE (text
));
514 swfdec_text_field_movie_get_border (SwfdecAsContext
*cx
,
515 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
518 SwfdecTextFieldMovie
*text
;
520 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "");
522 SWFDEC_AS_VALUE_SET_BOOLEAN (ret
, text
->text
->border
);
526 swfdec_text_field_movie_set_border (SwfdecAsContext
*cx
,
527 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
530 SwfdecTextFieldMovie
*text
;
533 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "b", &value
);
535 swfdec_as_value_to_number (cx
, &argv
[0]);
537 if (text
->text
->border
!= value
) {
538 text
->text
->border
= value
;
539 swfdec_movie_invalidate (SWFDEC_MOVIE (text
));
544 swfdec_text_field_movie_get_borderColor (SwfdecAsContext
*cx
,
545 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
548 SwfdecTextFieldMovie
*text
;
550 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "");
553 SWFDEC_AS_VALUE_SET_NUMBER (ret
,
554 SWFDEC_COLOR_R (text
->border_color
) << 16 |
555 SWFDEC_COLOR_G (text
->border_color
) << 8 |
556 SWFDEC_COLOR_B (text
->border_color
));
560 swfdec_text_field_movie_set_borderColor (SwfdecAsContext
*cx
,
561 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
564 SwfdecTextFieldMovie
*text
;
568 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "i", &value
);
570 color
= swfdec_text_field_movie_int_to_color (cx
, value
);
571 if (text
->border_color
!= color
) {
572 text
->border_color
= color
;
573 swfdec_movie_invalidate (SWFDEC_MOVIE (text
));
578 * Native properties: Scrolling
581 swfdec_text_field_movie_get_bottomScroll (SwfdecAsContext
*cx
,
582 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
585 SwfdecTextFieldMovie
*text
;
587 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "");
589 SWFDEC_AS_VALUE_SET_NUMBER (ret
, text
->scroll_bottom
);
593 swfdec_text_field_movie_do_get_hscroll (SwfdecAsContext
*cx
,
594 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
597 SwfdecTextFieldMovie
*text
;
599 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "");
601 SWFDEC_AS_VALUE_SET_NUMBER (ret
, text
->hscroll
);
605 swfdec_text_field_movie_do_set_hscroll (SwfdecAsContext
*cx
,
606 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
609 SwfdecTextFieldMovie
*text
;
612 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "i", &value
);
614 value
= CLAMP (value
, 0, text
->hscroll_max
);
615 if (value
!= text
->hscroll
) {
616 text
->hscroll
= value
;
617 text
->scroll_changed
= TRUE
;
618 swfdec_movie_invalidate (SWFDEC_MOVIE (text
));
623 swfdec_text_field_movie_get_maxhscroll (SwfdecAsContext
*cx
,
624 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
627 SwfdecTextFieldMovie
*text
;
629 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "");
631 if (!text
->text
->word_wrap
) {
632 SWFDEC_AS_VALUE_SET_NUMBER (ret
, text
->hscroll_max
);
634 SWFDEC_AS_VALUE_SET_NUMBER (ret
, 0);
639 swfdec_text_field_movie_get_maxscroll (SwfdecAsContext
*cx
,
640 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
643 SwfdecTextFieldMovie
*text
;
645 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "");
647 SWFDEC_AS_VALUE_SET_NUMBER (ret
, text
->scroll_max
);
651 swfdec_text_field_movie_get_mouseWheelEnabled (SwfdecAsContext
*cx
,
652 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
655 SwfdecTextFieldMovie
*text
;
657 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "");
659 SWFDEC_AS_VALUE_SET_BOOLEAN (ret
, text
->mouse_wheel_enabled
);
663 swfdec_text_field_movie_set_mouseWheelEnabled (SwfdecAsContext
*cx
,
664 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
667 SwfdecTextFieldMovie
*text
;
670 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "b", &value
);
672 swfdec_as_value_to_number (cx
, &argv
[0]);
674 text
->mouse_wheel_enabled
= value
;
678 swfdec_text_field_movie_do_get_scroll (SwfdecAsContext
*cx
,
679 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
682 SwfdecTextFieldMovie
*text
;
684 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "");
686 SWFDEC_AS_VALUE_SET_NUMBER (ret
, text
->scroll
);
690 swfdec_text_field_movie_do_set_scroll (SwfdecAsContext
*cx
,
691 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
694 SwfdecTextFieldMovie
*text
;
697 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "i", &value
);
699 value
= CLAMP (value
, 1, text
->scroll_max
);
700 if (value
!= text
->scroll
) {
701 text
->scroll_bottom
+= value
- text
->scroll
;
702 text
->scroll
= value
;
703 text
->scroll_changed
= TRUE
;
704 swfdec_movie_invalidate (SWFDEC_MOVIE (text
));
709 * Native properties: Display
712 swfdec_text_field_movie_get_autoSize (SwfdecAsContext
*cx
,
713 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
716 SwfdecTextFieldMovie
*text
;
718 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "");
720 switch (text
->text
->auto_size
) {
721 case SWFDEC_AUTO_SIZE_NONE
:
722 SWFDEC_AS_VALUE_SET_STRING (ret
, SWFDEC_AS_STR_none
);
724 case SWFDEC_AUTO_SIZE_LEFT
:
725 SWFDEC_AS_VALUE_SET_STRING (ret
, SWFDEC_AS_STR_left
);
727 case SWFDEC_AUTO_SIZE_RIGHT
:
728 SWFDEC_AS_VALUE_SET_STRING (ret
, SWFDEC_AS_STR_right
);
730 case SWFDEC_AUTO_SIZE_CENTER
:
731 SWFDEC_AS_VALUE_SET_STRING (ret
, SWFDEC_AS_STR_center
);
734 g_assert_not_reached ();
739 swfdec_text_field_movie_set_autoSize (SwfdecAsContext
*cx
,
740 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
743 SwfdecTextFieldMovie
*text
;
747 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "");
752 if (SWFDEC_AS_VALUE_IS_BOOLEAN (&argv
[0])) {
753 if (SWFDEC_AS_VALUE_GET_BOOLEAN (&argv
[0])) {
754 text
->text
->auto_size
= SWFDEC_AUTO_SIZE_LEFT
;
756 text
->text
->auto_size
= SWFDEC_AUTO_SIZE_NONE
;
761 swfdec_as_value_to_number (cx
, &argv
[0]);
762 s
= swfdec_as_value_to_string (cx
, &argv
[0]);
764 old
= text
->text
->auto_size
;
765 if (!g_ascii_strcasecmp (s
, "none")) {
766 text
->text
->auto_size
= SWFDEC_AUTO_SIZE_NONE
;
767 } else if (!g_ascii_strcasecmp (s
, "left")) {
768 text
->text
->auto_size
= SWFDEC_AUTO_SIZE_LEFT
;
769 } else if (!g_ascii_strcasecmp (s
, "right")) {
770 text
->text
->auto_size
= SWFDEC_AUTO_SIZE_RIGHT
;
771 } else if (!g_ascii_strcasecmp (s
, "center")) {
772 text
->text
->auto_size
= SWFDEC_AUTO_SIZE_CENTER
;
775 if (text
->text
->auto_size
!= old
) {
776 swfdec_text_field_movie_auto_size (text
);
777 // FIXME: fix scrolling
782 swfdec_text_field_movie_get_password (SwfdecAsContext
*cx
,
783 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
786 SwfdecTextFieldMovie
*text
;
788 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "");
790 SWFDEC_AS_VALUE_SET_BOOLEAN (ret
, text
->text
->password
);
794 swfdec_text_field_movie_set_password (SwfdecAsContext
*cx
,
795 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
798 SwfdecTextFieldMovie
*text
;
801 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "b", &value
);
803 swfdec_as_value_to_number (cx
, &argv
[0]);
805 if (text
->text
->password
!= value
) {
806 text
->text
->password
= value
;
807 if (!value
&& text
->asterisks
!= NULL
) {
808 g_free (text
->asterisks
);
809 text
->asterisks
= NULL
;
810 text
->asterisks_length
= 0;
812 swfdec_movie_invalidate (SWFDEC_MOVIE (text
));
817 swfdec_text_field_movie_get_wordWrap (SwfdecAsContext
*cx
,
818 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
821 SwfdecTextFieldMovie
*text
;
823 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "");
825 SWFDEC_AS_VALUE_SET_BOOLEAN (ret
, text
->text
->word_wrap
);
829 swfdec_text_field_movie_set_wordWrap (SwfdecAsContext
*cx
,
830 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
833 SwfdecTextFieldMovie
*text
;
836 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "b", &value
);
838 swfdec_as_value_to_number (cx
, &argv
[0]);
840 if (text
->text
->word_wrap
!= value
) {
841 text
->text
->word_wrap
= value
;
842 swfdec_movie_invalidate (SWFDEC_MOVIE (text
));
843 swfdec_text_field_movie_auto_size (text
);
844 // special case: don't set scrolling
849 * Native properties: Format
852 swfdec_text_field_movie_get_embedFonts (SwfdecAsContext
*cx
,
853 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
856 SwfdecTextFieldMovie
*text
;
858 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "");
860 SWFDEC_AS_VALUE_SET_BOOLEAN (ret
, text
->text
->embed_fonts
);
864 swfdec_text_field_movie_set_embedFonts (SwfdecAsContext
*cx
,
865 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
868 SwfdecTextFieldMovie
*text
;
871 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "b", &value
);
873 swfdec_as_value_to_number (cx
, &argv
[0]);
875 if (!text
->text
->embed_fonts
&& value
)
876 SWFDEC_FIXME ("Using embed fonts in TextField not supported");
878 text
->text
->embed_fonts
= value
;
884 swfdec_text_field_movie_get_styleSheet (SwfdecAsContext
*cx
,
885 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
888 SwfdecTextFieldMovie
*text
;
890 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "");
892 if (text
->style_sheet
!= NULL
) {
893 SWFDEC_AS_VALUE_SET_OBJECT (ret
, SWFDEC_AS_OBJECT (text
->style_sheet
));
895 SWFDEC_AS_VALUE_SET_UNDEFINED (ret
);
900 swfdec_text_field_movie_set_styleSheet (SwfdecAsContext
*cx
,
901 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
904 SwfdecTextFieldMovie
*text
;
905 SwfdecAsObject
*value
;
907 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "");
912 swfdec_as_value_to_number (cx
, &argv
[0]);
914 if (SWFDEC_AS_VALUE_IS_OBJECT (&argv
[0])) {
915 value
= SWFDEC_AS_VALUE_GET_OBJECT (&argv
[0]);
916 if (SWFDEC_IS_MOVIE (value
))
922 if (text
->style_sheet
== value
)
925 if (text
->style_sheet
!= NULL
&& SWFDEC_IS_STYLESHEET (text
->style_sheet
)) {
926 swfdec_style_sheet_remove_listener (SWFDEC_STYLESHEET (text
->style_sheet
),
930 text
->style_sheet
= value
;
932 if (value
!= NULL
&& SWFDEC_IS_STYLESHEET (value
)) {
933 if (text
->style_sheet_input
)
934 swfdec_text_field_movie_set_text (text
, text
->style_sheet_input
, TRUE
);
936 swfdec_style_sheet_add_listener (SWFDEC_STYLESHEET (value
), object
);
941 swfdec_text_field_movie_get_textColor (SwfdecAsContext
*cx
,
942 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
945 SwfdecTextFieldMovie
*text
;
947 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "");
949 SWFDEC_AS_VALUE_SET_NUMBER (ret
, text
->format_new
->color
);
952 // This doesn't work the same way as TextFormat's color setting
954 swfdec_text_field_movie_set_textColor (SwfdecAsContext
*cx
,
955 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
958 SwfdecTextFieldMovie
*text
;
961 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "i", &value
);
963 text
->format_new
->color
= swfdec_text_field_movie_int_to_color (cx
, value
);
966 SWFDEC_AS_NATIVE (104, 300, swfdec_text_field_movie_get_gridFitType
)
968 swfdec_text_field_movie_get_gridFitType (SwfdecAsContext
*cx
,
969 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
972 SWFDEC_STUB ("TextField.gridFitType (get)");
975 SWFDEC_AS_NATIVE (104, 301, swfdec_text_field_movie_set_gridFitType
)
977 swfdec_text_field_movie_set_gridFitType (SwfdecAsContext
*cx
,
978 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
981 SWFDEC_STUB ("TextField.gridFitType (set)");
984 SWFDEC_AS_NATIVE (104, 302, swfdec_text_field_movie_get_antiAliasType
)
986 swfdec_text_field_movie_get_antiAliasType (SwfdecAsContext
*cx
,
987 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
990 SWFDEC_STUB ("TextField.antiAliasType (get)");
993 SWFDEC_AS_NATIVE (104, 303, swfdec_text_field_movie_set_antiAliasType
)
995 swfdec_text_field_movie_set_antiAliasType (SwfdecAsContext
*cx
,
996 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
999 SWFDEC_STUB ("TextField.antiAliasType (set)");
1002 SWFDEC_AS_NATIVE (104, 304, swfdec_text_field_movie_get_thickness
)
1004 swfdec_text_field_movie_get_thickness (SwfdecAsContext
*cx
,
1005 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
1008 SWFDEC_STUB ("TextField.thickness (get)");
1011 SWFDEC_AS_NATIVE (104, 305, swfdec_text_field_movie_set_thickness
)
1013 swfdec_text_field_movie_set_thickness (SwfdecAsContext
*cx
,
1014 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
1017 SWFDEC_STUB ("TextField.thickness (set)");
1020 SWFDEC_AS_NATIVE (104, 306, swfdec_text_field_movie_get_sharpness
)
1022 swfdec_text_field_movie_get_sharpness (SwfdecAsContext
*cx
,
1023 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
1026 SWFDEC_STUB ("TextField.sharpness (get)");
1029 SWFDEC_AS_NATIVE (104, 307, swfdec_text_field_movie_set_sharpness
)
1031 swfdec_text_field_movie_set_sharpness (SwfdecAsContext
*cx
,
1032 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
1035 SWFDEC_STUB ("TextField.sharpness (set)");
1038 SWFDEC_AS_NATIVE (104, 308, swfdec_text_field_movie_get_filters
)
1040 swfdec_text_field_movie_get_filters (SwfdecAsContext
*cx
,
1041 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
1044 SWFDEC_STUB ("TextField.filters (get)");
1047 SWFDEC_AS_NATIVE (104, 309, swfdec_text_field_movie_set_filters
)
1049 swfdec_text_field_movie_set_filters (SwfdecAsContext
*cx
,
1050 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
1053 SWFDEC_STUB ("TextField.filters (set)");
1059 SWFDEC_AS_NATIVE (104, 104, swfdec_text_field_movie_getNewTextFormat
)
1061 swfdec_text_field_movie_getNewTextFormat (SwfdecAsContext
*cx
,
1062 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
1065 SwfdecTextFieldMovie
*text
;
1067 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "");
1069 swfdec_text_format_init_properties (cx
);
1071 SWFDEC_AS_VALUE_SET_OBJECT (ret
,
1072 SWFDEC_AS_OBJECT (swfdec_text_format_copy (text
->format_new
)));
1075 SWFDEC_AS_NATIVE (104, 105, swfdec_text_field_movie_setNewTextFormat
)
1077 swfdec_text_field_movie_setNewTextFormat (SwfdecAsContext
*cx
,
1078 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
1081 SwfdecTextFieldMovie
*text
;
1082 SwfdecAsObject
*obj
;
1084 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "o", &obj
);
1086 if (!SWFDEC_IS_TEXT_FORMAT (obj
))
1089 swfdec_text_format_add (text
->format_new
, SWFDEC_TEXT_FORMAT (obj
));
1092 SWFDEC_AS_NATIVE (104, 102, swfdec_text_field_movie_setTextFormat
)
1094 swfdec_text_field_movie_setTextFormat (SwfdecAsContext
*cx
,
1095 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
1098 SwfdecTextFieldMovie
*text
;
1099 SwfdecTextFormat
*format
;
1100 int val
, start_index
, end_index
;
1103 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "");
1109 if (argc
<= i
+ 1) {
1111 end_index
= g_utf8_strlen (text
->input
->str
, -1);
1113 start_index
= val
= swfdec_as_value_to_integer (cx
, &argv
[i
++]);
1114 start_index
= CLAMP (start_index
, 0, g_utf8_strlen (text
->input
->str
, -1));
1115 if (argc
<= i
+ 1) {
1116 if (val
< 0) { // fail
1117 start_index
= end_index
= 0;
1119 end_index
= start_index
+ 1;
1122 end_index
= swfdec_as_value_to_integer (cx
, &argv
[i
++]);
1125 CLAMP (end_index
, start_index
, g_utf8_strlen (text
->input
->str
, -1));
1127 if (start_index
== end_index
)
1130 if (!SWFDEC_AS_VALUE_IS_OBJECT (&argv
[i
]))
1132 if (!SWFDEC_IS_TEXT_FORMAT (SWFDEC_AS_VALUE_GET_OBJECT (&argv
[i
])))
1135 format
= SWFDEC_TEXT_FORMAT (SWFDEC_AS_VALUE_GET_OBJECT (&argv
[i
]));
1137 swfdec_text_field_movie_set_text_format (text
, format
,
1138 g_utf8_offset_to_pointer (text
->input
->str
, start_index
) -
1140 g_utf8_offset_to_pointer (text
->input
->str
, end_index
) -
1143 swfdec_movie_invalidate (SWFDEC_MOVIE (text
));
1144 swfdec_text_field_movie_auto_size (text
);
1145 // special case: update the max values, not the current values
1146 swfdec_text_field_movie_update_scroll (text
, FALSE
);
1149 SWFDEC_AS_NATIVE (104, 101, swfdec_text_field_movie_getTextFormat
)
1151 swfdec_text_field_movie_getTextFormat (SwfdecAsContext
*cx
,
1152 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
1155 SwfdecTextFieldMovie
*text
;
1156 SwfdecTextFormat
*format
;
1157 int val
, start_index
, end_index
;
1159 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "");
1163 end_index
= g_utf8_strlen (text
->input
->str
, -1);
1165 start_index
= val
= swfdec_as_value_to_integer (cx
, &argv
[0]);
1166 start_index
= CLAMP (start_index
, 0, g_utf8_strlen (text
->input
->str
, -1));
1168 if (val
< 0) { // fail
1169 start_index
= end_index
= 0;
1171 end_index
= start_index
+ 1;
1174 end_index
= swfdec_as_value_to_integer (cx
, &argv
[1]);
1177 CLAMP (end_index
, start_index
, g_utf8_strlen (text
->input
->str
, -1));
1180 if (start_index
== end_index
) {
1181 format
= SWFDEC_TEXT_FORMAT (swfdec_text_format_new (cx
));
1183 format
= swfdec_text_field_movie_get_text_format (text
,
1184 g_utf8_offset_to_pointer (text
->input
->str
, start_index
) -
1186 g_utf8_offset_to_pointer (text
->input
->str
, end_index
) -
1190 SWFDEC_AS_VALUE_SET_OBJECT (ret
, SWFDEC_AS_OBJECT (format
));
1193 SWFDEC_AS_NATIVE (104, 100, swfdec_text_field_movie_replaceSel
)
1195 swfdec_text_field_movie_replaceSel (SwfdecAsContext
*cx
,
1196 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
1199 SWFDEC_STUB ("TextField.replaceSel");
1202 SWFDEC_AS_NATIVE (104, 107, swfdec_text_field_movie_replaceText
)
1204 swfdec_text_field_movie_replaceText (SwfdecAsContext
*cx
,
1205 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
1208 SwfdecTextFieldMovie
*text
;
1209 int start_index
, end_index
;
1213 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "iis", &start_index
,
1216 if (start_index
< 0)
1218 if (end_index
< start_index
)
1221 start_index
= MIN (start_index
, g_utf8_strlen (text
->input
->str
, -1));
1222 end_index
= MIN (end_index
, g_utf8_strlen (text
->input
->str
, -1));
1224 swfdec_text_field_movie_replace_text (text
,
1225 g_utf8_offset_to_pointer (text
->input
->str
, start_index
) -
1227 g_utf8_offset_to_pointer (text
->input
->str
, end_index
) -
1228 text
->input
->str
, str
);
1232 SWFDEC_AS_NATIVE (104, 201, swfdec_text_field_movie_getFontList
)
1234 swfdec_text_field_movie_getFontList (SwfdecAsContext
*cx
,
1235 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
1238 SwfdecAsArray
*array
;
1240 PangoFontFamily
**families
;
1243 pango_font_map_list_families (pango_cairo_font_map_get_default (),
1244 &families
, &n_families
);
1246 array
= SWFDEC_AS_ARRAY (swfdec_as_array_new (cx
));
1247 for (i
= 0; i
< n_families
; i
++) {
1248 SWFDEC_AS_VALUE_SET_STRING (&val
, swfdec_as_context_get_string (cx
,
1249 pango_font_family_get_name (families
[i
])));
1250 swfdec_as_array_push (array
, &val
);
1252 SWFDEC_AS_VALUE_SET_STRING (&val
, SWFDEC_AS_STR_Sans
);
1253 swfdec_as_array_push (array
, &val
);
1254 SWFDEC_AS_VALUE_SET_STRING (&val
, SWFDEC_AS_STR_Serif
);
1255 swfdec_as_array_push (array
, &val
);
1256 SWFDEC_AS_VALUE_SET_STRING (&val
, SWFDEC_AS_STR_Monospace
);
1257 swfdec_as_array_push (array
, &val
);
1261 SWFDEC_AS_VALUE_SET_OBJECT (ret
, SWFDEC_AS_OBJECT (array
));
1264 SWFDEC_AS_NATIVE (104, 106, swfdec_text_field_movie_getDepth
)
1266 swfdec_text_field_movie_getDepth (SwfdecAsContext
*cx
, SwfdecAsObject
*object
,
1267 guint argc
, SwfdecAsValue
*argv
, SwfdecAsValue
*rval
)
1269 SwfdecTextFieldMovie
*text
;
1271 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "");
1273 SWFDEC_AS_VALUE_SET_INT (rval
, SWFDEC_MOVIE (text
)->depth
);
1276 SWFDEC_AS_NATIVE (104, 103, swfdec_text_field_movie_removeTextField
)
1278 swfdec_text_field_movie_removeTextField (SwfdecAsContext
*cx
,
1279 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
1280 SwfdecAsValue
*rval
)
1282 SwfdecTextFieldMovie
*text
;
1285 SWFDEC_AS_CHECK (SWFDEC_TYPE_TEXT_FIELD_MOVIE
, &text
, "");
1287 movie
= SWFDEC_MOVIE (text
);
1288 if (swfdec_depth_classify (movie
->depth
) == SWFDEC_DEPTH_CLASS_DYNAMIC
)
1289 swfdec_movie_remove (movie
);
1293 * Creating TextFields
1295 SWFDEC_AS_NATIVE (104, 200, swfdec_text_field_movie_createTextField
)
1297 swfdec_text_field_movie_createTextField (SwfdecAsContext
*cx
,
1298 SwfdecAsObject
*object
, guint argc
, SwfdecAsValue
*argv
,
1299 SwfdecAsValue
*rval
)
1301 SwfdecMovie
*movie
, *parent
;
1302 SwfdecTextField
*edittext
;
1303 int depth
, x
, y
, width
, height
;
1305 SwfdecAsFunction
*fun
;
1308 SWFDEC_AS_CHECK (SWFDEC_TYPE_MOVIE
, &parent
, "siiiii", &name
, &depth
, &x
, &y
, &width
, &height
);
1310 edittext
= g_object_new (SWFDEC_TYPE_TEXT_FIELD
, NULL
);
1311 edittext
->html
= FALSE
;
1312 edittext
->editable
= FALSE
;
1313 edittext
->password
= FALSE
;
1314 edittext
->selectable
= TRUE
;
1315 edittext
->font
= NULL
; // FIXME
1316 edittext
->word_wrap
= FALSE
;
1317 edittext
->multiline
= FALSE
;
1318 edittext
->auto_size
= SWFDEC_AUTO_SIZE_NONE
;
1319 edittext
->border
= FALSE
;
1320 edittext
->size
= 240; // FIXME: Correct?
1322 edittext
->input
= NULL
;
1323 edittext
->variable
= NULL
;
1324 edittext
->color
= 0;
1325 edittext
->align
= SWFDEC_TEXT_ALIGN_LEFT
;
1326 edittext
->left_margin
= 0;
1327 edittext
->right_margin
= 0;
1328 edittext
->indent
= 0;
1329 edittext
->leading
= 0;
1331 SWFDEC_GRAPHIC (edittext
)->extents
.x0
= SWFDEC_DOUBLE_TO_TWIPS (x
);
1332 SWFDEC_GRAPHIC (edittext
)->extents
.x1
=
1333 SWFDEC_GRAPHIC (edittext
)->extents
.x0
+ SWFDEC_DOUBLE_TO_TWIPS (width
);
1334 SWFDEC_GRAPHIC (edittext
)->extents
.y0
= SWFDEC_DOUBLE_TO_TWIPS (y
);
1335 SWFDEC_GRAPHIC (edittext
)->extents
.y1
=
1336 SWFDEC_GRAPHIC (edittext
)->extents
.y0
+ SWFDEC_DOUBLE_TO_TWIPS (height
);
1338 movie
= swfdec_movie_find (parent
, depth
);
1340 swfdec_movie_remove (movie
);
1342 movie
= swfdec_movie_new (SWFDEC_PLAYER (cx
), depth
, parent
, parent
->resource
,
1343 SWFDEC_GRAPHIC (edittext
), name
);
1344 g_assert (SWFDEC_IS_TEXT_FIELD_MOVIE (movie
));
1345 g_object_unref (edittext
);
1346 swfdec_movie_initialize (movie
);
1347 swfdec_movie_update (movie
);
1349 swfdec_as_object_get_variable (cx
->global
, SWFDEC_AS_STR_TextField
, &val
);
1350 if (!SWFDEC_AS_VALUE_IS_OBJECT (&val
))
1352 fun
= (SwfdecAsFunction
*) SWFDEC_AS_VALUE_GET_OBJECT (&val
);
1353 if (!SWFDEC_IS_AS_FUNCTION (fun
))
1356 /* set initial variables */
1357 if (swfdec_as_object_get_variable (SWFDEC_AS_OBJECT (fun
),
1358 SWFDEC_AS_STR_prototype
, &val
)) {
1359 swfdec_as_object_set_variable_and_flags (SWFDEC_AS_OBJECT (movie
),
1360 SWFDEC_AS_STR___proto__
, &val
,
1361 SWFDEC_AS_VARIABLE_HIDDEN
| SWFDEC_AS_VARIABLE_PERMANENT
);
1363 SWFDEC_AS_VALUE_SET_OBJECT (&val
, SWFDEC_AS_OBJECT (fun
));
1364 if (cx
->version
< 7) {
1365 swfdec_as_object_set_variable_and_flags (SWFDEC_AS_OBJECT (movie
),
1366 SWFDEC_AS_STR_constructor
, &val
, SWFDEC_AS_VARIABLE_HIDDEN
);
1368 swfdec_as_object_set_variable_and_flags (SWFDEC_AS_OBJECT (movie
),
1369 SWFDEC_AS_STR___constructor__
, &val
,
1370 SWFDEC_AS_VARIABLE_HIDDEN
| SWFDEC_AS_VARIABLE_VERSION_6_UP
);
1372 swfdec_as_function_call (fun
, SWFDEC_AS_OBJECT (movie
), 0, NULL
, rval
);
1373 cx
->frame
->construct
= TRUE
;
1374 swfdec_as_context_run (cx
);
1378 swfdec_text_field_movie_init_properties (SwfdecAsContext
*cx
)
1381 SwfdecAsObject
*object
, *proto
;
1383 // FIXME: We should only initialize if the prototype Object has not been
1384 // initialized by any object's constructor with native properties
1385 // (TextField, TextFormat, XML, XMLNode at least)
1387 g_return_if_fail (SWFDEC_IS_AS_CONTEXT (cx
));
1389 swfdec_as_object_get_variable (cx
->global
, SWFDEC_AS_STR_TextField
, &val
);
1390 if (!SWFDEC_AS_VALUE_IS_OBJECT (&val
))
1392 object
= SWFDEC_AS_VALUE_GET_OBJECT (&val
);
1393 swfdec_as_object_get_variable (object
, SWFDEC_AS_STR_prototype
, &val
);
1394 if (!SWFDEC_AS_VALUE_IS_OBJECT (&val
))
1396 proto
= SWFDEC_AS_VALUE_GET_OBJECT (&val
);
1399 swfdec_as_object_add_native_variable (proto
, SWFDEC_AS_STR_text
,
1400 swfdec_text_field_movie_do_get_text
,
1401 swfdec_text_field_movie_do_set_text
);
1402 swfdec_as_object_add_native_variable (proto
, SWFDEC_AS_STR_html
,
1403 swfdec_text_field_movie_get_html
, swfdec_text_field_movie_set_html
);
1404 swfdec_as_object_add_native_variable (proto
, SWFDEC_AS_STR_htmlText
,
1405 swfdec_text_field_movie_get_htmlText
,
1406 swfdec_text_field_movie_set_htmlText
);
1407 swfdec_as_object_add_native_variable (proto
, SWFDEC_AS_STR_length
,
1408 swfdec_text_field_movie_get_length
,
1409 swfdec_text_field_movie_set_readonly
);
1412 swfdec_as_object_add_native_variable (proto
, SWFDEC_AS_STR_condenseWhite
,
1413 swfdec_text_field_movie_get_condenseWhite
,
1414 swfdec_text_field_movie_set_condenseWhite
);
1415 swfdec_as_object_add_native_variable (proto
, SWFDEC_AS_STR_maxChars
,
1416 swfdec_text_field_movie_get_maxChars
,
1417 swfdec_text_field_movie_set_maxChars
);
1418 swfdec_as_object_add_native_variable (proto
, SWFDEC_AS_STR_multiline
,
1419 swfdec_text_field_movie_get_multiline
,
1420 swfdec_text_field_movie_set_multiline
);
1421 swfdec_as_object_add_native_variable (proto
, SWFDEC_AS_STR_restrict
,
1422 swfdec_text_field_movie_get_restrict
,
1423 swfdec_text_field_movie_set_restrict
);
1424 swfdec_as_object_add_native_variable (proto
, SWFDEC_AS_STR_selectable
,
1425 swfdec_text_field_movie_get_selectable
,
1426 swfdec_text_field_movie_set_selectable
);
1427 swfdec_as_object_add_native_variable (proto
, SWFDEC_AS_STR_type
,
1428 swfdec_text_field_movie_do_get_type
,
1429 swfdec_text_field_movie_do_set_type
);
1430 swfdec_as_object_add_native_variable (proto
, SWFDEC_AS_STR_variable
,
1431 swfdec_text_field_movie_do_get_variable
,
1432 swfdec_text_field_movie_do_set_variable
);
1435 swfdec_as_object_add_native_variable (proto
, SWFDEC_AS_STR_textHeight
,
1436 swfdec_text_field_movie_get_textHeight
,
1437 swfdec_text_field_movie_set_readonly
);
1438 swfdec_as_object_add_native_variable (proto
, SWFDEC_AS_STR_textWidth
,
1439 swfdec_text_field_movie_get_textWidth
,
1440 swfdec_text_field_movie_set_readonly
);
1442 // border & background
1443 swfdec_as_object_add_native_variable (proto
, SWFDEC_AS_STR_background
,
1444 swfdec_text_field_movie_get_background
,
1445 swfdec_text_field_movie_set_background
);
1446 swfdec_as_object_add_native_variable (proto
, SWFDEC_AS_STR_backgroundColor
,
1447 swfdec_text_field_movie_get_backgroundColor
,
1448 swfdec_text_field_movie_set_backgroundColor
);
1449 swfdec_as_object_add_native_variable (proto
, SWFDEC_AS_STR_border
,
1450 swfdec_text_field_movie_get_border
, swfdec_text_field_movie_set_border
);
1451 swfdec_as_object_add_native_variable (proto
, SWFDEC_AS_STR_borderColor
,
1452 swfdec_text_field_movie_get_borderColor
,
1453 swfdec_text_field_movie_set_borderColor
);
1456 swfdec_as_object_add_native_variable (proto
, SWFDEC_AS_STR_bottomScroll
,
1457 swfdec_text_field_movie_get_bottomScroll
,
1458 swfdec_text_field_movie_set_readonly
);
1459 swfdec_as_object_add_native_variable (proto
, SWFDEC_AS_STR_hscroll
,
1460 swfdec_text_field_movie_do_get_hscroll
,
1461 swfdec_text_field_movie_do_set_hscroll
);
1462 swfdec_as_object_add_native_variable (proto
, SWFDEC_AS_STR_maxhscroll
,
1463 swfdec_text_field_movie_get_maxhscroll
,
1464 swfdec_text_field_movie_set_readonly
);
1465 swfdec_as_object_add_native_variable (proto
, SWFDEC_AS_STR_maxscroll
,
1466 swfdec_text_field_movie_get_maxscroll
,
1467 swfdec_text_field_movie_set_readonly
);
1468 swfdec_as_object_add_native_variable (proto
, SWFDEC_AS_STR_mouseWheelEnabled
,
1469 swfdec_text_field_movie_get_mouseWheelEnabled
,
1470 swfdec_text_field_movie_set_mouseWheelEnabled
);
1471 swfdec_as_object_add_native_variable (proto
, SWFDEC_AS_STR_scroll
,
1472 swfdec_text_field_movie_do_get_scroll
,
1473 swfdec_text_field_movie_do_set_scroll
);
1476 swfdec_as_object_add_native_variable (proto
, SWFDEC_AS_STR_autoSize
,
1477 swfdec_text_field_movie_get_autoSize
,
1478 swfdec_text_field_movie_set_autoSize
);
1479 swfdec_as_object_add_native_variable (proto
, SWFDEC_AS_STR_password
,
1480 swfdec_text_field_movie_get_password
,
1481 swfdec_text_field_movie_set_password
);
1482 swfdec_as_object_add_native_variable (proto
, SWFDEC_AS_STR_wordWrap
,
1483 swfdec_text_field_movie_get_wordWrap
,
1484 swfdec_text_field_movie_set_wordWrap
);
1487 swfdec_as_object_add_native_variable (proto
, SWFDEC_AS_STR_embedFonts
,
1488 swfdec_text_field_movie_get_embedFonts
,
1489 swfdec_text_field_movie_set_embedFonts
);
1490 swfdec_as_object_add_native_variable (proto
, SWFDEC_AS_STR_styleSheet
,
1491 swfdec_text_field_movie_get_styleSheet
,
1492 swfdec_text_field_movie_set_styleSheet
);
1493 swfdec_as_object_add_native_variable (proto
, SWFDEC_AS_STR_textColor
,
1494 swfdec_text_field_movie_get_textColor
,
1495 swfdec_text_field_movie_set_textColor
);
1497 // TODO: menu, tabEnabled, tabIndex
1499 // Version 8 properties have ASnative numbers:
1500 // gridFitType, antiAliasType, thickness, sharpness and filters
1503 SWFDEC_AS_NATIVE (104, 0, swfdec_text_field_movie_construct
)
1505 swfdec_text_field_movie_construct (SwfdecAsContext
*cx
, SwfdecAsObject
*object
,
1506 guint argc
, SwfdecAsValue
*argv
, SwfdecAsValue
*ret
)
1508 if (!cx
->frame
->construct
) {
1510 if (!swfdec_as_context_use_mem (cx
, sizeof (SwfdecAsObject
)))
1512 object
= g_object_new (SWFDEC_TYPE_AS_OBJECT
, NULL
);
1513 swfdec_as_object_add (object
, cx
, sizeof (SwfdecAsObject
));
1514 swfdec_as_object_get_variable (cx
->global
, SWFDEC_AS_STR_TextField
, &val
);
1515 if (SWFDEC_AS_VALUE_IS_OBJECT (&val
)) {
1516 swfdec_as_object_set_constructor (object
,
1517 SWFDEC_AS_VALUE_GET_OBJECT (&val
));
1519 SWFDEC_INFO ("\"TextField\" is not an object");
1523 swfdec_text_field_movie_init_properties (cx
);
1525 // FIXME: do object.addListener (object);
1527 SWFDEC_AS_VALUE_SET_OBJECT (ret
, object
);