NOTE: Sorry if I sound grumpy, just trying to explain how serious the issue is. -----> 
I know I've mentioned this before, but I have now come to the point where the careless design of UIRect is really getting in the way (requiring extensive modifications to add basic behaviour).
The main issue (from what I can tell) is that UIRect was designed last (instead of first) to "hack" in a common base class for UIWidget & UIPanel, but other than that, they share close to no behaviour. Pretty much all logic is delegated down to these subclasses, instead of handled in the base class. You have a base class UIRect, called
UIRect since the common behaviour is a
rectangle, but UIPanel & UIWidget is WAY different in their implementation. Sure, they do different things from your perspective, but for us clients using the API, there should be NO difference in sizing, positioning etc. since it's all just a rectangle in our eyes (ease of use is key here). The warning-bell should'v rang when you implemented the "SetRect"-method in UIWidget, but not in UIPanel... Just the name of that method should imply that it should be in UIRect, not UIWidget alone (nor delegated to them both from UIRect).
Another BIG issue is that this "design" destroys any way of caching values in a common way, since both UIWidget & UIPanel have their own way of representing the rectangle. So each time I want to use values in a common manner, I have to call "GetSides()", which recalculates everything based on each subclasses "rectangle-representation", destroying performance (or forces you to manually cache the values which is far to cumbersome).
The problems that arise are pretty minor when you only use your inspector-interface, since there it's just a few different input-fields. But when you try to add behaviour, it's frustrating to say the least. In my case, the poor implementation-design has forced me to heavily customise UIRect, UIWidget & UIPanel with code that should already be there to begin with. In my case, I've implemented a constraint-system which is really "simple" logically, but 75% of the implementation-process has been to bypass UIRects limitations.
Suggestion: Take some time to really think it through. Redo UIPanel & UIWidget to really SHARE the behaviour in a
common way, not having their separate way of doing things. This will make things way easier for you and us (the users), since you will fulfil one of the most important principles:
The Open/Closed Principle (
http://en.wikipedia.org/wiki/Open/closed_principle). Not saying this will be easy, just saying it has to be done eventually (eventually being ASAP).
And as always, remember to have obvious events implemented (OnRectChanged, for example.).
Cherio!
