1.10.0 consolidated changes (Iriel)

* Lua API
* FrameXML util

* Widget API
* Widget scripts
* XML schema
* Events
* CVars

* Macro commands
* Combat Log
* Escape sequences
* Hyperlinks
* API changes
* HOWTOs
* wowuidev

* Previous patch: Patch 1.9.0.
* Next patch: Patch 1.10.1.

This is a consolidated list of the announced (and sometimes observed) changes in the User Interface API's and functionality for the 1.10 change. Please note that this thread is to discuss the upcoming changes and any clarifications or features that are a direct result of those changes, or things which we've been asked to remind slouken of. It is NOT an appropriate place for general feature requests, they should have their own threads (or be in the suggestions forum).

## Significant Change Summary

* New Font objects for on-the-fly font configuration.

* Can create new UI Frames, Textures, and FontStrings at runtime

* It will no longer be possible to replace Blizzard interface files (FrameXML/)

* You can no longer hook blizzard movement or mouse action functions.

* AddOns can no longer use RegisterForSave (Will be disabled for 1.10 release).

## Widget API Functions

* NEW: texture = Frame:CreateTexture(["name"] [,"layer"]) -- Create a new Texture object as a child of a frame.

* NEW: fontstring = Frame:CreateFontString(["name"] [,"layer"]) -- Create a new FontString object as a child of a frame.

* NEW: numRegions = Frame:GetNumRegions() -- Return the number of regions (Textures/FontStrings) attached to a frame.

* NEW: a, b, c, ... = Frame:GetRegions() -- Return the regions attached to a frame.

NEW: type = Frame:GetObjectType() -- Behaves as Frame:GetFrameType() does today.

* NEW: isType = Frame:IsObjectType("type") -- Behaves as Frame:IsFrameType("type") does today.

### NEW LayoutFrame (Inherited by all viewable object types) Methods

* numPoints = LayoutFrame:GetNumPoints() -- Returns the number of anchor points

* "point",relativeObject,"relativePoint",xOfs,yOfs = LayoutFrame:GetPoint(index) -- Returns details of an anchor point

* LayoutFrame:SetPoint("point",relativeObject,"relativePoint",xOfs,yOfs) -- New form, in addition to all existing ones (relative object instead of name)

### NEW/UPDATED Texture Methods

* parent = Texture:GetParent()

* Texture:SetParent(parent or "parent")

* layer = Texture:GetDrawLayer()

* Texture:SetDrawLayer("layer")

* blendMode = Texture:GetBlendMode()

* Texture:SetBlendMode("blendMode") -- blendMode is one of "DISABLE", "BLEND", "ALPHAKEY", "ADD", "MOD"

* r,g,b,a = Texture:GetVertexColor()

* type = Texture:GetObjectType() -- Returns "Texture"

* isType = Texture:IsObjectType("type") -- Returns whether "type" is "Texture"

* x,y = Texture:GetCenter();

* x = Texture:GetLeft();

* x = Texture:GetRight();

* y = Texture:GetTop();

* y = Texture:GetBottom();

* Texture:SetAllPoints("frame");

* isFound = Texture:SetTexture("path") -- Now returns true if the path was found, nil if not.

### NEW FontString methods

* parent = FontString:GetParent()

* FontString:SetParent(parent or "parent")

* layer = FontString:GetDrawLayer()

* FontString:SetDrawLayer("layer")

* a = FontString:GetAlpha()

* type = FontString:GetObjectType() -- Returns "FontString"

* isType = FontString:IsObjectType("type") -- Returns whether "type" is "FontString"

* x,y = FontString:GetCenter();

* x = FontString:GetLeft();

* x = FontString:GetRight();

* y = FontString:GetTop();

* y = FontString:GetBottom();

* FontString:SetAllPoints("frame");

## NEW/UPDATED methods - FontString related

For each of FontString, MessageFrame, ScrollingMessageFrame, and EditBox the following methods (some may already be present in 1.9):

* font = Frame:GetFontObject()

* Frame:SetFontObject(font or nil)

* fontFile, fontHeight, flags = Frame:GetFont()

* wasFound = Frame:SetFont("fontFile", fontHeight [, flags]) -- Returns true if specified font was valid, and nil if it was not (the change will not occur).

* r,g,b,a = Frame:GetTextColor()

* Frame:SetTextColor(r, g, b [, a])

* r,g,b,a = Frame:GetShadowColor()

* Frame:SetShadowColor(r, g, b [, a])

* x,y = Frame:GetShadowOffset()

* Frame:SetShadowOffset(x, y)

* spacing = Frame:GetSpacing()

* Frame:SetSpacing(spacing)

* justifyh = Frame:GetJustifyH()

* Frame:SetJustifyH("LEFT" or "CENTER" or "RIGHT")

* justfiyv = Frame:GetJustifyV()

* Frame:SetJustifyV("TOP" or "MIDDLE" or "BOTTOM")

### NEW/UPDATED ScrollingMessageFrame methods

* NEW ScrollingMessageFrame:SetFading(isFading) -- Renamed from ScrollingMessageFrame:EnableFading()

* NEW isFading = ScrollingMessageFrame:GetFading()

* NEW duration = ScrollingMessageFrame:GetFadeDuration() -- Get time it takes for lines to fade once they start fading.

* NEW visTime = ScrollingMessageFrame:GetTimeVisible() -- Get time it takes before a line starts fading.

* UPDATED ScrollingMessageFrame:SetTimeVisible(visTime) -- Will affect visible lines as well as new ones.

* UPDATED ScrollingMessageFrame:SetFadeDuration(duration) -- Will affect visible lines as well as new ones.

### NEW SimpleHTML methods

("header" is "H1" "H2" or "H3")

* font = SimpleHTMLGetFontObject(["header",])

* SimpleHTMLSetFontObject(["header",]font or nil)

* fontFile, fontHeight, flags = SimpleHTMLGetFont(["header",])

* wasFound = SimpleHTMLSetFont(["header",]"fontFile", fontHeight [, flags]) -- Returns true if specified font was valid, and nil if it was not (the change will not occur).

* r,g,b,a = SimpleHTMLGetTextColor(["header",])

* SimpleHTMLSetTextColor(["header",]r, g, b [, a])

* r,g,b,a = SimpleHTMLGetShadowColor(["header",])

* SimpleHTMLSetShadowColor(["header",]r, g, b [, a])

* x,y = SimpleHTMLGetShadowOffset(["header",])

* SimpleHTMLSetShadowOffset(["header",]x, y)

* spacing = SimpleHTMLGetSpacing(["header",])

* SimpleHTMLSetSpacing(["header",]spacing)

* justifyh = Font:GetJustifyH(["header",])

* SimpleHTMLSetJustifyH(["header",]"LEFT" or "CENTER" or "RIGHT")

* justfiyv = SimpleHTMLGetJustifyV(["header",])

* SimpleHTMLSetJustifyV(["header",]"TOP" or "MIDDLE" or "BOTTOM")

### NEW Font object with methods

* name = Font:GetName()

* a = Font:GetAlpha()

* Font:SetAlpha(a)

* font = Font:GetFontObject() -- Get the 'parent' of the Font.

* Font:SetFontObject(font or nil) -- Set the 'parent' of the Font.

* Font:CopyFontObject(font) -- Set this Font's attributes to be the same as those of font.

* fontFile, fontHeight, flags = Font:GetFont()

* wasFound = Font:SetFont("fontFile", fontHeight [, flags]) -- Returns true if specified font was valid, and nil if it was not (the change will not occur).

* r,g,b,a = Font:GetTextColor()

* Font:SetTextColor(r, g, b [, a])

* r,g,b,a = Font:GetShadowColor()

* Font:SetShadowColor(r, g, b [, a])

* x,y = Font:GetShadowOffset()

* Font:SetShadowOffset(x, y)

* Font:SetSpacing(spacing)

* spacing = Font:GetSpacing()

* Font:SetJustifyH("LEFT" or "CENTER" or "RIGHT")

* justifyh = Font:GetJustifyH()

* Font:SetJustifyV("TOP" or "MIDDLE" or "BOTTOM")

* justifyv = Font:GetJustifyV()

* type = Font:GetObjectType() -- Returns Font

* isType = Font:IsObjectType("type") -- Return true if type is "Font"

### NEW/UPDATED Button methods

* NEW font = Button:GetTextFontObject()

* NEW Button:SetTextFontObject(font or nil)

* NEW font = Button:GetDisabledFontObject()

* NEW Button:SetDisabledFontObject(font or nil)

* NEW font = Button:GetHighlightFontObject()

* NEW Button:SetHighlightFontObject(font or nil)

* UPDATED Button:SetNormalTexture("texturePath" or TextureObject) -- Added Texture Object option.

* UPDATED Button:SetPushedTexture("texturePath" or TextureObject) -- Added Texture Object option.

* UPDATED Button:SetDisabledTexture("texturePath" or TextureObject) -- Added Texture Object option.

* UPDATED Button:SetHighlightTexture("texturePath" or TextureObject) -- Added Texture Object option.

### NEW Minimap methods

* Minimap:SetMaskTexture("file") -- Set the texture for the minimap mask, defaults to "Textures\\MinimapMask".

* Minimap:SetIconTexture("file") -- Set the texture for the minimap POI icon, defaults to "Interface\\Minimap\\POIIcons".

* Minimap:SetBlipTexture("file") -- Set the texture for the minimap tracking blip, defaults to "Interface\\Minimap\\ObjectIcons".

### NEW Slider methods

* orientation = Slider:GetOrientation() -- Return slider orientation

* Slider:SetOrientation("orientation") -- Set slider orientation ("HORIZONTAL","VERTICAL")

### NEW StatusBar methods

* orientation = StatusBar:GetOrientation() -- Return bar orientation

* StatusBar:SetOrientation("orientation") -- Set bar orientation ("HORIZONTAL","VERTICAL")

* filename = StatusBar:GetStatusBarTexture()

* r, g, b, a = StatusBar:GetStatusBarColor()

### NEW EditBox methods

* EditBox:SetAltArrowKeyMode(enabled) -- Set if the ALT key must be held for arrow keys to work in the edit box.

* enabled = EditBox:GetAltArrowKeyMode() -- Get the current ALT key mode.

### NEW ScrollFrame methods

* ScrollFrame:SetScrollChild(frame or "framename")

* frame = ScrollFrame:GetScrollChild()

### Frame-related API Functions

* NEW: frame = CreateFrame("frameType" [,"name"] [, parent]) -- Create a new frame of the specified type ("Button", "Slider", etc).

* NEW: font = CreateFont("name") -- Dynamically create a font object

* NEW: num = GetNumFrames() -- Get the current number of Frame (and derivative) objects

* nextFrame = EnumerateFrames(currentFrame) -- Get the Frame which follows currentFrame (in internal order, use currentFrame=nil for the first one)

## XML Schema Changes

* EditBox, MessageFrame, ScrollingMessageFrame, SimpleHTML accept a font= attribute, which specifies a Font object to use (NOT a font file path)

## FrameXML Interface Code

* NUM\_CONTAINER\_FRAMES increased to match actual max number of open containers (11, rather than 9)

* In FrameXML\Fonts.xml, the system FontStrings become Font objects.

## Various changes

### Spell Casting

* CastSpellByName("Spell Name" [,onSelf]) -- Now takes optional onSelf parameter similar to UseAction.

## Other API Functions

* seterrorhandler(errfunc) -- Sets a new error handler (a function taking error message as its argument)

* errfunc = geterrorhandler() -- Gets the current error handler.

* version, buildnum, builddate = GetBuildInfo() -- Returns information about the current build.

* REMOVED: LaunchURL() will no longer be available.

* REMOVED: RegisterForSave() will no longer be available to AddOns.

* MouselookStart() -- Start mouse-looking.

* MouselookStop() -- Stop mouse-looking.

* IsMouselooking() -- Return whether mouse look is enabled.

## Bug Fixes

* Enchant tooltips will properly refresh as missing item data is fetched from server.

* SetBinding will correctly fire UPDATE\_BINDINGS events.

* Removed 1024 character limit on saved variable names.

* Deeply nested table structures will no longer break saved variables.

* Fixed UseAction self cast for weapon enchants.

* Spell links for quest rewards will work reliably.

* Fixed per-char/global macro ID overwriting.

* Fixed spell rank increases replacing macros which referred to that spell.

* Link content spoofing should now be blocked (Presumably with disconnection).

* Fixed

 problem in SimpleHTML.

* Fixed problem with tooltip name length breaking accessibility of tooltip content.

* Fixed schema validation errors in Blizzard XML code.

* Fixed various SavedVariables encoding issues.

## Event Changes

* Healing will be reported when the target is actually healed, rather than when the client initiates a heal. (Overhealing will still not be reported).

* There's a new SPELLCAST\_CHANNEL\_STOP event which replaces both the final SPELLCAST\_CHANNEL\_UPDATE (arg1==0) and SPELLCAST\_STOP for channeled spells (Thanks for Miravlix for researching this).