Compile Time Changes

New parameters have been added to the constructor of BrushHoverDropDownMenuButton:

public constructor(Window parent,
                   Brush stdBrush,
                   Brush hoverBrush,
                   Brush mouseDownBrush,
                   // inherited key arguments
                   Font font=controlFont,
                   FrameStyle frameStyle=noFrame,
                   frame3DState frameState=frameStateUp,
                   pointI pos=(0, 0),
                   sizeI size=sizeI(-1, -1),
                   pointI margins=(6, 4),
                   alignment align=middle,
                   str key=null,
                   str label="",
                   color labelColor=color(0, 0, 0),
                   color pressedLabelColor=color(colorType.none),
                   alignment textSide=undefinedAlignment,
                   Image image=null,
                   Image disabledImage=null,
                   color color=nocolor,
                   function(Control button) callback=null,
                   // extended
                   Image secondImage=null,
                   int secondImageMargin=6,
                   bool marginFromText=true, // new
                   imageAlign secondImageAlign=imageAlign.right, // new
                   SrcRef src=#:src) {}

marginFromText allows changing the calculated margin to be calculated from the text sides, instead of the sides of the button edges.

secondImageAlign lets you choose between placing the second image on the right or bottom of the button.

DiskImage can now store diffuseMap and normalMap aswell.

// diskImage.cm, Class: DiskImage
Old: public constructor(Url targetUrl, sizeI size, imageFormat format,
			   fix byte[] pixels, int pixelsCount,
			   fix byte[] depth=null, int depthCount=0,
			   float avgLum=0, float logAvgLum=0,
			   float minLum=0, float maxLum=0, int sampleCnt=0) : unsafe
New: public constructor(Url targetUrl, sizeI size, imageFormat format,
			   fix byte[] pixels, int pixelsCount,
			   fix byte[] depth=null, int depthCount=0,
			   fix byte[] diffuse=null, int diffuseCount=0,
			   fix byte[] normal=null, int normalCount=0,
			   float avgLum=0, float logAvgLum=0,
			   float minLum=0, float maxLum=0, int sampleCnt=0) : unsafe

Old: final public bool saveToFile(Url targetUrl, fix byte[] pixels, int pixelsByteCount,
				 fix byte[] depth=null, int depthCount=0) : unsafe
New: final public bool saveToFile(Url targetUrl, fix byte[] pixels, int pixelsByteCount,
				 fix byte[] depth=null, int depthCount=0,
				 fix byte[] diffuse=null, int diffuseCount=0,
				 fix byte[] normal=null, int normalCount=0) : unsafe

Runtime/Behavior Changes

The methods Window.exit and Window.mouseLeftChild can now get null passed into the to argument.

    extend public void exit(pointI p, Window to) { ... }
    extend public void mouseLeftChild(Window child, Window to) { ... }

This happens when the mouse cursor moves from a CET window and outside of CET. It means that code in these methods needs to be null safe in regards to the to window.