Subversion Repositories Kolibri OS

Rev

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