private var areaRect:Rect = Rect(0,0,128,256);
private var rectList:Hashtable = new Hashtable();
private var contentStartWidth:float;

function Start() {
    contentStartWidth = areaRect.width;
}

function Update() {
    areaRect.width -= Time.deltaTime *16.0;
    if (areaRect.width < 12) {
        areaRect.width = contentStartWidth;
    }
}

function OnGUI() {
    var rect:Rect;
    var contentsID:int;
    var contents:GUIContent;
    
    GUILayout.BeginArea(areaRect);
    GUILayout.BeginVertical();
    
    contentsID = 0;
    contents = GUIContent("abcdefg");
    labelOutline(contentsID, contents);
    GUILayout.Label(contents);
    stockLastRect(contentsID);
    
    GUILayout.BeginHorizontal();
    GUILayout.FlexibleSpace();
    
    contentsID++;
    contents = GUIContent("hi");
    labelOutline(contentsID, contents);
    GUILayout.Label(contents);
    stockLastRect(contentsID);

    GUILayout.EndHorizontal();
    GUILayout.FlexibleSpace();

    contentsID++;
    contents = GUIContent("jklmnopqrstuvwxyz");
    labelOutline(contentsID, contents);
    GUILayout.Label(contents);
    stockLastRect(contentsID);
    
    GUILayout.EndVertical();
    GUILayout.EndArea();
}


function stockLastRect(id_:int) {
    if (Event.current.type == EventType.Repaint) {
        rectList[id_] = GUILayoutUtility.GetLastRect();
    }
}

function labelOutline(rectID_:int, contents_:GUIContent):void {
    if (!rectList.ContainsKey(rectID_)) {return;}
    var rect:Rect = rectList[rectID_];
    if (rect.width < 0) {return;}
    var currentColor:Color = GUI.color;
    GUI.color = Color.red;
    rect.x--;
    drawLayoutText(rect, contents_);
    rect.x += 2;
    drawLayoutText(rect, contents_);
    rect.x--;
    rect.y--;
    drawLayoutText(rect, contents_);
    rect.y += 2;
    drawLayoutText(rect, contents_);
    GUI.color = currentColor;
}

private function drawLayoutText(rect_:Rect, contents_:GUIContent) {
    GUILayout.BeginArea(rect_);
    GUILayout.Label(contents_);
    GUILayout.EndArea();
}