Subversion Repositories Kolibri OS

Rev

Rev 3068 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2693 Serge 1
 
2
#include 
3
#include 
4
#include 
3068 serge 5
#include 
3248 Serge 6
#include "winlib.h"
2693 Serge 7
8
 
3068 serge 9
extern int res_slider[];
10
extern int res_vol_slider[];
11
extern int res_progress_bar[];
12
extern int res_prg_level[];
13
2693 Serge 14
 
15
uint32_t main_cursor;
16
17
 
18
static int spinbtn_proc(ctrl_t *btn, uint32_t msg, uint32_t arg1, uint32_t arg2);
19
20
 
3068 serge 21
                         int w, int h, ctrl_t *parent)
22
{
2693 Serge 23
24
 
3068 serge 25
26
 
2693 Serge 27
        return NULL;
28
29
 
3068 serge 30
2693 Serge 31
 
3068 serge 32
    list_initialize(&ctrl->child);
33
2693 Serge 34
 
3068 serge 35
2693 Serge 36
 
3068 serge 37
    ctrl->id      = id;
38
2693 Serge 39
 
3068 serge 40
    ctrl->rc.t    = y ;
41
2693 Serge 42
 
3068 serge 43
    ctrl->rc.b    = y + h;
44
2693 Serge 45
 
3068 serge 46
    ctrl->h       = h;
47
2693 Serge 48
 
3068 serge 49
50
 
51
};
52
53
 
54
 
55
                        int w, int h, ctrl_t *parent)
56
{
57
    button_t  *btn;
58
    int        len;
59
60
 
61
        return NULL;
62
63
 
64
    btn->ctrl.handler = button_proc;
65
    btn->state = 0;
2693 Serge 66
    btn->caption = caption;
67
68
 
69
        btn->capt_len = 0;
70
    else
71
    {
72
        len = strlen(caption);
73
        btn->capt_len = len;
74
        if( len )
75
            btn->caption = strdup(caption);
76
        else
77
            btn->caption = NULL;
78
    }
79
80
 
81
    btn->img_hilite  = NULL;
82
    btn->img_pressed = NULL;
83
84
 
85
};
86
87
 
88
int draw_button(button_t *btn)
89
{
90
    void *bitmap;
91
92
 
93
94
 
95
        bitmap = btn->img_pressed;
96
    else if(btn->state & bHighlight)
97
        bitmap = btn->img_hilite;
98
99
 
100
        draw_bitmap(bitmap, btn->rc.l, btn->rc.t, btn->w, btn->h);
101
102
 
103
    {
104
        int txt_w;
105
        int txt_x, txt_y;
106
        txt_w = btn->capt_len*8-2;
107
108
 
109
        txt_y = btn->rc.t + 9;
110
111
 
112
            txt_x++;
113
            txt_y++;
114
        };
115
        draw_text(btn->caption, txt_x, txt_y, btn->capt_len, 0x10000000);
116
    };
117
    return 0;
118
};
119
#endif
120
121
 
122
{
123
    int *src;
3248 Serge 124
    ctx_t *ctx;
2693 Serge 125
    int x, y;
126
127
 
3068 serge 128
2693 Serge 129
 
3068 serge 130
    y = btn->ctrl.rc.t - ctx->offset_y;
131
2693 Serge 132
 
133
134
 
135
        src = btn->img_pressed;
136
    else if(btn->state & bHighlight)
137
        src = btn->img_hilite;
138
139
 
3248 Serge 140
2693 Serge 141
 
142
};
143
144
 
145
 
146
{
147
    void *ctx;
148
149
 
150
};
151
152
 
153
 
154
{
155
    int  x, y;
156
    int  state;
157
    int  old_state;
158
    int  action=0;
159
160
 
161
162
 
163
    {
164
        case MSG_PAINT:
165
            draw_button_cairo(btn);
166
            update_rect((ctrl_t*)btn);
167
            break;
168
169
 
170
//            printf("mouse enter\n");
171
            btn->state|= bHighlight;
172
            send_message(&btn->ctrl, MSG_PAINT, 0, 0);
3068 serge 173
            break;
2693 Serge 174
175
 
176
//            printf("mouse leave\n");
177
            if( (ctrl_t*)btn != mouse_capture) {
178
                btn->state &= ~bHighlight;
179
                send_message(&btn->ctrl, MSG_PAINT, 0, 0);
3068 serge 180
            };
2693 Serge 181
            break;
182
183
 
184
        case MSG_LBTNDBLCLK:
185
//            printf("push button\n");
186
            capture_mouse((ctrl_t*)btn);
187
            btn->state|= bPressed;
188
            send_message(&btn->ctrl, MSG_PAINT, 0, 0);
3068 serge 189
            break;
2693 Serge 190
191
 
192
193
 
194
            if(btn->state & bPressed)
195
                action = MSG_COMMAND;
196
197
 
198
199
 
200
            y = ((pos_t)arg2).y;
201
202
 
3068 serge 203
                state = bHighlight;
2693 Serge 204
            else
205
                state = 0;
206
207
 
208
                send_message(btn->ctrl.parent,MSG_COMMAND,btn->ctrl.id,(int)btn);
3068 serge 209
2693 Serge 210
 
211
            send_message(&btn->ctrl, MSG_PAINT, 0, 0);
3068 serge 212
            break;
2693 Serge 213
214
 
215
216
 
217
            {
218
                set_cursor(0);
219
                main_cursor = 0;
220
            }
221
222
 
223
            {
224
                btn->state|= bHighlight;
225
                send_message(&btn->ctrl, MSG_PAINT, 0, 0);
3068 serge 226
            };
2693 Serge 227
228
 
229
                return 0;
230
231
 
232
            y = ((pos_t)arg2).y;
233
234
 
235
236
 
3068 serge 237
                btn->state |= bPressed;
2693 Serge 238
            else
239
                btn->state &= ~bPressed;
240
241
 
242
                send_message(&btn->ctrl, MSG_PAINT, 0, 0);
3068 serge 243
    }
2693 Serge 244
    return 0;
245
};
246
247
 
248
 
3068 serge 249
{
2693 Serge 250
    int *pixmap, *src;
3068 serge 251
    ctx_t *ctx;
2693 Serge 252
    int i, j;
253
    int x, y;
254
    rect_t rc = prg->ctrl.rc;
3248 Serge 255
2693 Serge 256
 
3068 serge 257
2693 Serge 258
 
259
260
 
261
    y = prg->ctrl.rc.t - ctx->offset_y;
262
263
 
3068 serge 264
    {
265
        src = res_progress_bar;
266
2693 Serge 267
 
3248 Serge 268
        pixmap+= y * ctx->pixmap->pitch/4 + x;
269
3068 serge 270
 
271
        {
272
            for(j = 0; j < len; j++)
273
                pixmap[j] = *src;
274
275
 
3248 Serge 276
            src++;
3068 serge 277
        };
278
    };
279
280
 
281
 
2693 Serge 282
283
 
3068 serge 284
2693 Serge 285
 
3248 Serge 286
    pixmap+= y*ctx->pixmap->pitch/4 + x;
287
2693 Serge 288
 
289
    {
290
        for(j=0; j < len; j++)
291
            pixmap[j] = *src;
3068 serge 292
        pixmap+= ctx->pixmap->pitch/4;
3248 Serge 293
        src++;
3068 serge 294
    };
2693 Serge 295
296
 
297
};
298
299
 
300
 
301
{
302
    progress_t *prg = (progress_t*)ctrl;
303
    int pos;
304
3068 serge 305
 
2693 Serge 306
    {
307
        case MSG_PAINT:
308
            draw_progress(prg, 1);
3068 serge 309
            update_rect(ctrl);
2693 Serge 310
            break;
311
3068 serge 312
 
2693 Serge 313
            prg->pos = ((pos_t)arg2).x - ctrl->rc.l;
314
            send_message(ctrl->parent,MSG_COMMAND,ctrl->id,(int)ctrl);
315
            break;
316
3068 serge 317
 
318
            draw_progress(prg, 0);
319
            update_rect(ctrl);
320
            break;
321
322
 
2693 Serge 323
            break;
324
    }
325
    return 0;
326
};
327
328
 
329
 
330
                        int w, int h, ctrl_t *parent)
331
{
332
    progress_t  *prg;
333
    int        len;
334
335
 
336
        return NULL;
337
338
 
3068 serge 339
2693 Serge 340
 
341
342
 
343
    prg->max        = 1;
344
    prg->current    = 0;
345
    prg->pos        = 0;
346
347
 
348
};
349
350
 
3068 serge 351
{
352
    int *pixmap;
3248 Serge 353
    ctx_t *ctx;
3068 serge 354
    int i, j;
355
    int x, y;
356
357
 
358
    double level;
359
360
 
361
362
 
363
    y = lvl->ctrl.rc.t - ctx->offset_y;
364
365
 
366
367
 
368
369
 
370
        len = 0;
371
    if(len > 96)
372
        len = 96;
373
374
 
3248 Serge 375
3068 serge 376
 
3248 Serge 377
3068 serge 378
 
379
    {
380
        for(j = 0; j < 96; j++)
381
           pixmap[j] = 0xFF1C1C1C;
382
           pixmap+= ctx->pixmap->pitch/4;
3248 Serge 383
    };
3068 serge 384
385
 
3248 Serge 386
3068 serge 387
 
388
};
389
390
 
391
 
392
{
393
    level_t *lvl = (level_t*)ctrl;
394
//    int pos;
395
396
 
397
    {
398
        case MSG_PAINT:
399
            if(lvl->visible)
400
            {
401
                draw_level(lvl);
402
                update_rect(ctrl);
403
            };
404
            break;
405
406
 
407
//            prg->pos = ((pos_t)arg2).x - ctrl->rc.l;
408
//            send_message(ctrl->parent,MSG_COMMAND,ctrl->id,(int)ctrl);
409
//            break;
410
411
 
412
            break;
413
    }
414
    return 0;
415
};
416
417
 
418
                         int w, int h, ctrl_t *parent)
419
{
420
    level_t  *lvl;
421
422
 
423
        return NULL;
424
425
 
426
    lvl->ctrl.handler = lvl_proc;
427
428
 
429
    lvl->max          = 1;
430
    lvl->current      = 0;
431
    lvl->pos          = 0;
432
    lvl->visible      = 0;
433
    lvl->img_level    = res_level;
434
435
 
436
};
437
438
 
439
 
440
{
441
    int *pixmap;
3248 Serge 442
    ctx_t *ctx;
3068 serge 443
    int i, j;
444
    int x, y;
445
446
 
447
    double level;
448
449
 
450
451
 
452
    y = sld->ctrl.rc.t - ctx->offset_y;
453
454
 
455
456
 
3248 Serge 457
    pixmap+=  y*ctx->pixmap->pitch/4 + x;
458
3068 serge 459
 
460
    {
461
        for(j = 0; j < len; j++)
462
           pixmap[j] = 0xFF1C1C1C;
463
           pixmap+= ctx->pixmap->pitch/4;
3248 Serge 464
    };
3068 serge 465
466
 
3248 Serge 467
3068 serge 468
 
3248 Serge 469
3068 serge 470
 
471
};
472
473
 
474
 
475
{
476
    slider_t *sld = (slider_t*)ctrl;
477
    int pos;
478
479
 
480
    {
481
        case MSG_PAINT:
482
            draw_slider(sld);
483
            update_rect(ctrl);
484
            break;
485
486
 
487
            capture_mouse(ctrl);
488
            sld->mode = 1;
489
490
 
491
            if( pos < 0 )
492
                pos = 0;
493
            else if(pos > 96)
494
                pos = 96;
495
            if( sld->pos != pos)
496
            {
497
                sld->pos = pos;
498
                send_message(ctrl->parent,MSG_COMMAND,ctrl->id,(int)ctrl);
499
            };
500
           break;
501
502
 
503
            if(sld->mode)
504
            {
505
                release_mouse();
506
                sld->mode = 0;
507
            };
508
            break;
509
510
 
511
            if(sld->mode)
512
            {
513
                pos = ((pos_t)arg2).x - ctrl->rc.l - 6;
514
                if( pos < 0 )
515
                    pos = 0;
516
                else if(pos > 96)
517
                    pos = 96;
518
                if( sld->pos != pos)
519
                {
520
                    sld->pos = pos;
521
//                printf("slider pos %d\n", sld->pos);
522
                    send_message(ctrl->parent,MSG_COMMAND,ctrl->id,(int)ctrl);
523
                }
524
            };
525
            break;
526
527
 
528
            panel_set_layout(ctrl->parent, 1);
529
//            printf("level on\n");
530
            break;
531
532
 
533
            panel_set_layout(ctrl->parent, 0);
534
//            printf("level off\n");
535
            break;
536
537
 
538
 
539
            break;
540
    }
541
    return 0;
542
};
543
544
 
545
 
546
                         int w, int h, ctrl_t *parent)
547
{
548
549
 
550
551
 
552
        return NULL;
553
554
 
555
    sld->ctrl.handler = sld_proc;
556
557
 
558
    sld->max     = 0;
559
    sld->current = 0;
560
    sld->pos     = 60;
561
    sld->mode    = 0;
562
    sld->img_vol_slider    = res_vol_slider;
563
564
 
565
};
566