/**************************************************************
 * 
 * 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.
 * 
 *************************************************************/



#ifndef _TOOLKIT_AWT_XTHROBBER_HRC_
#include <xthrobber.hrc>
#endif

#define STD_MASK_COLOR MaskColor = Color { Red = 0xFFFF; Green = 0x0000; Blue = 0xFFFF; };

Image RID_TK_ICON_THROBBER_START
{
    ImageBitmap = Bitmap{ file = "spinner03-grey_01.png"; };
    STD_MASK_COLOR
};

Image RID_TK_ICON_THROBBER_START + 1
{
    ImageBitmap = Bitmap{ file = "spinner03-grey_02.png"; };
    STD_MASK_COLOR
};

Image RID_TK_ICON_THROBBER_START + 2
{
    ImageBitmap = Bitmap{ file = "spinner03-grey_03.png"; };
    STD_MASK_COLOR
};

Image RID_TK_ICON_THROBBER_START + 3
{
    ImageBitmap = Bitmap{ file = "spinner03-grey_04.png"; };
    STD_MASK_COLOR
};

Image RID_TK_ICON_THROBBER_START + 4
{
    ImageBitmap = Bitmap{ file = "spinner03-grey_05.png"; };
    STD_MASK_COLOR
};

Image RID_TK_ICON_THROBBER_START + 5
{
    ImageBitmap = Bitmap{ file = "spinner03-grey_06.png"; };
    STD_MASK_COLOR
};

Image RID_TK_ICON_THROBBER_START + 6
{
    ImageBitmap = Bitmap{ file = "spinner03-grey_07.png"; };
    STD_MASK_COLOR
};

Image RID_TK_ICON_THROBBER_START + 7
{
    ImageBitmap = Bitmap{ file = "spinner03-grey_08.png"; };
    STD_MASK_COLOR
};

Image RID_TK_ICON_THROBBER_START + 8
{
    ImageBitmap = Bitmap{ file = "spinner03-grey_09.png"; };
    STD_MASK_COLOR
};

Image RID_TK_ICON_THROBBER_START + 9
{
    ImageBitmap = Bitmap{ file = "spinner03-grey_10.png"; };
    STD_MASK_COLOR
};

Image RID_TK_ICON_THROBBER_START + 10
{
    ImageBitmap = Bitmap{ file = "spinner03-grey_11.png"; };
    STD_MASK_COLOR
};

Image RID_TK_ICON_THROBBER_START + 11
{
    ImageBitmap = Bitmap{ file = "spinner03-grey_12.png"; };
    STD_MASK_COLOR
};

Image RID_TK_HC_ICON_THROBBER_START
{
    ImageBitmap = Bitmap{ file = "spinner03-32-hc_01.png"; };
    STD_MASK_COLOR
};

Image RID_TK_HC_ICON_THROBBER_START + 1
{
    ImageBitmap = Bitmap{ file = "spinner03-32-hc_02.png"; };
    STD_MASK_COLOR
};

Image RID_TK_HC_ICON_THROBBER_START + 2
{
    ImageBitmap = Bitmap{ file = "spinner03-32-hc_03.png"; };
    STD_MASK_COLOR
};

Image RID_TK_HC_ICON_THROBBER_START + 3
{
    ImageBitmap = Bitmap{ file = "spinner03-32-hc_04.png"; };
    STD_MASK_COLOR
};

Image RID_TK_HC_ICON_THROBBER_START + 4
{
    ImageBitmap = Bitmap{ file = "spinner03-32-hc_05.png"; };
    STD_MASK_COLOR
};

Image RID_TK_HC_ICON_THROBBER_START + 5
{
    ImageBitmap = Bitmap{ file = "spinner03-32-hc_06.png"; };
    STD_MASK_COLOR
};

Image RID_TK_HC_ICON_THROBBER_START + 6
{
    ImageBitmap = Bitmap{ file = "spinner03-32-hc_07.png"; };
    STD_MASK_COLOR
};

Image RID_TK_HC_ICON_THROBBER_START + 7
{
    ImageBitmap = Bitmap{ file = "spinner03-32-hc_08.png"; };
    STD_MASK_COLOR
};

Image RID_TK_HC_ICON_THROBBER_START + 8
{
    ImageBitmap = Bitmap{ file = "spinner03-32-hc_09.png"; };
    STD_MASK_COLOR
};

Image RID_TK_HC_ICON_THROBBER_START + 9
{
    ImageBitmap = Bitmap{ file = "spinner03-32-hc_10.png"; };
    STD_MASK_COLOR
};

Image RID_TK_HC_ICON_THROBBER_START + 10
{
    ImageBitmap = Bitmap{ file = "spinner03-32-hc_11.png"; };
    STD_MASK_COLOR
};

Image RID_TK_HC_ICON_THROBBER_START + 11
{
    ImageBitmap = Bitmap{ file = "spinner03-32-hc_12.png"; };
    STD_MASK_COLOR
};

