50
52
const struct ct_rect *region)
52
54
if (widget->data.window.canvas_background) {
53
struct ct_size size = { region->width,
55
struct ct_size size = { region->width,
55
57
struct ct_point pos = { region->x, region->y };
57
be_copy_osda_to_osda(get_osda(widget),
59
be_copy_osda_to_osda(sw_widget_get_osda(widget),
58
60
widget->data.window.canvas_background,
59
61
&size, &pos, &pos);
74
76
be_draw_region(widget->data.window.target, &rect,
75
77
widget->data.window.title->background);
76
be_draw_rectangle(get_osda(widget), &rect, 1,
78
be_draw_rectangle(sw_widget_get_osda(widget), &rect, 1,
77
79
widget->data.window.title->foreground);
78
80
pos.x = widget->inner_bounds.x + TITLE_PADDING;
79
81
pos.y = widget->inner_bounds.y + TITLE_PADDING;
80
be_draw_string(get_osda(widget), &pos,
82
be_draw_string(sw_widget_get_osda(widget), &pos,
81
83
widget->data.window.title);
375
377
/*************************************************************************
377
379
*************************************************************************/
380
void flush_rect_to_screen(const struct ct_rect *rect)
382
be_copy_osda_to_screen(whole_osda, rect);
385
/*************************************************************************
387
*************************************************************************/
378
388
void flush_all_to_screen(void)
380
be_copy_osda_to_screen(whole_osda);
390
be_copy_osda_to_screen(whole_osda, NULL);
382
392
if (dump_screen) {
383
static int counter = -1;
393
static int counter = 0;
388
freelog(LOG_NORMAL, "flush to screen %d",counter);
390
sprintf(b, "screen-%04d.ppm", counter);
396
my_snprintf(b, sizeof(b), "fc_%05d.ppm", counter++);
397
freelog(LOG_NORMAL, _("Making screenshot %s"), b);
391
399
be_write_osda_to_file(whole_osda, b);
424
432
size.width = rect->width;
425
433
size.height = rect->height;
427
be_draw_sprite(get_osda(widget), widget->background_sprite,
435
be_draw_sprite(sw_widget_get_osda(widget), widget->background_sprite,
428
436
&size, &pos, &pos);
429
437
} else if (widget->has_background_color) {
430
be_draw_region(get_osda(widget), rect,
438
be_draw_region(sw_widget_get_osda(widget), rect,
431
439
widget->background_color);
433
441
if (widget->parent && widget->type != WT_WINDOW) {
454
be_draw_rectangle(get_osda(widget), &rect, BORDER_WIDTH,
462
be_draw_rectangle(sw_widget_get_osda(widget), &rect, BORDER_WIDTH,
455
463
widget->border_color);
503
511
pos.y = rect.y + PADDING;
505
513
if (widget->type == WT_WINDOW) {
506
osda = get_osda(widget->parent);
514
osda = sw_widget_get_osda(widget->parent);
508
osda = get_osda(widget);
516
osda = sw_widget_get_osda(widget);
511
519
for (i = 1; i < widget->tooltip->shadow; i++) {
524
532
/*************************************************************************
526
534
*************************************************************************/
535
void untooltip(struct sw_widget *widget)
539
const int PADDING = 5;
543
if (widget->tooltip && widget->tooltip_callback_id != 0) {
544
sw_remove_timeout(widget->tooltip_callback_id);
545
widget->tooltip_callback_id = 0;
548
if (!widget->tooltip || (widget->tooltip && !widget->tooltip_shown)) {
551
widget->tooltip_shown = FALSE;
553
extra = 2 * PADDING + widget->tooltip->shadow;
555
rect.width = widget->tooltip->text->size.width + extra;
556
rect.height = widget->tooltip->text->size.height + extra;
560
widget->outer_bounds.x + (widget->outer_bounds.width -
562
rect.y = MAX(0,widget->outer_bounds.y - rect.height - PADDING);
564
pos.x = rect.x + PADDING;
565
pos.y = rect.y + PADDING;
567
if (widget->type == WT_WINDOW) {
568
osda = sw_widget_get_osda(widget->parent);
570
osda = sw_widget_get_osda(widget);
573
for (i = 1; i < widget->tooltip->shadow; i++) {
574
struct ct_rect rect2 = rect;
578
be_draw_region(osda, &rect2, be_get_color(0, 0, 0, MIN_OPACITY));
581
be_draw_region(osda, &rect, be_get_color(0, 0, 0, MIN_OPACITY));
582
be_draw_rectangle(osda, &rect, 1, be_get_color(0, 0, 0, MIN_OPACITY));
584
parent_needs_paint(widget);
587
/*************************************************************************
589
*************************************************************************/
527
590
static void draw_one(struct sw_widget *widget)
529
592
draw_background(widget);
695
757
merge_regions(normalized_regions);
760
if (DEBUG_PAINT_ALL) {
761
printf(" merged normalized_regions\n");
762
region_list_iterate(normalized_regions, region) {
763
printf(" region=%s\n", ct_rect_to_string(region));
764
} region_list_iterate_end;
697
768
if(DEBUG_PAINT_ALL) {
698
769
printf("starting flushing of %d regions\n",
699
770
region_list_size(normalized_regions));
889
967
/*************************************************************************
891
969
*************************************************************************/
892
void sw_window_canvas_background_region_needs_repaint(struct sw_widget
893
*widget, const struct ct_rect
970
void sw_window_canvas_background_region_needs_repaint(
971
struct sw_widget *widget, const struct ct_rect *region)
897
struct ct_size size = { region->width,
900
struct ct_point pos = { region->x, region->y };
902
be_copy_osda_to_osda(get_osda(widget),
973
struct ct_rect region2;
980
sw_widget_get_bounds(widget, ®ion2);
983
size = (struct ct_size){ region2.width, region2.height };
984
pos = (struct ct_point){ region2.x, region2.y };
986
be_copy_osda_to_osda(sw_widget_get_osda(widget),
903
987
widget->data.window.canvas_background,
904
&size, &pos, &pos, 0);
906
//add_flush_region(widget, region);
907
widget_needs_paint(widget);
990
add_flush_region(widget, ®ion2);
910
993
/*************************************************************************