Subversion Repositories Kolibri OS

Rev

Rev 4813 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
4813 Akyltist 1
;=============================================================================;
2
;============================[       HEADER       ]===========================;
3
;=============================================================================;
4
  use32
5
  org	 0x0
6
 
7
  db	 'MENUET01'
8
  dd	 0x01
9
  dd	 START
10
  dd	 I_END
11
  dd	 0x100000
12
  dd	 0x100000
13
  dd	 0x0
14
  dd	 0x0
15
 
6253 leency 16
  include '../../macros.inc'
4813 Akyltist 17
;=============================================================================;
18
;============================[       EVENTS       ]===========================;
19
;=============================================================================;
20
START:
21
    mcall   40,0xC0000027                 ; устанавливаем маску событий
22
    call    button_init                   ; устанавливаем параметры кнопок
23
 
24
    mov     eax,48                        ; Функция 48 - стили отображения окон
25
    mov     ebx,3                         ; Подфункция 3 - получить стандартные цвета окон.
26
    mov     ecx,sc                        ; Указатель на буфер размером edx байт, под структуру
27
    mov     edx,200                       ; Размер таблицы цветов (должен быть 40 байт)
28
    int     0x40                          ; Прерывание
29
 
30
    mov     eax,48                        ; Функция 48 - стили отображения окон
31
    mov     ebx,2                         ; Подфункция 3 - получить стандартные цвета окон.
32
    mov     ecx,sc                        ; Указатель на буфер размером edx байт, под структуру
33
    mov     edx,200                       ; Размер таблицы цветов (должен быть 40 байт)
34
    int     0x40                          ; Прерывание
35
 
36
    mov     eax,48                        ; Функция 48 - стили отображения окон
37
    mov     ebx,3                         ; Подфункция 3 - получить стандартные цвета окон.
38
    mov     ecx,sc                        ; Указатель на буфер размером edx байт, под структуру
39
    mov     edx,200                       ; Размер таблицы цветов (должен быть 40 байт)
40
    int     0x40                          ; Прерывание
41
 
42
red:
43
    call    draw_window
44
still:
45
    mov     eax,10                        ; функция 10 - ждать события
46
    int     0x40
47
    cmp     eax,1                         ; перерисовать окно ?
48
    je      red                           ; если да - на метку red
49
    cmp     eax,2                         ; нажата клавиша ?
50
    je      key                           ; если да - на key
51
    cmp     eax,3                         ; нажата кнопка ?
52
    je      button                        ; если да - на button
53
    cmp     eax,6
54
    je      mouse
55
    jmp     still                         ; если другое событие - в начало цикла
56
;end_still
57
 
58
key:                                      ; нажата клавиша на клавиатуре
59
    mov     eax,2                         ; функция 2 - считать код символа (в ah) (тут в принципе не нужна)
60
    int     0x40
61
    jmp     still                         ; вернуться к началу цикла
62
;end_key
63
 
64
button:
65
    mov     eax,17                        ; 17 - получить идентификатор нажатой кнопки
66
    int     0x40
67
    cmp     ah, 1                         ; если нажата кнопка с номером 1,
68
    jz      bexit                         ; выходим
69
    jmp     still
70
  bexit:
71
    mov     eax,-1                        ; иначе конец программы
72
    int     0x40
73
;end_button
74
 
75
mouse:
76
    ;       ; нажата ли лкм
77
    call    draw_edit
78
    call    mouse_local      ; получаем координаты мыши относительно окна
79
    call    button_calc      ; отслеживаем наведение курсора
80
    call    process_slot     ; получаем позицию в оконном стеке
81
    call    button_draw      ; отрисовываем кнопки
82
    jmp     still            ; уходим на ожидание события
83
 
84
 
85
;============================[        CODE        ]===========================;
86
 
87
    ret
88
;end_draw_result
89
 
90
 
91
;#___________________________________________________________________________________________________
92
;****************************************************************************************************|
93
; ГЛАВНЫЙ МОДУЛЬ ОТРИСОВКИ ОКНА И ЭЛЕМЕНТОВ ПРИЛОЖЕНИЯ                                               |
94
;----------------------------------------------------------------------------------------------------/
95
draw_window:
96
    mov     eax,12                        ; функция 12: означает, что будет рисоваться окно
97
    mov     ebx,1                         ; 1,начало рисования
98
    int     0x40                          ; Прерывание
99
 
100
 
101
 
102
    mov     eax,48                        ; Функция 48 - стили отображения окон.
103
    mov     ebx,4                         ; Подфункция 4 - возвращает eax = высота скина.
104
    int     0x40                          ; Прерывание
105
    mov     ecx,eax                       ; Запоминаем высоту скина
106
 
107
    xor     eax,eax                       ; Очищаем eax (mov eax,0) (Функция 0)
108
    mov     ebx,200 shl 16+240            ; [координата по оси x]*65536 + [размер по оси x]
109
    add     ecx,200 shl 16+280            ; Высота скина + [координата по y]*65536 + [размер по y]
6253 leency 110
    mov     edx,[sc.win_body]             ; Видимо стиль окна по дефолту
4813 Akyltist 111
    or      edx,0x34000000                ; Или окно со скином фиксированных размеров
112
    mov     edi,title                     ; Заголовок окна
113
    int     0x40                          ; Прерывание
114
 
115
    call    process_slot                  ; получаем позицию в оконном стеке
116
    call    button_draw
117
    call    draw_edit
118
    call    list_draw
119
 
120
    mov     eax,12                        ; функция 12: означает, что будет рисоваться окно
121
    mov     ebx,2                         ; 1,начало рисования
122
    int     0x40                          ; Прерывание
123
 
124
    ret
125
 
126
 
127
 
128
;===================================[ DATA ]==================================;
129
include   'inc/mouse.inc'                 ; мышь
130
include   'inc/process.inc'               ; инфо о процессе
131
include   'inc/dtp.inc'                   ; структура новой таблицы
132
include   'inc/button.inc'                ; самописные кнопки
133
include   'inc/edit.inc'                  ; эмуляция неактивного едита
134
include   'inc/list.inc'                  ; отрисовка списка
135
 
136
;; window -------------------------------------------------
137
    sc          new_colors                ; новая таблица цветов
138
    title       db 'Color Table',0        ; заголовок
139
    mouse_x     dd 0                      ; хранит глобальную х координату мыши
140
    mouse_y     dd 0                      ; хранит глобальную у координату мыши
141
    mouse_l     dd 0                      ; левая кнопка 1 - нажата 0 - нет
142
    win_slot    dd 0                      ; 0- окно не на верху, 1- на верху
143
    buffer      rb  80                    ; под 9 функцию
144
 
145
;; button -------------------------------------------------
146
    bnext       new_button
147
    bback       new_button
6253 leency 148
    arrowa db '<',0
149
    arrowb db '>',0
4813 Akyltist 150
;; edit ---------------------------------------------------
151
    edit_cnt    dd 1                      ; counter
152
    edit_win    db 'WINDOW',0             ; 1
153
    edit_btn    db 'BUTTON',0             ; 2
154
    edit_gui    db 'ELEMENT',0            ; 3
155
    edit_cld    db 'SUPPORT',0            ; 4
156
 
157
;; list win -----------------------------------------------
158
    text_frame    db 'Frame (Activate):',0
159
    text_inframe  db 'Frame (Inactivate):',0
160
    text_fcframe  db 'Frame (Focus):',0
161
    text_face     db 'Face (Activate):',0
162
    text_inface   db 'Face (Inactivate):',0
163
    text_fcface   db 'Face (Focus):',0
164
    text_border   db 'Border (Activate):',0
165
    text_inborder db 'Border (Inactivate):',0
166
    text_wtext    db 'Text:',0
167
    text_graytext db 'Graytext:',0
168
    text_title    db 'Title:',0
169
    text_body     db 'Body:',0
170
    text_reserved db 'Reserved:',0
171
    text_text     db 'Text (Activate):',0
172
    text_intext   db 'Text (Inactivate):',0
173
    text_fctext   db 'Text (Focus):',0
174
    text_3dlight  db '3D Light:',0
175
    text_3ddark   db '3D Dark:',0
176
    text_3dface   db '3D Face:',0
177
    text_shadow   db 'Shadow:',0
178
    text_select   db 'Select:',0
179
    text_p_face   db 'Panel Body:',0
180
    text_p_frame  db 'Panel Frame:',0
181
    text_p_text   db 'Panel Text:',0
182
    text_m_face   db 'Menu Body:',0
183
    text_m_frame  db 'Menu Frame:',0
184
    text_m_text   db 'Menu Text:',0
185
    text_h_face   db 'Hint Body:',0
186
    text_h_frame  db 'Hint Frame:',0
187
    text_h_text   db 'Hint Text:',0
188
    text_hex      db '#',0
189
;----------------------------------------------------------
190
I_END: