<?xml version="1.0" encoding="UTF-8" ?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you under the Apache License, Version 2.0 (the
  "License"); you may not use this file except in compliance
  with the License.  You may obtain a copy of the License at
  
      http://www.apache.org/licenses/LICENSE-2.0
    	  
  Unless required by applicable law or agreed to in writing,
  software distributed under the License is distributed on an
  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  KIND, either express or implied.  See the License for the
  specific language governing permissions and limitations
  under the License.
  
-->
<library>

<class name="baseDrawPointer" extends="baseDrawEllipse" >
      
    <!-- Pointers -->
    
    <method name="endPointerWhiteBoard">
        this.drawPointerWhiteBoardFinal(
                "pointer"+this.getCounter(),
                this.getMouse('x'),this.getMouse('y'),
                0,0
            )
    </method>

    <method name="drawPointerToHistory" args="actionObject,parentObj">
        new lz.whiteBoardPointer(parentObj,{
            x:actionObject[actionObject.length-5],
            y:actionObject[actionObject.length-4],
            userName:actionObject[1]
        })
    </method>

    <method name="drawPointerWhiteBoardFinal" args="newName,x,y,width,height" >
        var actionObject = new Array();
        actionObject[0] = 'pointerWhiteBoard';
        actionObject[1] = canvas.currentuser;
        actionObject[2] = this.counter;//-6
        actionObject[3] = x;//-5
        actionObject[4] = y;//-4
        actionObject[5] = width;//-3
        actionObject[6] = height;//-2
        actionObject[7] = newName;//-1
        this.baseactionobjectList.push(actionObject);
        this.onsharedMessage('draw',actionObject);
        this.drawPointerToHistory(actionObject,this);
    </method>
    
</class>

</library>
