<?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="miniIcons" extends="view" stretches="both">
	<attribute name="showhandcursor" value="true" type="boolean" />
    <handler name="onmouseover">
    	if (this.showhandcursor) {
        	this.setAttribute("x",this.x-1);
        	this.setAttribute("y",this.y-1);
        	this.setAttribute("height",this.height+2);
        	this.setAttribute("width",this.width+2);
    	}
        parent.parent.onmouseover.sendEvent();
    </handler>
    <handler name="onmouseout">
    	if (this.showhandcursor) {
        	this.setAttribute("x",this.x+1);
            this.setAttribute("y",this.y+1);
            this.setAttribute("height",this.height-2);
            this.setAttribute("width",this.width-2);
    	}
        parent.parent.onmouseout.sendEvent();
    </handler>
</class>

<class name="miniIconsImage" extends="image" stretches="both">
	<attribute name="showhandcursor" value="true" type="boolean" />
    <handler name="onmouseover">
    	if (this.showhandcursor) {
        	this.setAttribute("x",this.x-1);
        	this.setAttribute("y",this.y-1);
        	this.setAttribute("height",this.height+2);
        	this.setAttribute("width",this.width+2);
    	}
        parent.parent.onmouseover.sendEvent();
    </handler>
    <handler name="onmouseout">
    	if (this.showhandcursor) {
        	this.setAttribute("x",this.x+1);
            this.setAttribute("y",this.y+1);
            this.setAttribute("height",this.height-2);
            this.setAttribute("width",this.width-2);
    	}
        parent.parent.onmouseout.sendEvent();
    </handler>
</class>

</library>