Tk Source Code

Changes On Branch bug-06f3922f8b
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Changes In Branch bug-06f3922f8b Excluding Merge-Ins

This is equivalent to a diff from d7d2f71f to 7d8f0c14

2019-06-01
18:11
In aqua, add contrasting field backgrounds and focus rings to dark mode ttk::entry widgets. check-in: 55f9f7b5 user: culler tags: core-8-6-branch
03:30
Fix bug [817d3ef132]: Aqua ttk::entry needs contrasting field background and focus ring in dark mode. Closed-Leaf check-in: b5497be5 user: culler tags: bug-817d3ef132
2019-05-29
13:38
Merge core-8-6-branch. Leaf check-in: 7d8f0c14 user: culler tags: bug-06f3922f8b
2019-05-27
21:16
Merge 8.6 check-in: afffab4b user: jan.nijtmans tags: trunk
21:13
Merge 8.5 check-in: d7d2f71f user: jan.nijtmans tags: core-8-6-branch
21:06
Rename top README to README.md, just as done in Tcl. Reformat to md format. check-in: e902b5d9 user: jan.nijtmans tags: core-8-5-branch
2019-05-26
21:07
Fix error in the spelling of the Windows windowingsystem introduced in [02ca3773] check-in: 7a378858 user: fvogel tags: core-8-6-branch
2019-04-24
18:05
merge core-8-6-branch check-in: 50f5b3f1 user: culler tags: bug-06f3922f8b

Changes to macosx/tkMacOSXDraw.c.

1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626

1627
1628

1629
1630
1631
1632


1633











1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653

    dc.context = TkMacOSXGetCGContextForDrawable(d);
    if (dc.context) {
	dc.portBounds = clipBounds = CGContextGetClipBoundingBox(dc.context);
    } else if (win) {
	NSView *view = TkMacOSXDrawableView(macDraw);

	if (!view) {
	    Tcl_Panic("TkMacOSXSetupDrawingContext(): "
		    "no NSView to draw into !");
	}

	/*
	 * We can only draw into the view when the current CGContext is valid
	 * and belongs to the view.  Validity can only be guaranteed inside of
	 * a view's drawRect or setFrame methods.  The isDrawing attribute
	 * tells us whether we are being called from one of those methods.

	 *
	 * If the CGContext is not valid, or belongs to a different View, then

	 * we mark our view as needing display and return failure. It should
	 * get drawn in a later call to drawRect.
	 */



	if (view != [NSView focusView]) {











	    [view setNeedsDisplay:YES];
	    canDraw = false;
	    goto end;
	}
	dc.view = view;
	dc.context = GET_CGCONTEXT;
	dc.portBounds = NSRectToCGRect([view bounds]);
	if (dc.clipRgn) {
	    clipBounds = CGContextGetClipBoundingBox(dc.context);
	}
    } else {
	Tcl_Panic("TkMacOSXSetupDrawingContext(): "
		"no context to draw into !");
    }

    /*
     * Configure the drawing context.
     */

    if (dc.context) {







<
<
<
<
<

|
|
|
|
>

|
>
|
|


>
>
|
>
>
>
>
>
>
>
>
>
>
>
|









<
<
<







1610
1611
1612
1613
1614
1615
1616





1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653



1654
1655
1656
1657
1658
1659
1660

    dc.context = TkMacOSXGetCGContextForDrawable(d);
    if (dc.context) {
	dc.portBounds = clipBounds = CGContextGetClipBoundingBox(dc.context);
    } else if (win) {
	NSView *view = TkMacOSXDrawableView(macDraw);






	/*
	 * We can only draw into the view when the current CGContext is
	 * valid.  Starting with OSX 10.14, validity can only be guaranteed
	 * inside of a view's drawRect or setFrame methods.  The isDrawing
	 * attribute tells us whether we are being called from one of those
	 * methods.
	 *
	 * If the CGContext is not valid then we mark our view as needing
	 * display in the bounding rectangle of the clipping region and
	 * return failure.  That rectangle should get drawn in a later call
	 * to drawRect.
	 */

	if (!view) {
	    Tcl_Panic("TkMacOSXSetupDrawingContext(): "
		    "no NSView to draw into !");
	}
	if (![NSApp isDrawing]) {
	    NSRect bounds = [view bounds];
	    NSRect dirtyNS = bounds;
	    CGAffineTransform t = { .a = 1, .b = 0, .c = 0, .d = -1, .tx = 0,
				    .ty = dirtyNS.size.height};
	    if (dc.clipRgn) {
		CGRect dirtyCG = NSRectToCGRect(dirtyNS);
		HIShapeGetBounds(dc.clipRgn, &dirtyCG);
		dirtyNS = NSRectToCGRect(CGRectApplyAffineTransform(dirtyCG, t));
	    }
	    [view setNeedsDisplayInRect:dirtyNS];
	    canDraw = false;
	    goto end;
	}
	dc.view = view;
	dc.context = GET_CGCONTEXT;
	dc.portBounds = NSRectToCGRect([view bounds]);
	if (dc.clipRgn) {
	    clipBounds = CGContextGetClipBoundingBox(dc.context);
	}



    }

    /*
     * Configure the drawing context.
     */

    if (dc.context) {

Changes to macosx/tkMacOSXWindowEvent.c.

425
426
427
428
429
430
431







432
433
434
435
436
437
438
    if (HIShapeIsEmpty(damageRgn)) {
	CFRelease(damageRgn);
	CFRelease(boundsRgn);
	return 0;
    }
    HIShapeGetBounds(damageRgn, &damageBounds);








    CFRelease(damageRgn);
    CFRelease(boundsRgn);

    event.xany.serial = LastKnownRequestProcessed(Tk_Display(winPtr));
    event.xany.send_event = false;
    event.xany.window = Tk_WindowId(winPtr);
    event.xany.display = Tk_Display(winPtr);







>
>
>
>
>
>
>







425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
    if (HIShapeIsEmpty(damageRgn)) {
	CFRelease(damageRgn);
	CFRelease(boundsRgn);
	return 0;
    }
    HIShapeGetBounds(damageRgn, &damageBounds);

    /*
     * Expand the damage rectangle a bit to avoid artifacts when
     * moving canvas items very quickly.
     */

    damageBounds = CGRectInset(damageBounds, -10, -10);

    CFRelease(damageRgn);
    CFRelease(boundsRgn);

    event.xany.serial = LastKnownRequestProcessed(Tk_Display(winPtr));
    event.xany.send_event = false;
    event.xany.window = Tk_WindowId(winPtr);
    event.xany.display = Tk_Display(winPtr);
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
#endif

    /*
     * Generate updates for the children of this window
     */

    for (childPtr = winPtr->childList; childPtr != NULL;
	    childPtr = childPtr->nextPtr) {
	if (!Tk_IsMapped(childPtr) || Tk_IsTopLevel(childPtr)) {
	    continue;
	}
	GenerateUpdates(updateRgn, updateBounds, childPtr);
    }

    /*
     * Generate updates for any contained windows
     */

    if (Tk_IsContainer(winPtr)) {
	childPtr = TkpGetOtherWindow(winPtr);
	if (childPtr != NULL && Tk_IsMapped(childPtr)) {
	    GenerateUpdates(updateRgn, updateBounds, childPtr);
	}

	/*
	 * TODO: Here we should handle out of process embedding.
	 */
    }

    return 1;







|
|
|
|
|







|
|
|
|







457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
#endif

    /*
     * Generate updates for the children of this window
     */

    for (childPtr = winPtr->childList; childPtr != NULL;
    	    childPtr = childPtr->nextPtr) {
    	if (!Tk_IsMapped(childPtr) || Tk_IsTopLevel(childPtr)) {
    	    continue;
    	}
    	GenerateUpdates(updateRgn, updateBounds, childPtr);
    }

    /*
     * Generate updates for any contained windows
     */

    if (Tk_IsContainer(winPtr)) {
        childPtr = TkpGetOtherWindow(winPtr);
        if (childPtr != NULL && Tk_IsMapped(childPtr)) {
            GenerateUpdates(updateRgn, updateBounds, childPtr);
        }

	/*
	 * TODO: Here we should handle out of process embedding.
	 */
    }

    return 1;