From a68270fe2cfb7ea55b21fb9d4f767a85fc461392 Mon Sep 17 00:00:00 2001 From: DarkWyrm Date: Wed, 7 Feb 2007 17:18:55 +0000 Subject: [PATCH] Retooled the GUI for the app - much easier on the eyes, fits in better with MediaPlayer (and looks better ;-) and flicker is no longer a problem. Header has been added to files Style updates to source files, also. I may have missed a bit, but it sure is much closer than before git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20104 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/apps/cdplayer/ButtonBitmaps.h | 1399 ++++++++++++++++++ src/apps/cdplayer/CDAudioDevice.cpp | 163 ++- src/apps/cdplayer/CDAudioDevice.h | 40 +- src/apps/cdplayer/CDDBSupport.cpp | 330 ++--- src/apps/cdplayer/CDPlayer.cpp | 653 ++++----- src/apps/cdplayer/CDPlayer.h | 11 +- src/apps/cdplayer/CDPlayer.rdef | 1481 +++++++++++++++----- src/apps/cdplayer/DoubleShotDrawButton.cpp | 8 + src/apps/cdplayer/DoubleShotDrawButton.h | 11 +- src/apps/cdplayer/DrawButton.cpp | 54 +- src/apps/cdplayer/DrawButton.h | 7 + src/apps/cdplayer/DrawingTidbits.cpp | 445 ++++++ src/apps/cdplayer/DrawingTidbits.h | 77 + src/apps/cdplayer/Jamfile | 3 +- src/apps/cdplayer/TwoStateDrawButton.cpp | 81 +- src/apps/cdplayer/TwoStateDrawButton.h | 9 +- src/apps/cdplayer/VolumeSlider.cpp | 317 +++++ src/apps/cdplayer/VolumeSlider.h | 55 + 18 files changed, 4055 insertions(+), 1089 deletions(-) create mode 100644 src/apps/cdplayer/ButtonBitmaps.h create mode 100644 src/apps/cdplayer/DrawingTidbits.cpp create mode 100644 src/apps/cdplayer/DrawingTidbits.h create mode 100644 src/apps/cdplayer/VolumeSlider.cpp create mode 100644 src/apps/cdplayer/VolumeSlider.h diff --git a/src/apps/cdplayer/ButtonBitmaps.h b/src/apps/cdplayer/ButtonBitmaps.h new file mode 100644 index 0000000000..a26a0938f4 --- /dev/null +++ b/src/apps/cdplayer/ButtonBitmaps.h @@ -0,0 +1,1399 @@ +/* + * Copyright 2006, Haiku. + * Distributed under the terms of the MIT License. + * + * Authors: + * Stephan Aßmus + */ + +// NOTE: The images in here originate from Be Sample code. They have been +// integrated in the BeOS interface for the VLC Media Player code. When I +// worked on VLC during the 0.4.3-0.4.6 times, I reworked the bitmaps, and +// all code left in this file is from my own work on the Be Sample code +// buttons. -Stephan Aßmus + +#ifndef BUTTON_BITMAPS_H +#define BUTTON_BITMAPS_H + + +// #pragma mark play + +const int32 kPlayPauseBitmapWidth = 48; +const int32 kPlayPauseBitmapHeight = 21; + +const unsigned char kPlayButtonBitmapBits [] = { + 0xff,0xff,0xff,0xff,0xff,0x19,0x17,0x14,0x13,0x11,0x11,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x12,0x14,0x16,0x19,0x1a,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0x1a,0x18,0x14,0x10,0x0d,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b, + 0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b, + 0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0f,0x13,0x17,0x1a,0xff,0xff,0xff, + 0xff,0xff,0x1a,0x17,0x11,0x0b,0x10,0x16,0x1a,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x19,0x12,0x12,0x16,0x19,0xff,0xff, + 0xff,0x1a,0x17,0x10,0x0d,0x16,0x1e,0x1e,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x18,0x14,0x17,0x1a,0xff, + 0xff,0x18,0x11,0x0d,0x18,0x1e,0x1d,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x19,0x16,0x19,0xff, + 0x19,0x14,0x0c,0x16,0x1e,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x00,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x17,0x18,0x1a, + 0x17,0x11,0x10,0x1d,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x00,0x00, + 0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x00,0x00,0x10,0x1a,0x1a, + 0x00,0x00,0x00,0x10,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x17,0x18,0x1b, + 0x16,0x0f,0x17,0x1d,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x17, + 0x00,0x00,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x3f,0x1a,0x1a, + 0x00,0x17,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x16,0x16,0x1b, + 0x14,0x0f,0x1b,0x1c,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x17, + 0x17,0x17,0x00,0x00,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x3f,0x1a,0x1a, + 0x00,0x17,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x16,0x12,0x1c, + 0x14,0x0f,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x00,0x00,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x3f,0x1a,0x1a, + 0x00,0x17,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x16,0x0f,0x1c, + 0x14,0x10,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x3f,0x3f,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x3f,0x1a,0x1a, + 0x00,0x17,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x16,0x0f,0x1d, + 0x16,0x11,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x17, + 0x17,0x17,0x3f,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x3f,0x1a,0x1a, + 0x00,0x17,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x14,0x0e,0x1d, + 0x17,0x13,0x19,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x17, + 0x3f,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x3f,0x1a,0x1a, + 0x00,0x17,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x18,0x12,0x10,0x1d, + 0x18,0x16,0x17,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x3f,0x3f, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x10,0x3f,0x3f,0x3f,0x1a,0x1a, + 0x10,0x3f,0x3f,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x16,0x0f,0x13,0x1d, + 0x1a,0x19,0x17,0x18,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x3f,0x3f,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x18,0x12,0x0c,0x19,0x1d, + 0xff,0xff,0x19,0x17,0x16,0x17,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x18,0x13,0x0c,0x13,0x1e,0x1d, + 0xff,0xff,0xff,0x1a,0x16,0x13,0x16,0x17,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x16,0x12,0x0b,0x10,0x1c,0x1d,0x1c, + 0xff,0xff,0xff,0xff,0xff,0x16,0x10,0x10,0x12,0x13,0x13,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x13,0x11,0x0d,0x0a,0x11,0x1c,0x1e,0x1c,0xff, + 0xff,0xff,0xff,0xff,0x1c,0x1c,0x19,0x13,0x0f,0x0b,0x0b,0x0b,0x0a,0x0a,0x0a,0x0a, + 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, + 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0b,0x0f,0x19,0x1e,0x1e,0x1c,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0x1c,0x1c,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1c,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0xff,0xff,0xff,0xff,0xff +}; + +const unsigned char kDisabledPlayButtonBitmapBits [] = { + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x19,0x16,0x16,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x16,0x16,0x19,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x18,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x18,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x19,0x16,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x16,0x19,0x1b,0x1b, + 0x1b,0x1b,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x16,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x1b,0x1b, + 0x1b,0x18,0x16,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x16,0x16, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x16,0x16,0x1b,0x1b,0x1b, + 0x16,0x16,0x16,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x18,0x1b, + 0x1b,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x19,0x19, + 0x16,0x16,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x19,0x1c,0x1b,0x1b, + 0x16,0x19,0x19,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x1b, + 0x1b,0x14,0x19,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x19,0x19, + 0x19,0x19,0x16,0x16,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x19,0x1c,0x1b,0x1b, + 0x16,0x19,0x19,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x19,0x14,0x1b, + 0x1b,0x13,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x16,0x16,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x19,0x1c,0x1b,0x1b, + 0x16,0x19,0x19,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x13,0x1b, + 0x1b,0x13,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x19,0x1c,0x1b,0x1b, + 0x16,0x19,0x19,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x13,0x1b, + 0x1b,0x14,0x19,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x19,0x19, + 0x19,0x19,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x19,0x1c,0x1b,0x1b, + 0x16,0x19,0x19,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x19,0x14,0x1b, + 0x1b,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x19,0x19, + 0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x19,0x1c,0x1b,0x1b, + 0x16,0x19,0x19,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x1b, + 0x1b,0x18,0x16,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x1c,0x1c, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1b,0x1b, + 0x1b,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x18,0x1b, + 0x1b,0x1b,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x1b,0x1b, + 0x1b,0x1b,0x19,0x16,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x16,0x19,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x18,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x18,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x19,0x16,0x16,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x16,0x16,0x19,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b +}; + +const unsigned char kPressedPlayButtonBitmapBits [] = { + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x19,0x19,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x19,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1a,0x19,0x17,0x14,0x13,0x12,0x11,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x12,0x14,0x16,0x19,0x1a,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1a,0x18,0x14,0x11,0x0d,0x0b,0x0a,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x0a,0x0c,0x0e,0x12,0x14,0x18,0x1a,0x1a,0x1b, + 0x1b,0x1a,0x17,0x13,0x0e,0x0b,0x0c,0x0d,0x0f,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x0f,0x0d,0x0d,0x0f,0x11,0x14,0x18,0x1a,0x1a, + 0x1a,0x18,0x13,0x0d,0x0c,0x0e,0x11,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x11,0x0f,0x0f,0x13,0x16,0x19,0x1a, + 0x19,0x14,0x0e,0x0c,0x0f,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x0f,0x10,0x16,0x18,0x1a, + 0x17,0x11,0x0c,0x0e,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x00,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x0f,0x13,0x18,0x1b, + 0x16,0x0d,0x0d,0x11,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x00, + 0x00,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x00,0x00,0x10,0x13, + 0x13,0x00,0x00,0x00,0x10,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x11,0x10,0x17,0x1b, + 0x14,0x0d,0x0e,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x10, + 0x10,0x00,0x00,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x10,0x19,0x13, + 0x13,0x00,0x10,0x10,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x10,0x16,0x1c, + 0x14,0x0d,0x0f,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x10, + 0x10,0x10,0x10,0x00,0x00,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x10,0x19,0x13, + 0x13,0x00,0x10,0x10,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x10,0x16,0x1c, + 0x14,0x0e,0x10,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x13,0x13,0x13,0x13,0x00,0x10,0x10,0x19,0x13, + 0x13,0x00,0x10,0x10,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x0f,0x16,0x1c, + 0x16,0x0e,0x0f,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x19,0x19,0x13,0x13,0x13,0x13,0x00,0x10,0x10,0x19,0x13, + 0x13,0x00,0x10,0x10,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x10,0x17,0x1c, + 0x17,0x10,0x0f,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x10, + 0x10,0x10,0x10,0x19,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x10,0x19,0x13, + 0x13,0x00,0x10,0x10,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x11,0x11,0x18,0x1c, + 0x18,0x12,0x0f,0x10,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x10, + 0x10,0x19,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x10,0x19,0x13, + 0x13,0x00,0x10,0x10,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x10,0x13,0x1a,0x1c, + 0x1a,0x16,0x11,0x0f,0x11,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x19, + 0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x10,0x19,0x19,0x19,0x13, + 0x13,0x10,0x19,0x19,0x19,0x13,0x13,0x13,0x13,0x13,0x12,0x11,0x11,0x18,0x1b,0x1c, + 0x1b,0x1a,0x16,0x11,0x0f,0x11,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x19,0x19,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x11,0x10,0x16,0x1b,0x1d,0x1c, + 0x1b,0x1b,0x1a,0x16,0x12,0x10,0x10,0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x11,0x10,0x11,0x16,0x1b,0x1c,0x1d,0x1c, + 0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x12,0x10,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0e,0x0e,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0e, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x11,0x14,0x19,0x1b,0x1d,0x1d,0x1c,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1c,0x1a,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1c,0x1d,0x1d,0x1c,0x1c,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b +}; + +const unsigned char kPlayingPlayButtonBitmapBits [] = { + 0x1b,0x1b,0x1b,0x1b,0x1a,0x19,0x17,0x14,0x13,0x11,0x11,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x12,0x14,0x16,0x19,0x1a,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1a,0x18,0x14,0x10,0x0d,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b, + 0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b, + 0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0f,0x13,0x17,0x1a,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1a,0x17,0x11,0x0b,0x10,0x16,0x1a,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x19,0x12,0x12,0x16,0x19,0x1b,0x1b, + 0x1b,0x1a,0x17,0x10,0x0d,0x16,0x1e,0x1e,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x18,0x14,0x17,0x1a,0x1b, + 0x1a,0x18,0x11,0x0d,0x18,0x1e,0x1d,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x19,0x16,0x19,0x1a, + 0x19,0x14,0x0c,0x16,0x1e,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x00,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x17,0x18,0x1a, + 0x17,0x11,0x10,0x1d,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x34,0x00,0x00, + 0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x00,0x00,0x10,0x1a,0x1a, + 0x00,0x00,0x00,0x10,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x17,0x18,0x1b, + 0x16,0x0f,0x17,0x1d,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x34,0x34,0x34, + 0x00,0x00,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x3f,0x1a,0x1a, + 0x00,0x17,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x16,0x16,0x1b, + 0x14,0x0f,0x1b,0x1c,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x34,0x34,0x34, + 0x34,0x34,0x00,0x00,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x3f,0x1a,0x1a, + 0x00,0x17,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x16,0x12,0x1c, + 0x14,0x0f,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x34,0x34,0x34, + 0x34,0x34,0x34,0x34,0x00,0x00,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x3f,0x1a,0x1a, + 0x00,0x17,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x16,0x0f,0x1c, + 0x14,0x10,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x34,0x34,0x34, + 0x34,0x34,0x34,0x34,0x3f,0x3f,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x3f,0x1a,0x1a, + 0x00,0x17,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x16,0x0f,0x1d, + 0x16,0x11,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x34,0x34,0x34, + 0x34,0x34,0x3f,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x3f,0x1a,0x1a, + 0x00,0x17,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x14,0x0e,0x1d, + 0x17,0x13,0x19,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x34,0x34,0x34, + 0x3f,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x3f,0x1a,0x1a, + 0x00,0x17,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x18,0x12,0x10,0x1d, + 0x18,0x16,0x17,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x34,0x3f,0x3f, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x10,0x3f,0x3f,0x3f,0x1a,0x1a, + 0x10,0x3f,0x3f,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x16,0x0f,0x13,0x1d, + 0x1a,0x19,0x17,0x18,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x3f,0x3f,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x18,0x12,0x0c,0x19,0x1d, + 0x1b,0x1b,0x19,0x17,0x16,0x17,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x18,0x13,0x0c,0x13,0x1e,0x1d, + 0x1b,0x1b,0x1b,0x1a,0x16,0x13,0x16,0x17,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x16,0x12,0x0b,0x10,0x1c,0x1d,0x1c, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x10,0x10,0x12,0x13,0x13,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x13,0x11,0x0d,0x0a,0x11,0x1c,0x1e,0x1c,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x19,0x13,0x0f,0x0b,0x0b,0x0b,0x0a,0x0a,0x0a,0x0a, + 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, + 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0b,0x0f,0x19,0x1e,0x1e,0x1c,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1c,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b +}; + +const unsigned char kPressedPlayingPlayButtonBitmapBits [] = { + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x19,0x19,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x19,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1a,0x19,0x17,0x14,0x13,0x12,0x11,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x12,0x14,0x16,0x19,0x1a,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1a,0x18,0x14,0x11,0x0d,0x0b,0x0a,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x0a,0x0c,0x0e,0x12,0x14,0x18,0x1a,0x1a,0x1b, + 0x1b,0x1a,0x17,0x13,0x0e,0x0b,0x0c,0x0d,0x0f,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x0f,0x0d,0x0d,0x0f,0x11,0x14,0x18,0x1a,0x1a, + 0x1a,0x18,0x13,0x0d,0x0c,0x0e,0x11,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x11,0x0f,0x0f,0x13,0x16,0x19,0x1a, + 0x19,0x14,0x0e,0x0c,0x0f,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x0f,0x10,0x16,0x18,0x1a, + 0x17,0x11,0x0c,0x0e,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x00,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x0f,0x13,0x18,0x1b, + 0x16,0x0d,0x0d,0x11,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x34,0x00, + 0x00,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x00,0x00,0x10,0x13, + 0x13,0x00,0x00,0x00,0x10,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x11,0x10,0x17,0x1b, + 0x14,0x0d,0x0e,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x34,0x34, + 0x34,0x00,0x00,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x10,0x19,0x13, + 0x13,0x00,0x10,0x10,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x10,0x16,0x1c, + 0x14,0x0d,0x0f,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x34,0x34, + 0x34,0x34,0x34,0x00,0x00,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x10,0x19,0x13, + 0x13,0x00,0x10,0x10,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x10,0x16,0x1c, + 0x14,0x0e,0x10,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x34,0x34, + 0x34,0x34,0x34,0x34,0x34,0x00,0x00,0x13,0x13,0x13,0x13,0x00,0x10,0x10,0x19,0x13, + 0x13,0x00,0x10,0x10,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x0f,0x16,0x1c, + 0x16,0x0e,0x0f,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x34,0x34, + 0x34,0x34,0x34,0x34,0x34,0x19,0x19,0x13,0x13,0x13,0x13,0x00,0x10,0x10,0x19,0x13, + 0x13,0x00,0x10,0x10,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x10,0x17,0x1c, + 0x17,0x10,0x0f,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x34,0x34, + 0x34,0x34,0x34,0x19,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x10,0x19,0x13, + 0x13,0x00,0x10,0x10,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x11,0x11,0x18,0x1c, + 0x18,0x12,0x0f,0x10,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x34,0x34, + 0x34,0x19,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x10,0x19,0x13, + 0x13,0x00,0x10,0x10,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x10,0x13,0x1a,0x1c, + 0x1a,0x16,0x11,0x0f,0x11,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x34,0x19, + 0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x10,0x19,0x19,0x19,0x13, + 0x13,0x10,0x19,0x19,0x19,0x13,0x13,0x13,0x13,0x13,0x12,0x11,0x11,0x18,0x1b,0x1c, + 0x1b,0x1a,0x16,0x11,0x0f,0x11,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x19,0x19,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x11,0x10,0x16,0x1b,0x1d,0x1c, + 0x1b,0x1b,0x1a,0x16,0x12,0x10,0x10,0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x11,0x10,0x11,0x16,0x1b,0x1c,0x1d,0x1c, + 0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x12,0x10,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x11,0x14,0x19,0x1b,0x1d,0x1d,0x1c,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1c,0x1a,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1c,0x1d,0x1d,0x1c,0x1c,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b +}; + +const unsigned char kPausedPlayButtonBitmapBits [] = { + 0x1b,0x1b,0x1b,0x1b,0x1a,0x19,0x17,0x14,0x13,0x11,0x11,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x12,0x14,0x16,0x19,0x1a,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1a,0x18,0x14,0x10,0x0d,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b, + 0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b, + 0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0f,0x13,0x17,0x1a,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1a,0x17,0x11,0x0b,0x10,0x16,0x1a,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x19,0x12,0x12,0x16,0x19,0x1b,0x1b, + 0x1b,0x1a,0x17,0x10,0x0d,0x16,0x1e,0x1e,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x18,0x14,0x17,0x1a,0x1b, + 0x1a,0x18,0x11,0x0d,0x18,0x1e,0x1d,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x19,0x16,0x19,0x1a, + 0x19,0x14,0x0c,0x16,0x1e,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x00,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x17,0x18,0x1a, + 0x17,0x11,0x10,0x1d,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x00,0x00, + 0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x00,0x00,0x10,0x1a,0x1a, + 0x00,0x00,0x00,0x10,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x17,0x18,0x1b, + 0x16,0x0f,0x17,0x1d,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x17, + 0x00,0x00,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x34,0x34,0x3f,0x1a,0x1a, + 0x00,0x34,0x34,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x16,0x16,0x1b, + 0x14,0x0f,0x1b,0x1c,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x17, + 0x17,0x17,0x00,0x00,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x34,0x34,0x3f,0x1a,0x1a, + 0x00,0x34,0x34,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x16,0x12,0x1c, + 0x14,0x0f,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x00,0x00,0x1a,0x1a,0x1a,0x1a,0x00,0x34,0x34,0x3f,0x1a,0x1a, + 0x00,0x34,0x34,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x16,0x0f,0x1c, + 0x14,0x10,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x3f,0x3f,0x1a,0x1a,0x1a,0x1a,0x00,0x34,0x34,0x3f,0x1a,0x1a, + 0x00,0x34,0x34,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x16,0x0f,0x1d, + 0x16,0x11,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x17, + 0x17,0x17,0x3f,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x34,0x34,0x3f,0x1a,0x1a, + 0x00,0x34,0x34,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x14,0x0e,0x1d, + 0x17,0x13,0x19,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x17, + 0x3f,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x34,0x34,0x3f,0x1a,0x1a, + 0x00,0x34,0x34,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x18,0x12,0x10,0x1d, + 0x18,0x16,0x17,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x3f,0x3f, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x10,0x3f,0x3f,0x3f,0x1a,0x1a, + 0x10,0x3f,0x3f,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x16,0x0f,0x13,0x1d, + 0x1a,0x19,0x17,0x18,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x3f,0x3f,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x18,0x12,0x0c,0x19,0x1d, + 0x1b,0x1b,0x19,0x17,0x16,0x17,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x18,0x13,0x0c,0x13,0x1e,0x1d, + 0x1b,0x1b,0x1b,0x1a,0x16,0x13,0x16,0x17,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x16,0x12,0x0b,0x10,0x1c,0x1d,0x1c, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x10,0x10,0x12,0x13,0x13,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x13,0x11,0x0d,0x0a,0x11,0x1c,0x1e,0x1c,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x19,0x13,0x0f,0x0b,0x0b,0x0b,0x0a,0x0a,0x0a,0x0a, + 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, + 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0b,0x0f,0x19,0x1e,0x1e,0x1c,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1c,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b +}; + +const unsigned char kPressedPausedPlayButtonBitmapBits [] = { + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x19,0x19,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x19,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1a,0x19,0x17,0x14,0x13,0x12,0x11,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x12,0x14,0x16,0x19,0x1a,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1a,0x18,0x14,0x11,0x0d,0x0b,0x0a,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x0a,0x0c,0x0e,0x12,0x14,0x18,0x1a,0x1a,0x1b, + 0x1b,0x1a,0x17,0x13,0x0e,0x0b,0x0c,0x0d,0x0f,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x0f,0x0d,0x0d,0x0f,0x11,0x14,0x18,0x1a,0x1a, + 0x1a,0x18,0x13,0x0d,0x0c,0x0e,0x11,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x11,0x0f,0x0f,0x13,0x16,0x19,0x1a, + 0x19,0x14,0x0e,0x0c,0x0f,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x0f,0x10,0x16,0x18,0x1a, + 0x17,0x11,0x0c,0x0e,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x00,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x0f,0x13,0x18,0x1b, + 0x16,0x0d,0x0d,0x11,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x00, + 0x00,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x00,0x00,0x10,0x13, + 0x13,0x00,0x00,0x00,0x10,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x11,0x10,0x17,0x1b, + 0x14,0x0d,0x0e,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x10, + 0x10,0x00,0x00,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x34,0x34,0x19,0x13, + 0x13,0x00,0x34,0x34,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x10,0x16,0x1c, + 0x14,0x0d,0x0f,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x10, + 0x10,0x10,0x10,0x00,0x00,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x34,0x34,0x19,0x13, + 0x13,0x00,0x34,0x34,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x10,0x16,0x1c, + 0x14,0x0e,0x10,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x13,0x13,0x13,0x13,0x00,0x34,0x34,0x19,0x13, + 0x13,0x00,0x34,0x34,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x0f,0x16,0x1c, + 0x16,0x0e,0x0f,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x19,0x19,0x13,0x13,0x13,0x13,0x00,0x34,0x34,0x19,0x13, + 0x13,0x00,0x34,0x34,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x10,0x17,0x1c, + 0x17,0x10,0x0f,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x10, + 0x10,0x10,0x10,0x19,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x34,0x34,0x19,0x13, + 0x13,0x00,0x34,0x34,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x11,0x11,0x18,0x1c, + 0x18,0x12,0x0f,0x10,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x10, + 0x10,0x19,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x34,0x34,0x19,0x13, + 0x13,0x00,0x34,0x34,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x10,0x13,0x1a,0x1c, + 0x1a,0x16,0x11,0x0f,0x11,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x19, + 0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x10,0x19,0x19,0x19,0x13, + 0x13,0x10,0x19,0x19,0x19,0x13,0x13,0x13,0x13,0x13,0x12,0x11,0x11,0x18,0x1b,0x1c, + 0x1b,0x1a,0x16,0x11,0x0f,0x11,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x19,0x19,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x11,0x10,0x16,0x1b,0x1d,0x1c, + 0x1b,0x1b,0x1a,0x16,0x12,0x10,0x10,0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x11,0x10,0x11,0x16,0x1b,0x1c,0x1d,0x1c, + 0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x12,0x10,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0e,0x0e,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x11,0x14,0x19,0x1b,0x1d,0x1d,0x1c,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1c,0x1a,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1c,0x1d,0x1d,0x1c,0x1c,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b +}; + +// #pragma mark stop + +const int32 kStopBitmapWidth = 31; +const int32 kStopBitmapHeight = 21; + +const unsigned char kStopButtonBitmapBits [] = { + 0x1b,0x1b,0x1b,0x1b,0x1a,0x19,0x17,0x14,0x13,0x11,0x11,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x12,0x14,0x16,0x19,0x1a,0x1b,0x1b,0x1b,0x3f, + 0x1b,0x1b,0x1b,0x1a,0x18,0x14,0x10,0x0d,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b, + 0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0f,0x13,0x17,0x1a,0x1b,0x1b,0x1b,0x3f, + 0x1b,0x1b,0x1a,0x17,0x11,0x0b,0x10,0x16,0x1a,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x19,0x12,0x12,0x16,0x19,0x1b,0x1b,0x3f, + 0x1b,0x1a,0x17,0x10,0x0d,0x16,0x1e,0x1e,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x18,0x14,0x17,0x1a,0x1b,0x3f, + 0x1a,0x18,0x11,0x0d,0x18,0x1e,0x1d,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x19,0x16,0x19,0x1a,0x3f, + 0x19,0x14,0x0c,0x16,0x1e,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x17,0x18,0x1a,0x3f, + 0x17,0x11,0x10,0x1d,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x10,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x17,0x18,0x1b,0x3f, + 0x16,0x0f,0x17,0x1d,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x17, + 0x17,0x17,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x16,0x16,0x1b,0x3f, + 0x14,0x0f,0x1b,0x1c,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x17, + 0x17,0x17,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x16,0x12,0x1c,0x3f, + 0x14,0x0f,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x17, + 0x17,0x17,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x16,0x0f,0x1c,0x3f, + 0x14,0x10,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x17, + 0x17,0x17,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x16,0x0f,0x1d,0x3f, + 0x16,0x11,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x17, + 0x17,0x17,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x14,0x0e,0x1d,0x3f, + 0x17,0x13,0x19,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x17, + 0x17,0x17,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x18,0x12,0x10,0x1d,0x3f, + 0x18,0x16,0x17,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x10,0x3f,0x3f,0x3f, + 0x3f,0x3f,0x3f,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x16,0x0f,0x13,0x1d,0x3f, + 0x1a,0x19,0x17,0x18,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x18,0x12,0x0c,0x19,0x1d,0x3f, + 0x1b,0x1b,0x19,0x17,0x16,0x17,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x18,0x13,0x0c,0x13,0x1e,0x1d,0x3f, + 0x1b,0x1b,0x1b,0x1a,0x16,0x13,0x16,0x17,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x16,0x12,0x0b,0x10,0x1c,0x1d,0x1c,0x3f, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x10,0x10,0x12,0x13,0x13,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x13,0x11,0x0d,0x0a,0x11,0x1c,0x1e,0x1c,0x1b,0x3f, + 0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x19,0x13,0x0f,0x0b,0x0b,0x0b,0x0a,0x0a,0x0a,0x0a, + 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0b,0x0f,0x19,0x1e,0x1e,0x1c,0x1b,0x1b,0x3f, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1c,0x1b,0x1b,0x1b,0x3f, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f +}; + + +const unsigned char kDisabledStopButtonBitmapBits [] = { + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f, + 0x1b,0x1b,0x1b,0x1b,0x19,0x16,0x16,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x16,0x16,0x19,0x1b,0x1b,0x1b,0x1b,0x3f, + 0x1b,0x1b,0x1b,0x18,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x18,0x1b,0x1b,0x1b,0x3f, + 0x1b,0x1b,0x19,0x16,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x16,0x19,0x1b,0x1b,0x3f, + 0x1b,0x1b,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x1b,0x1b,0x3f, + 0x1b,0x18,0x16,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x18,0x1b,0x3f, + 0x1b,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x19,0x19, + 0x19,0x19,0x19,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x1b,0x3f, + 0x1b,0x14,0x19,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x19,0x19, + 0x19,0x19,0x19,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x19,0x14,0x1b,0x3f, + 0x1b,0x13,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x19,0x19, + 0x19,0x19,0x19,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x13,0x1b,0x3f, + 0x1b,0x13,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x19,0x19, + 0x19,0x19,0x19,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x13,0x1b,0x3f, + 0x1b,0x14,0x19,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x19,0x19, + 0x19,0x19,0x19,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x19,0x14,0x1b,0x3f, + 0x1b,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x19,0x19, + 0x19,0x19,0x19,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x1b,0x3f, + 0x1b,0x18,0x16,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x18,0x1b,0x3f, + 0x1b,0x1b,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x1b,0x1b,0x3f, + 0x1b,0x1b,0x19,0x16,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x16,0x19,0x1b,0x1b,0x3f, + 0x1b,0x1b,0x1b,0x18,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x18,0x1b,0x1b,0x1b,0x3f, + 0x1b,0x1b,0x1b,0x1b,0x19,0x16,0x16,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x16,0x16,0x19,0x1b,0x1b,0x1b,0x1b,0x3f, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f +}; + + +const unsigned char kPressedStopButtonBitmapBits [] = { + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x19,0x19,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x19,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x3f, + 0x1b,0x1b,0x1b,0x1a,0x19,0x17,0x14,0x13,0x12,0x11,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x12,0x14,0x16,0x19,0x1a,0x1b,0x1b,0x1b,0x3f, + 0x1b,0x1b,0x1a,0x18,0x14,0x11,0x0d,0x0b,0x0a,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x09,0x09,0x09,0x09,0x09,0x09,0x0a,0x0c,0x0e,0x12,0x14,0x18,0x1a,0x1a,0x1b,0x3f, + 0x1b,0x1a,0x17,0x13,0x0e,0x0b,0x0c,0x0d,0x0f,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x0f,0x0d,0x0d,0x0f,0x11,0x14,0x18,0x1a,0x1a,0x3f, + 0x1a,0x18,0x13,0x0d,0x0c,0x0e,0x11,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x11,0x0f,0x0f,0x13,0x16,0x19,0x1a,0x3f, + 0x19,0x14,0x0e,0x0c,0x0f,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x0f,0x10,0x16,0x18,0x1a,0x3f, + 0x17,0x11,0x0c,0x0e,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x0f,0x13,0x18,0x1b,0x3f, + 0x16,0x0d,0x0d,0x11,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x13,0x13,0x13,0x13,0x13,0x13,0x11,0x10,0x17,0x1b,0x3f, + 0x14,0x0d,0x0e,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x10, + 0x10,0x10,0x10,0x10,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x10,0x16,0x1c,0x3f, + 0x14,0x0d,0x0f,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x10, + 0x10,0x10,0x10,0x10,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x10,0x16,0x1c,0x3f, + 0x14,0x0e,0x10,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x10, + 0x10,0x10,0x10,0x10,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x0f,0x16,0x1c,0x3f, + 0x16,0x0e,0x0f,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x10, + 0x10,0x10,0x10,0x10,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x10,0x17,0x1c,0x3f, + 0x17,0x10,0x0f,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x10, + 0x10,0x10,0x10,0x10,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x11,0x11,0x18,0x1c,0x3f, + 0x18,0x12,0x0f,0x10,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x10, + 0x10,0x10,0x10,0x10,0x19,0x13,0x13,0x13,0x13,0x13,0x12,0x10,0x13,0x1a,0x1c,0x3f, + 0x1a,0x16,0x11,0x0f,0x11,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x13,0x13,0x13,0x13,0x12,0x11,0x11,0x18,0x1b,0x1c,0x3f, + 0x1b,0x1a,0x16,0x11,0x0f,0x11,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x11,0x10,0x16,0x1b,0x1d,0x1c,0x3f, + 0x1b,0x1b,0x1a,0x16,0x12,0x10,0x10,0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x11,0x10,0x11,0x16,0x1b,0x1c,0x1d,0x1c,0x3f, + 0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x12,0x10,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x11,0x14,0x19,0x1b,0x1d,0x1d,0x1c,0x1b,0x3f, + 0x1b,0x1b,0x1b,0x1b,0x1c,0x1a,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1c,0x1d,0x1d,0x1c,0x1c,0x1b,0x3f, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1b,0x1b,0x3f, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x3f +}; + +// #pragma mark rewind + +const int32 kRewindBitmapWidth = 38; +const int32 kRewindBitmapHeight = 21; + +const unsigned char kRewindBitmapBits [] = { + 0x1b,0x1b,0x1b,0x1b,0x1a,0x19,0x17,0x14,0x13,0x11,0x11,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x12,0x14,0x16, + 0x19,0x1a,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1a,0x18,0x14,0x10,0x0d, + 0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b, + 0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0f,0x13,0x17,0x1a,0x1b,0x1b,0x1b,0x3f,0x3f, + 0x1b,0x1b,0x1a,0x17,0x11,0x0b,0x10,0x16,0x1a,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x19, + 0x12,0x12,0x16,0x19,0x1b,0x1b,0x3f,0x3f,0x1b,0x1a,0x17,0x10,0x0d,0x16,0x1e,0x1e, + 0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x18,0x14,0x17,0x1a,0x1b,0x3f,0x3f, + 0x1a,0x18,0x11,0x0d,0x18,0x1e,0x1d,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1b,0x1b,0x19,0x16,0x19,0x1a,0x3f,0x3f,0x19,0x14,0x0c,0x16,0x1e,0x1c,0x1b,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x17,0x18,0x1a,0x3f,0x3f, + 0x17,0x11,0x10,0x1d,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x00,0x00,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x00,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x17,0x18,0x1b,0x3f,0x3f,0x16,0x0f,0x17,0x1d,0x1b,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x00,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x00, + 0x00,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x16,0x16,0x1b,0x3f,0x3f, + 0x14,0x0f,0x1b,0x1c,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x00,0x17,0x17, + 0x17,0x3f,0x1a,0x1a,0x1a,0x00,0x00,0x17,0x17,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x16,0x12,0x1c,0x3f,0x3f,0x14,0x0f,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x00,0x00,0x17,0x17,0x17,0x17,0x17,0x3f,0x1a,0x00,0x00,0x17,0x17,0x17, + 0x17,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x16,0x0f,0x1c,0x3f,0x3f, + 0x14,0x10,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x3f,0x3f,0x17,0x17,0x17,0x17, + 0x17,0x3f,0x1a,0x3f,0x3f,0x17,0x17,0x17,0x17,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x16,0x0f,0x1d,0x3f,0x3f,0x16,0x11,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x3f,0x3f,0x17,0x17,0x17,0x3f,0x1a,0x1a,0x1a,0x3f,0x3f,0x17, + 0x17,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x14,0x0e,0x1d,0x3f,0x3f, + 0x17,0x13,0x19,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x3f,0x3f, + 0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x3f,0x3f,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x18,0x12,0x10,0x1d,0x3f,0x3f,0x18,0x16,0x17,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x3f,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x3f,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x16,0x0f,0x13,0x1d,0x3f,0x3f, + 0x1a,0x19,0x17,0x18,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x18,0x12,0x0c,0x19,0x1d,0x3f,0x3f,0x1b,0x1b,0x19,0x17,0x16,0x17,0x19,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x18,0x13,0x0c,0x13,0x1e,0x1d,0x3f,0x3f, + 0x1b,0x1b,0x1b,0x1a,0x16,0x13,0x16,0x17,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x16, + 0x12,0x0b,0x10,0x1c,0x1d,0x1c,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x10,0x10, + 0x12,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x13,0x11,0x0d,0x0a,0x11,0x1c,0x1e,0x1c,0x1b,0x3f,0x3f, + 0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x19,0x13,0x0f,0x0b,0x0b,0x0b,0x0a,0x0a,0x0a,0x0a, + 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0b,0x0f, + 0x19,0x1e,0x1e,0x1c,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1d, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1c,0x1b,0x1b,0x1b,0x3f,0x3f, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c, + 0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f +}; + + +const unsigned char kDisabledRewindBitmapBits [] = { + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f, + 0x1b,0x1b,0x1b,0x1b,0x19,0x16,0x16,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x16, + 0x16,0x19,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x18,0x16,0x18,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x18,0x1b,0x1b,0x1b,0x3f,0x3f, + 0x1b,0x1b,0x19,0x16,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1a,0x16,0x19,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x16,0x18,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x1b,0x1b,0x3f,0x3f, + 0x1b,0x18,0x16,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x16,0x16,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x16,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x16,0x18,0x1b,0x3f,0x3f,0x1b,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x16,0x19,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x16, + 0x16,0x19,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x1b,0x3f,0x3f, + 0x1b,0x14,0x19,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x16,0x19,0x19, + 0x19,0x1c,0x1b,0x1b,0x1b,0x16,0x16,0x19,0x19,0x19,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x19,0x14,0x1b,0x3f,0x3f,0x1b,0x13,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x16,0x16,0x19,0x19,0x19,0x19,0x19,0x1c,0x1b,0x16,0x16,0x19,0x19,0x19, + 0x19,0x19,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x13,0x1b,0x3f,0x3f, + 0x1b,0x13,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x19,0x19,0x19,0x19, + 0x19,0x1c,0x1b,0x1c,0x1c,0x19,0x19,0x19,0x19,0x19,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x13,0x1b,0x3f,0x3f,0x1b,0x14,0x19,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x19,0x19,0x19,0x1c,0x1b,0x1b,0x1b,0x1c,0x1c,0x19, + 0x19,0x19,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x19,0x14,0x1b,0x3f,0x3f, + 0x1b,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c, + 0x19,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x19,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x18,0x16,0x1b,0x3f,0x3f,0x1b,0x18,0x16,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x18,0x1b,0x3f,0x3f, + 0x1b,0x1b,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x18,0x16,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x19,0x16,0x1a,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x16,0x19,0x1b,0x1b,0x3f,0x3f, + 0x1b,0x1b,0x1b,0x18,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x18,0x16,0x18,0x1b,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x19,0x16,0x16,0x18, + 0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x16,0x16,0x19,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x18, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f +}; + + +const unsigned char kPressedRewindBitmapBits [] = { + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x19,0x19,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x19, + 0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1a,0x19,0x17,0x14,0x13, + 0x12,0x11,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x11,0x12,0x14,0x16,0x19,0x1a,0x1b,0x1b,0x1b,0x3f,0x3f, + 0x1b,0x1b,0x1a,0x18,0x14,0x11,0x0d,0x0b,0x0a,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x0a,0x0c,0x0e, + 0x12,0x14,0x18,0x1a,0x1a,0x1b,0x3f,0x3f,0x1b,0x1a,0x17,0x13,0x0e,0x0b,0x0c,0x0d, + 0x0f,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x0f,0x0d,0x0d,0x0f,0x11,0x14,0x18,0x1a,0x1a,0x3f,0x3f, + 0x1a,0x18,0x13,0x0d,0x0c,0x0e,0x11,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x11, + 0x0f,0x0f,0x13,0x16,0x19,0x1a,0x3f,0x3f,0x19,0x14,0x0e,0x0c,0x0f,0x12,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x0f,0x10,0x16,0x18,0x1a,0x3f,0x3f, + 0x17,0x11,0x0c,0x0e,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x12,0x0f,0x13,0x18,0x1b,0x3f,0x3f,0x16,0x0d,0x0d,0x11,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x00,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x00,0x00,0x13,0x13,0x13,0x13,0x13,0x13,0x11,0x10,0x17,0x1b,0x3f,0x3f, + 0x14,0x0d,0x0e,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00, + 0x00,0x34,0x19,0x13,0x13,0x13,0x13,0x13,0x00,0x00,0x34,0x19,0x13,0x13,0x13,0x13, + 0x13,0x13,0x12,0x10,0x16,0x1c,0x3f,0x3f,0x14,0x0d,0x0f,0x12,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x00,0x00,0x34,0x34,0x34,0x19,0x13,0x13,0x13,0x00,0x00, + 0x34,0x34,0x34,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x10,0x16,0x1c,0x3f,0x3f, + 0x14,0x0e,0x10,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x00,0x34,0x34,0x34, + 0x34,0x34,0x19,0x13,0x00,0x00,0x34,0x34,0x34,0x34,0x34,0x19,0x13,0x13,0x13,0x13, + 0x13,0x13,0x12,0x0f,0x16,0x1c,0x3f,0x3f,0x16,0x0e,0x0f,0x12,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x19,0x19,0x34,0x34,0x34,0x34,0x34,0x19,0x13,0x19,0x19,0x34,0x34, + 0x34,0x34,0x34,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x10,0x17,0x1c,0x3f,0x3f, + 0x17,0x10,0x0f,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x19,0x19,0x34, + 0x34,0x34,0x19,0x13,0x13,0x13,0x19,0x19,0x34,0x34,0x34,0x19,0x13,0x13,0x13,0x13, + 0x13,0x13,0x11,0x11,0x18,0x1c,0x3f,0x3f,0x18,0x12,0x0f,0x10,0x12,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x19,0x19,0x34,0x19,0x13,0x13,0x13,0x13,0x13, + 0x19,0x19,0x34,0x19,0x13,0x13,0x13,0x13,0x13,0x12,0x10,0x13,0x1a,0x1c,0x3f,0x3f, + 0x1a,0x16,0x11,0x0f,0x11,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x19,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x19,0x19,0x13,0x13,0x13,0x13, + 0x12,0x11,0x11,0x18,0x1b,0x1c,0x3f,0x3f,0x1b,0x1a,0x16,0x11,0x0f,0x11,0x12,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x11,0x10,0x16,0x1b,0x1d,0x1c,0x3f,0x3f, + 0x1b,0x1b,0x1a,0x16,0x12,0x10,0x10,0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x11,0x10, + 0x11,0x16,0x1b,0x1c,0x1d,0x1c,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x12,0x10, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x11,0x14,0x19,0x1b,0x1d,0x1d,0x1c,0x1b,0x3f,0x3f, + 0x1b,0x1b,0x1b,0x1b,0x1c,0x1a,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b, + 0x1c,0x1d,0x1d,0x1c,0x1c,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1b,0x1b,0x3f,0x3f, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f +}; + +const unsigned char kForwardBitmapBits [] = { + 0x1b,0x1b,0x1b,0x1b,0x1a,0x19,0x17,0x14,0x13,0x11,0x11,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x12,0x14,0x16, + 0x19,0x1a,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1a,0x18,0x14,0x10,0x0d, + 0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b, + 0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0f,0x13,0x17,0x1a,0x1b,0x1b,0x1b,0x3f,0x3f, + 0x1b,0x1b,0x1a,0x17,0x11,0x0b,0x10,0x16,0x1a,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x19, + 0x12,0x12,0x16,0x19,0x1b,0x1b,0x3f,0x3f,0x1b,0x1a,0x17,0x10,0x0d,0x16,0x1e,0x1e, + 0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x18,0x14,0x17,0x1a,0x1b,0x3f,0x3f, + 0x1a,0x18,0x11,0x0d,0x18,0x1e,0x1d,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1b,0x1b,0x19,0x16,0x19,0x1a,0x3f,0x3f,0x19,0x14,0x0c,0x16,0x1e,0x1c,0x1b,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x17,0x18,0x1a,0x3f,0x3f, + 0x17,0x11,0x10,0x1d,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x00,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x00,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x17,0x18,0x1b,0x3f,0x3f,0x16,0x0f,0x17,0x1d,0x1b,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x00,0x00,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x00, + 0x00,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x16,0x16,0x1b,0x3f,0x3f, + 0x14,0x0f,0x1b,0x1c,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x17, + 0x00,0x00,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x17,0x00,0x00,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x16,0x12,0x1c,0x3f,0x3f,0x14,0x0f,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x17,0x17,0x17,0x00,0x00,0x1a,0x00,0x17,0x17, + 0x17,0x17,0x17,0x00,0x00,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x16,0x0f,0x1c,0x3f,0x3f, + 0x14,0x10,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x17, + 0x17,0x17,0x3f,0x3f,0x1a,0x00,0x17,0x17,0x17,0x17,0x17,0x3f,0x3f,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x16,0x0f,0x1d,0x3f,0x3f,0x16,0x11,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x17,0x3f,0x3f,0x1a,0x1a,0x1a,0x00,0x17,0x17, + 0x17,0x3f,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x14,0x0e,0x1d,0x3f,0x3f, + 0x17,0x13,0x19,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x3f,0x3f, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x3f,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x18,0x12,0x10,0x1d,0x3f,0x3f,0x18,0x16,0x17,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x3f,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x3f,0x3f,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x16,0x0f,0x13,0x1d,0x3f,0x3f, + 0x1a,0x19,0x17,0x18,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x18,0x12,0x0c,0x19,0x1d,0x3f,0x3f,0x1b,0x1b,0x19,0x17,0x16,0x17,0x19,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x18,0x13,0x0c,0x13,0x1e,0x1d,0x3f,0x3f, + 0x1b,0x1b,0x1b,0x1a,0x16,0x13,0x16,0x17,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x16, + 0x12,0x0b,0x10,0x1c,0x1d,0x1c,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x10,0x10, + 0x12,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x13,0x11,0x0d,0x0a,0x11,0x1c,0x1e,0x1c,0x1b,0x3f,0x3f, + 0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x19,0x13,0x0f,0x0b,0x0b,0x0b,0x0a,0x0a,0x0a,0x0a, + 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0b,0x0f, + 0x19,0x1e,0x1e,0x1c,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1d, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1c,0x1b,0x1b,0x1b,0x3f,0x3f, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c, + 0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f +}; + +const unsigned char kDisabledForwardBitmapBits [] = { + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f, + 0x1b,0x1b,0x1b,0x1b,0x19,0x16,0x16,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x16, + 0x16,0x19,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x18,0x16,0x18,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x18,0x1b,0x1b,0x1b,0x3f,0x3f, + 0x1b,0x1b,0x19,0x16,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1a,0x16,0x19,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x16,0x18,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x1b,0x1b,0x3f,0x3f, + 0x1b,0x18,0x16,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x16,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x16,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x16,0x18,0x1b,0x3f,0x3f,0x1b,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x16,0x16,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x16, + 0x16,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x1b,0x3f,0x3f, + 0x1b,0x14,0x19,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x19,0x19, + 0x16,0x16,0x1b,0x1b,0x1b,0x16,0x19,0x19,0x19,0x16,0x16,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x19,0x14,0x1b,0x3f,0x3f,0x1b,0x13,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x19,0x19,0x19,0x19,0x16,0x16,0x1b,0x16,0x19,0x19, + 0x19,0x19,0x19,0x16,0x16,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x13,0x1b,0x3f,0x3f, + 0x1b,0x13,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x19,0x19, + 0x19,0x19,0x1c,0x1c,0x1b,0x16,0x19,0x19,0x19,0x19,0x19,0x1c,0x1c,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x13,0x1b,0x3f,0x3f,0x1b,0x14,0x19,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x19,0x19,0x1c,0x1c,0x1b,0x1b,0x1b,0x16,0x19,0x19, + 0x19,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x19,0x14,0x1b,0x3f,0x3f, + 0x1b,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x1c,0x1c, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x18,0x16,0x1b,0x3f,0x3f,0x1b,0x18,0x16,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x18,0x1b,0x3f,0x3f, + 0x1b,0x1b,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x18,0x16,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x19,0x16,0x1a,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x16,0x19,0x1b,0x1b,0x3f,0x3f, + 0x1b,0x1b,0x1b,0x18,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x18,0x16,0x18,0x1b,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x19,0x16,0x16,0x18, + 0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x16,0x16,0x19,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16, + 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x18, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f +}; + +const unsigned char kPressedForwardBitmapBits [] = { + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x19,0x19,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x19, + 0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1a,0x19,0x17,0x14,0x13, + 0x12,0x11,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x11,0x12,0x14,0x16,0x19,0x1a,0x1b,0x1b,0x1b,0x3f,0x3f, + 0x1b,0x1b,0x1a,0x18,0x14,0x11,0x0d,0x0b,0x0a,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x0a,0x0c,0x0e, + 0x12,0x14,0x18,0x1a,0x1a,0x1b,0x3f,0x3f,0x1b,0x1a,0x17,0x13,0x0e,0x0b,0x0c,0x0d, + 0x0f,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x0f,0x0d,0x0d,0x0f,0x11,0x14,0x18,0x1a,0x1a,0x3f,0x3f, + 0x1a,0x18,0x13,0x0d,0x0c,0x0e,0x11,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x11, + 0x0f,0x0f,0x13,0x16,0x19,0x1a,0x3f,0x3f,0x19,0x14,0x0e,0x0c,0x0f,0x12,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x0f,0x10,0x16,0x18,0x1a,0x3f,0x3f, + 0x17,0x11,0x0c,0x0e,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x12,0x0f,0x13,0x18,0x1b,0x3f,0x3f,0x16,0x0d,0x0d,0x11,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x00,0x00,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x00, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x11,0x10,0x17,0x1b,0x3f,0x3f, + 0x14,0x0d,0x0e,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x34,0x00, + 0x00,0x13,0x13,0x13,0x13,0x13,0x00,0x34,0x00,0x00,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x12,0x10,0x16,0x1c,0x3f,0x3f,0x14,0x0d,0x0f,0x12,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x00,0x34,0x34,0x34,0x00,0x00,0x13,0x13,0x13,0x00,0x34, + 0x34,0x34,0x00,0x00,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x10,0x16,0x1c,0x3f,0x3f, + 0x14,0x0e,0x10,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x34,0x34, + 0x34,0x34,0x34,0x00,0x00,0x13,0x00,0x34,0x34,0x34,0x34,0x34,0x00,0x00,0x13,0x13, + 0x13,0x13,0x12,0x0f,0x16,0x1c,0x3f,0x3f,0x16,0x0e,0x0f,0x12,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x00,0x34,0x34,0x34,0x34,0x34,0x19,0x19,0x13,0x00,0x34, + 0x34,0x34,0x34,0x34,0x19,0x19,0x13,0x13,0x13,0x13,0x12,0x10,0x17,0x1c,0x3f,0x3f, + 0x17,0x10,0x0f,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x34,0x34, + 0x34,0x19,0x19,0x13,0x13,0x13,0x00,0x34,0x34,0x34,0x19,0x19,0x13,0x13,0x13,0x13, + 0x13,0x13,0x11,0x11,0x18,0x1c,0x3f,0x3f,0x18,0x12,0x0f,0x10,0x12,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x00,0x34,0x19,0x19,0x13,0x13,0x13,0x13,0x13,0x00,0x34, + 0x19,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x10,0x13,0x1a,0x1c,0x3f,0x3f, + 0x1a,0x16,0x11,0x0f,0x11,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x19,0x19,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x19,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x12,0x11,0x11,0x18,0x1b,0x1c,0x3f,0x3f,0x1b,0x1a,0x16,0x11,0x0f,0x11,0x12,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x11,0x10,0x16,0x1b,0x1d,0x1c,0x3f,0x3f, + 0x1b,0x1b,0x1a,0x16,0x12,0x10,0x10,0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x11,0x10, + 0x11,0x16,0x1b,0x1c,0x1d,0x1c,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x12,0x10, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x11,0x14,0x19,0x1b,0x1d,0x1d,0x1c,0x1b,0x3f,0x3f, + 0x1b,0x1b,0x1b,0x1b,0x1c,0x1a,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b, + 0x1c,0x1d,0x1d,0x1c,0x1c,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1b,0x1b,0x3f,0x3f, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f +}; + + +// #pragma mark skip back + +const unsigned char kSkipBackBitmapBits [] = { + 0x1b,0x1b,0x1b,0x1b,0x1a,0x19,0x17,0x14,0x13,0x11,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x12,0x14, + 0x16,0x19,0x1a,0x1b,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1a,0x18,0x14,0x10,0x0d, + 0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b, + 0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0f,0x13,0x17,0x1a,0x1b,0x1b,0x1b,0x3f,0x3f, + 0x1b,0x1b,0x1a,0x17,0x11,0x0b,0x10,0x16,0x1a,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x19, + 0x12,0x12,0x16,0x19,0x1b,0x1b,0x3f,0x3f,0x1b,0x1a,0x17,0x10,0x0d,0x16,0x1e,0x1e, + 0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x18,0x14,0x17,0x1a,0x1b,0x3f,0x3f, + 0x1a,0x18,0x11,0x0d,0x18,0x1e,0x1d,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1b,0x1b,0x19,0x16,0x19,0x1a,0x3f,0x3f,0x19,0x14,0x0c,0x16,0x1e,0x1c,0x1b,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x17,0x18,0x1a,0x3f,0x3f, + 0x17,0x11,0x10,0x1d,0x1c,0x1b,0x1a,0x1a,0x1a,0x00,0x00,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x00,0x00,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x00,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x17,0x18,0x1b,0x3f,0x3f,0x16,0x0f,0x17,0x1d,0x1b,0x1a,0x1a,0x1a, + 0x1a,0x00,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x00,0x17,0x3f,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x00,0x00,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x16,0x16,0x1b,0x3f,0x3f, + 0x14,0x0f,0x1b,0x1c,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x3f,0x1a,0x1a,0x1a,0x00,0x00, + 0x17,0x17,0x17,0x3f,0x1a,0x1a,0x1a,0x00,0x00,0x17,0x17,0x17,0x3f,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x16,0x12,0x1c,0x3f,0x3f,0x14,0x0f,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x00,0x3f,0x1a,0x00,0x00,0x17,0x17,0x17,0x17,0x17,0x3f,0x1a,0x00,0x00,0x17, + 0x17,0x17,0x17,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x16,0x0f,0x1c,0x3f,0x3f, + 0x14,0x10,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x3f,0x1a,0x3f,0x3f,0x17,0x17, + 0x17,0x17,0x17,0x3f,0x1a,0x3f,0x3f,0x17,0x17,0x17,0x17,0x17,0x3f,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x16,0x0f,0x1d,0x3f,0x3f,0x16,0x11,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x00,0x3f,0x1a,0x1a,0x1a,0x3f,0x3f,0x17,0x17,0x17,0x3f,0x1a,0x1a,0x1a,0x3f, + 0x3f,0x17,0x17,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x14,0x0e,0x1d,0x3f,0x3f, + 0x17,0x13,0x19,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x3f,0x3f,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x3f,0x3f,0x17,0x3f,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x18,0x12,0x10,0x1d,0x3f,0x3f,0x18,0x16,0x17,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x3f,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x3f,0x3f,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x3f,0x3f,0x1a,0x1a,0x1a,0x1a,0x19,0x16,0x0f,0x13,0x1d,0x3f,0x3f, + 0x1a,0x19,0x17,0x18,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x18,0x12,0x0c,0x19,0x1d,0x3f,0x3f,0x1b,0x1b,0x19,0x17,0x16,0x17,0x19,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x18,0x13,0x0c,0x13,0x1e,0x1d,0x3f,0x3f, + 0x1b,0x1b,0x1b,0x1a,0x16,0x13,0x16,0x17,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x16, + 0x12,0x0b,0x10,0x1c,0x1d,0x1c,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x10,0x10, + 0x12,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x13,0x11,0x0d,0x0a,0x11,0x1c,0x1e,0x1c,0x1b,0x3f,0x3f, + 0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x19,0x13,0x0f,0x0b,0x0b,0x0a,0x0a,0x0a,0x0a,0x0a, + 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0b,0x0f, + 0x19,0x1e,0x1e,0x1c,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1d, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1c,0x1b,0x1b,0x1b,0x3f,0x3f, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c, + 0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f +}; + +const unsigned char kDisabledSkipBackBitmapBits [] = { + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x18,0x16, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x18,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f, + 0x1b,0x1b,0x1b,0x1b,0x18,0x15,0x15,0x17,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x17,0x15, + 0x15,0x18,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x18,0x16,0x18,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x18,0x1b,0x1b,0x1b,0x3f,0x3f, + 0x1b,0x1b,0x18,0x16,0x19,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x19,0x16,0x18,0x1b,0x1b,0x3f,0x3f,0x1b,0x1a,0x15,0x18,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x15,0x1a,0x1b,0x3f,0x3f, + 0x1b,0x18,0x15,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x16,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x16,0x16,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x16,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x15,0x18,0x1b,0x3f,0x3f,0x1b,0x16,0x17,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x16,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x16,0x19,0x1c,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x16,0x16,0x19,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x17,0x16,0x1b,0x3f,0x3f, + 0x1b,0x14,0x19,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x1c,0x1b,0x1b,0x1b,0x16,0x16, + 0x19,0x19,0x19,0x1c,0x1b,0x1b,0x1b,0x16,0x16,0x19,0x19,0x19,0x1c,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x19,0x14,0x1b,0x3f,0x3f,0x1b,0x13,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x16,0x1c,0x1b,0x16,0x16,0x19,0x19,0x19,0x19,0x19,0x1c,0x1b,0x16,0x16,0x19, + 0x19,0x19,0x19,0x19,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x13,0x1b,0x3f,0x3f, + 0x1b,0x13,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x1c,0x1b,0x1c,0x1c,0x19,0x19, + 0x19,0x19,0x19,0x1c,0x1b,0x1c,0x1c,0x19,0x19,0x19,0x19,0x19,0x1c,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1a,0x13,0x1b,0x3f,0x3f,0x1b,0x14,0x19,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x16,0x1c,0x1b,0x1b,0x1b,0x1c,0x1c,0x19,0x19,0x19,0x1c,0x1b,0x1b,0x1b,0x1c, + 0x1c,0x19,0x19,0x19,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x19,0x14,0x1b,0x3f,0x3f, + 0x1b,0x16,0x17,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1c,0x1c,0x19,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x19,0x1c,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x17,0x16,0x1b,0x3f,0x3f,0x1b,0x18,0x15,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x15,0x18,0x1b,0x3f,0x3f, + 0x1b,0x1a,0x15,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x18,0x15,0x1a,0x1b,0x3f,0x3f,0x1b,0x1b,0x18,0x16,0x19,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x19,0x16,0x18,0x1b,0x1b,0x3f,0x3f, + 0x1b,0x1b,0x1b,0x18,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x18,0x16,0x18,0x1b,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x18,0x15,0x15,0x17, + 0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x18,0x18,0x17,0x15,0x15,0x18,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x18,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x18, + 0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f +}; + + +const unsigned char kPressedSkipBackBitmapBits [] = { + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x19,0x19,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x19, + 0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1a,0x19,0x17,0x14,0x13, + 0x12,0x11,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x11,0x12,0x14,0x16,0x19,0x1a,0x1b,0x1b,0x1b,0x3f,0x3f, + 0x1b,0x1b,0x1a,0x18,0x14,0x11,0x0d,0x0b,0x0a,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x0a,0x0c,0x0e, + 0x12,0x14,0x18,0x1a,0x1a,0x1b,0x3f,0x3f,0x1b,0x1a,0x17,0x13,0x0e,0x0b,0x0c,0x0d, + 0x0f,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x0f,0x0d,0x0d,0x0f,0x11,0x14,0x18,0x1a,0x1a,0x3f,0x3f, + 0x1a,0x18,0x13,0x0d,0x0c,0x0e,0x11,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x11, + 0x0f,0x0f,0x13,0x16,0x19,0x1a,0x3f,0x3f,0x19,0x14,0x0e,0x0c,0x0f,0x12,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x0f,0x10,0x16,0x18,0x1a,0x3f,0x3f, + 0x17,0x11,0x0c,0x0e,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x12,0x0f,0x13,0x18,0x1b,0x3f,0x3f,0x16,0x0d,0x0d,0x11,0x13,0x13,0x13,0x13, + 0x13,0x13,0x00,0x00,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x00,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x00,0x00,0x13,0x13,0x13,0x13,0x11,0x10,0x17,0x1b,0x3f,0x3f, + 0x14,0x0d,0x0e,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x19,0x13,0x13,0x13,0x13, + 0x13,0x00,0x00,0x34,0x19,0x13,0x13,0x13,0x13,0x13,0x00,0x00,0x34,0x19,0x13,0x13, + 0x13,0x13,0x12,0x10,0x16,0x1c,0x3f,0x3f,0x14,0x0d,0x0f,0x12,0x13,0x13,0x13,0x13, + 0x13,0x13,0x00,0x19,0x13,0x13,0x13,0x00,0x00,0x34,0x34,0x34,0x19,0x13,0x13,0x13, + 0x00,0x00,0x34,0x34,0x34,0x19,0x13,0x13,0x13,0x13,0x12,0x10,0x16,0x1c,0x3f,0x3f, + 0x14,0x0e,0x10,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x19,0x13,0x00,0x00,0x34, + 0x34,0x34,0x34,0x34,0x19,0x13,0x00,0x00,0x34,0x34,0x34,0x34,0x34,0x19,0x13,0x13, + 0x13,0x13,0x12,0x0f,0x16,0x1c,0x3f,0x3f,0x16,0x0e,0x0f,0x12,0x13,0x13,0x13,0x13, + 0x13,0x13,0x00,0x19,0x13,0x19,0x19,0x34,0x34,0x34,0x34,0x34,0x19,0x13,0x19,0x19, + 0x34,0x34,0x34,0x34,0x34,0x19,0x13,0x13,0x13,0x13,0x12,0x10,0x17,0x1c,0x3f,0x3f, + 0x17,0x10,0x0f,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x19,0x13,0x13,0x13,0x19, + 0x19,0x34,0x34,0x34,0x19,0x13,0x13,0x13,0x19,0x19,0x34,0x34,0x34,0x19,0x13,0x13, + 0x13,0x13,0x11,0x11,0x18,0x1c,0x3f,0x3f,0x18,0x12,0x0f,0x10,0x12,0x13,0x13,0x13, + 0x13,0x13,0x00,0x19,0x13,0x13,0x13,0x13,0x13,0x19,0x19,0x34,0x19,0x13,0x13,0x13, + 0x13,0x13,0x19,0x19,0x34,0x19,0x13,0x13,0x13,0x12,0x10,0x13,0x1a,0x1c,0x3f,0x3f, + 0x1a,0x16,0x11,0x0f,0x11,0x13,0x13,0x13,0x13,0x13,0x19,0x19,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x19,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x19,0x19,0x13,0x13, + 0x12,0x11,0x11,0x18,0x1b,0x1c,0x3f,0x3f,0x1b,0x1a,0x16,0x11,0x0f,0x11,0x12,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x11,0x10,0x16,0x1b,0x1d,0x1c,0x3f,0x3f, + 0x1b,0x1b,0x1a,0x16,0x12,0x10,0x10,0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x11,0x10, + 0x11,0x16,0x1b,0x1c,0x1d,0x1c,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x12,0x10, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x11,0x14,0x19,0x1b,0x1d,0x1d,0x1c,0x1b,0x3f,0x3f, + 0x1b,0x1b,0x1b,0x1b,0x1c,0x1a,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b, + 0x1c,0x1d,0x1d,0x1c,0x1c,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1b,0x1b,0x3f,0x3f, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f +}; + +// #pragma mark skip forward + +const unsigned char kSkipForwardBitmapBits [] = { + 0x1b,0x1b,0x1b,0x1b,0x1a,0x19,0x17,0x14,0x13,0x11,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x12,0x14, + 0x16,0x19,0x1a,0x1b,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1a,0x18,0x14,0x10,0x0d, + 0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b, + 0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0f,0x13,0x17,0x1a,0x1b,0x1b,0x1b,0x3f,0x3f, + 0x1b,0x1b,0x1a,0x17,0x11,0x0b,0x10,0x16,0x1a,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x19, + 0x12,0x12,0x16,0x19,0x1b,0x1b,0x3f,0x3f,0x1b,0x1a,0x17,0x10,0x0d,0x16,0x1e,0x1e, + 0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x18,0x14,0x17,0x1a,0x1b,0x3f,0x3f, + 0x1a,0x18,0x11,0x0d,0x18,0x1e,0x1d,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1b,0x1b,0x19,0x16,0x19,0x1a,0x3f,0x3f,0x19,0x14,0x0c,0x16,0x1e,0x1c,0x1b,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x17,0x18,0x1a,0x3f,0x3f, + 0x17,0x11,0x10,0x1d,0x1c,0x1b,0x1a,0x1a,0x1a,0x00,0x00,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x00,0x00,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x00,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x17,0x18,0x1b,0x3f,0x3f,0x16,0x0f,0x17,0x1d,0x1b,0x1a,0x1a,0x1a, + 0x1a,0x00,0x17,0x00,0x00,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x00,0x00,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x00,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x16,0x16,0x1b,0x3f,0x3f, + 0x14,0x0f,0x1b,0x1c,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x17,0x00,0x00,0x1a, + 0x1a,0x1a,0x00,0x17,0x17,0x17,0x00,0x00,0x1a,0x1a,0x1a,0x00,0x3f,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x16,0x12,0x1c,0x3f,0x3f,0x14,0x0f,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x00,0x17,0x17,0x17,0x17,0x17,0x00,0x00,0x1a,0x00,0x17,0x17,0x17,0x17,0x17, + 0x00,0x00,0x1a,0x00,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x16,0x0f,0x1c,0x3f,0x3f, + 0x14,0x10,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x17,0x17,0x17,0x3f, + 0x3f,0x1a,0x00,0x17,0x17,0x17,0x17,0x17,0x3f,0x3f,0x1a,0x00,0x3f,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x16,0x0f,0x1d,0x3f,0x3f,0x16,0x11,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x00,0x17,0x17,0x17,0x3f,0x3f,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x17,0x3f,0x3f, + 0x1a,0x1a,0x1a,0x00,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x14,0x0e,0x1d,0x3f,0x3f, + 0x17,0x13,0x19,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x3f,0x3f,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x00,0x17,0x3f,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x3f,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x18,0x12,0x10,0x1d,0x3f,0x3f,0x18,0x16,0x17,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x3f,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x3f,0x3f,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x3f,0x3f,0x1a,0x1a,0x1a,0x1a,0x19,0x16,0x0f,0x13,0x1d,0x3f,0x3f, + 0x1a,0x19,0x17,0x18,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x18,0x12,0x0c,0x19,0x1d,0x3f,0x3f,0x1b,0x1b,0x19,0x17,0x16,0x17,0x19,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x18,0x13,0x0c,0x13,0x1e,0x1d,0x3f,0x3f, + 0x1b,0x1b,0x1b,0x1a,0x16,0x13,0x16,0x17,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x16, + 0x12,0x0b,0x10,0x1c,0x1d,0x1c,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x10,0x10, + 0x12,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x13,0x11,0x0d,0x0a,0x11,0x1c,0x1e,0x1c,0x1b,0x3f,0x3f, + 0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x19,0x13,0x0f,0x0b,0x0b,0x0b,0x0a,0x0a,0x0a,0x0a, + 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0b,0x0f, + 0x19,0x1e,0x1e,0x1c,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1d, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, + 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1c,0x1b,0x1b,0x1b,0x3f,0x3f, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c, + 0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f +}; + + +const unsigned char kDisabledSkipForwardBitmapBits [] = { + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x18,0x16, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x18,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f, + 0x1b,0x1b,0x1b,0x1b,0x18,0x15,0x15,0x17,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x17,0x15, + 0x15,0x18,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x18,0x16,0x18,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x18,0x1b,0x1b,0x1b,0x3f,0x3f, + 0x1b,0x1b,0x18,0x16,0x19,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x19,0x16,0x18,0x1b,0x1b,0x3f,0x3f,0x1b,0x1a,0x15,0x18,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x15,0x1a,0x1b,0x3f,0x3f, + 0x1b,0x18,0x15,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x16,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x16,0x16,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x16,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x15,0x18,0x1b,0x3f,0x3f,0x1b,0x16,0x17,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x16,0x19,0x16,0x16,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x16,0x16,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x16,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x17,0x16,0x1b,0x3f,0x3f, + 0x1b,0x14,0x19,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x19,0x19,0x16,0x16,0x1b, + 0x1b,0x1b,0x16,0x19,0x19,0x19,0x16,0x16,0x1b,0x1b,0x1b,0x16,0x1c,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x19,0x14,0x1b,0x3f,0x3f,0x1b,0x13,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x16,0x19,0x19,0x19,0x19,0x19,0x16,0x16,0x1b,0x16,0x19,0x19,0x19,0x19,0x19, + 0x16,0x16,0x1b,0x16,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x13,0x1b,0x3f,0x3f, + 0x1b,0x13,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x19,0x19,0x19,0x19,0x1c, + 0x1c,0x1b,0x16,0x19,0x19,0x19,0x19,0x19,0x1c,0x1c,0x1b,0x16,0x1c,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1a,0x13,0x1b,0x3f,0x3f,0x1b,0x14,0x19,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x16,0x19,0x19,0x19,0x1c,0x1c,0x1b,0x1b,0x1b,0x16,0x19,0x19,0x19,0x1c,0x1c, + 0x1b,0x1b,0x1b,0x16,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x19,0x14,0x1b,0x3f,0x3f, + 0x1b,0x16,0x17,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x1c,0x1c,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x16,0x19,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x1c,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x17,0x16,0x1b,0x3f,0x3f,0x1b,0x18,0x15,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x15,0x18,0x1b,0x3f,0x3f, + 0x1b,0x1a,0x15,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x18,0x15,0x1a,0x1b,0x3f,0x3f,0x1b,0x1b,0x18,0x16,0x19,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x19,0x16,0x18,0x1b,0x1b,0x3f,0x3f, + 0x1b,0x1b,0x1b,0x18,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x18,0x16,0x18,0x1b,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x18,0x15,0x15,0x17, + 0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, + 0x19,0x19,0x19,0x19,0x18,0x18,0x17,0x15,0x15,0x18,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x18,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, + 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x18, + 0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f +}; + + +const unsigned char kPressedSkipForwardBitmapBits [] = { + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x19,0x19,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17, + 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x19, + 0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1a,0x19,0x17,0x14,0x13, + 0x12,0x11,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x11,0x12,0x14,0x16,0x19,0x1a,0x1b,0x1b,0x1b,0x3f,0x3f, + 0x1b,0x1b,0x1a,0x18,0x14,0x11,0x0d,0x0b,0x0a,0x09,0x09,0x09,0x09,0x09,0x09,0x09, + 0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x0a,0x0c,0x0e, + 0x12,0x14,0x18,0x1a,0x1a,0x1b,0x3f,0x3f,0x1b,0x1a,0x17,0x13,0x0e,0x0b,0x0c,0x0d, + 0x0f,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x10,0x10,0x10,0x10,0x10,0x0f,0x0d,0x0d,0x0f,0x11,0x14,0x18,0x1a,0x1a,0x3f,0x3f, + 0x1a,0x18,0x13,0x0d,0x0c,0x0e,0x11,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x11, + 0x0f,0x0f,0x13,0x16,0x19,0x1a,0x3f,0x3f,0x19,0x14,0x0e,0x0c,0x0f,0x12,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x0f,0x10,0x16,0x18,0x1a,0x3f,0x3f, + 0x17,0x11,0x0c,0x0e,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x12,0x0f,0x13,0x18,0x1b,0x3f,0x3f,0x16,0x0d,0x0d,0x11,0x13,0x13,0x13,0x13, + 0x13,0x13,0x00,0x00,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x00,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x00,0x00,0x13,0x13,0x13,0x13,0x11,0x10,0x17,0x1b,0x3f,0x3f, + 0x14,0x0d,0x0e,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x34,0x00,0x00,0x13,0x13, + 0x13,0x13,0x13,0x00,0x34,0x00,0x00,0x13,0x13,0x13,0x13,0x13,0x00,0x19,0x13,0x13, + 0x13,0x13,0x12,0x10,0x16,0x1c,0x3f,0x3f,0x14,0x0d,0x0f,0x12,0x13,0x13,0x13,0x13, + 0x13,0x13,0x00,0x34,0x34,0x34,0x00,0x00,0x13,0x13,0x13,0x00,0x34,0x34,0x34,0x00, + 0x00,0x13,0x13,0x13,0x00,0x19,0x13,0x13,0x13,0x13,0x12,0x10,0x16,0x1c,0x3f,0x3f, + 0x14,0x0e,0x10,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x34,0x34,0x34,0x34,0x34, + 0x00,0x00,0x13,0x00,0x34,0x34,0x34,0x34,0x34,0x00,0x00,0x13,0x00,0x19,0x13,0x13, + 0x13,0x13,0x12,0x0f,0x16,0x1c,0x3f,0x3f,0x16,0x0e,0x0f,0x12,0x13,0x13,0x13,0x13, + 0x13,0x13,0x00,0x34,0x34,0x34,0x34,0x34,0x19,0x19,0x13,0x00,0x34,0x34,0x34,0x34, + 0x34,0x19,0x19,0x13,0x00,0x19,0x13,0x13,0x13,0x13,0x12,0x10,0x17,0x1c,0x3f,0x3f, + 0x17,0x10,0x0f,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x34,0x34,0x34,0x19,0x19, + 0x13,0x13,0x13,0x00,0x34,0x34,0x34,0x19,0x19,0x13,0x13,0x13,0x00,0x19,0x13,0x13, + 0x13,0x13,0x11,0x11,0x18,0x1c,0x3f,0x3f,0x18,0x12,0x0f,0x10,0x12,0x13,0x13,0x13, + 0x13,0x13,0x00,0x34,0x19,0x19,0x13,0x13,0x13,0x13,0x13,0x00,0x34,0x19,0x19,0x13, + 0x13,0x13,0x13,0x13,0x00,0x19,0x13,0x13,0x13,0x12,0x10,0x13,0x1a,0x1c,0x3f,0x3f, + 0x1a,0x16,0x11,0x0f,0x11,0x13,0x13,0x13,0x13,0x13,0x19,0x19,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x19,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x19,0x19,0x13,0x13, + 0x12,0x11,0x11,0x18,0x1b,0x1c,0x3f,0x3f,0x1b,0x1a,0x16,0x11,0x0f,0x11,0x12,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13, + 0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x11,0x10,0x16,0x1b,0x1d,0x1c,0x3f,0x3f, + 0x1b,0x1b,0x1a,0x16,0x12,0x10,0x10,0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x11,0x10, + 0x11,0x16,0x1b,0x1c,0x1d,0x1c,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x12,0x10, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x11,0x14,0x19,0x1b,0x1d,0x1d,0x1c,0x1b,0x3f,0x3f, + 0x1b,0x1b,0x1b,0x1b,0x1c,0x1a,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b, + 0x1c,0x1d,0x1d,0x1c,0x1c,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d, + 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1b,0x1b,0x3f,0x3f, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, + 0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f +}; + +// #pragma mark volumn slider +const int32 kVolumeSliderBitmapWidth = 6; +const int32 kVolumeSliderBitmapHeight = 15; + +const unsigned char kVolumeSliderLeftBitmapBits [] = { + 0x1b,0x1b,0x1b,0x1b,0x19,0x19,0x3f,0x3f, + 0x1b,0x1b,0x1a,0x18,0x11,0x0b,0x3f,0x3f, + 0x1b,0x19,0x15,0x0b,0x06,0x0a,0x3f,0x3f, + 0x1a,0x15,0x09,0x09,0xb6,0x8f,0x3f,0x3f, + 0x18,0x0b,0x09,0x8f,0x8f,0x8f,0x3f,0x3f, + 0x11,0x07,0xb6,0x8f,0x8f,0x68,0x3f,0x3f, + 0x0c,0x0c,0x8f,0x8f,0x68,0x68,0x3f,0x3f, + 0x07,0x10,0x8f,0x68,0x68,0x68,0x3f,0x3f, + 0x16,0x12,0x8f,0x68,0x68,0x68,0x3f,0x3f, + 0x1a,0x16,0x11,0x68,0x68,0x68,0x3f,0x3f, + 0x1b,0x1a,0x18,0x68,0x68,0x68,0x3f,0x3f, + 0x1b,0x1b,0x1c,0x19,0x68,0x68,0x3f,0x3f, + 0x1b,0x1b,0x1b,0x1d,0x1c,0x19,0x3f,0x3f, + 0x1b,0x1b,0x1b,0x1b,0x1d,0x1e,0x3f,0x3f, + 0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x3f,0x3f +}; + +const unsigned char kVolumeSliderRightBits [] = { + 0x19,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f, + 0x11,0x18,0x1a,0x1b,0x1b,0x1b,0x3f,0x3f, + 0x08,0x0d,0x16,0x1a,0x1b,0x1b,0x3f,0x3f, + 0x11,0x0c,0x0f,0x17,0x1a,0x1b,0x3f,0x3f, + 0x13,0x13,0x10,0x14,0x19,0x1b,0x3f,0x3f, + 0x13,0x13,0x13,0x15,0x19,0x1a,0x3f,0x3f, + 0x13,0x13,0x13,0x16,0x1a,0x1a,0x3f,0x3f, + 0x13,0x13,0x13,0x15,0x1c,0x1b,0x3f,0x3f, + 0x13,0x13,0x13,0x19,0x1e,0x1c,0x3f,0x3f, + 0x13,0x13,0x15,0x1d,0x1d,0x1c,0x3f,0x3f, + 0x13,0x14,0x1a,0x1e,0x1c,0x1b,0x3f,0x3f, + 0x15,0x1b,0x3f,0x1d,0x1b,0x1b,0x3f,0x3f, + 0x1d,0x1e,0x1d,0x1c,0x1b,0x1b,0x3f,0x3f, + 0x1d,0x1c,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f, + 0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f +}; + +const int32 kVolumeSliderKnobWidth = 11; +const int32 kVolumeSliderKnobHeight = 11; + +const unsigned char kVolumeSliderKnobBits [] = { + 0x00,0x00,0x13,0x18,0x1d,0x3f,0x1d,0x19,0x12,0x00,0x00,0x3f, + 0x00,0x15,0x1d,0x1e,0x1e,0x1d,0x1e,0x1b,0x19,0x12,0x00,0x3f, + 0x00,0x1e,0x1e,0x1d,0x1d,0x3f,0x1d,0x1d,0x1b,0x19,0x00,0x3f, + 0x1a,0x1e,0x1d,0x1d,0x1d,0x13,0x1d,0x1d,0x1d,0x19,0x12,0x3f, + 0x1e,0x1e,0x1d,0x1d,0x1d,0x3f,0x1d,0x1d,0x1d,0x19,0x11,0x3f, + 0x3f,0x1d,0x1d,0x1d,0x1d,0x13,0x1d,0x1d,0x1d,0x1c,0x0e,0x3f, + 0x1e,0x1e,0x1d,0x1d,0x1d,0x3f,0x1d,0x1d,0x1d,0x19,0x11,0x3f, + 0x1a,0x1d,0x1d,0x1d,0x1d,0x13,0x1d,0x1d,0x1d,0x15,0x00,0x3f, + 0x00,0x1a,0x19,0x1d,0x1d,0x1d,0x1d,0x1d,0x17,0x12,0x00,0x3f, + 0x00,0x16,0x13,0x15,0x19,0x1c,0x19,0x15,0x12,0x00,0x00,0x3f, + 0x00,0x00,0x00,0x14,0x11,0x0e,0x11,0x14,0x00,0x00,0x00,0x3f +}; + +const int32 kSpeakerIconBitmapWidth = 16; +const int32 kSpeakerIconBitmapHeight = 9; + +const unsigned char kSpeakerIconBits [] = { + 0xff,0xff,0xff,0xff,0xff,0x10,0x10,0xff,0xff,0xff,0xff,0x10,0xff,0xff,0xff,0xff, + 0x10,0x10,0x10,0xff,0x10,0x1d,0x10,0xff,0xff,0xff,0xff,0xff,0x10,0xff,0xff,0xff, + 0x10,0x1d,0x10,0x10,0x1d,0x1d,0x10,0xff,0xff,0x10,0xff,0xff,0x10,0xff,0xff,0xff, + 0x10,0x1d,0x10,0x1d,0x1d,0x1d,0x10,0xff,0xff,0xff,0x10,0xff,0xff,0x10,0xff,0xff, + 0x10,0x1d,0x10,0x1d,0x1d,0x1d,0x10,0xff,0x10,0xff,0x10,0xff,0xff,0x10,0xff,0xff, + 0x10,0x1d,0x10,0x1d,0x1d,0x1d,0x10,0xff,0xff,0xff,0x10,0xff,0xff,0x10,0xff,0xff, + 0x10,0x1d,0x10,0x10,0x1d,0x1d,0x10,0xff,0xff,0x10,0xff,0xff,0x10,0xff,0xff,0xff, + 0x10,0x10,0x10,0xff,0x10,0x1d,0x10,0xff,0xff,0xff,0xff,0xff,0x10,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0x10,0x10,0xff,0xff,0xff,0xff,0x10,0xff,0xff,0xff,0xff, +}; + +const unsigned char kPressedSpeakerIconBits [] = { + 0xff,0xff,0xff,0xff,0xff,0x34,0x34,0xff,0xff,0xff,0xff,0x34,0xff,0xff,0xff,0xff, + 0x34,0x34,0x34,0xff,0x34,0x1d,0x34,0xff,0xff,0xff,0xff,0xff,0x34,0xff,0xff,0xff, + 0x34,0x1d,0x34,0x34,0x1d,0x1d,0x34,0xff,0xff,0x34,0xff,0xff,0x34,0xff,0xff,0xff, + 0x34,0x1d,0x34,0x1d,0x1d,0x1d,0x34,0xff,0xff,0xff,0x34,0xff,0xff,0x34,0xff,0xff, + 0x34,0x1d,0x34,0x1d,0x1d,0x1d,0x34,0xff,0x34,0xff,0x34,0xff,0xff,0x34,0xff,0xff, + 0x34,0x1d,0x34,0x1d,0x1d,0x1d,0x34,0xff,0xff,0xff,0x34,0xff,0xff,0x34,0xff,0xff, + 0x34,0x1d,0x34,0x34,0x1d,0x1d,0x34,0xff,0xff,0x34,0xff,0xff,0x34,0xff,0xff,0xff, + 0x34,0x34,0x34,0xff,0x34,0x1d,0x34,0xff,0xff,0xff,0xff,0xff,0x34,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0x34,0x34,0xff,0xff,0xff,0xff,0x34,0xff,0xff,0xff,0xff, +}; + +#endif // BUTTON_BITMAPS_H diff --git a/src/apps/cdplayer/CDAudioDevice.cpp b/src/apps/cdplayer/CDAudioDevice.cpp index 541f760ae0..180625e56e 100644 --- a/src/apps/cdplayer/CDAudioDevice.cpp +++ b/src/apps/cdplayer/CDAudioDevice.cpp @@ -1,3 +1,10 @@ +/* + * Copyright (c) 2006-2007, Haiku, Inc. + * Distributed under the terms of the MIT license. + * + * Author: + * DarkWyrm + */ #include "CDAudioDevice.h" #include @@ -12,14 +19,16 @@ #include #include "scsi.h" + cdaudio_data::cdaudio_data(const int32 &id, const int32 &count, - const int32 &disclength) + const int32 &disclength) : disc_id(id), track_count(count), length(disclength) { } + cdaudio_data::cdaudio_data(const cdaudio_data &from) : disc_id(from.disc_id), track_count(from.track_count), @@ -27,6 +36,7 @@ cdaudio_data::cdaudio_data(const cdaudio_data &from) { } + cdaudio_data & cdaudio_data::operator=(const cdaudio_data &from) { @@ -37,18 +47,21 @@ cdaudio_data::operator=(const cdaudio_data &from) return *this; } + cdaudio_time::cdaudio_time(const int32 min,const int32 &sec) : minutes(min), seconds(sec) { } + cdaudio_time::cdaudio_time(const cdaudio_time &from) : minutes(from.minutes), seconds(from.seconds) { } + cdaudio_time & cdaudio_time::operator=(const cdaudio_time &from) { @@ -57,6 +70,7 @@ cdaudio_time::operator=(const cdaudio_time &from) return *this; } + cdaudio_time cdaudio_time::operator+(const cdaudio_time &from) { @@ -65,22 +79,21 @@ cdaudio_time::operator+(const cdaudio_time &from) time.minutes = minutes + from.minutes; time.seconds = seconds + from.seconds; - while(time.seconds > 59) - { + while (time.seconds > 59) { time.minutes++; time.seconds-=60; } return time; } + cdaudio_time cdaudio_time::operator-(const cdaudio_time &from) { cdaudio_time time; int32 tsec = ((minutes * 60) + seconds) - ((from.minutes * 60) + from.seconds); - if(tsec<0) - { + if (tsec < 0) { time.minutes = 0; time.seconds = 0; return time; @@ -92,16 +105,18 @@ cdaudio_time::operator-(const cdaudio_time &from) return time; } + CDAudioDevice::CDAudioDevice(void) { FindDrives("/dev/disk"); - if(CountDrives()>0) + if (CountDrives() > 0) SetDrive(0); } + CDAudioDevice::~CDAudioDevice(void) { - for(int32 i=0; i= 0x13) || - ((pos.position[1] == 0x12) && (!pos.position[6]))) + else if ((!pos.position[1]) || (pos.position[1] >= 0x13) || + ((pos.position[1] == 0x12) && (!pos.position[6]))) return kStopped; - else - if (pos.position[1] == 0x11) + else if (pos.position[1] == 0x11) return kPlaying; else return kPaused; } + int16 CDAudioDevice::CountTracks(void) { @@ -326,6 +339,7 @@ CDAudioDevice::CountTracks(void) return toc.toc_data[3]; } + // Get the 0-based index of the current track int16 CDAudioDevice::GetTrack(void) @@ -349,23 +363,24 @@ CDAudioDevice::GetTrack(void) return pos.position[6]; } + uint8 CDAudioDevice::CountDrives(void) { return fDriveList.CountItems(); } + bool CDAudioDevice::SetDrive(const int32 &drive) { BString *path = (BString*) fDriveList.ItemAt(drive); - if(!path) + if (!path) return false; int device = open(path->String(), O_RDONLY); - if(device >= 0) - { + if (device >= 0) { fFileHandle = device; fDrivePath = path; fDriveIndex = drive; @@ -375,45 +390,46 @@ CDAudioDevice::SetDrive(const int32 &drive) return false; } + const char * CDAudioDevice::GetDrivePath(void) const { - if(!fDrivePath) + if (!fDrivePath) return NULL; return fDrivePath->String(); } -int32 CDAudioDevice::FindDrives(const char *path) + +int32 +CDAudioDevice::FindDrives(const char *path) { BDirectory dir(path); - if(dir.InitCheck() != B_OK) + if (dir.InitCheck() != B_OK) return B_ERROR; dir.Rewind(); BEntry entry; - while(dir.GetNextEntry(&entry) >= 0) - { + while (dir.GetNextEntry(&entry) >= 0) { BPath path; const char *name; entry_ref e; - if(entry.GetPath(&path) != B_OK) + if (entry.GetPath(&path) != B_OK) continue; name = path.Path(); - if(entry.GetRef(&e) != B_OK) + if (entry.GetRef(&e) != B_OK) continue; - if(entry.IsDirectory()) - { + if (entry.IsDirectory()) { // ignore floppy -- it is not silent - if(strcmp(e.name, "floppy") == 0) + if (strcmp(e.name, "floppy") == 0) continue; else - if(strcmp(e.name, "ata") == 0) + if (strcmp(e.name, "ata") == 0) continue; // Note that if we check for the count here, we could @@ -421,23 +437,20 @@ int32 CDAudioDevice::FindDrives(const char *path) // that are available, so we keep searching even if we've found one FindDrives(name); - } - else - { + } else { int devfd; device_geometry g; // ignore partitions - if(strcmp(e.name, "raw") != 0) + if (strcmp(e.name, "raw") != 0) continue; devfd = open(name, O_RDONLY); - if(devfd < 0) + if (devfd < 0) continue; - if(ioctl(devfd, B_GET_GEOMETRY, &g, sizeof(g)) >= 0) - { - if(g.device_type == B_CD) + if (ioctl(devfd, B_GET_GEOMETRY, &g, sizeof(g)) >= 0) { + if (g.device_type == B_CD) fDriveList.AddItem(new BString(name)); } close(devfd); @@ -446,6 +459,7 @@ int32 CDAudioDevice::FindDrives(const char *path) return fDriveList.CountItems(); } + bool CDAudioDevice::GetTime(cdaudio_time &track, cdaudio_time &disc) { @@ -463,8 +477,7 @@ CDAudioDevice::GetTime(cdaudio_time &track, cdaudio_time &disc) return false; if ((!pos.position[1]) || (pos.position[1] >= 0x13) || - ((pos.position[1] == 0x12) && (!pos.position[6]))) - { + ((pos.position[1] == 0x12) && (!pos.position[6]))) { // This indicates that we have a CD, but we are stopped. return false; } @@ -476,6 +489,7 @@ CDAudioDevice::GetTime(cdaudio_time &track, cdaudio_time &disc) return true; } + bool CDAudioDevice::GetTimeForTrack(const int16 &index, cdaudio_time &track) { @@ -487,7 +501,7 @@ CDAudioDevice::GetTimeForTrack(const int16 &index, cdaudio_time &track) int16 trackcount = toc.toc_data[3] - toc.toc_data[2] + 1; - if(index < 1 || index > trackcount) + if (index < 1 || index > trackcount) return false; TrackDescriptor *desc = (TrackDescriptor*)&(toc.toc_data[4]); @@ -501,6 +515,7 @@ CDAudioDevice::GetTimeForTrack(const int16 &index, cdaudio_time &track) return true; } + bool CDAudioDevice::GetTimeForDisc(cdaudio_time &disc) { @@ -519,13 +534,14 @@ CDAudioDevice::GetTimeForDisc(cdaudio_time &disc) return true; } -struct ConvertedToc -{ + +struct ConvertedToc { int32 min; int32 sec; int32 frame; }; + static int32 cddb_sum(int n) { @@ -538,6 +554,7 @@ cddb_sum(int n) return ret; } + int32 CDAudioDevice::GetDiscID(void) { @@ -555,8 +572,7 @@ CDAudioDevice::GetDiscID(void) ConvertedToc tocData[100]; // figure out the disc ID - for (int index = 0; index < 100; index++) - { + for (int index = 0; index < 100; index++) { tocData[index].min = toc.toc_data[9 + 8*index]; tocData[index].sec = toc.toc_data[10 + 8*index]; tocData[index].frame = toc.toc_data[11 + 8*index]; @@ -565,8 +581,7 @@ CDAudioDevice::GetDiscID(void) int32 sum1 = 0; int32 sum2 = 0; - for (int index = 0; index < numTracks; index++) - { + for (int index = 0; index < numTracks; index++) { sum1 += cddb_sum((tocData[index].min * 60) + tocData[index].sec); // the following is probably running over too far @@ -578,7 +593,9 @@ CDAudioDevice::GetDiscID(void) return id; } -bool CDAudioDevice::IsDataTrack(const int16 &track) + +bool +CDAudioDevice::IsDataTrack(const int16 &track) { scsi_toc toc; status_t result = ioctl(fFileHandle, B_SCSI_GET_TOC, &toc); @@ -587,12 +604,12 @@ bool CDAudioDevice::IsDataTrack(const int16 &track) return false; TrackDescriptor *trackindex = (TrackDescriptor*) &(toc.toc_data[4]); - if(track>toc.toc_data[3]) + if (track > toc.toc_data[3]) return false; // At least under R5, the SCSI CD drive has each legitimate audio track // have a value of 0x10. Data tracks have a value of 0x14; - if(trackindex[track].adr_control & 4) + if (trackindex[track].adr_control & 4) return true; return false; diff --git a/src/apps/cdplayer/CDAudioDevice.h b/src/apps/cdplayer/CDAudioDevice.h index 30f27ef9e4..3b1f0da166 100644 --- a/src/apps/cdplayer/CDAudioDevice.h +++ b/src/apps/cdplayer/CDAudioDevice.h @@ -1,3 +1,10 @@ +/* + * Copyright (c) 2006-2007, Haiku, Inc. + * Distributed under the terms of the MIT license. + * + * Author: + * DarkWyrm + */ #ifndef CDAUDIODEVICE_H #define CDAUDIODEVICE_H @@ -9,8 +16,7 @@ // descriptors, which are each 8 bytes. We don't really need the first 5 bytes // of the track descriptor, so we'll just ignore them. All we really want is the // length of each track, which happen to be the last 3 bytes of the descriptor. -typedef struct -{ +typedef struct { uint8 reserved; uint8 adr_control; // bytes 0-3 are control, 4-7 are ADR uint8 track_number; @@ -20,7 +26,7 @@ typedef struct uint8 min; uint8 sec; uint8 frame; -}TrackDescriptor; +} TrackDescriptor; enum CDState { kNoCD=0, @@ -35,27 +41,27 @@ enum CDState { class cdaudio_time { public: - cdaudio_time(const int32 min=-1,const int32 &sec=-1); - cdaudio_time(const cdaudio_time &from); - cdaudio_time &operator=(const cdaudio_time &from); - cdaudio_time operator+(const cdaudio_time &from); - cdaudio_time operator-(const cdaudio_time &from); + cdaudio_time(const int32 min=-1,const int32 &sec=-1); + cdaudio_time(const cdaudio_time &from); + cdaudio_time &operator=(const cdaudio_time &from); + cdaudio_time operator+(const cdaudio_time &from); + cdaudio_time operator-(const cdaudio_time &from); - int32 minutes; - int32 seconds; + int32 minutes; + int32 seconds; }; class cdaudio_data { public: - cdaudio_data(const int32 &id=-1, const int32 &count=-1, - const int32 &disclength=-1); - cdaudio_data(const cdaudio_data &from); - cdaudio_data &operator=(const cdaudio_data &from); + cdaudio_data(const int32 &id = -1, const int32 &count = -1, + const int32 &disclength = -1); + cdaudio_data(const cdaudio_data &from); + cdaudio_data &operator=(const cdaudio_data &from); - int32 disc_id; - int32 track_count; - int32 length; + int32 disc_id; + int32 track_count; + int32 length; BString frame_offsets; }; diff --git a/src/apps/cdplayer/CDDBSupport.cpp b/src/apps/cdplayer/CDDBSupport.cpp index ac0a85ff16..05ba229996 100644 --- a/src/apps/cdplayer/CDDBSupport.cpp +++ b/src/apps/cdplayer/CDDBSupport.cpp @@ -42,8 +42,7 @@ const int kTerminatingSignal = SIGINT; // SIGCONT; // descriptors, which are each 8 bytes. We don't really need the first 5 bytes // of the track descriptor, so we'll just ignore them. All we really want is the // length of each track, which happen to be the last 3 bytes of the descriptor. -typedef struct TrackRecord -{ +typedef struct TrackRecord { int8 unused[5]; int8 min; @@ -58,6 +57,7 @@ CDDBData::CDDBData(int32 discid) { } + CDDBData::CDDBData(const CDDBData &from) : fDiscID(from.fDiscID), fArtist(from.fArtist), @@ -68,41 +68,41 @@ CDDBData::CDDBData(const CDDBData &from) { STRACE(("CDDBData::Copy Constructor\n")); - for(int32 i=0; iString(),*time); } } + CDDBData::~CDDBData(void) { STRACE(("CDDBData::~CDDBData\n")); EmptyLists(); } + CDDBData & CDDBData::operator=(const CDDBData &from) { EmptyLists(); - fDiscID=from.fDiscID; - fArtist=from.fArtist; - fAlbum=from.fAlbum; - fGenre=from.fGenre; - fDiscTime=from.fDiscTime; - fYear=fYear; + fDiscID = from.fDiscID; + fArtist = from.fArtist; + fAlbum = from.fAlbum; + fGenre = from.fGenre; + fDiscTime = from.fDiscTime; + fYear = fYear; - for(int32 i=0; iString(),*time); @@ -110,41 +110,42 @@ CDDBData::operator=(const CDDBData &from) return *this; } + void CDDBData::MakeEmpty(void) { STRACE(("CDDBData::MakeEmpty\n")); EmptyLists(); - fDiscID=-1; - fArtist=""; - fAlbum=""; - fGenre=""; - fDiscTime.minutes=-1; - fDiscTime.seconds=-1; - fYear=-1; + fDiscID = -1; + fArtist = ""; + fAlbum = ""; + fGenre = ""; + fDiscTime.minutes = -1; + fDiscTime.seconds = -1; + fYear = -1; } + void CDDBData::EmptyLists(void) { STRACE(("CDDBData::EmptyLists\n")); - for(int32 i=0; i 0) - { - char genredata[info.size+2]; + if (file.GetAttrInfo("Audio:Genre",&info) == B_OK && info.size > 0) { + char genredata[info.size + 2]; - if(file.ReadAttr("Audio:Genre",B_STRING_TYPE,0,genredata,info.size)>0) + if (file.ReadAttr("Audio:Genre",B_STRING_TYPE,0,genredata,info.size) > 0) fGenre = genredata; } - if(file.GetAttrInfo("Audio:Year",&info)==B_OK && info.size > 0) - { + if (file.GetAttrInfo("Audio:Year",&info)==B_OK && info.size > 0) { int32 data; - if(file.ReadAttr("Audio:Year",B_INT32_TYPE,0,&data,info.size)>0) + if (file.ReadAttr("Audio:Year",B_INT32_TYPE,0,&data,info.size) > 0) fYear = data; } // TODO: Attempt reading the file before attempting to read the attributes - if(file.GetAttrInfo("CD:tracks",&info)==B_OK && info.size > 0) - { - char trackdata[info.size+2]; + if (file.GetAttrInfo("CD:tracks",&info)==B_OK && info.size > 0) { + char trackdata[info.size + 2]; - if(file.ReadAttr("CD:tracks",B_STRING_TYPE,0,trackdata,info.size)>0) - { + if (file.ReadAttr("CD:tracks",B_STRING_TYPE,0,trackdata,info.size) > 0) { trackdata[info.size] = 0; BString tmp = GetLineFromString(trackdata); char *index; - if(fTrackList.CountItems()>0) + if (fTrackList.CountItems() > 0) EmptyLists(); fArtist = tmp; @@ -198,12 +194,10 @@ CDDBData::Load(const entry_ref &ref) STRACE(("CDDBData::Load: Album set to %s\n",fAlbum.String())); index = strchr(trackdata,'\n') + 1; - while(*index) - { + while (*index) { tmp = GetLineFromString(index); - if(tmp.CountChars()>0) - { + if (tmp.CountChars() > 0) { BString *newtrack = new BString(tmp); cdaudio_time *time = new cdaudio_time; time->minutes = 0; @@ -233,7 +227,7 @@ CDDBData::Load(void) // This uses the default R5 path BPath path; - if(find_directory(B_USER_DIRECTORY, &path, true)!=B_OK) + if (find_directory(B_USER_DIRECTORY, &path, true) != B_OK) return B_ERROR; path.Append("cd"); @@ -242,11 +236,11 @@ CDDBData::Load(void) BString filename(path.Path()); filename << "/" << Artist() << " - " << Album(); - if(filename.Compare("Artist")==0) + if (filename.Compare("Artist")==0) filename << "." << DiscID(); BEntry entry(filename.String()); - if(entry.InitCheck()!=B_OK) + if (entry.InitCheck() != B_OK) return entry.InitCheck(); entry_ref ref; @@ -261,7 +255,7 @@ CDDBData::Save(void) // This uses the default R5 path BPath path; - if(find_directory(B_USER_DIRECTORY, &path, true)!=B_OK) + if (find_directory(B_USER_DIRECTORY, &path, true) != B_OK) return B_ERROR; path.Append("cd"); @@ -270,7 +264,7 @@ CDDBData::Save(void) BString filename(path.Path()); filename << "/" << Artist() << " - " << Album(); - if(filename.Compare("Artist")==0) + if (filename.Compare("Artist")==0) filename << "." << DiscID(); return Save(filename.String()); @@ -279,15 +273,13 @@ CDDBData::Save(void) status_t CDDBData::Save(const char *filename) { - if(!filename) - { + if (!filename) { STRACE(("CDDBData::Save failed - NULL filename\n")); return B_ERROR; } BFile file(filename, B_READ_WRITE | B_CREATE_FILE | B_ERASE_FILE); - if(file.InitCheck() != B_OK) - { + if (file.InitCheck() != B_OK) { STRACE(("CDDBData::Save failed - couldn't create file %s\n",filename)); return file.InitCheck(); } @@ -305,12 +297,11 @@ CDDBData::Save(const char *filename) BString tracksattr(fArtist); tracksattr << " - " << fAlbum << "\n"; - for(int32 i=0; i0) - file.WriteAttr("Audio:Genre",B_STRING_TYPE,0, fGenre.String(), fGenre.Length()+1); + if (fGenre.CountChars() > 0) + file.WriteAttr("Audio:Genre",B_STRING_TYPE,0, fGenre.String(), fGenre.Length() + 1); - if(fYear>0) + if (fYear > 0) file.WriteAttr("Audio:Year",B_INT32_TYPE,0,&fYear,sizeof(int32)); return B_OK; @@ -346,15 +337,13 @@ CDDBData::CountTracks(void) const bool CDDBData::RenameTrack(const int32 &index, const char *newname) { - if(!newname) - { + if (!newname) { STRACE(("CDDBData::RenameTrack failed - NULL newname\n")); return false; } BString *name = (BString*)fTrackList.ItemAt(index); - if(name) - { + if (name) { STRACE(("CDDBData::RenameTrack(%ld,%s)\n",index,newname)); name->SetTo(newname); return true; @@ -368,8 +357,7 @@ void CDDBData::AddTrack(const char *track, const cdaudio_time &time, const int16 &index) { - if(!track) - { + if (!track) { STRACE(("CDDBData::AddTrack failed - NULL name\n")); return; } @@ -395,7 +383,7 @@ const char * CDDBData::TrackAt(const int16 &index) const { BString *track = (BString*)fTrackList.ItemAt(index); - if(!track) + if (!track) return NULL; return track->String(); @@ -432,29 +420,26 @@ CDDBQuery::SetToSite(const char *server, int32 port) void CDDBQuery::SetToCD(const char *path) { - if(!path) + if (!path) return; // Get the SCSI table of contents from the device passed to us int device = open(path, O_RDONLY); - if(device < 0) + if (device < 0) return; status_t result = ioctl(device, B_SCSI_GET_TOC, &fSCSIData); close(device); - if(result != B_OK) + if (result != B_OK) return; // Calculate the disc's CDDB ID - if (fState == kInitial) - { + if (fState == kInitial) { fCDData.SetDiscID(GetDiscID(&fSCSIData)); fCDData.SetDiscTime(GetDiscTime(&fSCSIData)); - } - else - { + } else { int32 discID = GetDiscID(&fSCSIData); if (fCDData.DiscID() == discID) @@ -471,8 +456,7 @@ CDDBQuery::SetToCD(const char *path) if (fThread >= 0) resume_thread(fThread); - else - { + else { fState = kError; result = fThread; } @@ -500,7 +484,7 @@ status_t CDDBQuery::GetSites(bool (*eachFunc)(const char *site, int port, const char *latitude, const char *longitude, const char *description, void *state), void *passThru) { - if(!IsConnected()) + if (!IsConnected()) Connect(); BString tmp; @@ -508,19 +492,17 @@ CDDBQuery::GetSites(bool (*eachFunc)(const char *site, int port, const char *lat tmp = "sites\n"; STRACE((">%s", tmp.String())); - if(fSocket.Send(tmp.String(), tmp.Length())==-1) + if (fSocket.Send(tmp.String(), tmp.Length())==-1) return B_ERROR; ReadLine(tmp); - if(tmp.FindFirst("210") == -1) - { + if (tmp.FindFirst("210") == -1) { Disconnect(); return B_ERROR; } - for (;;) - { + for (;;) { BString site; int32 sitePort; BString latitude; @@ -551,17 +533,16 @@ CDDBQuery::GetSites(bool (*eachFunc)(const char *site, int port, const char *lat bool CDDBQuery::GetData(CDDBData *data, bigtime_t timeout) { - if(!data) + if (!data) return false; bigtime_t deadline = system_time() + timeout; - while (fState == kReading) - { + while (fState == kReading) { snooze(50000); if (system_time() > deadline) break; } - if(fState != kDone) + if (fState != kDone) return false; *data = fCDData; @@ -591,8 +572,7 @@ CDDBQuery::GetDiscID(const scsi_toc *toc) int32 sum1 = 0; int32 sum2 = 0; - for (int index = 0; index < numTracks; index++) - { + for (int index = 0; index < numTracks; index++) { sum1 += cddb_sum((tocData[index].min * 60) + tocData[index].sec); // the following is probably running over too far @@ -612,8 +592,7 @@ CDDBQuery::OffsetsToString(const scsi_toc *toc) int32 numTracks = toc->toc_data[3] - toc->toc_data[2] + 1; BString string; - for (int index = 0; index < numTracks; index++) - { + for (int index = 0; index < numTracks; index++) { string << tocData[index].min * 4500 + tocData[index].sec * 75 + tocData[index].frame << ' '; } @@ -647,8 +626,7 @@ CDDBQuery::GetTrackTimes(const scsi_toc *toc, vector ×) TrackRecord *tocData = (TrackRecord*)&(toc->toc_data[4]); int16 trackCount = toc->toc_data[3] - toc->toc_data[2] + 1; - for (int index = 0; index < trackCount+1; index++) - { + for (int index = 0; index < trackCount + 1; index++) { cdaudio_time cdtime; cdtime.minutes = tocData[index].min; cdtime.seconds = tocData[index].sec; @@ -676,8 +654,7 @@ CDDBQuery::ReadFromServer(BString &data) STRACE((">%s", query.String())); - if(fSocket.Send(query.String(), query.Length())==-1) - { + if (fSocket.Send(query.String(), query.Length())==-1) { Disconnect(); return B_ERROR; } @@ -689,10 +666,8 @@ CDDBQuery::ReadFromServer(BString &data) BString category; BString queryDiscID(idString); - if(tmp.FindFirst("200") != 0) - { - if(tmp.FindFirst("211") == 0) - { + if (tmp.FindFirst("200") != 0) { + if (tmp.FindFirst("211") == 0) { // A 211 means that the query was not exact. To make sure that we don't // have a problem with this in the future, we will choose the first entry that // the server returns. This may or may not be wise, but in my experience, the first @@ -712,24 +687,19 @@ CDDBQuery::ReadFromServer(BString &data) // This is to suck up any more search results that the server sends us. BString throwaway; ReadLine(throwaway); - while(throwaway.ByteAt(0) != '.') + while (throwaway.ByteAt(0) != '.') ReadLine(throwaway); - } - else - { + } else { // We get here for any time the CDDB server does not recognize the CD, amongst other things STRACE(("CDDB lookup error: %s\n",tmp.String())); fCDData.SetGenre("misc"); return B_NAME_NOT_FOUND; } - } - else - { + } else { GetToken(tmp.String() + 3, category); } STRACE(("CDDBQuery::ReadFromServer: Genre: %s\n",category.String())); - if(!category.Length()) - { + if (!category.Length()) { STRACE(("Set genre to 'misc'\n")); category = "misc"; } @@ -737,14 +707,12 @@ CDDBQuery::ReadFromServer(BString &data) // Query for the disc's data - artist, album, tracks, etc. query = ""; query << "cddb read " << category << ' ' << queryDiscID << '\n' ; - if(fSocket.Send(query.String(), query.Length())==-1) - { + if (fSocket.Send(query.String(), query.Length())==-1) { Disconnect(); return B_ERROR; } - while(true) - { + while (true) { ReadLine(tmp); if (tmp == "." || tmp == ".\n") @@ -759,17 +727,17 @@ CDDBQuery::ReadFromServer(BString &data) status_t CDDBQuery::Connect() { - if(fConnected) + if (fConnected) Disconnect(); BNetAddress address; status_t status = address.SetTo(fServerName.String(), fPort); - if(status != B_OK) + if (status != B_OK) return status; status = fSocket.Connect(address); - if(status != B_OK) + if (status != B_OK) return status; fConnected = true; @@ -790,8 +758,7 @@ CDDBQuery::IsConnected() const void CDDBQuery::Disconnect() { - if(fConnected) - { + if (fConnected) { fSocket.Close(); fConnected = false; } @@ -803,8 +770,7 @@ CDDBQuery::ReadLine(BString &buffer) buffer = ""; unsigned char ch; - for (;;) - { + for (;;) { if (fSocket.Receive(&ch, 1) <= 0) break; @@ -813,23 +779,20 @@ CDDBQuery::ReadLine(BString &buffer) // be in a non-ASCII encoding, such as Latin-1 or UTF8. The problem lies in Be's implementation // of BString, which does not support UTF8 string assignments. The Be Book says we have to // flatten the string and adjust the character counts manually. Man, this *really* sucks. - if(ch > 0x7f) - { + if (ch > 0x7f) { // Obviously non-ASCII character detected. Let's see if it's Latin-1 or UTF8. unsigned char *string, *stringindex; int32 length = buffer.Length(); // The first byte of a UTF8 string will be 110xxxxx - if( ((ch & 0xe0) == 0xc0)) - { + if ( ((ch & 0xe0) == 0xc0)) { // This is UTF8. Get the next byte unsigned char ch2; if (fSocket.Receive(&ch2, 1) <= 0) break; - if( (ch2 & 0xc0) == 0x80) - { - string = (unsigned char *)buffer.LockBuffer(length+10); + if ( (ch2 & 0xc0) == 0x80) { + string = (unsigned char *)buffer.LockBuffer(length + 10); stringindex = string + length; stringindex[0] = ch; @@ -847,39 +810,34 @@ CDDBQuery::ReadLine(BString &buffer) char srcstr[2], deststr[5]; int32 srclen, destlen, state; - srcstr[0]=ch; - srcstr[1]='\0'; + srcstr[0] = ch; + srcstr[1] = '\0'; srclen = 1; destlen = 5; memset(deststr,0,5); - if(convert_to_utf8(B_ISO1_CONVERSION,srcstr,&srclen,deststr,&destlen,&state)==B_OK) - { + if (convert_to_utf8(B_ISO1_CONVERSION,srcstr,&srclen,deststr,&destlen,&state)==B_OK) { // We succeeded. Amazing. Now we hack the string into having the character length = buffer.Length(); - string = (unsigned char *)buffer.LockBuffer(length+10); + string = (unsigned char *)buffer.LockBuffer(length + 10); stringindex = string + length; - for (int i = 0; i < 5; i++) - { + for (int i = 0; i < 5; i++) { stringindex[i] = deststr[i]; - if(!deststr[i]) + if (!deststr[i]) break; } buffer.UnlockBuffer(); - } - else - { + } else { // well, we tried. Append the character to the string and live with it - buffer+=ch; + buffer += ch; } - } - else - buffer +=ch; + } else + buffer += ch; - if(ch == '\n') + if (ch == '\n') break; } @@ -895,18 +853,17 @@ CDDBQuery::IdentifySelf() username = getenv("USER"); hostname = getenv("HOSTNAME"); - if(username.Length() < 1) + if (username.Length() < 1) username = "baron"; - if(hostname.Length() < 1) + if (hostname.Length() < 1) hostname = "haiku"; BString tmp; tmp << "cddb hello " << username << " " << hostname << " HaikuCDPlayer 1.0\n"; STRACE((">%s", tmp.String())); - if(fSocket.Send(tmp.String(), tmp.Length())==-1) - { + if (fSocket.Send(tmp.String(), tmp.Length())==-1) { Disconnect(); return B_ERROR; } @@ -930,8 +887,7 @@ CDDBQuery::OpenContentFile(const int32 &discID) BVolumeRoster roster; BVolume volume; roster.Rewind(); - while (roster.GetNextVolume(&volume) == B_OK) - { + while (roster.GetNextVolume(&volume) == B_OK) { if (volume.IsReadOnly() || !volume.IsPersistent() || !volume.KnowsAttr() || !volume.KnowsQuery()) continue; @@ -945,22 +901,20 @@ CDDBQuery::OpenContentFile(const int32 &discID) if (query.Fetch() != B_OK) continue; - if(query.GetNextRef(&ref) == B_OK) + if (query.GetNextRef(&ref) == B_OK) break; } status_t status = fCDData.Load(ref); - if(status == B_NO_INIT) - { + if (status == B_NO_INIT) { // We receive this error when the Load() function couldn't load the track times // This just means that we get it from the SCSI data given to us in SetToCD vector times; GetTrackTimes(&fSCSIData,times); - for(int32 i=0; iOpenContentFile(query->fCDData.DiscID())!=B_OK) - { + if (query->OpenContentFile(query->fCDData.DiscID()) != B_OK) { // new content file, read it in from the server - if(query->Connect()==B_OK) - { + if (query->Connect()==B_OK) { BString data; query->ReadFromServer(data); query->ParseData(data); query->WriteFile(); - } - else - { + } else { // We apparently couldn't connect to the server, so we'll need to handle // creating tracknames. Note that we do not save to disk. This is because it should // be up to the user what to do. @@ -1007,7 +957,7 @@ void CDDBQuery::WriteFile(void) { BPath path; - if(find_directory(B_USER_DIRECTORY, &path, true)!=B_OK) + if (find_directory(B_USER_DIRECTORY, &path, true) != B_OK) return; path.Append("cd"); @@ -1016,7 +966,7 @@ CDDBQuery::WriteFile(void) BString filename(path.Path()); filename << "/" << fCDData.Artist() << " - " << fCDData.Album(); - if(filename.Compare("Artist")==0) + if (filename.Compare("Artist")==0) filename << "." << fCDData.DiscID(); fCDData.Save(filename.String()); @@ -1025,7 +975,7 @@ CDDBQuery::WriteFile(void) void CDDBQuery::SetDefaultInfo(void) { - for(int16 i = fCDData.CountTracks(); i>=0; i--) + for (int16 i = fCDData.CountTracks(); i >= 0; i--) fCDData.RemoveTrack(i); vector trackTimes; @@ -1036,16 +986,15 @@ CDDBQuery::SetDefaultInfo(void) fCDData.SetAlbum("Audio CD"); fCDData.SetGenre("Misc"); - for(int32 i=0; i=0; i--) + for (int16 i = fCDData.CountTracks(); i >= 0; i--) fCDData.RemoveTrack(i); vector trackTimes; GetTrackTimes(&fSCSIData,trackTimes); int32 trackCount = GetTrackCount(&fSCSIData); - if(data.CountChars()<1) - { + if (data.CountChars() < 1) { // This case occurs when the CDDB lookup fails. On these occasions, we need to generate // the file ourselves. This is actually pretty easy. fCDData.SetArtist("Artist"); fCDData.SetAlbum("Audio CD"); fCDData.SetGenre("Misc"); - for(int32 i=0; i 0) - { + if (pos > 0) { BString artist,album; artist = album = GetLineFromString(data.String() + sizeof("DYEAR") + pos); @@ -1106,13 +1051,12 @@ CDDBQuery::ParseData(const BString &data) } pos = data.FindFirst("DTITLE="); - if(pos > 0) - { + if (pos > 0) { BString artist,album; artist = album = GetLineFromString(data.String() + sizeof("DTITLE") + pos); pos = artist.FindFirst(" / "); - if(pos > 0) + if (pos > 0) artist.Truncate(pos); fCDData.SetArtist(artist.String()); @@ -1122,22 +1066,20 @@ CDDBQuery::ParseData(const BString &data) BString category = GetLineFromString(data.String() + 4); pos = category.FindFirst(" "); - if(pos > 0) + if (pos > 0) category.Truncate(pos); fCDData.SetGenre(category.String()); pos = data.FindFirst("TTITLE0="); - if(pos > 0) - { - int32 trackCount=0; - BString searchString="TTITLE0="; + if (pos > 0) { + int32 trackCount = 0; + BString searchString = "TTITLE0="; - while(pos > 0) - { + while (pos > 0) { BString trackName = data.String() + pos + searchString.Length(); trackName.Truncate(trackName.FindFirst("\n")); - cdaudio_time tracktime=trackTimes[trackCount+1] - trackTimes[trackCount]; + cdaudio_time tracktime = trackTimes[trackCount + 1] - trackTimes[trackCount]; fCDData.AddTrack(trackName.String(),tracktime); trackCount++; @@ -1150,20 +1092,20 @@ CDDBQuery::ParseData(const BString &data) void CDDBQuery::SetData(const CDDBData &data) { - fCDData=data; + fCDData = data; } BString GetLineFromString(const char *string) { - if(!string) + if (!string) return NULL; BString out(string); int32 linefeed = out.FindFirst("\n"); - if(linefeed > 0) + if (linefeed > 0) out.Truncate(linefeed); return out; diff --git a/src/apps/cdplayer/CDPlayer.cpp b/src/apps/cdplayer/CDPlayer.cpp index b76aea2527..6b0b0d2b66 100644 --- a/src/apps/cdplayer/CDPlayer.cpp +++ b/src/apps/cdplayer/CDPlayer.cpp @@ -1,3 +1,10 @@ +/* + * Copyright (c) 2006-2007, Haiku, Inc. + * Distributed under the terms of the MIT license. + * + * Author: + * DarkWyrm + */ #include #include #include @@ -15,6 +22,7 @@ #include #include +#include "ButtonBitmaps.h" #include "CDPlayer.h" #include "DrawButton.h" #include "DoubleShotDrawButton.h" @@ -24,11 +32,9 @@ #include #include -enum -{ - M_STOP='mstp', +enum { + M_STOP = 'mstp', M_PLAY, - M_SELECT_TRACK, M_NEXT_TRACK, M_PREV_TRACK, M_FFWD, @@ -41,36 +47,53 @@ enum M_SET_CD_TITLE }; -CDPlayer::CDPlayer(BRect frame, const char *name, uint32 resizeMask, uint32 flags) - : BView(frame, name, resizeMask, flags | B_FRAME_EVENTS), - fCDQuery("freedb.freedb.org") +class CDPlayerWindow : public BWindow { - SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); +public: + CDPlayerWindow(void); + bool QuitRequested(void); +}; + +inline void +SetLabel(BStringView *label, const char *text) +{ + if (strcmp(label->Text(),text) != 0) + label->SetText(text); +} + + +CDPlayer::CDPlayer(BRect frame, const char *name, uint32 resizeMask, uint32 flags) + : BView(frame, name, resizeMask, flags | B_FRAME_EVENTS), + fCDQuery("freedb.freedb.org") +{ + SetViewColor(216,216,216); - fVolume=255; + fVolume = 255; BuildGUI(); - if(fCDDrive.CountDrives()<1) - { - BAlert *alert = new BAlert("CDPlayer","It appears that there are no CD drives on your" - "computer or there is no system software to support one." - " Sorry.","OK"); + if (fCDDrive.CountDrives() < 1) { + BAlert *alert = new BAlert("CDPlayer","It appears that there are no CD drives" + " on your computer or there is no system software" + " to support one. Sorry.","OK"); alert->Go(); be_app->PostMessage(B_QUIT_REQUESTED); } - fWindowState=fCDDrive.GetState(); + fWindowState = fCDDrive.GetState(); fVolumeSlider->SetValue(fCDDrive.GetVolume()); WatchCDState(); } + CDPlayer::~CDPlayer() { fCDDrive.Stop(); } -void CDPlayer::BuildGUI(void) + +void +CDPlayer::BuildGUI(void) { fStopColor.red = 80; fStopColor.green = 164; @@ -82,152 +105,100 @@ void CDPlayer::BuildGUI(void) fPlayColor.blue = 40; fPlayColor.alpha = 255; - BRect r; - r.left = 5; - r.top = 5; - r.right = (Bounds().Width()/2) - 7; + BRect r(Bounds().InsetByCopy(10,10)); + BBox *box = new BBox(r,"",B_FOLLOW_LEFT_RIGHT | B_FOLLOW_TOP); + AddChild(box); + + r = box->Bounds().InsetByCopy(10,10); r.bottom = 25; + float labelWidth, labelHeight; + fCDTitle = new BStringView(r,"CDTitle","CD drive is empty", B_FOLLOW_LEFT_RIGHT); + fCDTitle->GetPreferredSize(&labelWidth, &labelHeight); + fCDTitle->ResizeTo(r.Width(), labelHeight); + box->AddChild(fCDTitle); - // Assemble the CD Title box - fCDBox = new BBox(r,"TrackBox"); - AddChild(fCDBox); + r.bottom = r.top + labelHeight; + r.OffsetBy(0, r.Height() + 5); - BView *view = new BView( fCDBox->Bounds().InsetByCopy(2,2), "view",B_FOLLOW_ALL,B_WILL_DRAW); - view->SetViewColor(20,20,20); - fCDBox->AddChild(view); - - fCDTitle = new BStringView(view->Bounds(),"CDTitle","", B_FOLLOW_ALL); - view->AddChild(fCDTitle); - fCDTitle->SetHighColor(200,200,200); - fCDTitle->SetFont(be_bold_font); + fCurrentTrack = new BStringView(r,"TrackNumber","",B_FOLLOW_LEFT_RIGHT); + box->AddChild(fCurrentTrack); r.OffsetBy(0, r.Height() + 5); - fTrackMenu = new TrackMenu(r, "TrackMenu", new BMessage(M_SELECT_TRACK)); - AddChild(fTrackMenu); + r.right = r.left + (r.Width() / 2); + fTrackTime = new BStringView(r,"TrackTime","Track: --:-- / --:--",B_FOLLOW_LEFT_RIGHT); + box->AddChild(fTrackTime); - r.Set(fCDTitle->Frame().right + 15,5,Bounds().right - 5,25); - fTrackBox = new BBox(r,"TrackBox",B_FOLLOW_TOP); - AddChild(fTrackBox); - - view = new BView( fTrackBox->Bounds().InsetByCopy(2,2), "view",B_FOLLOW_ALL,B_WILL_DRAW); - view->SetViewColor(0,34,7); - fTrackBox->AddChild(view); + r.OffsetTo(box->Bounds().right / 2, r.top); + fDiscTime = new BStringView(r,"DiscTime","Disc: --:-- / --:--",B_FOLLOW_RIGHT); + box->AddChild(fDiscTime); - fCurrentTrack = new BStringView( view->Bounds(),"TrackNumber","",B_FOLLOW_ALL); - view->AddChild(fCurrentTrack); - fCurrentTrack->SetHighColor(fStopColor); - fCurrentTrack->SetFont(be_bold_font); + box->ResizeTo(box->Bounds().Width(), fDiscTime->Frame().bottom + 10); - r.OffsetBy(0, r.Height() + 5); - fTimeBox = new BBox(r,"TimeBox",B_FOLLOW_LEFT_RIGHT); - AddChild(fTimeBox); - - view = new BView( fTimeBox->Bounds().InsetByCopy(2,2), "view",B_FOLLOW_ALL,B_WILL_DRAW); - view->SetViewColor(0,7,34); - fTimeBox->AddChild(view); - - r = view->Bounds(); - r.right /= 2; - - fTrackTime = new BStringView(r,"TrackTime","Track --:-- / --:--",B_FOLLOW_LEFT_RIGHT); - view->AddChild(fTrackTime); - fTrackTime->SetHighColor(120,120,255); - fTrackTime->SetFont(be_bold_font); - - r.right = view->Bounds().right; - r.left = fTrackTime->Frame().right + 1; - - fDiscTime = new BStringView(r,"DiscTime","Disc --:-- / --:--",B_FOLLOW_RIGHT); - view->AddChild(fDiscTime); - fDiscTime->SetHighColor(120,120,255); - fDiscTime->SetFont(be_bold_font); - - fVolumeSlider = new BSlider( BRect(0,0,75,30), "VolumeSlider", "Volume", new BMessage(M_SET_VOLUME),0,255); - fVolumeSlider->MoveTo(5, Bounds().bottom - 10 - fVolumeSlider->Frame().Height()); - AddChild(fVolumeSlider); - - fStop = new DrawButton( BRect(0,0,1,1), "Stop", BTranslationUtils::GetBitmap(B_PNG_FORMAT,"stop_up"), - BTranslationUtils::GetBitmap(B_PNG_FORMAT,"stop_down"), new BMessage(M_STOP), - B_FOLLOW_BOTTOM, B_WILL_DRAW); + fStop = new DrawButton(BRect(0,0,1,1), "Stop", + BTranslationUtils::GetBitmap(B_PNG_FORMAT,"stop_up"), + BTranslationUtils::GetBitmap(B_PNG_FORMAT,"stop_down"), + new BMessage(M_STOP), B_FOLLOW_BOTTOM, B_WILL_DRAW); fStop->ResizeToPreferred(); - fStop->MoveTo(fVolumeSlider->Frame().right + 10, Bounds().bottom - 5 - fStop->Frame().Height()); + fStop->MoveTo(10, box->Frame().bottom + 15); fStop->SetDisabled(BTranslationUtils::GetBitmap(B_PNG_FORMAT,"stop_disabled")); AddChild(fStop); + float stopTop = fStop->Frame().top; - fPlay = new TwoStateDrawButton( BRect(0,0,1,1), "Play", - BTranslationUtils::GetBitmap(B_PNG_FORMAT,"play_up"), - BTranslationUtils::GetBitmap(B_PNG_FORMAT,"play_down"), - BTranslationUtils::GetBitmap(B_PNG_FORMAT,"pause_up"), - BTranslationUtils::GetBitmap(B_PNG_FORMAT,"pause_down"), - new BMessage(M_PLAY), B_FOLLOW_NONE, B_WILL_DRAW); + + fPlay = new TwoStateDrawButton(BRect(0,0,1,1), "Play", + BTranslationUtils::GetBitmap(B_PNG_FORMAT,"play_up"), + BTranslationUtils::GetBitmap(B_PNG_FORMAT,"play_down"), + BTranslationUtils::GetBitmap(B_PNG_FORMAT,"play_up_on"), + BTranslationUtils::GetBitmap(B_PNG_FORMAT,"play_down_on"), + new BMessage(M_PLAY), B_FOLLOW_NONE, B_WILL_DRAW); fPlay->ResizeToPreferred(); - fPlay->MoveTo(fStop->Frame().right + 2, Bounds().bottom - 5 - fPlay->Frame().Height()); - fPlay->SetDisabled(BTranslationUtils::GetBitmap(B_PNG_FORMAT,"play_disabled"), - BTranslationUtils::GetBitmap(B_PNG_FORMAT,"pause_disabled")); + fPlay->MoveTo(fStop->Frame().right + 2, stopTop); AddChild(fPlay); - fPrevTrack = new DrawButton( BRect(0,0,1,1), "PrevTrack", BTranslationUtils::GetBitmap(B_PNG_FORMAT,"prev_up"), - BTranslationUtils::GetBitmap(B_PNG_FORMAT,"prev_down"), new BMessage(M_PREV_TRACK), - B_FOLLOW_BOTTOM, B_WILL_DRAW); + fPrevTrack = new DrawButton(BRect(0,0,1,1), "PrevTrack", + BTranslationUtils::GetBitmap(B_PNG_FORMAT,"prev_up"), + BTranslationUtils::GetBitmap(B_PNG_FORMAT,"prev_down"), + new BMessage(M_PREV_TRACK), B_FOLLOW_BOTTOM, + B_WILL_DRAW); fPrevTrack->ResizeToPreferred(); - fPrevTrack->MoveTo(fPlay->Frame().right + 10, Bounds().bottom - 5 - fPrevTrack->Frame().Height()); - fPrevTrack->SetDisabled(BTranslationUtils::GetBitmap(B_PNG_FORMAT,"prev_disabled")); + fPrevTrack->MoveTo(fPlay->Frame().right + 10, stopTop); AddChild(fPrevTrack); - fNextTrack = new DrawButton( BRect(0,0,1,1), "NextTrack", BTranslationUtils::GetBitmap(B_PNG_FORMAT,"next_up"), - BTranslationUtils::GetBitmap(B_PNG_FORMAT,"next_down"), new BMessage(M_NEXT_TRACK), - B_FOLLOW_BOTTOM, B_WILL_DRAW); + fNextTrack = new DrawButton(BRect(0,0,1,1), "NextTrack", + BTranslationUtils::GetBitmap(B_PNG_FORMAT,"next_up"), + BTranslationUtils::GetBitmap(B_PNG_FORMAT,"next_down"), + new BMessage(M_NEXT_TRACK), B_FOLLOW_BOTTOM, + B_WILL_DRAW); fNextTrack->ResizeToPreferred(); - fNextTrack->MoveTo(fPrevTrack->Frame().right + 2, Bounds().bottom - 5 - fNextTrack->Frame().Height()); - fNextTrack->SetDisabled(BTranslationUtils::GetBitmap(B_PNG_FORMAT,"next_disabled")); + fNextTrack->MoveTo(fPrevTrack->Frame().right + 2, stopTop); AddChild(fNextTrack); - fRewind = new DoubleShotDrawButton( BRect(0,0,1,1), "Rewind", - BTranslationUtils::GetBitmap(B_PNG_FORMAT,"rew_up"), - BTranslationUtils::GetBitmap(B_PNG_FORMAT,"rew_down"), - new BMessage(M_REWIND), B_FOLLOW_BOTTOM, B_WILL_DRAW); + fRewind = new DoubleShotDrawButton(BRect(0,0,1,1), "Rewind", + BTranslationUtils::GetBitmap(B_PNG_FORMAT,"rew_up"), + BTranslationUtils::GetBitmap(B_PNG_FORMAT,"rew_down"), + new BMessage(M_REWIND), B_FOLLOW_BOTTOM, B_WILL_DRAW); fRewind->ResizeToPreferred(); - fRewind->MoveTo(fNextTrack->Frame().right + 10, Bounds().bottom - 5 - fRewind->Frame().Height()); - fRewind->SetDisabled(BTranslationUtils::GetBitmap(B_PNG_FORMAT,"rew_disabled")); + fRewind->MoveTo(fNextTrack->Frame().right + 10, stopTop); AddChild(fRewind); - fFastFwd = new DoubleShotDrawButton( BRect(0,0,1,1), "FastFwd", - BTranslationUtils::GetBitmap(B_PNG_FORMAT,"ffwd_up"), - BTranslationUtils::GetBitmap(B_PNG_FORMAT,"ffwd_down"), - new BMessage(M_FFWD), B_FOLLOW_BOTTOM, B_WILL_DRAW); + fFastFwd = new DoubleShotDrawButton(BRect(0,0,1,1), "FastFwd", + BTranslationUtils::GetBitmap(B_PNG_FORMAT,"ffwd_up"), + BTranslationUtils::GetBitmap(B_PNG_FORMAT,"ffwd_down"), + new BMessage(M_FFWD), B_FOLLOW_BOTTOM, B_WILL_DRAW); fFastFwd->ResizeToPreferred(); - fFastFwd->MoveTo(fRewind->Frame().right + 2, Bounds().bottom - 5 - fFastFwd->Frame().Height()); - fFastFwd->SetDisabled(BTranslationUtils::GetBitmap(B_PNG_FORMAT,"ffwd_disabled")); + fFastFwd->MoveTo(fRewind->Frame().right + 2, stopTop); AddChild(fFastFwd); - fEject = new DrawButton( BRect(0,0,1,1), "Eject", BTranslationUtils::GetBitmap(B_PNG_FORMAT,"eject_up"), - BTranslationUtils::GetBitmap(B_PNG_FORMAT,"eject_down"), new BMessage(M_EJECT), - B_FOLLOW_BOTTOM, B_WILL_DRAW); - fEject->ResizeToPreferred(); - fEject->MoveTo(fFastFwd->Frame().right + 20, Bounds().bottom - 5 - fEject->Frame().Height()); - fEject->SetDisabled(BTranslationUtils::GetBitmap(B_PNG_FORMAT,"eject_disabled")); - AddChild(fEject); - - fSave = new DrawButton( BRect(0,0,1,1), "Save", BTranslationUtils::GetBitmap(B_PNG_FORMAT,"save_up"), - BTranslationUtils::GetBitmap(B_PNG_FORMAT,"save_down"), new BMessage(M_SAVE), - B_FOLLOW_NONE, B_WILL_DRAW); - fSave->ResizeToPreferred(); - fSave->MoveTo(fEject->Frame().right + 20, Bounds().bottom - 5 - fSave->Frame().Height()); - fSave->SetDisabled(BTranslationUtils::GetBitmap(B_PNG_FORMAT,"save_disabled")); - AddChild(fSave); - fSave->SetEnabled(false); - - fShuffle = new TwoStateDrawButton( BRect(0,0,1,1), "Shuffle", - BTranslationUtils::GetBitmap(B_PNG_FORMAT,"shuffle_up"), - BTranslationUtils::GetBitmap(B_PNG_FORMAT,"shuffle_down"), - BTranslationUtils::GetBitmap(B_PNG_FORMAT,"shuffle_up_on"), - BTranslationUtils::GetBitmap(B_PNG_FORMAT,"shuffle_down_on"), - new BMessage(M_SHUFFLE), B_FOLLOW_NONE, B_WILL_DRAW); - fShuffle->ResizeToPreferred(); - fShuffle->MoveTo(fSave->Frame().right + 2, Bounds().bottom - 5 - fShuffle->Frame().Height()); - AddChild(fShuffle); + r.left = 10; + r.right = fPlay->Frame().right; + r.top = fStop->Frame().bottom + 14; + r.bottom = r.top + kVolumeSliderBitmapHeight - 1.0; + fVolumeSlider = new VolumeSlider(r,"VolumeSlider",0,255, new BMessage(M_SET_VOLUME), + this); + fVolumeSlider->ResizeToPreferred(); + AddChild(fVolumeSlider); fRepeat = new TwoStateDrawButton( BRect(0,0,1,1), "Repeat", BTranslationUtils::GetBitmap(B_PNG_FORMAT,"repeat_up"), @@ -236,99 +207,100 @@ void CDPlayer::BuildGUI(void) BTranslationUtils::GetBitmap(B_PNG_FORMAT,"repeat_down_on"), new BMessage(M_REPEAT), B_FOLLOW_NONE, B_WILL_DRAW); fRepeat->ResizeToPreferred(); - fRepeat->MoveTo(fShuffle->Frame().right + 2, Bounds().bottom - 5 - fRepeat->Frame().Height()); + fRepeat->MoveTo(fPrevTrack->Frame().left, + fVolumeSlider->Frame().top - + ((fRepeat->Frame().Height() - fVolumeSlider->Frame().Height()) / 2)); AddChild(fRepeat); + + fShuffle = new TwoStateDrawButton(BRect(0,0,1,1), "Shuffle", + BTranslationUtils::GetBitmap(B_PNG_FORMAT,"shuffle_up"), + BTranslationUtils::GetBitmap(B_PNG_FORMAT,"shuffle_down"), + BTranslationUtils::GetBitmap(B_PNG_FORMAT,"shuffle_up_on"), + BTranslationUtils::GetBitmap(B_PNG_FORMAT,"shuffle_down_on"), + new BMessage(M_SHUFFLE), B_FOLLOW_NONE, B_WILL_DRAW); + fShuffle->ResizeToPreferred(); + fShuffle->MoveTo(fNextTrack->Frame().left + 2,fRepeat->Frame().top); + AddChild(fShuffle); + + fEject = new DrawButton(BRect(0,0,1,1), "Eject", + BTranslationUtils::GetBitmap(B_PNG_FORMAT,"eject_up"), + BTranslationUtils::GetBitmap(B_PNG_FORMAT,"eject_down"), + new BMessage(M_EJECT), B_FOLLOW_BOTTOM, B_WILL_DRAW); + fEject->ResizeToPreferred(); + fEject->MoveTo(fFastFwd->Frame().left, fShuffle->Frame().top); + AddChild(fEject); + + ResizeTo(fFastFwd->Frame().right + 10, fVolumeSlider->Frame().bottom + 10); } void CDPlayer::MessageReceived(BMessage *msg) { - switch (msg->what) - { - case M_SET_VOLUME: - { + switch (msg->what) { + case M_SET_VOLUME: { fCDDrive.SetVolume(fVolumeSlider->Value()); break; } - case M_STOP: - { - fWindowState=kStopped; + case M_STOP: { + if (fWindowState == kPaused) { + fPlay->SetBitmaps(0, BTranslationUtils::GetBitmap(B_PNG_FORMAT,"play_up"), + BTranslationUtils::GetBitmap(B_PNG_FORMAT,"play_down")); + fPlay->SetState(1); + } + fWindowState = kStopped; fCDDrive.Stop(); break; } - case M_PLAY: - { + case M_PLAY: { // If we are currently playing, then we will be showing // the pause images and will want to switch back to the play images - if(fWindowState==kPlaying) - { - fWindowState=kPaused; + if (fWindowState == kPlaying) { + fWindowState = kPaused; fCDDrive.Pause(); - } - else - if(fWindowState==kPaused) - { - fWindowState=kPlaying; + fPlay->SetBitmaps(0, BTranslationUtils::GetBitmap(B_PNG_FORMAT,"paused_up"), + BTranslationUtils::GetBitmap(B_PNG_FORMAT,"paused_down")); + } else if (fWindowState == kPaused) { + fWindowState = kPlaying; fCDDrive.Resume(); - } - else - { - fWindowState=kPlaying; + fPlay->SetBitmaps(0, BTranslationUtils::GetBitmap(B_PNG_FORMAT,"play_up"), + BTranslationUtils::GetBitmap(B_PNG_FORMAT,"play_down")); + } else { + fWindowState = kPlaying; fCDDrive.Play(fPlayList.GetCurrentTrack()); } break; } - case M_SELECT_TRACK: - { - fPlayList.SetCurrentTrack(fTrackMenu->Value()+1); - fWindowState=kPlaying; - if(!fCDDrive.Play(fPlayList.GetCurrentTrack())) - { - fWindowState=kStopped; - fCDDrive.Stop(); - } - break; - } - case M_EJECT: - { + case M_EJECT: { fCDDrive.Eject(); break; } - case M_NEXT_TRACK: - { + case M_NEXT_TRACK: { int16 next = fPlayList.GetNextTrack(); - if(next <= 0) - { + if (next <= 0) { // force a "wrap around" when possible. This makes it // possible for the user to be able to, for example, jump // back to the first track from the last one with 1 button push next = fPlayList.GetFirstTrack(); } - if(next > 0) - { + if (next > 0) { CDState state = fCDDrive.GetState(); - if(state == kPlaying) - { - while(!fCDDrive.Play(next)) - { + if (state == kPlaying) { + while(!fCDDrive.Play(next)) { next = fPlayList.GetNextTrack(); - if(next<1) - { - fWindowState=kStopped; + if (next < 1) { + fWindowState = kStopped; fCDDrive.Stop(); fPlayList.Rewind(); break; } } } - else - if(state == kPaused) - { + else if (state == kPaused) { fCDDrive.Play(next); fCDDrive.Pause(); - } + } else fPlayList.SetCurrentTrack(next); @@ -337,41 +309,31 @@ CDPlayer::MessageReceived(BMessage *msg) } break; } - case M_PREV_TRACK: - { + case M_PREV_TRACK: { int16 prev = fPlayList.GetPreviousTrack(); - if(prev <= 0) - { + if (prev <= 0) { // force a "wrap around" when possible. This makes it // possible for the user to be able to, for example, jump // back to the first track from the last one with 1 button push prev = fPlayList.GetLastTrack(); } - if(prev > 0) - { + if (prev > 0) { CDState state = fCDDrive.GetState(); - if(state == kPlaying) - { - while(!fCDDrive.Play(prev)) - { + if (state == kPlaying) { + while(!fCDDrive.Play(prev)) { prev = fPlayList.GetPreviousTrack(); - if(prev < 1) - { - fWindowState=kStopped; + if (prev < 1) { + fWindowState = kStopped; fCDDrive.Stop(); fPlayList.Rewind(); break; } } - } - else - if(state == kPaused) - { + } else if (state == kPaused) { fCDDrive.Play(prev); fCDDrive.Pause(); - } - else + } else fPlayList.SetCurrentTrack(prev); // Force an update for better responsiveness @@ -379,72 +341,55 @@ CDPlayer::MessageReceived(BMessage *msg) } break; } - case M_FFWD: - { - if(fFastFwd->Value() == B_CONTROL_ON) + case M_FFWD: { + if (fFastFwd->Value() == B_CONTROL_ON) fCDDrive.StartFastFwd(); else fCDDrive.StopFastFwd(); break; } - case M_REWIND: - { - if(fRewind->Value() == B_CONTROL_ON) + case M_REWIND: { + if (fRewind->Value() == B_CONTROL_ON) fCDDrive.StartRewind(); else fCDDrive.StopRewind(); break; } - case M_SAVE: - { - // TODO: Implement - break; - } - - case M_SHUFFLE: - { - if(fPlayList.IsShuffled()) - { + case M_SHUFFLE: { + if (fPlayList.IsShuffled()) { int16 track = fPlayList.GetCurrentTrack(); fPlayList.SetShuffle(false); fPlayList.SetStartingTrack(track); fPlayList.SetTrackCount(fCDDrive.CountTracks()); fShuffle->SetState(0); - } - else - { + } else { fPlayList.SetTrackCount(fCDDrive.CountTracks()); fPlayList.SetShuffle(true); fShuffle->SetState(1); } break; } - case M_REPEAT: - { - if(fPlayList.IsLoop()) - { + case M_REPEAT: { + if (fPlayList.IsLoop()) { fPlayList.SetLoop(false); fRepeat->SetState(0); - } - else - { + } else { fPlayList.SetLoop(true); fRepeat->SetState(1); } break; } - default: - { + default: { BView::MessageReceived(msg); break; } } } + void CDPlayer::AttachedToWindow() { - fVolumeSlider->SetTarget(this); fStop->SetTarget(this); fPlay->SetTarget(this); fNextTrack->SetTarget(this); @@ -452,38 +397,10 @@ CDPlayer::AttachedToWindow() fFastFwd->SetTarget(this); fRewind->SetTarget(this); fEject->SetTarget(this); - fSave->SetTarget(this); fShuffle->SetTarget(this); fRepeat->SetTarget(this); - fTrackMenu->SetTarget(this); } -void -CDPlayer::FrameResized(float new_width, float new_height) -{ - // We implement this method because there is no resizing mode to split the window's - // width into two and have a box fill each half - - // The boxes are laid out with 5 pixels between the window edge and each box. - // Additionally, 15 pixels of padding are between the two boxes themselves - - float half = (new_width / 2); - - fCDBox->ResizeTo( half - 7, fCDBox->Bounds().Height() ); - fTrackMenu->ResizeTo( half - 7, fTrackMenu->Bounds().Height() ); - fTrackMenu->Invalidate(); - - fTrackBox->MoveTo(half + 8, fTrackBox->Frame().top); - fTrackBox->ResizeTo( Bounds().right - (half + 8) - 5, fTrackBox->Bounds().Height() ); - - fTimeBox->MoveTo(half + 8, fTimeBox->Frame().top); - fTimeBox->ResizeTo( Bounds().right - (half + 8) - 5, fTimeBox->Bounds().Height() ); - - fRepeat->MoveTo(new_width - fRepeat->Bounds().right - 5, fRepeat->Frame().top); - - fShuffle->MoveTo(fRepeat->Frame().left - fShuffle->Bounds().Width() - 2, fShuffle->Frame().top); - fSave->MoveTo(fShuffle->Frame().left - fSave->Bounds().Width() - 2, fSave->Frame().top); -} void CDPlayer::Pulse() @@ -491,127 +408,95 @@ CDPlayer::Pulse() WatchCDState(); } -void CDPlayer::WatchCDState(void) + +void +CDPlayer::WatchCDState(void) { // One watcher function to rule them all // first, watch the one setting independent of having a CD: volume uint8 drivevolume = fCDDrive.GetVolume(); - if(fVolume == drivevolume) - { - fVolume=drivevolume; + if (fVolume == drivevolume) { + fVolume = drivevolume; fVolumeSlider->SetValue(fVolume); } // Second, establish whether or not we have a CD in the drive CDState playstate = fCDDrive.GetState(); - bool internal_track_change=false; + bool internal_track_change = false; - if(playstate == kNoCD) - { + if (playstate == kNoCD) { // Yes, we have no bananas! - if(fWindowState != kNoCD) - { + // Do something only if there is a change in the app's play state + if (fWindowState != kNoCD) { // We have just discovered that we have no bananas fWindowState = kNoCD; // Because we are changing play states, we will need to update the GUI - fCDData.SetDiscID(-1); - fCDTitle->SetText("No CD"); + SetLabel(fCDTitle,"CD drive is empty"); - fCurrentTrack->SetText(""); - fCurrentTrack->SetHighColor(fStopColor); - fCurrentTrack->Invalidate(); - fTrackMenu->SetItemCount(0); - fTrackTime->SetText("Track --:-- / --:--"); - fDiscTime->SetText("Disc --:-- / --:--"); + SetLabel(fCurrentTrack,""); + SetLabel(fTrackTime,"Track: --:-- / --:--"); + SetLabel(fDiscTime,"Disc: --:-- / --:--"); fPlayList.SetTrackCount(0); fPlayList.SetStartingTrack(1); fPlayList.SetCurrentTrack(1); - if(fPlay->GetState()==1) + if (fPlay->GetState() == 1) fPlay->SetState(0); } - else - { - // No change in the app's play state, so do nothing - } return; } -//------------------------------------------------------------------------------------------------ // Now otherwise handle the play state - if(playstate == kStopped) - { - if(fWindowState == kPlaying) - { - internal_track_change=true; + if (playstate == kStopped) { + if (fWindowState == kPlaying) { + internal_track_change = true; // This means that the drive finished playing the song, so get the next one // from the list and play it int16 next = fPlayList.GetNextTrack(); - if(next > 0) + if (next > 0) fCDDrive.Play(next); } - if(fPlay->GetState()==1) - { + if (fPlay->GetState() == 1) fPlay->SetState(0); - fCurrentTrack->SetHighColor(fStopColor); - fCurrentTrack->Invalidate(); - } - } - else - if(playstate == kPlaying) - { - if(fPlay->GetState()==0) + } else if (playstate == kPlaying) { + if (fPlay->GetState() == 0) fPlay->SetState(1); - fCurrentTrack->SetHighColor(fPlayColor); - fCurrentTrack->Invalidate(); - } - else - if(playstate == kPaused) - { + } else if (playstate == kPaused) { fPlay->SetState(0); } -//------------------------------------------------------------------------------------------------ // If we got this far, then there must be a CD in the drive. The next order on the agenda // is to find out which CD it is int32 discid = fCDDrive.GetDiscID(); - bool update_track_gui=false; + bool update_track_gui = false; - if(discid != fCDData.DiscID()) - { + if (discid != fCDData.DiscID()) { update_track_gui = true; // Apparently the disc has changed since we last looked. - if(fCDQuery.CurrentDiscID()!=discid) - { + if (fCDQuery.CurrentDiscID() != discid) fCDQuery.SetToCD(fCDDrive.GetDrivePath()); - } - if(fCDQuery.Ready()) - { + if (fCDQuery.Ready()) { // Note that we only update the CD title for now. We still need a track number // in order to update the display for the selected track - if(fCDQuery.GetData(&fCDData, 1000000)) - { + if (fCDQuery.GetData(&fCDData, 1000000)) { BString display(fCDData.Artist()); display << " - " << fCDData.Album(); - fCDTitle->SetText(display.String()); - } - else - { - fCDTitle->SetText("Audio CD"); + SetLabel(fCDTitle,display.String()); + } else { + SetLabel(fCDTitle,"Audio CD"); } } } -//------------------------------------------------------------------------------------------------ // Now that we know which CD it is, update the track info int16 drivecount = fCDDrive.CountTracks(); int16 drivetrack = fCDDrive.GetTrack(); @@ -619,14 +504,11 @@ void CDPlayer::WatchCDState(void) int16 playlisttrack = fPlayList.GetCurrentTrack(); int16 playlistcount = fPlayList.TrackCount(); - if(playstate == kPlaying) - { - if(playlisttrack != drivetrack) - { + if (playstate == kPlaying) { + if (playlisttrack != drivetrack) { playlisttrack = drivetrack; - if(!internal_track_change) - { + if (!internal_track_change) { // The main thing is that we need to make sure that the playlist and the drive's track // stay in sync. The CD's track may have been changed by an outside source, so if // the drive is playing, check for playlist sync. @@ -634,75 +516,51 @@ void CDPlayer::WatchCDState(void) fPlayList.SetCurrentTrack(drivetrack); } } - update_track_gui=true; - - } - else - { - if(playlistcount != drivecount) - { + update_track_gui = true; + } else { + if (playlistcount != drivecount) { // This happens only when CDs are changed - if(drivecount<0) - { + if (drivecount < 0) { // There is no CD in the drive. The playlist needs to have its track // count set to 0 and it also needs to be rewound. fPlayList.SetStartingTrack(1); fPlayList.SetTrackCount(0); - playlisttrack=1; - playlistcount=0; - } - else - { + playlisttrack = 1; + playlistcount = 0; + } else { // Two possible cases here: playlist is empty or playlist has a different // number of tracks. In either case, the playlist needs to be reinitialized // to the current track data fPlayList.SetStartingTrack(1); fPlayList.SetTrackCount(drivecount); - playlisttrack=fPlayList.GetCurrentTrack(); - playlistcount=drivecount; - } - } - else - { - // CD has not changed, so check for change in tracks - if(playlisttrack != drivetrack) - { - update_track_gui=true; - } - else - { - // do nothing. Everything is hunky-dory + playlisttrack = fPlayList.GetCurrentTrack(); + playlistcount = drivecount; } + } else { + // update only with a track change + if (playlisttrack != drivetrack) + update_track_gui = true; } } - if(update_track_gui) - { + if (update_track_gui) { BString currentTrackName; - if(playlisttrack >= 0) - { + if (playlisttrack >= 0) { int16 whichtrack = playlisttrack; - if(whichtrack == 0) + if (whichtrack == 0) whichtrack++; currentTrackName << "Track " << whichtrack << ": " << fCDData.TrackAt(whichtrack-1); - fCurrentTrack->SetText(currentTrackName.String()); + SetLabel(fCurrentTrack,currentTrackName.String()); - fTrackMenu->SetItemCount(playlistcount); - fTrackMenu->SetValue(playlisttrack-1); - } - else - { - fCurrentTrack->SetText(""); - fTrackMenu->SetItemCount(0); - fTrackMenu->SetValue(1); + } else { + SetLabel(fCurrentTrack,""); } } -//------------------------------------------------------------------------------------------------ // Now update the time info cdaudio_time tracktime; cdaudio_time disctime; @@ -710,63 +568,54 @@ void CDPlayer::WatchCDState(void) cdaudio_time disctotal; char timestring[1024]; - if(fCDDrive.GetTime(tracktime, disctime)) - { + if (fCDDrive.GetTime(tracktime, disctime)) { fCDDrive.GetTimeForDisc(disctotal); - sprintf(timestring,"Disc %ld:%.2ld / %ld:%.2ld",disctime.minutes,disctime.seconds, + sprintf(timestring,"Disc: %ld:%.2ld / %ld:%.2ld",disctime.minutes,disctime.seconds, disctotal.minutes,disctotal.seconds); - fDiscTime->SetText(timestring); + SetLabel(fDiscTime,timestring); fCDDrive.GetTimeForTrack(playlisttrack,tracktotal); - sprintf(timestring,"Track %ld:%.2ld / %ld:%.2ld",tracktime.minutes,tracktime.seconds, + sprintf(timestring,"Track: %ld:%.2ld / %ld:%.2ld",tracktime.minutes,tracktime.seconds, tracktotal.minutes,tracktotal.seconds); - fTrackTime->SetText(timestring); - } - else - { - fTrackTime->SetText("Track --:-- / --:--"); - fDiscTime->SetText("Disc --:-- / --:--"); + SetLabel(fTrackTime,timestring); + } else { + SetLabel(fTrackTime,"Track: --:-- / --:--"); + SetLabel(fDiscTime,"Disc: --:-- / --:--"); } } -class CDPlayerWindow : public BWindow -{ -public: - CDPlayerWindow(void); - bool QuitRequested(void); -}; CDPlayerWindow::CDPlayerWindow(void) - : BWindow(BRect (100, 100, 610, 200), "CD Player", B_TITLED_WINDOW, B_NOT_V_RESIZABLE | - B_NOT_ZOOMABLE | B_ASYNCHRONOUS_CONTROLS) + : BWindow(BRect (100, 100, 405, 280), "CD Player", B_TITLED_WINDOW, B_NOT_RESIZABLE | + B_NOT_ZOOMABLE | B_ASYNCHRONOUS_CONTROLS) { - float wmin,wmax,hmin,hmax; - - GetSizeLimits(&wmin,&wmax,&hmin,&hmax); - wmin=510; - hmin=100; - SetSizeLimits(wmin,wmax,hmin,hmax); } -bool CDPlayerWindow::QuitRequested(void) + +bool +CDPlayerWindow::QuitRequested(void) { be_app->PostMessage(B_QUIT_REQUESTED); return true; } + CDPlayerApplication::CDPlayerApplication() - : BApplication("application/x-vnd.Haiku-CDPlayer") + : BApplication("application/x-vnd.Haiku-CDPlayer") { BWindow *window = new CDPlayerWindow(); - BView *button = new CDPlayer(window->Bounds(), "CD"); - window->AddChild(button); + BView *view = new CDPlayer(window->Bounds(), "CD"); + window->ResizeTo(view->Bounds().Width(), view->Bounds().Height()); + window->AddChild(view); window->Show(); } + int main(int, char **argv) { - (new CDPlayerApplication())->Run(); + CDPlayerApplication app; + app.Run(); return 0; } diff --git a/src/apps/cdplayer/CDPlayer.h b/src/apps/cdplayer/CDPlayer.h index 5f6286f69b..5e63d75119 100644 --- a/src/apps/cdplayer/CDPlayer.h +++ b/src/apps/cdplayer/CDPlayer.h @@ -12,14 +12,13 @@ #include #include #include -#include #include #include -#include "TrackMenu.h" #include "CDAudioDevice.h" #include "CDDBSupport.h" #include "PlayList.h" +#include "VolumeSlider.h" class DrawButton; class DoubleShotDrawButton; @@ -38,7 +37,6 @@ public: virtual void AttachedToWindow(); virtual void Pulse(); - virtual void FrameResized(float new_width, float new_height); virtual void MessageReceived(BMessage *); private: @@ -47,8 +45,7 @@ private: DrawButton *fStop, *fNextTrack, *fPrevTrack, - *fEject, - *fSave; + *fEject; DoubleShotDrawButton *fFastFwd, @@ -58,7 +55,7 @@ private: *fRepeat, *fPlay; - BSlider *fVolumeSlider; + VolumeSlider *fVolumeSlider; BStringView *fCDTitle, *fCurrentTrack, @@ -68,8 +65,6 @@ private: BBox *fCDBox, *fTrackBox, *fTimeBox; - - TrackMenu *fTrackMenu; CDState fCDState; diff --git a/src/apps/cdplayer/CDPlayer.rdef b/src/apps/cdplayer/CDPlayer.rdef index 5ba5386fbd..92040419e4 100644 --- a/src/apps/cdplayer/CDPlayer.rdef +++ b/src/apps/cdplayer/CDPlayer.rdef @@ -1,6 +1,7 @@ - resource app_signature "application/x-vnd.Haiku-CDPlayer"; +resource app_flags B_SINGLE_LAUNCH; + resource app_version { major = 1, middle = 0, @@ -16,8 +17,6 @@ resource app_version { long_info = "CDPlayer ©2005-2007 Haiku, Inc." }; -resource app_flags B_SINGLE_LAUNCH; - resource large_icon { $"FFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" $"FFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" @@ -73,376 +72,1186 @@ resource mini_icon { }; resource(1, "play_up") #'PNG ' array { - $"89504E470D0A1A0A0000000D494844520000002300000013080000000148CFDB" - $"BE000000096F464673000000000000000000DA2AB6CE00000009704859730000" - $"0FA000000FA001A06A8C770000009549444154789C8591BB11C5200C04578C4A" - $"51AD8E5FE0F22076074E79013F83E5E112E058A10324030492A4243901920122" - $"448980E484C502351504104DCD0B8059E77A45AC151DAC32AD6343A60ED62695" - $"EA88AF1EA84BAF7B367E613979B4335B9DE10DA765D065ED657C547D4AF2B521" - $"8E53E1DE40230F94DB396FA5ABE1706E66B369F93AC7E9A69BFD17F3F1B7CAE1" - $"6F3CF407D134242111EC44A10000000049454E44AE426082" + $"89504E470D0A1A0A0000000D4948445200000032000000180806000000B808AE" + $"E10000058C494441545885DD97CD4F135B18C67F33D36FA8B4298552D028A049" + $"054D8C2E3429BA7767A2D1F8471813E35ED7FE31EEDCE94AD3A80B100D1A455A" + $"4B11690B96D6997666CECCB98B66062A55C315BDC97D926EDE994CDFE73CEFC7" + $"739477EFDE49FE0750FFEB040E0A819F3D945262DB369D4E07C330304D13DBB6" + $"FD677F128AA21008040887C3C46231A2D128C160104551FABEDF9788E338E8BA" + $"4EB55A657575954AA542AD56A3D96C625916AEEBFE5112009AA611894488C7E3" + $"A4D369B2D92CD96C96743A4D3C1E271008F4905276F7889412D334F9FCF933F3" + $"F3F3BC7CF992F5F575B2D92C333333249349464747FF3889DDF9542A15B6B7B7" + $"29168B44221172B91CB3B3B38C8D8D118D465155752F914EA7C3FBF7EF79FCF8" + $"310B0B0B5CBE7C992B57AE30313181EBBAB8AE8B94D2FFFD0DEC3EF562B1C8D3" + $"A74F310C8353A74E71E4C81106060650146587886559ACACACF0E8D123CAE532" + $"F7EFDFE7F8F1E3D8B68D6DDB0821705DD7EF1155557F58AF074D4451949EFF2B" + $"954A2C2D2D71F4E851C6C6C60887C3DD1E9152B2B9B949A150E0EDDBB73C78F0" + $"80C9C949BFC18510BE02AF5EBDA2582C128FC7999E9E2693C9100E87F7955CB9" + $"5C666969898D8D0D2CCB229D4E333B3B8B94928F1F3FEE894F4C4C1089445055" + $"155555191F1F27100850A954FC7E090098A649B15864717191DBB76F33353545" + $"BBDDC6344D1CC7E949A2D16860DB36F57ADD27343535C5D4D414870E1D42D3B4" + $"5F12A9D7EBD46A3592C92442089ACD26F3F3F31C3B76AC6F7C727212C02F6D45" + $"514824127CFBF60D2925AEEB7689E8BACEEAEA2AD96C96B9B9394CD3EC4B0220" + $"1289D06C36D9DCDC24140A110C0679FDFA358B8B8B64B35972B9DC2F55D2340D" + $"C771585E5E666B6B8B8D8D0D2E5CB840341AED1B0F87C37BC6BE6DDB341A0DD2" + $"E934A150A84BC4B22C5AAD16F97C1EDBB6B12CAB2F090F8EE3B0B5B5C5F6F636" + $"A15088E1E161464747A956ABBEDC3F534951145CD7A5D16850AFD7FD91AEAA6A" + $"DFF8F7BD28A5C4711C5AAD16EBEBEB9C387162A74714452193C9E038CE4F497C" + $"FF41D334595B5BE3CB972FC4E3713299CCBF5269BF90522284A05AAD92CBE576" + $"16A2A669048341BF0EF70BC77168341A3D2A45A351745D27168B313E3E7E6024" + $"3C4829D1751D5555BB44144541D3341445F9EDFDE095DDA74F9F300C83B9B939" + $"52A914D168D4AFF38380EBBA0821104274ED0C74D50887C3BF45C4B22C745DA7" + $"D56A118FC7B979F32657AF5E25994C62591696651D1809002104BAAEFBFE2B00" + $"DD49944AA5B02C6B5F5BDB755DDAED36AD560B5DD7397FFE3C376EDC209FCF23" + $"84C0344D9ACDE681BB002925866150AFD7999C9CDC21128BC5989898C0300C1C" + $"C7F1C9FC68733B8EC3DADA1A9B9B9B0C0C0C70FDFA75AE5DBBE61F46B3D9FCE9" + $"C0482412BE8F6AB7DBBE5AC964B26FFCFB3CBC01532A95B878F1E20E914020C0" + $"F8F838E572995AADE6DB67AFDC766366668667CF9E313D3DCDDDBB77B974E9D2" + $"BE4FFFF0E1C3CCCECEF6D4B8E79DFAC577430841A552E1C58B171886C1D9B367" + $"711CA7D734EABACED7AF5FA956AB24120946464688C562BEC384AEC712423034" + $"348410E2973BA71FBCE1120C06FD6F7BCD2BA5DC13F7FC9E699A94CB659E3C79" + $"42A150E0DEBD7B9C397306C3307AEF238383830C0E0ED26EB759585860787898" + $"6C36CBF0F030B158CC1FCFAAAAD26AB5F695FC6E783B4008D1F7B917F7EC8777" + $"C01F3E7CA05028B0BCBCCCAD5BB73877EE1CED76BBABDE6E453C97A9AA2AC562" + $"91870F1F228460646484542A452412F1DFFB1BF09ABA56ABB1B2B242A9542293" + $"C970E7CE1D4E9E3C49A7D3A1D3E9EC25E225A9699ABF579E3F7F4EA150E0CD9B" + $"37BFA5C2EF60686888D3A74F333737473E9FC7719C1E3F28A5DC4B047694F1EA" + $"381008A0695A4FAFFC2D78EA7B65E67941DBB67BAEDC7DEFEC9E29735D17C771" + $"7C12DE25E76FC29B82DE0DD5CBEB7BFC03C1F89BC3576D54330000000049454E" + $"44AE426082" }; resource(2, "play_down") #'PNG ' array { - $"89504E470D0A1A0A0000000D49484452000000230000001308060000001AA3B4" - $"F40000008D49444154789CCDD6C10904210C40D13F8B4DD84E4AB00E2BB038CB" - $"B18DEC6109CC6D5123E69F151E6AC0075002A4AA24805AEB55486B0DE0870128" - $"A55CC3589FDB8077D3181141444E58D64FE6046AFB9A3C516E6FC603E5FE8077" - $"50A1A629FD5F3257EF7D79AF1B6607616D633C10D632C613614D634E20AC50D3" - $"140AF3003AC6B8ED20E74C520DF1D103E00B489821B04B2C9C09000000004945" + $"89504E470D0A1A0A0000000D4948445200000032000000180806000000B808AE" + $"E10000055A494441545885DD98CB4F135D18879F33D7DEA9B4C52276869810A5" + $"6D4A8C89C685A0511259E025FE31AE8D6B5C98B8F02F70A92B638C3B5C617445" + $"4C415262C1404BA1B6D80EBD4CFB2DC80C2255BC7D7CC9F7262769DEB4E79C67" + $"DEDF7B998A6C36DBE57F60D27F7D81BF65CA615F10422084409224F7F35159B7" + $"DB7557A7D3A1DBFDBE787A82381797651945515014E500C88F36FD5BE640D8B6" + $"BD6FF5823A002284405555745D47D3346459666D6D8DF9F979CAE532EBEBEB47" + $"060270F2E44942A110E9749A70384CBBDDA6DD6EBB403D412449425555BC5E2F" + $"9AA6F1E2C50B9E3E7D4A3E9F47D334229108C160108FC78324FDBBE9E5442397" + $"CBF1E5CB171A8D06C3C3C34C4D4D914EA7DD07E9C008A76A0921D0340DAFD74B" + $"AD56E3DEBD7B2C2C2C904AA548A5529C3871C2855014E5C8A4D56AB5B02C8B6A" + $"B54AA150A0542A619A2657AE5C41966517D8055114059FCF871082BB77EFB2B1" + $"B1C1B56BD7181B1B231A8DA2EB3A42083C1E0F9665E1F7FB69369BD8B6FDCB50" + $"AAAABAB205B06D9B66B3E9CAFA5BBF23A75AADC6C6C606EBEBEB84422192C924" + $"8AB22B2A05F624A5280A333333944A25A6A7A73977EE1CA150685FA5124270FF" + $"FE7D2CCBE2E6CD9B4C4C4C00D06AB5F669F64726CB324F9E3CE1E5CB9700689A" + $"C6D5AB57B97DFB764FFFF5EBD7916599502884D7EB25140AB1B5B5453E9F2714" + $"0A11894476FB8810025996C966B3CCCDCD313E3ECED8D8D80108D8D5A4A228E4" + $"F3791E3C78C09D3B7778FCF831A55209AFD78BA2288796E84EA743B158647373" + $"935AAD866559140A05F2F97C4F7F2E97DB17CDBEBE3E4CD364707090D5D55536" + $"37377723E21CFCF6ED5B464747DD0AF1BD0B0921D0759D6030886DDBBC7AF58A" + $"67CF9E914C26B971E3C64F4749D334745D27168B016059D60FFD5FC34892E4AE" + $"4F9F3EED75F64EA743AD56C3300CFAFBFB5D9D1E66B22C130804387EFC386B6B" + $"6BBF1DA55F31A79FC9B28CC7E3A15028EC95DF6EB78B2CCB048341344DFBADCD" + $"755D47D775374ACF9F3F2793C9303939C9D9B3677F6BDFC3CE9465994AA5D2BB" + $"8FFC498F505515C330181E1E261A8D52AD56C9E7F3C4E3710CC3F8EB91E976BB" + $"349BCD5D106796714ADFEF1C160E87310C83442281A669ACACAC303737C7C0C0" + $"00E9749A4020F0AFC8CBE9F2FB40C2E1F02F6DA6AA2A83838398A6492C16637B" + $"7B9BC5C5456CDB66646484CB972F6318C65F9794032249125B5B5B74BBDD5D10" + $"A7B20C0D0D5128140EDD4496654E9D3A452693C1E3F1B0B2B2C29B376F88C562" + $"5CBC7891D3A74F138944BEFB7BA784472211128904C16010455168341A3DFDDF" + $"563E21843BCC7EF8F0015DD7F722D26EB7E9EFEFA75EAFBBF2EAD5B11B8D065E" + $"AF17D334595A5AA2D56A313232C2F8F838A669FED4D3DFD9D9211E8FBB13B5A2" + $"28349B4DEAF57A4FFFB70DD9196A2B950AEFDEBD637A7A7A2FD9DBED36F57ADD" + $"9D7A25497225F7B56D6F6F73E9D22572B91C172E5CE0CC99333F7CFADF8B4826" + $"936179799972B98CAAAA1C3B768C818101E2F1F8017F3C1E07768B91A228EE50" + $"FBE8D12357DAEEAC65DB36954A858F1F3F12080448A5520821E8743AEE720634" + $"E7323FDB6BFEC4BEEE194EA3545595870F1FF2FAF56B6EDDBAC5F9F3E7F72222" + $"49127EBF9F68344A369B65797999C9C94982C1E03E80A33607C2C98962B1C8CC" + $"CC0C4B4B4B4C4D4D91C964F0FBFD7B1181DD5C69341A148B45DEBF7FCFC2C202" + $"8661904EA7492693F4F5F5FD2720D56A95F9F979666767999D9D259148303131" + $"41269371A710F1EDBF284EE257AB55565757C966B32C2E2EB2BABACACECECE91" + $"8338A6691AA669924EA7191D1D656868089FCFE736EF03208E392F35B55A8D72" + $"B9CCE7CF9FB12C8B76BB7DA4004E950A040284C361C2E1303E9FEF407EFE0305" + $"E18E28D5D1C2910000000049454E44AE426082" +}; + +resource(3, "stop_up") #'PNG ' array { + $"89504E470D0A1A0A0000000D49484452000000280000001808060000008884BF" + $"C00000040A494441544889CD974D4B1B5D1886AF331F4E342A1A4DACA0A52014" + $"51514144B70177C17FE0C29FE02FE84F125C883B5DD82E5A2A82204610C40F24" + $"895131D19993C939335D84999A6AACD0F0FADE90CDCC49E6CA7D9EE73ECF887C" + $"3E1FF23F96F1DE007F93D5EA86D61A2925AEEBE2791EBEEF031086FF6EB81082" + $"8E8E0E92C924C96412DBB6314DF36D805A6BAAD52A9797979C9C9C707E7ECEDD" + $"DD1DB55A8D2008FE190EC0344D7A7A7A181A1A627474944F9F3E91C964482693" + $"CF40C5D31A544A512814F8F9F327BBBBBB542A15E6E6E6F8F8F1238383836D81" + $"83DFBB70727242A954C2711C666767F9FCF933FDFDFD4D90B1834110707D7DCD" + $"D7AF5FD9DADA2297CBB1BABA4A229140294510048461D8962D8E94CD6609C390" + $"D3D3537EFCF8412291C0B66D7A7A7A308C467BC40E562A15BE7FFFCEFAFA3A2B" + $"2B2B2C2F2FE3FB3E52CA2640002925C562916AB54ABD5E6F09D0D9D9492693A1" + $"B7B717CB6AAE262144FC01A8D56A1C1D1D313838483A9DA6A3A3032144C341AD" + $"35854281BDBD3D262626C8E572789EC7E3E323F57AFD996BA552896FDFBE21A5" + $"7C15309148303232C2C2C2028EE3BCB8E629642A952208029452589685699A0D" + $"40292567676794CB65D6D6D6F07D1FD7755F848BFE90D69A818101EEEFEF5B02" + $"160A05A49464B359B4D62FAE795A366118A2B56EEA6A0BC0755D8AC522D3D3D3" + $"A452A9D89956F5669A268661707C7CCCD9D9594B402925333333D8B6DD123092" + $"1002C330C8E7F38C8D8D018DBE30A0D1BDBEEF33313181528A7ABDDEB64879AB" + $"C2302408026E6E6E705D17C3301AD0D14D21047D7D7D68ADFF73B8484110E0FB" + $"3E954AA519101A165B96D5D4ADEF21AD35F57A3D8E991830BAF09E70D136470C" + $"B1838661E0384EDCEEEF25AD35B55AAD297A0C68E4556F6F6F1CC8EFA12008F0" + $"3C8F6AB54A5757577CDD8A003F7CF8C0C3C3C39B6AB0B3B3936432C9E9E929D5" + $"6AB5E5BA28AADEB233524AAEAEAEB8BDBD259D4E038D2DB7001CC761787898CB" + $"CB4B945271784675F9A7FAFAFA989A9AE2FAFAFAD5934408C1E4E4E45F018320" + $"A0542A91CFE7C9643274777723A5FC0D2884209D4E53ABD5B8BABAC2308C7856" + $"7B095208C1D8D818E3E3E3D8B6DDF2C151D147B3642BB872B9CCFEFE3E070707" + $"7CF9F225FE1E3C99664CD3646464844AA5C2E1E1218661303434442A95C2719C" + $"26D0300C514AA194C2F3BC57DD790DCCF33C8AC5227B7B7BECECEC90CD66999B" + $"9BC3F3BCF8E4699A07A3EEB9BFBF676363032925A9548AAEAE2E4CD36C6B97FB" + $"BE4FB95C269FCF737171C1D2D2126B6B6B68AD715D17A5D4734068448E699A68" + $"ADD9DEDE6673739342A1D036B03F353F3F4F2E9763717111DFF7F13CAF690E78" + $"0618B9685916B66DC79345BB33F2E9EF45F9E7FB7EDCA4919EBD93441D1C0D0C" + $"4AA9F85C6CB7A26745E3DB4B19FC0BDC9765EE564806600000000049454E44AE" + $"426082" +}; + +resource(4, "stop_down") #'PNG ' array { + $"89504E470D0A1A0A0000000D49484452000000280000001808060000008884BF" + $"C0000003D8494441544889CD974D4BF34C1486EF4966DA249AD86A6A6A288814" + $"A90852F003B41415FF82E0CF72256EC47F2076A73B7956E22250104451107563" + $"15BF522D98E6639E8524B6D5DA07ACAFEFBD69CA0C996BCE99B9CF09393939E1" + $"F81F4BF86D804EA2ED0608212084401084E8B99BE29C230882E8F79F0143284A" + $"291863A094360172DE9D13110401822080E779F03C0FBEEF7F0ADA04480801A5" + $"14922421168BC1F77D589685CBCB4BDCDEDE76151000B2D92CC6C6C6609A265C" + $"D78D201BD7208D9784520A5996214912767676B0B9B9895AAD065DD7914C2611" + $"8FC7218AE2B7C138E7F03C0FAFAFAF701C07B95C0E2B2B2BD034ED43CA234041" + $"1022B88D8D0D944A25E4F379E4F379188601455140E95BC04551443C1E8FFEB7" + $"531004701C079EE77D887C38F6F4F484BBBB3B00C0E2E22254550521249A4F81" + $"F7D432C66059164AA512969696502C1661180662B158D3CB1963B06D1BE572B9" + $"63CA0DC3C0E8E868DB71DFF7F1F2F2828787075C5D5D41D775E8BA1E65AA09B0" + $"5EAF637D7D1DD3D3D328140A304DF3D3941242707C7C8CD5D5D50FF08D922409" + $"737373505515E974FAD339A22842555530C6E0380E9E9F9F51AFD7A3B529F096" + $"5E4110707070004A29262727914EA7DB9E37CE3938E7D0340D7D7D7D6D010706" + $"062049122A954A5BC070FD783C0E4551A0691A2CCB82AAAA482412EF46CD39C7" + $"F9F93946464690C964BE8CCC4F48100488A208599661DB361E1F1FC1396F0674" + $"1C07A9540A8AA274DD983B29F4DA306BD56A15BEEF3703863BE8743B7F1A9273" + $"8E5AAD06CFF39A6B717859FEEBE8B532F8BE0FCFF31004C11B6078E845518420" + $"FC6EFF400889E0A23318BA776892BFA5D04DAAD56A044B4340DFF731343484EB" + $"EBEB8EE61BEEAEB7B717B95CAEEDBCD0DF7CDFFF27B8F078552A158C8F8FBFFB" + $"601841D334A3B2D3586E5AE5BA2E186328140A5FD6665114E1384EC7AC1042C0" + $"18432C16C3E9E929EAF53A344D03A5B4398200A0EB7AD4038663ADE29C2393C9" + $"80738E4AA5D276614A291289044CD3FC12AEB183DADEDE866118482693EF110C" + $"A3E5BA2E822000630CA22846916DEDD344518C6AE6772408021863906519B22C" + $"636F6F0F676767585E5E46229178DB64E3A29224811002CBB2303333F36519FB" + $"AE42538EC562608CE1CF9F3F585B5BC3FCFC3C72B91C64596E0624844092240C" + $"0E0EC2B66D6C6D6D61787818B3B3B3300CE347DA7E4110502E97B1BBBB8BFDFD" + $"7D2C2C2CA0582C22954A4576475ABFEA7CDF47B55AC5C5C5050E0F0F71747484" + $"9B9B9BAE82B54266B3594C4D4D6162620286618031168D7F0004DEEBB26DDBB8" + $"BFBF876DDB705DB7ABED7E78397A7A7A904C26D1DFDF0F45513E148ABF65E2B1" + $"4C85DC674C0000000049454E44AE426082" +}; + +resource(5, "play_down_on") #'PNG ' array { + $"89504E470D0A1A0A0000000D49484452000000320000001808030000008FD65E" + $"D30000000467414D410000AFC837058AE90000001974455874536F6674776172" + $"650041646F626520496D616765526561647971C9653C00000234504C5445DADA" + $"DA74747490BA88D9D9D9767676565656DCDCDCE4E4E4D7D7D7404040DDDDDDDB" + $"DBDBD5D5D5E6E6E6E3E3E3E8E8E8B7B7B7AAAAAADFDFDFB3B3B3667962D6D6D6" + $"E1E1E1E0E0E04A4A4AD2D2D282A87B7A7A7AA9A9A99D9D9DE7E7E7B4B4B4EAEA" + $"EA414141A2A2A2D0D0D0CCCCCC444444E5E5E58D8D8D959595C5C5C5C3C3C3A6" + $"A6A69E9E9E909090CFCFCF7B7B7BCBCBCBEEEEEEB1B1B18A8A8A888888656565" + $"C1C1C1969696BEBEBEB6B6B6818181393939ABABABBCBCBC8C8C8C8FB987B0B0" + $"B0BBBBBB313131A7A7A7A1C59B939393B9B9B95E5E5EEDEDED89B18193BC8B96" + $"9E959F9F9F727D6FE5E5E4546A4F67856175976E3C3C3C5D5D5D3D3D3D6A6A6A" + $"919191C3C6C27979798484849A9A9A787878808080C6C6C6777777878787D3D3" + $"D3B5B5B5535353565D5581A67A74966DCECFCD5C5C5C989898606E5DC2C2C2EF" + $"EFEFA8A8A8CECECEBDBDBDCACACA69696985A07F97A9944848489B9B9B878987" + $"8F8F8F3638355050508B8B8B2D2D2D454545494949DADCDA7373736D82693335" + $"337E7E7E8E8E8EB6CBB298A69551515171896C6D6D6D7272725B5B5B3F3F3FB4" + $"D0AFC0C0C08DB685C0D8BB616161B4C9B1BCD5B76785626E766C5B6A58D4D4D4" + $"98A8958989899292925B75567883762C2C2C9AA996ABCBA45B6C58BABABAD1D1" + $"D1C7C7C754545499C092AFAFAF677963626262666666A1C49ABFD7BBB4D0AE54" + $"5A52BBD5B6768174EBEBEB949494555555C9C9C9676767BFBFBFE9E9E97F7F7F" + $"ECECECE2E2E2DEDEDE373737999999D8D8D812C74088000002A14944415478DA" + $"62D84D3200082006D2B50004105C0B33031BD70EDC808B8D9B19AA122080205A" + $"98B9776CE7E5DFA2A0B00517E0976317DB01D1051040602DCC3BD4D619F2C864" + $"C4C46CC5094A6478D4C4B840CA0102088C85F80DB537EC0CA90836DD84032C37" + $"0D6E950815166203AA070820206216E2E772DFB94CDD593ECF6C332E60E1E6A0" + $"541967CEC1C0BC1B2080805AD878E5DC6BD46D953976F3D66E114709422E3E5E" + $"5E3EAE1D609299273F51D68687991920801876338829C449986FE400AAE0CF9C" + $"E2EDA7C686D0226EACAA2AA1BE034CF2ECDE9DA06524A0B91B2080187673B367" + $"299A688274EC665F9A1AE0EF1BCE0FB76A07A393B5224B0F981406F225959565" + $"3401028861371B7B59A83C0F5805BB8894BD67E0CC7970AB7630EEE464651100" + $"9382403E0733B78D20400001B56C8F3489DD0DD3C2C4C4D49B02B70A5DCB6E86" + $"1DC2AE000104D42216AFA182AC85890968D5A4B696346C5A842C23010208A465" + $"7A542EAA162F97EE95D326EB8862D1229ED808104040EF0B35C9EA216B593C77" + $"E284B50D418CF2586CE11633D2070820602073E9E820B478B9ACEA9BB3BA6A91" + $"B90A36EFEF66E3F391060820500270538269A95FB1A6795679509D3C3490D9A2" + $"2536314A3B80C91C5062149793B602082086DD1CA2064B24A109BBB0287976D2" + $"7A1578544ED595D6DF1AA10D266540C9576E77B106400001B5489A59EEE60647" + $"DEE6D2A40E61E4042369216B17A6640B26CD80212CE7D1DE2F0F104040A53CB1" + $"CEC23B84B8809941545412675E6466E0E253C8B6AAD630000820A0168E058EAE" + $"3338D8F9B6E3057CBC0A86BB4D158DB544010208E4200EE5F9BA05F1C25CDBF0" + $"010F2161166B560D2D9EDD000104F6034782A68C5567D74EFC2024DDC4484574" + $"F76E800082A6590EC98596DAB2BBF080281F1B470370EA05083000046D3BA66A" + $"AC00DE0000000049454E44AE426082" +}; + +resource(6, "play_up_on") #'PNG ' array { + $"89504E470D0A1A0A0000000D49484452000000320000001808030000008FD65E" + $"D30000000467414D410000AFC837058AE90000001974455874536F6674776172" + $"650041646F626520496D616765526561647971C9653C00000237504C5445DEDE" + $"DE90BA88747474767676D7D7D7565656DADADA404040D9D9D9787878E1E1E1B4" + $"B4B4E3E3E3D0D0D0DBDBDBE8E8E8D2D2D2CACACADDDDDDAAAAAA9AC092E0E0E0" + $"DFDFDF8BA287EDEDEDAFAFAFB7B7B7EAEAEAE4E4E4CCCCCCA1A1A1BFBFBFBCBC" + $"BC9797977B7B7B9E9E9E9898986666667D7D7DD6D6D6A9A9A9888888D5D5D5BE" + $"BEBEB9B9B93D3D3DAEAEAEC5C5C56D6D6DC9C9C9868686E5E5E5EBEBEB545454" + $"818181757575B1B1B1909090676767CDCDCDD4D4D47979798D8D8DB6B6B6C8C8" + $"C87171716B6B6B6060605B5B5B7A7A7AC2C2C27373738A8A8AA6A6A6A7C8A1C1" + $"C1C12B2B2B3131318383835256517F8E7CADADAD94BD8D4F504FC0C0C0B2B2B2" + $"8CB584707070E9E9E9949494667064F0F0F0575757BABABA9F9F9FB8B8B8A0C4" + $"996E6E6E3A3A3AEEEEEEC6C6C6A9C5A44C62478F8F8F828282B0B0B0C3C3C387" + $"8787686868515151484848768E7142513FCECECE5D6B5AC7C7C78585855D5F5C" + $"698863464646F2F2F2789B71779A71D7D9D77C7C7CD8DAD8D2D3D2789B724F4F" + $"4F9696968EA589566054A6AAA57980785A745599C0924444447777779C9C9C9C" + $"B098D5D7D5C4C4C4597354535353919F8E8BA786A7AEA5777E76A5A5A5BDBDBD" + $"63636395959597AC93A3A3A349494952525284AA7CA2A7A1A4C69DADCCA7A5C7" + $"9E88A2844A4A4AF3F3F3B5B5B542553E43573F9A9A9A8B8B8B84848493939392" + $"BB8A5F5F5FD3D3D398AA955858588E8E8E41503E5F6D5D505050B3B3B3E7E7E7" + $"A4A4A4ECECECDCDCDCE2E2E2373737999999D8D8D847D55BE8000002A0494441" + $"5478DA62D8433200082006D2B50004104C0B8B8060880E37F7161C803B5EDE50" + $"8005A2142080205AB404B9159554D7CFDE8C0BF4BBE4A8295AA4AC05E9020820" + $"9016165EFB92CDBB726BECB6E10633B33963D668725BABEFD9031040202DBCC2" + $"56BBCC0492B74B47F06FC509F8F9F98B5798E9C9B2EC010820A016814CD53CC3" + $"E4081951062D75B61DB8801083281797B7A2142F0B400031EC6191EFD4753091" + $"11E2D8B36765A995B22072E0C45ADABA6B726F0193BC7B80E6E96BF4DA000410" + $"C31E5EE55981263BF9402A0CD6754705AB4909C0B5782A7918B9FA6D0393405F" + $"70B069E96409000410C31E7DB369D232601D7B389BE679A506F83BC3ADD2E054" + $"35D5650E049342403E07AF46E11E800062D823CF14670C8D1D4E7111C6A084F9" + $"33E0560933B3B2EF629204936035D65D4BF8000288618FB6B914C459102D8C8C" + $"ABDBE156616891558963000820A0164E055136642D401094B060E2843A6C5A14" + $"2345010208E830A5A962685AC2AAFA966D9AB4138B16C155E95C0001C4B0C72D" + $"439B0145CB9CB2B482D6DA687E062C5A5234ED76020410C31EC1E9F1A038816A" + $"09AB6F5BDADC5221C1C386CDFB2C0A4C8D3C0001C4B0C7C6428F6D0F2491722E" + $"AC4CDB38B9076C01242ACD937C7D9842C0A4182869C99986CA0004105052564F" + $"DF9017ACC73BBF68EE62A805902C21E7689028C70026815A6CB89D1619EF0408" + $"209079D60A9EF6B2C0C8DDC3572DC18F92E7387670F1F0700981C91D2CBCA1E1" + $"BBA4F819000208A48283638BD1726E075816C20A58B40475225D764D31D9C906" + $"1040602D7C420A4E566A962A2ABB7102950DB631BB1ADCB6CBECD80310400C10" + $"FBC54435C23B76E105E54C1612D23C3B38F6000410C4E91C7C0C3C5BA5B7E303" + $"1212DBA58DC1710E104030DF02358972EDC403B8B8C4842041091060004E583C" + $"EFDBF802160000000049454E44AE426082" +}; + +resource(7, "eject_down") #'PNG ' array { + $"89504E470D0A1A0A0000000D494844520000002C000000180803000000B6B1EF" + $"880000000467414D410000AFC837058AE90000001974455874536F6674776172" + $"650041646F626520496D616765526561647971C9653C000001A7504C5445B8B8" + $"B8646464404040DADADADBDBDB7C7C7CDDDDDDD1D1D1BCBCBC575757D9D9D9D7" + $"D7D7D5D5D5919191B4B4B4222222A2A2A2D6D6D6C5C5C5D4D4D4CFCFCFE1E1E1" + $"828282CECECED2D2D24D4D4DDFDFDFCBCBCB909090E4E4E4E2E2E2E8E8E8B5B5" + $"B5A9A9A9BABABACACACA939393D3D3D3C8C8C86B6B6B838383353535EAEAEA9D" + $"9D9DC6C6C67A7A7A989898C7C7C7BDBDBDCCCCCCAEAEAE6A6A6A7D7D7DE3E3E3" + $"7F7F7FAFAFAF6363634A4A4AB0B0B0292929A1A1A1E6E6E6E5E5E56161613838" + $"38787878C4C4C4B7B7B7656565757575A4A4A4EBEBEBCDCDCDA8A8A86969698A" + $"8A8A9E9E9E3B3B3B5858584F4F4FB2B2B2C3C3C3272727868686BBBBBB8E8E8E" + $"A5A5A55D5D5D3131314444446868689696962D2D2D9F9F9FE0E0E0707070ACAC" + $"AC505050B9B9B9B6B6B6565656BFBFBF6E6E6E3C3C3C6C6C6C5F5F5F8585858D" + $"8D8DC1C1C1AAAAAAC9C9C9C2C2C2B3B3B33A3A3A1D1D1D464646878787A7A7A7" + $"949494414141ABABAB3939392A2A2A515151494949424242A3A3A35B5B5B8989" + $"89606060EDEDEDADADADC0C0C0DEDEDE7E7E7E373737DCDCDCE9E9E9D8D8D899" + $"9999D0D0D0B5C997F6000002514944415478DA62E8220100041003298A010208" + $"A6988BB983AD153B60EB60E6822802082088626636515BF94E2DAD4E6C40DE4E" + $"4E8A05AC1C2080C08A59443B9B581465CCCCDAB002812453513666A03A800002" + $"2966317567CFD07490ACB767840163AF2818D3229353D24F910D643640000115" + $"33CBB9F3A5D7B0FA18F131C04088B455BE128C936C5E27D3D6CDCDC5D5051040" + $"40C5ADF22D95160281E23D08C06C10A4208CE08AE8F3D90488777501041003D0" + $"605B7F7B456524A53D822C91D6923DAA4822D2A97C7C42DC0001C4D0C5226B25" + $"A9A786AC5695CDA4CA57B38D871DC96C654321010F800062E8EA90F58E571041" + $"56CCEC1CD4CEE4AB69C4832426A2CAD36000104040C5721AC139C86AB9599822" + $"9898981C2C0D919CDD23DC956504104040C5A2C1324248A2EC5DBA852EEAEAEA" + $"5E89AE1248C23CCC1A6E000104525C52A6836CB292A3092B08B4990820B98E87" + $"C52C162080801E8CF38ED647522BCE61A32106062A151E4821D4A1AB0D1040C0" + $"A06BEDD6433199CD800302949CD8911C2765EC0310400C5D5C2C01DD288AA58A" + $"F8212086D509E13F366E4E37800062E8E2EE12175063470E396B2608F0735584" + $"1BCC252B105E00104040C5AA420AD21248AA0D257921404F57002A24D1652A6A" + $"C91A081040C0B4C123E4292428280C57CEA1C209018DACE610A53C1D769D6929" + $"A51200010454CC2DC217AAC0C6D6811348C976B61A17ABE471030410283D0B4A" + $"27B4393673C977E2005A6AD9B5D52A42825D000104CE29DCE2CE322EE5EDB881" + $"3F6BAEB2605717400041332C8FB292A776370EA01DC6A72F0C5205106000B8AD" + $"8F329AC58FF20000000049454E44AE426082" +}; + +resource(8, "eject_up") #'PNG ' array { + $"89504E470D0A1A0A0000000D494844520000002C000000180803000000B6B1EF" + $"880000000467414D410000AFC837058AE90000001974455874536F6674776172" + $"650041646F626520496D616765526561647971C9653C000001B6504C5445D5D5" + $"D5CFCFCFE4E4E4D9D9D9D7D7D7D6D6D6D2D2D24040406363637B7B7BE0E0E0B4" + $"B4B4DADADA1B1B1BD1D1D1DBDBDB858585CACACAD3D3D3E3E3E3C9C9C9BEBEBE" + $"6A6A6ACDCDCDC3C3C3777777CCCCCCDEDEDEE6E6E6B8B8B8BFBFBFEBEBEB9292" + $"92C1C1C17575752F2F2FBABABAEDEDEDE1E1E1B9B9B9656565DCDCDC91919190" + $"90903737374A4A4A8B8B8B7C7C7CA1A1A1DDDDDD7878787D7D7DDFDFDFCECECE" + $"AAAAAA555555BCBCBCBBBBBBC5C5C5575757ACACAC878787767676B5B5B5C8C8" + $"C8686868747474E7E7E7B2B2B2676767E5E5E56F6F6F6D6D6D9393939D9D9DE9" + $"E9E9A0A0A0323232979797515151484848B6B6B65C5C5C6C6C6C5A5A5A727272" + $"C4C4C4848484C6C6C66666665353531A1A1A838383414141585858EAEAEA7070" + $"70A7A7A77979796E6E6EA3A3A3A4A4A4313131A8A8A89E9E9E4C4C4CC0C0C09B" + $"9B9B5454545656565E5E5EB1B1B1616161808080989898818181C2C2C2AEAEAE" + $"4D4D4D444444AFAFAFB0B0B0A5A5A5A9A9A95959597E7E7EABABAB4242428F8F" + $"8FD4D4D49F9F9FB7B7B79A9A9A3E3E3EC7C7C7898989383838505050B3B3B394" + $"9494ECECECA2A2A2353535E2E2E2D8D8D8D0D0D0CFC448450000026549444154" + $"78DA6298400200082006521403041054318B9060963A37771716C0AD2221CEC0" + $"025605104060C52C132D338C35ACFD3BB181A8BC50BD6A093690728000022966" + $"6D6BD2D0D1E554E8C50A0C0C8C8383C2F3C559274C000820A062562B2D5DF366" + $"796F1926E17E2898C06FD88F00C2FDAC7EB62EA62C13000208A858AA453741C6" + $"998B878595010A04B5146C18611C065696093CCC723E726C2C0001C43081819B" + $"834386895968221C307A2537E8D933220426B235F2C9064AB1020410C304F1EE" + $"0053E1097C48522E499C9C215572482213F9F82C5426B2000410C38430633B61" + $"7E3624092B5B3BA7327325331114D52A3ECCCC0001C430414E29459A15499831" + $"DB49DF9A3D3347A10BD92113656B59F90102886182A824373F928327564A72BA" + $"C6B2B3FBC7F58A222B0E541234040820A062235966245788A71A05F82A2B2BA7" + $"75702A9A2229E60E9590060820A0624ED909488A1923943CC44020D85D0AD9E4" + $"2EF7121380006298A058AC8EAC78A2882023044C44169D58E118C60510400C13" + $"1CB4B8599185F53C382040D200293CC47B6B2672010410C304B63A1B213E248F" + $"736A0B4040A43E52E02BC674F67301041030BA23D24544909C17EEC80E017DFA" + $"881015ECCDE57496060820A0621609EE520B41B8D98ABEBC1010CDC90CF3B488" + $"99462BB39B26400081D3B3909776A2284CB9100F131470B140943AA8FB05E9D8" + $"C77331030410483133CF044F57A37605CF6EAC40BBB040A7DCB247987F024000" + $"814DE6D1E49290ACEFC309428A98E4816A27000410240FF268AAB979CBF76007" + $"AAAAAAF232263C4065000104CDB0CC3C86266AFD38801A97343F334815408001" + $"001D239CEC9F1CBCD30000000049454E44AE426082" +}; + +resource(9, "paused_down") #'PNG ' array { + $"89504E470D0A1A0A0000000D49484452000000320000001808030000008FD65E" + $"D30000000467414D410000AFC837058AE90000001974455874536F6674776172" + $"650041646F626520496D616765526561647971C9653C00000204504C54456767" + $"67DFDFDFD9D9D9404040DADADAD7D7D771816E9DC296DCDCDC7B9F74E3E3E390" + $"BA8881957EE1E1E1D5D5D5DBDBDBDDDDDDD2D2D2868686C5C5C5A1A1A13A3A3A" + $"B3B3B35F5F5FEFEFEFEAEAEAEBEBEB5E5E5ED0D0D0E7E7E76161615C5C5CA9A9" + $"A9727272656565CBCBCB9D9D9D818181E6E6E6A7A7A7B4B4B4E4E4E4E8E8E892" + $"92929595959E9E9EC6C6C63D3D3D8484848888885D5D5DB6B6B6B1B1B1CCCCCC" + $"C3C3C35B5B5B454545ABABABB9B9B9E0E0E0D6D6D6626262CFCFCF878787EEEE" + $"EE2E2E2EA7C8A0797979A6A6A6AFAFAF6F90694F5E4DBBBBBB4A4A4AB5B5B5A2" + $"A2A23939398A98874141413F3F3F87968496969671806E5050506A6A6A5B6F57" + $"E5E5E5849281838D81BCBCBC323232515151798C757A7A7A3434348B8B8B8A8A" + $"8AA0A0A080808081967D9F9F9F858585EDEDED7777776A73699A9A9A859781D3" + $"D3D3949494AECDA991BB8987988378787896BE8E9393934D5C4B8D8D8D666666" + $"8697837E7E7E80A579757575A3A3A3838383ADADAD909090898989C0C0C0BEBE" + $"BE4848489B9B9BD1D1D1C1C1C1282828C7C7C73333335A5A5A696969767676B0" + $"B0B06B6B6BC2C2C26D6D6D7474747D7D7D4949495252527B7B7B828282BABABA" + $"555555CECECECACACA6E6E6EAAAAAA8E8E8EA8A8A85656568F8F8F919191B7B7" + $"B7989898C9C9C9BFBFBFE9E9E97F7F7FECECEC373737DEDEDEE2E2E2999999D8" + $"D8D84B1CE1AF000002A04944415478DA62584D3200082006D2B50004105C0B13" + $"0B87C00ADC4080839F09AA122080205A98F857AC54D35A2229B90417D092D5E4" + $"5D01D1051040602D4C2BC2A41CF8141626252DC5099A14F8C278055880AA0102" + $"08A4858551CBC165DA72FD602325061CA054C928DA33448C9103A8072080805A" + $"9818B504A497DB96A86B44D62FC6051AACBABDE3D30359599856030410500B87" + $"9AACF4C4924819D6D5D6AC2B3998900367A5948484142F179864E19BE1A562C9" + $"C7C40410400CAB597825D33D0317B10255F07644273232B220B4A845B81787E6" + $"AF049382AB57679B992C105E0D10400CABF9357BFD0C85413A56334AB73B4615" + $"E8F1C2ADE20A72ABC84B7605933940BEA08C8C8230400031ACE6D09C17A2C107" + $"56C1282ECAAC1FD73A096E15171B27373B8F08981402F25999F82D6701041050" + $"CB4A0343BDD5702DCCCCFE3E70ABD0B5AC66592156041040402DBCF63AA6C85A" + $"80403FCE515E44109B1646630380000269A9CB9C8EAAC542BA5CDBA0DA8A158B" + $"166BAF728000027A9F71B68A1DB296E099F1F3FBE5157585B1D8C2CF6B321920" + $"8080812CA0AB8BD062213D413B55C9D65E43109BF7577370A5C4020410302A59" + $"ACBC615A6CE513B42B8DC0164004620A9D72B372C0E4145062B4968D55050820" + $"86D5AC36CAAE82D088E8512D951312138447A54C7859806FC65230990A4ABEB2" + $"AB1B75000208A845B0C578353F381E94E708A9082327185375457339E72A3059" + $"030C61D9B43E390D8000023A8C4F4F5D6C05A3003033B0B2F2E1CC8B4C2C025C" + $"9212AA163ACA000104D4C2DAEC51A4CDAAC9B5122FE052937458ADE497606603" + $"1040A0FCC22A33B5B6D35E4C60193E90C628D6E53357C78C6F3540008173256B" + $"B6B082AAB9FF72FC405FDED0C4D466F56A8000821617AC826DC62E2AABF080CC" + $"144B0F65B05701020C0067FAF64F7EA4CB4E0000000049454E44AE426082" +}; + +resource(10, "paused_up") #'PNG ' array { + $"89504E470D0A1A0A0000000D49484452000000320000001808030000008FD65E" + $"D30000000467414D410000AFC837058AE90000001974455874536F6674776172" + $"650041646F626520496D616765526561647971C9653C00000207504C54454040" + $"40D9D9D9D7D7D77B9F7481957E71816E9DC29690BA88DBDBDBDADADAE1E1E1DE" + $"DEDEE3E3E3A1A1A1E8E8E8E5E5E5D0D0D0868686DFDFDF939393EBEBEB727272" + $"B4B4B4818181E0E0E0D4D4D4CCCCCCB9B9B9DDDDDDD2D2D2747474D6D6D6E4E4" + $"E4EAEAEACACACA5B5B5BD5D5D5BCBCBC909090E9E9E9BFBFBF989898979797A9" + $"A9A9949494EDEDEDC9C9C97777776666667D7D7D3D3D3DCDCDCD6B6B6BB1B1B1" + $"D1D1D1C7C7C7686868ADADADB7B7B7888888AEAEAE353535C5C5C5C8C8C84444" + $"44BEBEBE797979969696606060627E5C81947E9AA299A0A0A0A4B7A06F7D6C95" + $"9595787878C6C6C6A6C8A09F9F9F79857780977CB2B2B282A87B4747477B7B7B" + $"2222228282825656568AB3835757576B7669717F6F7676769CB397A7B9A48396" + $"7F757575B6B6B69A9A9A6767676F8F696873673E3E3E758772C2C2C2AAAAAAB8" + $"B8B8EEEEEE85858597A3947070708D8D8D4141412F2F2F2828289CC195C0C0C0" + $"B0B0B0A6A6A62D2D2D838383464646525252D3D3D35858584848484A4A4A8080" + $"80A5A5A55959594949497A7A7AC4C4C48F8F8FCECECE535353AFAFAFB5B5B56F" + $"6F6F1D1D1D6363635F5F5F8E8E8E5454546464645555554343439E9E9E626262" + $"BDBDBD8B8B8B5151514F4F4F8787877F7F7F3A3A3AC3C3C39C9C9CA3A3A3C1C1" + $"C11E1E1E7C7C7CB3B3B3A4A4A4E7E7E7DCDCDCECECEC505050E2E2E237373799" + $"9999D8D8D8D963F7E8000002A54944415478DA6258433200082006D2B5000410" + $"4C0B93AC52A9B498D8621C402C5B434F9609A2142080205A5494C4B4420D6AAB" + $"57E0021DCA16865AA6BE35205D000104D2C2249094BB62D58C45054B7083F9B3" + $"7CA2FAACC58CE5D7AC010820901681AC9455E2B239CB15D5F996E2047C7C7CE6" + $"D3C56DA498D6000410508B6C99419D5E8EBA8204372323C7325C40865B828B6B" + $"8196950013400031AC61D2D037B2175190615CB346DBDA5BDA0C39703C5C1C8C" + $"229C75C0A4FD1ACE65CBECB45B25010288618DC094664B91951C2015AB2BC5E5" + $"C49798ABC0B53404C47BC6B9198249C9356B183955A4E7CA020410C31A3BF15E" + $"4505B08E35BC89532D9CF463D5E056E526F8954466A881492E209F5140BB7D0D" + $"400031ACD190F3E7E786A8E0155D5118A22CDA02B74A90858D9D9955184CF280" + $"048CE77571000410C31AC7442B88B3C05A18181826AF805B85A1454AD39F1B20" + $"80805A7C54253891B5303000AD9A68922C894D8B968E044000011D163A4D084D" + $"4BBA6DF142654B192C5A9484DBB8000288614D66B823378A9639456145E1F24B" + $"B938B068F1B52E580910400C6B94BCB3417102D502B4A06792A53A3F372336EF" + $"33A9CA39F3000410C31A49531BCE359044CADB6D1B56315B126C01242A038353" + $"5D633AC1243F2869F14E0852000820608291B2B1D31300EB913268CA82590006" + $"F2795E69D1EE3C6012A84552CCA49E7F2540008192A5B16A7992143089AEE194" + $"E7875B00069C427C22227C5C6052884920287F95151F37400081B430322E164C" + $"16B3876521AC804945495A477955A3C84A4E8000026BE1905135493154D3D45C" + $"8D1368F63B45AD9A99B95C61D91A800002E74AC6654212DAF90EABF0822A3953" + $"5D459E658C6B00020892911939B879962A2EC7077475972BF283E31C208060C5" + $"05509304D74A3C808B4B480612E3000106002BCD0E856104D027000000004945" $"4E44AE426082" }; -resource(3, "play_disabled") #'PNG ' array { - $"89504E470D0A1A0A0000000D494844520000002300000013080000000148CFDB" - $"BE000000096F464673000000000000000000DA2AB6CE00000009704859730000" - $"0FA000000FA001A06A8C770000009B49444154789C8591BB15C4200C04473C95" - $"7265509FE30BAE249571C4EEC0290ECCC760F9B109B08CD0029201946411C909" - $"900C6832A2FC01C9098B00812AC975A2A97A01306B5CAB88A5A281451FBD46AB" - $"C8D0C1EAA4500DF1D50235E97E8CC6374C27F77666B3D3BDEED40C3AADBD8CB7" - $"AA5749DE17C4F653381650CF03D7ED9CB7D2D9703837B3D9B07C9CE374D3C5FE" - $"8379F95B65F3376E3A010B1C24319A2F2A100000000049454E44AE426082" -}; - -resource(4, "stop_up") #'PNG ' array { - $"89504E470D0A1A0A0000000D49484452000000230000001308060000001AA3B4" - $"F40000006E49444154789CEDD6310E80300840D18FE9517AD69EB27B6FD01507" - $"63D481585D60E0CF0C2F0C04515525402242011863B8425A6B00070660CEE986" - $"39DBBC01F7CAFBC8B35AEBD25CEFFD3326D46612639518ABC45825C6EAF305FE" - $"7359570BB599509802D73FE19D00213E3D801DE2CC137C9B1F7C290000000049" - $"454E44AE426082" -}; - -resource(5, "stop_down") #'PNG ' array { - $"89504E470D0A1A0A0000000D49484452000000230000001308060000001AA3B4" - $"F40000007649444154789CEDD6B10DC0200C00C1276209D66104E6600286631C" - $"D6708A285252A0401ABBF0D72E4E2E2C074030908810016AADAA90D61AC08501" - $"28A5A861EE0E6DC0B3F83DF22EE7BC34D77BDFC698DA8C636639669663663966" - $"D6F605FE73595733B519539800C81843DB414A892862E2D103E004602A1406AE" - $"0663330000000049454E44AE426082" -}; - -resource(6, "stop_disabled") #'PNG ' array { - $"89504E470D0A1A0A0000000D49484452000000230000001308060000001AA3B4" - $"F40000006F49444154789CEDD6310E80300840D18FE9B17ABE9EAC77E90DBAE2" - $"608C3A10AB0B0CFC99E1858120AAAA0448442800630C57486B0DE0C000CC39DD" - $"30679B37E05E791F79D67B5F9AABB57EC684DA4C62AC12639518ABC4587DBEC0" - $"7F2EEB6AA136130A53E0FA27BC1320C4A707B0036170119C944D95F600000000" - $"49454E44AE426082" -}; - -resource(7, "next_up") #'PNG ' array { - $"89504E470D0A1A0A0000000D494844520000002300000013080000000148CFDB" - $"BE000000096F464673000000000000000000DA2AB6CE00000009704859730000" - $"0FA000000FA001A06A8C770000009649444154789C858E3B1684300C03C73C1F" - $"C567A5DE628FA7D4DC80365B04F221B0A84AEC9125CB000BC952B29C00CB0002" - $"9900CB8950814E1504304F00217020A89C004C0717E574AF38CE45C469EC12A2" - $"454D4666D54255BEEDE3E0B334F71817EDA24F21AD922E8CEAC6DB5F57D7B32C" - $"6F2FC4FA75D85FA0D699525BC74B0FCCC83D3327F79FD144F9B49FE5B7842ECC" - $"7AEBEDF50309A3288D19DE43630000000049454E44AE426082" -}; - -resource(8, "next_down") #'PNG ' array { - $"89504E470D0A1A0A0000000D494844520000002300000013080000000148CFDB" - $"BE000000096F464673000000000000000000DA2AB6CE00000009704859730000" - $"0FA000000FA001A06A8C770000009649444154789C858ECB1583400C03C73C37" - $"410769232E813AA880E2544EDA2007F6C3624874F27AC792E090900C417B2313" - $"608810C044D2EE0208810341E30460D5EF7DB62EAB621711F5F0941075B839B4" - $"3D1749B2751917AFA91B8F71D1C2F094DF2BE9C2F45EDEDFBA5EB53EA9B4B13E" - $"952FDA6687E50FD43B73D45699F4C08CDC3353B9DF8C12E5E93FCB6F8991353E" - $"B7B727CD5FEB601F32B3AD1E6C0000000049454E44AE426082" -}; - -resource(9, "next_disabled") #'PNG ' array { - $"89504E470D0A1A0A0000000D494844520000002300000013080000000148CFDB" - $"BE000000096F464673000000000000000000DA2AB6CE00000009704859730000" - $"0FA000000FA001A06A8C770000009A49444154789C858EBB1584300C04473C95" - $"4219AA8FF8822B4965E0980E487D01FE1B8E8D646B56BB120194E086C4004804" - $"3438263B2031E006B09025310F1A00DC4001A77006207BE2D6EB74AB359D73F7" - $"6C6C12BC464D46669542457A9CFDC767A987FB38F7EA9AF26B251B182B1BAD6F" - $"1B5DCF9278BC10DB57E17C816A67AEDA96267B607AEE99C9DC7FC6264AA7FD2C" - $"BD256C60B65B6FAB1F14962A7DEE40835F0000000049454E44AE426082" -}; - -resource(10, "prev_up") #'PNG ' array { - $"89504E470D0A1A0A0000000D494844520000002300000013080000000148CFDB" - $"BE000000096F464673000000000000000000DA2AB6CE00000009704859730000" - $"0FA000000FA001A06A8C770000009649444154789C858FB911C3300C04171A94" - $"825A153B707960AC0E94D201FF67CC8B38C4DEE12011E022480812032011C0C1" - $"C5018901F30401584500D100600E9A6789F3CE515246D945C9334BC6CCD720F6" - $"4656D54255FABCE3C7A7D52F11BA44EAB22257F2E5279FD85CDE611767497C0E" - $"C4FD55780F50BB02B0DCC0182A0F4C99FFCBD91333E35B6EDEB5E3749ACEAFC4" - $"DCDB0EBD7E98BA296A78A62B700000000049454E44AE426082" -}; - -resource(11, "prev_down") #'PNG ' array { - $"89504E470D0A1A0A0000000D494844520000002300000013080000000148CFDB" - $"BE000000096F464673000000000000000000DA2AB6CE00000009704859730000" - $"0FA000000FA001A06A8C770000009949444154789C858FC115C3200C43BF792C" - $"910DBA463D42E6C804194EE3748DF41008E0D04627B064498613423204D71F99" - $"0043B80012004E87230BC005F9E212A06EA3BA8C789F240EEEC53455B2854C16" - $"EDE019B6ADE3E0D5D52FF6F91697637CADA4DBA49CD8B6D4C91211F7D2C6F6AB" - $"7CC1BE64581F44ED0AC04B0367A83C682AFFCF67AE881A4D75316BA6CB818D2F" - $"00E333EDD061F902FBC91FF2833D9C250000000049454E44AE426082" -}; - -resource(12, "prev_disabled") #'PNG ' array { - $"89504E470D0A1A0A0000000D494844520000002300000013080000000148CFDB" - $"BE000000096F464673000000000000000000DA2AB6CE00000009704859730000" - $"0FA000000FA001A06A8C770000009C49444154789C858FB911C3300C04171A94" - $"E232509F62072E096598B13A504A07FC9FB12EE2F0F68083440025B821310012" - $"010D8EC917901870033800F0820088060037D0EC25CEBA84E529A35EC9C4C13D" - $"05335F07B10FB2AA16AAD2EB1E3FDEAD7E19AFCB3A9DD7974AB6FCE4135BCA3A" - $"ECE05912AF07E2FC28DC0F50BB02F0DCC0192A0F4CF1FFCDD91333635B6EDEB5" - $"E37472E75762CE6D875E3FEE602ABACC9639B80000000049454E44AE426082" -}; - resource(13, "ffwd_up") #'PNG ' array { - $"89504E470D0A1A0A0000000D494844520000002300000013080000000148CFDB" - $"BE000000096F464673000000000000000000DA2AB6CE00000009704859730000" - $"0FA000000FA001A06A8C770000009F49444154789C858F3B16843008452F1E96" - $"92B55A4F31CB7BD6EEC0365324928F8EBE8243E0022F9601C8802C6F80650081" - $"4C80E52D09800580140860BE01A5AF4289051012982A97CAEA5EC9EB3695D02E" - $"941B257033C8556128E4FB31163ECBB4393E94CE003E1A50B3541CAA31F1AE95" - $"EEDD4D3DC8F2FE42AC5F87E3050ACFA430D0B29979E006E6EC9E996E1905D55D" - $"F3B13F6723F39700679D4B17FD00CCDC346454415F090000000049454E44AE42" - $"6082" + $"89504E470D0A1A0A0000000D494844520000002C000000180806000000816F1F" + $"BA000004E1494441545885D597CF6B135D1FC53F339949DB645A9BB421A615ED" + $"C2443118A8A84B05411071E54A04372EFD03EACEA5FF84FF869BD2551105B520" + $"6A95163536D686FA0332935FF3FBDE779177A64DDA3E3E799E9697F7C0ACEE61" + $"38F73B67CE3D57595B5B93FC1F41FD5F0B1816DA410B524A8220C0B66DBADD2E" + $"AEEBE2FB7EBC76985014856432C9D8D818A9548AD1D15154554551943F0B9652" + $"E2BA2EBF7EFD62737393AF5FBFB2BDBD4DB3D9C4F3BC43170B90482448A7D34C" + $"4F4F5328143879F2243333331C3B760C5DD7FB842BBB3D2C84C0B22CD6D6D678" + $"F1E205EFDEBD636A6A8AF9F979F2F93C939393872E1676BED8E7CF9F69341A98" + $"A6C9D9B367397FFE3C274E9C606C6C0C5555FB050B2168341AACACACB0B8B848" + $"3A9DE6FEFDFB5CBC7811210461182284404A792453869E35A494B4DB6D969797" + $"314D9372B91C8B561465C712DD6E970F1F3EB0B8B848A954626161014551E874" + $"3A789E471886472E367A344DE3DAB56BD4EB756AB51AE3E3E3689A86AEEB3DC1" + $"6118B2BDBDCDCB972F29140A2C2C2C2084E8130BF0F3E74FA4941886D1F7990E" + $"C2B0FC08AAAAA2AA2AD96C16D775B16D1BCFF3D034AD27D8711C363636D8DADA" + $"E2F1E3C7846148A7D3C175DDBE89D66A35AAD52A524A66676729954A4C4D4DA1" + $"69FB87CDB0FC0891F500344D430881A6693B96B06D9B1F3F7E50A954C8E57238" + $"8EB36F220441403299445114B6B6B6D8D8D82097CB71E6CC190A8502A3A3A3FF" + $"8ABF1B524A1445410841BD5EE7D4A953BD0D00F8BE8FE338542A157CDFC7F77D" + $"84107B5EA2691A966551AFD709C390E3C78F639A26CF9E3DC3300C8AC5227373" + $"731886117B7118FE7EA2851054AB552E5FBEBCE3612925AAAA92C96408C330F6" + $"EC41F03C0FD33469341AA4D369F2F93CBAAEF3F6ED5B565757999B9BA3582CC6" + $"9BFEBBFC4C26432291D8630FDBB669B7DB3D3B450BD14476FBE74F1042D06AB5" + $"68B7DB7CFFFE9DE9E96972B91C5FBE7C017A9618865FA95448A5527DD38E22D5" + $"75DDFE588B76F64F624B4A49B7DB657D7D9D959515128904D7AF5FA7542A0DC5" + $"BF70E1C21E6B4829E3488D05271289F8E718164110D0E97468369BA45229EEDD" + $"BBC7EDDBB749A5522C2F2FEF79E75FF11DC7C1719CBEA1054180EBBA71B7D000" + $"464646989C9C3CF067DB0FAEEBD26EB769B55A9C3E7D9A070F1E70E3C60D8220" + $"C0711C4CD3EC8BC5BFC31FFCBA6118D26AB5B02C0BC33080FFA6442A95626666" + $"06C771FA4EB4C1E9689A86E77954AB552CCBE2EAD5ABDCBD7B9772B98CE77934" + $"9BCDB8D1FD13FE20DAED36B55A0DDBB6C966B3BD3C06482693CCCECEF2EDDB37" + $"BADD2ED0B3C960C09F3B778E376FDE70F3E64DEEDCB943369B8DA7B35FB20CCB" + $"DF0DCFF3A8D56ABC7FFF9E72B98CAEEBD8B6BD537EA494FCFEFD1BCBB2F03C8F" + $"898909262626FAEA9DAAAAE8BA4E3299C4F7FD3D27E12086E5473A22B14B4B4B" + $"ACAFAFF3E4C9130CC3E8171CC1F77D5EBD7A45ABD5229FCF93CFE7310C634F2F" + $"3D6C443DDCB22CAAD52ACF9F3FE7D3A74F3C7AF4884B972EC597883EC1515B12" + $"42B0B4B4C4EAEA2A994C864C2613D7BBA3121D0401A66952ABD5F8F8F123E3E3" + $"E33C7CF890F9F9796CDB8EFFAF3D138E9A92A6696C6E6EF2F4E9535EBF7E4DAB" + $"D53A12A18328168B5CB972855BB76E31323212475DE4F93D82778BD675BD57E9" + $"34EDC03BD66161F0748B3C3F18B5FBF6BCE8781642100441BC81A3140CC4713A" + $"78C3D98DFF00F7D173EB773F2C6E0000000049454E44AE426082" }; resource(14, "ffwd_down") #'PNG ' array { - $"89504E470D0A1A0A0000000D494844520000002300000013080000000148CFDB" - $"BE000000096F464673000000000000000000DA2AB6CE00000009704859730000" - $"0FA000000FA001A06A8C770000009F49444154789C858FCB15C3300804073F35" - $"E10ED24628C175B88214B7E5A40DE720097DE2441CF46019C1021132D40A9009" - $"30E459DE0070BAB892001790C0C1111B2024B03AEFD98F2E522AD3949FB6A1EC" - $"C88B6E3EDAC53AEC3C46E1B14D93E320AF0FA4D1809AA56C438D89BA285DDDFD" - $"6A7EBE4C1BE7E286D79EE05840E1190F032D9B993FDCC0D46ECD74CB28A86E5B" - $"1AFB7336323F0930DEB334C7FE0115B3282C4AE639D10000000049454E44AE42" - $"6082" + $"89504E470D0A1A0A0000000D494844520000002C000000180806000000816F1F" + $"BA000004F1494441545885D597CD6B135B18C67F3967E66492499C94601BEDD4" + $"C434B6317E80417121D4D2858220E2DA8D7F892B03EEDCEB5EDCB8D48DEB22A9" + $"2022046C6C8B8234B8481B699368321F77919B344DD2DEE6DE5B2EF781C0C03C" + $"C9FCF29EE7BCEF99C0E7CF9F7DFE4712FF35C0B8D20EBB19080408040208217A" + $"D7C725DFF7F17D1FCFF37AD7A3341258088194124DD3D0757D08F8A01FFBA7C0" + $"AEEBF63E8EE3F4E00F059652A294C2300C344D636B6B8B0F1F3E50A954D8DEDE" + $"3E3660804C26C3D4D414B95C0E21048EE3E0BA2E9EE78D0696526218068661B0" + $"B9B9C9F3E7CF29168B48293979F224274E9C40298594F25F05F57D1FC771585D" + $"5DA5D168609A26F7EFDFE7EAD5ABBD95ED16A9072C8420180C621806C5629127" + $"4F9E108D46B97DFB36E9749A582C86520A4D3B34F67F5B9EE7F1FBF76F767777" + $"A956AB944A256AB51A0B0B0BBD48FABEBF07AC691A4A294AA5128542815C2EC7" + $"CD9B37397BF62CA669228440D77580A1653A48E3FAA153ED5FBF7E51AD56A956" + $"AB7CF9F205DBB60987C3C09F6D4D0881A669789EC7D3A74FC966B3DCBA758B6C" + $"364B341A45884EF7534AB1B2B2C2CECE0EE170184DD30EED1CE3FAA1D39942A1" + $"105353539C39730621049B9B9B54AB557CDFEF00775BD7CACA0A9EE771FDFA75" + $"92C9244AA9A17FFFF6ED5B1E3E7CC8E3C78F2997CB84C36194522341C6F5F74B" + $"D3344CD3249148303131C1FAFA3A8D46A31389EE97CBE532B3B3B3CCCCCC100C" + $"06877EC4F33CA494C4E371CAE5328F1E3DE2F4E9D3DCBB778FA5A52500DAED76" + $"6FF9C7F50F565AD775344D23140A51A954989E9EDE9B74DDD04F4E4E1289440E" + $"AD801002C33088C7E3ECEEEEF2ECD9331E3C78C08B172F68B7DB8442A17DCB3F" + $"AEBF1F3A100820A5C4711C7EFEFCB9B7E97CDF474AD9CBDA51140804504AA194" + $"C2711CDEBC79C3AB57AF585858E0CE9D3BCCCFCF8FE54F2693239F2184C0F3BC" + $"BD48F4DF3CCAC618A55028C4ECEC2CB66D631806EFDFBFC7308C0387CC287FAB" + $"D5229D4EF736793F97E338B4DBED0E7077764B297B3DEFA8324D9399991992C9" + $"24A669B2B1B1C1D7AF5FB16D9B76BB3D96BFD56AE1BAEE3EE06E2CBA59EF017B" + $"9E876559871E3CFA158FC749A5524C4F4FE3BA2EEBEBEBD4EB75E6E6E6585C5C" + $"C4B6ED7D7BE128FEC12876E320A5A456AB7512D005765D9753A74E51A9540E84" + $"F47D1F5DD7C9E7F3CCCDCDB1BDBDCDC78F1F310C835C2EC7F9F3E7999C9CDC77" + $"481AC73F282925BAAEF7068952AA03DC3D15D9B64DAD56DB370AFBD56C36B12C" + $"0BC33078F7EE1D894482C5C545CE9D3B47341A1D7AE0B8FEC1EAEABA4E301864" + $"797919A5149665ED6DBA76BB4DB3D9241E8F23A51C79946C369BDCB87183EFDF" + $"BF73E5CA1552A9D4D07019041EC7DF951002A514E17018D77579F9F225F97C9E" + $"582CB63738BA41DFD9D921168B619A26D0A9BEEBBAF8BE8F699A6432193299CC" + $"5F3E1418DBDFCD6B3018ECF5E642A1402412E1C2850BFB2B2C84201C0E138944" + $"28168BCCCFCF93CD6681E33BFF0EAA9B595DD7A9D7EB140A05D6D6D6B87BF72E" + $"E9741A5DD709F4BF847A9E47BD5EE7DBB76F7CFAF48956ABC5B56BD7B878F122" + $"96651DEB2B1274567A636383E5E5655EBF7E8D65592C2D2D91CFE7999898E8EC" + $"ADC1B766DFF769369BFCF8F183D5D5554AA5126B6B6B341A8D6385ED572291E0" + $"D2A54B5CBE7C99542A452412E9457608B82BD775A9D7EBD46A35B6B6B6A8D7EB" + $"388E73ACA09AA66118069665118FC78946A343BDF90F79FC57243CCF54F10000" + $"000049454E44AE426082" }; -resource(15, "ffwd_disabled") #'PNG ' array { - $"89504E470D0A1A0A0000000D494844520000002300000013080000000148CFDB" - $"BE000000096F464673000000000000000000DA2AB6CE00000009704859730000" - $"0FA000000FA001A06A8C77000000A849444154789C858FBB15844008452F1E4A" - $"B10CEA33DE601BD85E28C389EDC0740CC6F9EAEA0B38C05CE08D4400E5072631" - $"0012010D8EC90A480C6E004C007846004403E006283838C604186620EBC9CD69" - $"75AB59CF6D9642BD906EA4C0CD2057154345BAED7DE3330D9BCB873C07D0DE80" - $"554BC9A155A6D467A7A99BA90749DC5E88E5ABB0BF40C5335E0CD46C641EB88E" - $"C9AF39B35BC60AD55CD3FE7DCC7AE62F01CA32B62E3A00C80630E7BA72D89A00" - $"00000049454E44AE426082" +resource(15, "rew_up") #'PNG ' array { + $"89504E470D0A1A0A0000000D494844520000002C000000180806000000816F1F" + $"BA00000504494441545885D5974B6B535F1BC57FE7969A4B6BD25A8FA9523B31" + $"28C162C18A20083A7622F8091C8BC38A13877E09473A171C38291D5950A8162C" + $"6DA3696D6393606C3198A4B99C4BCED9FB1DC4A44DED1DCB9F77C119EDC566ED" + $"FD3CCFDAEB28E9745AF27F04F5BF167054E87B2D4829F13C0FCBB268341A388E" + $"43B3D9ECACFD4B288A42201020180C120A853875EA14AAAAA228CAC182A59438" + $"8EC3AF5FBFC8E7F37CFFFE9DF5F575363737715DF79F8B05D0348D7038CC9933" + $"6788C7E30C0F0F333434C4E9D3A7310CA34BB8B2BD878510542A15D2E9341F3E" + $"7C607E7E9E818101C6C6C6304D936834FACFC5C256C556565628954A94CB652E" + $"5FBECCD5AB57B970E102C160105555BB050B2128954ACCCECE32393949381CE6" + $"E1C3875CBF7E1D2104BEEF2384404A7922B70CADD6905252ABD578F7EE1DE572" + $"996432D911AD28CA564B341A0D52A9149393932412092626265014857ABD8EEB" + $"BAF8BE7FE262DB9FAEEBDCBD7B9742A140369BA5B7B7175DD7310CA325D8F77D" + $"D6D7D7999999211E8F3331318110A24BEC61B0B9B949A3D1201C0E130A85D034" + $"ED587C5555515595FEFE7E1CC7C1B22C5CD745D7F59660DBB6595B5BE3C78F1F" + $"3C7FFE1CDFF7A9D7EB388E73E08D4A29D9D8D820954AF1F5EB574CD364787898" + $"F1F1F163F3DBAD07A0EB3A4208745DDF6A09CBB2D8D8D860747494C1C1416CDB" + $"3ED0119ACD26F97C9EF9F9795657578944225CB972854C2683699A1886D15599" + $"A3F2A594288A82108242A1C0C58B175B07686F66DB36A3A3A3349B4D9ACD2642" + $"885D85D6EB75565757595858A05028609A26E3E3E3D46A35969797F9FCF93389" + $"440255553B953A0A7F673584106432196EDCB8B1D5C3524A545525168BE1FBFE" + $"AE3D5B2C1649A7D3A452296AB51A232323DCBC799362B1C8ECEC2C854201CFF3" + $"F03C0F8052A9C4DCDCDCA1F97B4108816559D46A35060606B65CA23D9DDBFBA7" + $"8D6AB5CAE2E2226B6B6B8C8C8C100804F8F9F327D3D3D3148BC5BFF8AEEBB2B4" + $"B4C4CACACAA1F80709F67D1FC771BA6DAD3DA1BB6D160C0689C7E3CCCDCD3133" + $"3383A228689AB6A70BE8BACED9B3672997CB87E2EF072965C7523B82354D2310" + $"08ECFA76031886413299E4DAB56BE47239DEBC79C3F4F4348661100A85D0F5EE" + $"175ED3341289044F9F3E3D147F3F789E87E3389D6CA102F4F4F4108D46F71CB6" + $"7610B26D9B73E7CEF1F8F1635EBE7CC9FDFBF7715D97DFBF7F77B9CA51F97BC1" + $"F77DAAD52A954A85482402FC8997A15088A1A1216CDBDEF7456B97C7B22C745D" + $"E7C18307BC7AF58A478F1E118BC528168B388E736CFE4ED46A35B2D92C9665D1" + $"DFDF0FFCB1B54020C0F9F3E7C9E572341A0DA055D6FD4A2784E80CC2AD5BB7B8" + $"73E70ECBCBCBBC7EFD1A5DD73B61E5B87CD775C966B32C2C2C904C26310C03CB" + $"B2B6C28F949262B148A552C1755DFAFAFAE8EBEBFB2BDEED85F660198681A669" + $"5DF9F9287C296547ECD4D4144B4B4BBC78F1824824D2AAD4F60D0607078946A3" + $"7CFCF8915C2E87699A98A6492412395078BB6F0FF2D5BDF8ED1C5EA954C86432" + $"BC7FFF9E6FDFBEF1ECD93362B1188D4603DFF7BBF3703B2D0921989A9A627171" + $"91582C462C16EBC4BBC3DCF671E0791EE572996C36CB972F5FE8EDEDE5C99327" + $"8C8D8D61595667BE949D3FA1EDA4A4EB3AF97C9EB76FDFF2E9D327AAD5EA8908" + $"DD894B972E71FBF66DEEDDBB474F4F0FB66D77C4027F0BDE2EDA308C56A4FB33" + $"142775BB40D7DE42089ACD66A7AFB75BEDAE36D07E9E8510789ED739C0490A06" + $"3A76BAF30F673BFE0765B1927DCB7ECDC10000000049454E44AE426082" }; -resource(16, "rew_up") #'PNG ' array { - $"89504E470D0A1A0A0000000D494844520000002300000013080000000148CFDB" - $"BE000000096F464673000000000000000000DA2AB6CE00000009704859730000" - $"0FA000000FA001A06A8C77000000A149444154789C8590311684200C447F7839" - $"4ACE6ABD85C71B6B6F60CB160882ACEB14BCBCF09319B00C40066479032C0308" - $"64022C6F10021200444500F3ADF484439466022101A6938BB2BA57785BA77254" - $"876847B51F0799D50235F97E8C8D4FEAE703C0273BBFDB9328D150DF29CF93AE" - $"A911AB5EFF64797F2196D5E17881AAFBA96819AEAA67E2473532CFC4C5A8DD6A" - $"E2FA3C4FDC98B9FBDCAE7296C9FFAE2FF13F3064D77552650000000049454E44" +resource(16, "rew_down") #'PNG ' array { + $"89504E470D0A1A0A0000000D494844520000002C000000180806000000816F1F" + $"BA000004EB494441545885D5974D6B135D14C77F3377DE924C5E9A97C6D2169B" + $"56A8A6D545A9B85370A31B17EEFD027E9080DFC1951B2BB81604DD161A170A4A" + $"A06DA2904D43C5C4483389C9CCDC791621536BD318F5290FCF81C040FE73EFEF" + $"9E73EE396794DDDDDD80FF91A9FF35C0EF9A36E94F45515014055555C3E7F3B2" + $"20080882002965F83CCEC602ABAA8A10024DD3D075FD14F0598BFD2DB0EFFBE1" + $"CFF3BC107E22B01002C330B02C0B4DD368B55ABC7DFB9646A3C1D7AF5FCF0D18" + $"E0D2A54BE4F3798AC522AAAAE2791EBEEF23A51C0F2C84C0B22C2CCBE2E0E080" + $"C78F1F532E97114290CBE548241218868110E25F050D8200CFF3D8DBDBA3DBED" + $"128BC5B87FFF3E9B9B9B6164474E0A815555C5344D2CCBA25C2EF3E8D123E2F1" + $"3877EEDC61797999542A85611868DAC4B4FF639352D2EFF7E9743A349B4D2A95" + $"0AED769B9B376F86291904C131B0A669188641A552A1542A512C16B975EB1685" + $"4281582C86AAFEBAA0082150551529E5D8FC9B461F0401DFBF7FA7D96CD26C36" + $"A956AB2C2C2C108D460150767777035555C39C7DF8F021E9749ABB77EF522814" + $"300CE397A0BAAE635916A669F2EEDD3B3CCFA35028FC95DE755D3A9D0E8EE300" + $"303333433A9D1E7A7854BADEBC798394921B376E70F1E2C589B08AA284975351" + $"145EBE7CC9D6D616CD6693070F1E904824C864327FACD7348D582C463C1EA7DF" + $"EFF3F1E3C7A153478B01ECEFEFB3B2B2C2E2E222A6698E051D45C3344D3A9D0E" + $"4F9E3CE1F9F3E7F4FB7D128904ABABABB4DB6D1CC72193C9FCB6FEC703EABA8E" + $"A6694422111A8D06F3F3F3C7393C4AFAD9D9596CDB3ED524344D0B37AED56A3C" + $"7DFA94D7AF5F631846E81D5555894422C0303F6DDB9E5A7F56141545410881E7" + $"797CFBF6ED18380802841044A3D15395400841241261676787ADAD2D3E7CF880" + $"6DDBE4F3792CCB3A330AE572792AFD241BA5AB94926EB77BB20E2B8A82A669A7" + $"BC2BA5A452A9F0EAD52BFAFD3E6B6B6B789EC7603018BB49100454AB55767676" + $"A6D24F03ED791EAEEB0E8147E56454667E06F63C0FD334D9DCDC249BCD8627FE" + $"FCF9335FBE7CA1D7EB9D2861524A0CC3985AFF2B584551705D1729E531B09492" + $"64323976F0104290CFE7C966B35CB972855AAD46BD5E67767696B9B9395AAD16" + $"87878761095214856C36CBFCFCFC54FA49B0A3B9A6DD6E0F336004ECFB3E7373" + $"73341A8D3317104290C96448A7D3ACAFAF53AFD7A956ABB8AE4B369BE5E8E8E8" + $"4493F95DFDB8FD745D0F1B89611843E05197595858A0DD6E9F6885679D3C168B" + $"512C16595959A1D168B0BFBFCF6030201289D0EFF7715DF78FF5A377745DC734" + $"4DB6B7B7310C836432797CE95CD7A5D7EB91C96410424C3D4A9AA6C9D2D2128B" + $"8B8BB45A2D0E0E0EC201E64FF5AAAA621806D16814DFF779F6EC191B1B1BA452" + $"A9939D0EE0E8E888542A152E20A5C4F7FDA9E6825C2E472E979BA89BA41FE5AB" + $"699A442211344DA3542A61DB366B6B6B273DACAA2AD16814DBB62997CBACAEAE" + $"72F9F265E0FCE6DF7187D0751D5DD7711C8752A944AD56E3DEBD7B2C2F2FA3EB" + $"FA70F819BD20A5C4711CEAF53AEFDFBF67301870FDFA75D6D7D7492693E7FA89" + $"04C3487FFAF489EDED6D5EBC78413299E4F6EDDB6C6C6C30333333BC5B3F7F35" + $"074140AFD7E3F0F090BDBD3D2A950AB55A8D6EB77BAEB03FDA850B17B87AF52A" + $"D7AE5D63696909DBB6C3943D053C32DFF7711C8776BB4DABD5C2711C3CCF3B57" + $"D0D1BC924C26C96432C4E3F15363C23FD949940E9FD1AB580000000049454E44" $"AE426082" }; -resource(17, "rew_down") #'PNG ' array { - $"89504E470D0A1A0A0000000D494844520000002300000013080000000148CFDB" - $"BE000000096F464673000000000000000000DA2AB6CE00000009704859730000" - $"0FA000000FA001A06A8C77000000AA49444154789C8592BB0DC3300C441F052D" - $"E12675D60847F01C9E20C3DD24A95C780DA7D0CFB26C9885209147DE2320A821" - $"43ED01320186C0058454F1D6C11E53878B582B0184045899F7398ECEA958C729" - $"1DC5C18F2E178DB6F31CB6CC7DE29DF1F3F8171007BB78B62790D01A4600D27A" - $"52EB6AB2B52ED2F10CD0C6F2B0C3778A303F888A7B0EAFA80EFCD6B3C62F6EBD" - $"E65ED134AA550DBA23CF9DAE67A6FB771919631BFC4F31FD01075828D428AF1D" - $"AC0000000049454E44AE426082" +resource(17, "prev_down") #'PNG ' array { + $"89504E470D0A1A0A0000000D494844520000002C000000180806000000816F1F" + $"BA00000543494441545885D597CD6F125B18879F99335FC0C040A9AD8D50DBD2" + $"C48AD504A27161D4C4851A13176EFD0FFC4348DCBA76A98BEADE8DAEBB181746" + $"9B10DB824DD80868A034E543603EEEA2196A6BA9D7DEDBDCDC5F42320967CE79" + $"CE7B7EE77DDF91D6D7D77DFE4792FF6B803F9572DC9F9224214912B22C8F9E4F" + $"4BBEEFE3FB3E9EE78D9E8FD291C0B22C23844051145455FD0578DC64FF14D875" + $"DDD1CF719C11FCB1C04208344DC3300C1445A1D96CF2E1C307AAD52ADBDBDBA7" + $"060CB0B8B8C8F4F434D96C165996711C07D775F13CEF6860210486616018065F" + $"BF7EE5F9F3E7D8B68D10823367CE108BC5D0340D21C4BF0AEAFB3E8EE3B0B1B1" + $"41B7DB251289F0E8D123AE5EBD3A3AD9204823605996D1751DC330B06D9BA74F" + $"9F128D46B977EF1E0B0B0BC4E371344D43518EB5FD89E5791EFD7E9F76BB4DA3" + $"D1A0582CD26AB5B875EBD6C892BEEFEF032B8A82A669148B450A8502D96C96DB" + $"B76F333F3F4F24124196F7138A2CCBA3498208B9AEFBB7AC2284400881E77947" + $"BEE3FB3E3F7EFCA0D168D0683428954AA45229C2E13000D2FAFABA2FCBF2C8B3" + $"4F9E3C61626282FBF7EF333F3F8FA669BF2C1A0E8769341A743A1D001CC7C1B2" + $"2CC2E1F058685555310C035DD7F9F4E913F57A9D7C3E3F7663C3E19076BB3D5A" + $"239148303131B117E12075BD7FFF1ECFF3B87EFD3AE7CF9F3F123618FFECD933" + $"6CDB46922462B1188F1F3FE6E6CD9B8442A103E3820B2C4912EFDEBDE3E5CB97" + $"7CFBF68D070F1E303535452A953A720D455188442244A351FAFD3E5FBE7CD90B" + $"6A3031C0E6E626994C86743A8DAEEB6377EFBA2EAAAA32333383A669A452299A" + $"CD26DFBF7F67767696E0C4745DA7DD6EF3E2C50B5EBD7A45BFDF271A8D92C964" + $"90248956AB3516589224545545511442A110D56A9573E7CEED7B3830FDD4D414" + $"A6699EA8480821304D135DD72997CBACACACF0F6ED5B344D23168B914C269165" + $"79E4C7DF29C81042081CC7616767671FD8F77D841084C3E11365822022B66DF3" + $"FAF56B3E7EFC88699A4C4F4F6318C61FCFF7F3BCB22CE3791EDD6EF7601E9624" + $"0945514E5C826BB51A6B6B6B00E47239068301BD5EEF1F171A4992701C87E170" + $"B8071CD46E21C48174F527F27D1F5996B978F1229AA631180C1042D06C36A9D7" + $"EB743A1D5CD73D11AC24490C87433CCFDB07F63C0FCBB28E6D3C7EA7582C463A" + $"9D666969894AA542A95462381C323939C9EEEE2EB55A8D9D9D9D3F820DFA9A56" + $"ABB5E78000D8755D666666A856AB2782FD7991482442369B2593C950AD56D9DC" + $"DC643018B0B8B848BFDF4751148410BF0D8C10025555478544D3B43DE0A02B4A" + $"A552B45AAD03A5F028F57A3D745DE7EEDDBB241209745D676B6B8BE17078609C" + $"AEEBCCCDCD914EA769369B944A252A95CAC87A87C71FDEB8AAAAE8BACEEAEA2A" + $"9AA66159D6FEA51B0E87F47A3D92C9244288635BC976BBCD8D1B37B06D9BCF9F" + $"3F138944989D9D1D9BAE82E669727292E5E5656AB51ADBDBDB24128923C7CBB2" + $"8CA66984C3615CD7656565857C3E4F3C1E3F58E90076777789C7E344221182E8" + $"1FAEF9D168945C2E472E971B1BA171518BC562C462B1B1A04208745D27140AA1" + $"280A854201D334B974E9D2C1080709DD344D6CDBE6C2850B2C2D2D01A7D7FF1E" + $"56E0595555E9743A140A05CAE5320F1F3E646161015555F79A9FE005CFF3E874" + $"3A542A15D6D6D6180C065CBB768DE5E5652CCB3AD54F24D83B81ADAD2D565757" + $"79F3E60D966571E7CE1DF2F93C894462EF6E1DFE6AF67D9F5EAF47BD5E676363" + $"8362B148B95CA6DBED9E2AECCF3A7BF62C972F5FE6CA952BCCCDCD619AE6C8B2" + $"BF0007725D974EA743ABD5A2D96CD2E974701CE754411545C1300C2CCB22994C" + $"128D467F6913FE025BC737CBCE654FEF0000000049454E44AE426082" }; -resource(18, "rew_disabled") #'PNG ' array { - $"89504E470D0A1A0A0000000D494844520000002300000013080000000148CFDB" - $"BE000000096F464673000000000000000000DA2AB6CE00000009704859730000" - $"0FA000000FA001A06A8C77000000AA49444154789C8590B911C3300C04171A94" - $"A232509F62076EC0BDB00C3156074AE9007C45CBBA00830197B8232501281F30" - $"49119004680C98EC80A408C180050042460044A3CF0C85E0C3050C3340F6CCAD" - $"BEBAD7AA759D79290EA196623F5E64560D54A5C7390E5E397EB75E273BBDDAB3" - $"E0D1BC94893FCFACDD1AB1E2F54F928E07627B2B9C0F5071CF0A3543EB7A26FC" - $"E846E69E688CD5539BB83ECF1D3766EE3EB7EB946DF2BFEA0B7B823033032405" - $"7B0000000049454E44AE426082" +resource(18, "prev_up") #'PNG ' array { + $"89504E470D0A1A0A0000000D494844520000002C000000180806000000816F1F" + $"BA00000537494441545885D597CD4F135D1BC67F339D96964E91F261A1185818" + $"0D1121218AD1981875CDD2BFC0B8740D3B97EE5DBB736FDC1813C24A138D280B" + $"D2826905910A56A48D9D7ECEF79967D1A7034851F181BC79AFA4ABB6677EE7CC" + $"755FF77DA44C26E3F17F24F97F0D705429877DE1791E8EE3A0EB3A8D4603D334" + $"B16DDBFFEE38254912A15088482442676727E1701859969124E9F7C09EE7619A" + $"26854281CDCD4D3E7FFECCF6F636954A05CBB28E1D16201008108D46E9EBEB63" + $"707090E1E16192C924A74E9D22180CEE0397F67A580841B95C2693C9F0E6CD1B" + $"52A914BDBDBD4C4E4E924824E8EEEE3E7658D87D636B6B6B944A25344D637474" + $"94F1F171CE9C394324124196E5FDC042084AA5128B8B8BCCCDCD118D46B97BF7" + $"2E972F5F460881EBBA0821F03CEF444E199AD6F03C8F5AADC6CB972FD1348DB1" + $"B1311F5A92A45D4B341A0D565656989B9BE3FCF9F3CCCCCC204912F57A1DCBB2" + $"705DF7C4615B1F4551B87DFB36F97C9E5C2E472C1643511482C16013D8755DB6" + $"B7B7595858607070909999198410FB60F7CA300C1A8D06B66DE3791EE1709848" + $"244228146A5B287B55A954D0340D5555515595502874E037B22C23CB323D3D3D" + $"98A689AEEB589685A2284D60C330D8D8D8E0EBD7AF3C7CF810D775A9D7EB98A6" + $"D9F644B3D92CE9749A6AB58AE3380C0C0C70F1E245CE9E3DDB16C0F33C767676" + $"585E5E2693C9108BC5482693DCBC79B3EDA65AD60350140521048AA2EC5A42D7" + $"75BE7FFFCEC4C404FDFDFD1886F1CB44A856ABA8AACAC0C000A66992CD66E9EB" + $"EBE3C2850BFBFE63DB365B5B5BA45229D6D6D68846A38C8E8EB2B3B343A15020" + $"1C0EE3384EDB67789E8724490821C8E7F38C8C8C3437D05AD8300C262626B06D" + $"1BDBB61142B45D08A0A3A3034DD3585A5A42D3342A950A972E5D4251146CDBA6" + $"5EAFF3E9D327D2E934F97C9ED3A74F33353545AD5663757595542AC5D5AB5709" + $"04028702B7A08510ACAFAF73E5CA955D0F7B9E872CCBC4E3715CD73DE0D93F55" + $"A95462696989959515EAF53AC3C3C35CBB768D62B1C8E2E222F97C1EC7718EB4" + $"BE10025DD7A9D56AF4F6F6EEA644AB3AF7FAE728721C87ADAD2D363636181E1E" + $"261C0EF3EDDB375EBD7A45A150F8EB746945AA699AFB632D1008007FDF760381" + $"00FDFDFD00BC78F102CBB29AAF5039B4FBFF913CCFF3235592A4E6F0130804FE" + $"28927E254992181A1AE2DEBD7B3C7AF488E9E9692CCBE2C78F1FFFA9A53B8E83" + $"699AFE6C2143B388BABBBB7F5B6CBF93EBBA188681A228DCB97387274F9E70FF" + $"FE7DE2F138C562115DD78FB4BEEBBA54AB55CAE532AAAA02FFA644676727C964" + $"12C330F675B4BF3D712184EFB9EBD7AF73EBD62D3E7EFCC8D3A74F79FBF6ADDF" + $"827FA75AAD462E9743D7757A7A7A9A790C100A85181A1AE2CB972F341A0DA069" + $"93C3FC373E3ECEC2C202A954CA6F2E9224F9034A4B9EE761DB368EE3303232C2" + $"ECEC2CE5729967CF9E110C06FDBA6927CBB2C8E572A4D369C6C6C6080683E8BA" + $"BE3BFC789E47B158A45C2E6359165D5D5D7475751D18EFA0D93A5BF36BEBA1B6" + $"6DFB2DF4579265D92FC6963F7FDE640B767E7E9E6C36CBE3C78F5155753F704B" + $"B66DF3EEDD3BAAD52A894482442281AAAA6DC18F53AD39BC5C2EB3BEBECEEBD7" + $"AF595D5DE5C183074C4D4DF997887DC0AD694908C1FCFC3CCBCBCBC4E371E2F1" + $"B83FDE9D14B4E338689A462E97E3C3870FC46231666767999C9C44D775BFBE0E" + $"9C706B52521485CDCD4D9E3F7FCEFBF7EFA956AB2702FAB3CE9D3BC78D1B3798" + $"9E9EA6A3A303C3307C58E020F05EE896D7144539F48E755CDABBB61002DBB6FD" + $"7BE4DE286C1B03ADF62C84C0711C7F0327090CF871FAF30D67AFFE01BD6B253F" + $"7A7719F90000000049454E44AE426082" }; -resource(19, "eject_up") #'PNG ' array { - $"89504E470D0A1A0A0000000D494844520000002300000013080000000148CFDB" - $"BE000000096F464673000000000000000000DA2AB6CE00000009704859730000" - $"0FA000000FA001A06A8C770000008E49444154789C8D913116C4200805071F47" - $"E1ACA953ECF1629D1B6C6B0A233ED164F737CA6704542900892C394BC9801440" - $"339000AA490BA12100A22D59B3E6BB239E70F09679D26CA851CB58B0DEE503B9" - $"F4FC8EC6DEFBC5765D7D80E7FE7AAF4774ACBB1A9185A49C6F6960FB28846BD8" - $"54739AB00FFFC8184C509A91094A0B2442FFFC980ED1FA9994ED679D0B07B91C" - $"F1A3B1DDDF0000000049454E44AE426082" +resource(21, "next_down") #'PNG ' array { + $"89504E470D0A1A0A0000000D494844520000002C000000180806000000816F1F" + $"BA00000546494441545885D597CF6B136B17C73FF3EBC964263149439AC42634" + $"6D63D4540583E242D05004DD88B816C1ADFF842B03EEDCEB5EDCB8D48D821B8B" + $"44414408B4B18D15C4A09234627EB5C9CCDC459869AF4D7BAFFA9697FB85C0C0" + $"4C9EE733E77C9F73CE484B4B4B0EFF21C9FF6F805F95BAD74D49929024095996" + $"BDEBFD92E338388E836DDBDEF5388D0596651945515055154DD37600EFB6D89F" + $"025B96E5FD86C3A107BF27B0A2280821D0751D555569369BBC79F3867ABDCEFA" + $"FAFABE010364B359E2F138F97C1E5996190E875896856DDBE381154541D77574" + $"5DE7F3E7CFDCBF7F9F72B98CA228C462310E1C388010024551FEA7A08EE3301C" + $"0E595E5EA6DBED629A2657AF5EE5D4A9535E66DD2079C0B22CE3F3F9D0759D72" + $"B9CC9D3B770806835CBC7891D9D959C2E130420854754FDBFFB66CDB66636383" + $"76BB4DA3D1A052A9D06AB53877EE9C6749C771B6805555450841A552A1542A91" + $"CFE7397FFE3C33333398A6892C6F15144DD30076A46B37B9167333635916FD7E" + $"9FC160B0C35E8EE3D0EFF769341A341A0DDEBF7F4F2A95C2300C00A4A5A52547" + $"9665CFB3376FDE646262824B972E3133338310620780699ABC78F1825C2E472C" + $"1663737313CBB276F5B661183C7AF48867CF9E792F502C16B970E1C2AEF61A0C" + $"06B4DB6D3A9D0E00914884898989511D764BD7AB57AFB06D9B3367CE303D3D3D" + $"16D68DC2D3A74FB971E306B76FDFA65AAD6218064288B1A5CFB66DBE7DFB46B3" + $"D9A4DBEDD2EFF7F9FAF52B1F3E7C18BB3E8C326E9A268944824824C2EAEA2ADD" + $"6E77640977936AB5CADCDC1CE9741A9FCFB7EB62B66DA3280AD168946AB5CAAD" + $"5BB73878F02057AE5C616161C18B906B1737F242087C3E1FB1580C4992E8F7FB" + $"BBEE2149129AA6A1AA2A7EBF9F7ABDCED4D4D456A7734D3F3939492010F8574D" + $"C2B552341AA5DD6E73EFDE3DAE5DBBC683070F180C06F8FD7E5455FDED86E356" + $"084551180E877CFFFE7D0BD8711C1445C1308C5FAE0492242184201289601806" + $"4F9E3CE1FAF5EBDCBD7B975AADF65BB0DBD7966519DBB6B72CB1FDE69F4404C0" + $"EFF7333737472A9542D7755EBF7E8D10E28F9A8D24490C87430683C108D8EDDD" + $"8AA27835EF57659A26E9749AE9E9694CD3A456ABB1B6B6462A951A5BBE7E0556" + $"9224EF4C78C0B66D130A85F61C3CC6291A8D92C964989A9AC2B22C565757E974" + $"3AE472398AC522A9540AD33479FEFCF96FC1BA734DABD51A39C005B62C8B6432" + $"49BD5EFFC7851CC741D3340A8502B95C8EF5F575DEBE7D8BAEEBE4F3798E1E3D" + $"CAE4E4A49729CBB2BCAA924EA7090683A8AAFA8F4D475114344DF31A89106204" + $"EC4E45A9548A56ABF5B756384EBD5E8F502884AEEBBC7CF992442241B158E4D0" + $"A1430483C11DCFF7FB7DE2F1B8773E1445616363634FEBB965CDE7F3B1B8B888" + $"10825028B475E8068301BD5E8F68348AA2287B8E92BD5E8FB367CFF2E9D3274E" + $"9E3C492693D9B5C9B801999F9F676D6D8D56AB85AAAA442211E2F1F8D8E76559" + $"46088161185896C5C3870F29140A84C3E1ADC6E1CE0A3F7EFC201C0E639AA6B7" + $"D9CF6DD7344DB2D92CD96C7657C8ED1242904C264926937B3EE7FAD5E7F37935" + $"BC542A110804989F9FFF7B846559C6300C028100E57299C3870F73E4C81160FF" + $"E6DF9FE57A56D3343A9D0EA552899595152E5FBECCECEC2C9AA68D861FF70FB6" + $"6DD3E974F8F8F123EFDEBD63737393D3A74F73ECD83142A1D0BE7E22C128D3B5" + $"5A8DC5C5451E3F7E4C28146261618142A1402412199DAD9FBF9A1DC7A1D7EBF1" + $"E5CB17969797A9542AACACACD0ED76F71576BB128904C78F1FE7C48913643219" + $"02818067D91DC0AE2CCBA2D3E9D06AB568369B743A1D86C3E1BE82AAAA8AAEEB" + $"844221A2D1A857FEB6EB2F5A633270530D50C00000000049454E44AE426082" }; -resource(20, "eject_down") #'PNG ' array { - $"89504E470D0A1A0A0000000D494844520000002300000013080000000148CFDB" - $"BE000000096F464673000000000000000000DA2AB6CE00000009704859730000" - $"0FA000000FA001A06A8C770000009049444154789C8591D111C3200C431F9C97" - $"C8065DA31E217364820CE771B246FA110E834DAEFA010B5916000F0CB382B58A" - $"62400570B292704BEFA800DA7736770CD60DDF7EA83A793C361AA801E5CE5C16" - $"1DFB4C7C7C5E1CE7F000EFF3A5AD16197556A26411BA702C728F383781700D8D" - $"EF98137AF8578D4212D52C49A2BA9044D1E2C71264AAD29500285CFF6CB61FF3" - $"3B15C0D5E713DD0000000049454E44AE426082" +resource(22, "next_up") #'PNG ' array { + $"89504E470D0A1A0A0000000D494844520000002C000000180806000000816F1F" + $"BA00000554494441545885D5974F6B135D1BC67F9399A46932FD933421A6295A" + $"C1546D68A020BA5310041157AE4470E3D20F50772EFD127E0D37A52B11056B41" + $"B45552ACB169DAD0D6DA4C924926339939E759E449DAB4697D9E47E5E5BD20AB" + $"19EEFCCE99EB5CF77D945C2E27F93F92EF7F0DF06FA59DF4404A89EBBA589645" + $"A3D1C0B66D5AAD56F7D9EF94A2280402010607070985420483417C3E1F8AA2FC" + $"1C584A896DDB7CFFFE9D62B1C8B76FDFD8DEDEA65AADE238CE6F870550559570" + $"384C2C1623994C72F6EC59C6C7C7191919C1EFF7F7802B873D2C84A052A990CB" + $"E578F3E60D1F3F7E646C6C8CD9D959128904A3A3A3BF1D160EBED8DADA1AE572" + $"19C330B874E9123333334C4C4C30383888CFE7EB051642502E97595A5A627E7E" + $"9E7038CCA3478FB872E50A42083CCF43088194F28FEC32B4AD21A5C4344D5EBE" + $"7C8961186432992EB4A228079668341A7CFAF489F9F979A6A6A6989B9B435114" + $"EAF53A8EE3E079DE1F87EDFC344DE3E6CD9B944A250A8502434343689A86DFEF" + $"6F037B9EC7F6F6366FDFBE25994C3237378710A207F6B07677779152A2EB7ACF" + $"E73A49C562915C2EC7EEEE2E8EE3108BC5989E9E26954A110C068FBDEFF3F9F0" + $"F97C44A3516CDBC6B22C1CC741D3B43670B3D9647D7D9DADAD2D9E3D7B86E779" + $"D4EB756CDBEEBBA38542817C3E8F9492542AC5D4D414636363685AFFD0F9F1E3" + $"07FBFBFBC4E3715AAD16A669B2BCBCCCF9F3E7FBBEDFB11E80A6690821D034ED" + $"C0129665B1B3B343369B251E8FD36C364F4D04D775090402288AC2D6D616EBEB" + $"EBC4E3712E5EBC4832993CB66BAAAAE2791E6B6B6BECEFEFB3B3B3C3B56BD708" + $"0683388ED3F73FA494288A82108252A9C4B973E7DA0B0068B55A349B4DB2D92C" + $"AD568B56AB8510A26FA1CEAA2B950AA55209CFF33873E60C8661F0EAD52B745D" + $"279D4E33393989AEEB5D5F0A21300C83BDBD3D1CC74108D137678F420B21C8E7" + $"F35CBD7AF5C0C3524A7C3E1F914804CFF38E79F624398E83611894CB65C2E130" + $"894402BFDFCF870F1F58595961727292743A7DEAE27F2621049665619A66DB76" + $"9D079DD379D83FFFA668AD56C3344D36373789C562C4E371BE7EFD0A70A2B7FF" + $"696DCFF3B06DBB37D65455057EADED4A2969341AACAEAEB2B4B484AAAADCBA75" + $"8B6C36FB4B353B91DA055655B57B88FEAB5CD7A55EAF53AD560985423C7CF890" + $"7BF7EE110A85585C5CFCA5BAB66D77670B0D60606080D1D1D19F1EB67EB26D1B" + $"D334A9D56A5CB87081C78F1F73FBF66D5CD7A5D96C621806B66DFF2758CFF3A8" + $"D56A542A15745D07FE4E895028C4F8F838CD66B3A7A39DB4E39AA6E1380EF97C" + $"9E4AA5C28D1B3778F0E001994C06C771A856ABDDC90E6064640429259B9B9BDD" + $"26705AFD8E4CD3A45028605916D168B49DC700814080542AC5C6C6068D460368" + $"DBE4A4C3323D3DCDFBF7EFB973E70EF7EFDF271A8D7677B35FC24C4C4C70F9F2" + $"655CD7C5755D1445616666E65460C77128140A2C2F2F93C964F0FBFD58967530" + $"FC4829D9DBDBA352A9E0380EC3C3C30C0F0F1F1BEFA0DD3AFD7E3F81408056AB" + $"756247ECA893408140005555BBF9EA384ECF97E8707460171616585D5DE5F9F3" + $"E7E8BA8E6559BDB1168FC7191D1D657171918D8D0D1289048944025DD77BC085" + $"10D8B6FD8FBD29A5EC36A4D3DEB16D9B4AA5423E9FE7F5EBD77CF9F285A74F9F" + $"12894468341A789ED73B0F1FEE4A0B0B0BACACAC108944884422DDF1EE5792E4" + $"34B9AE8B6118140A053E7FFECCD0D0104F9E3C61767616CBB2BAE74B397A09ED" + $"4C4A9AA6512C1679F1E205EFDEBDA356ABFD11D0A34AA7D35CBF7E9DBB77EF32" + $"303040B3D9ECC202C7810F43FBFDFEF648A76927DEB17E970ED7164274CFC6D1" + $"A8ED1B039DF62C84C075DDEE02FE2430D08DD3A3379CC3FA0B6F532C48C3CBF2" + $"5B0000000049454E44AE426082" }; -resource(21, "eject_disabled") #'PNG ' array { - $"89504E470D0A1A0A0000000D494844520000002300000013080000000148CFDB" - $"BE000000096F464673000000000000000000DA2AB6CE00000009704859730000" - $"0FA000000FA001A06A8C770000009149444154789C8D91BB11C4200C051746A5" - $"5C19D4E7D8C195A43688DD81532E309F41C2F6BD04F4B44802420110B22642C9" - $"402880642002D5A485D01080202D7965B5EF923DD1C1AA4F4FAA4E35AE326AAC" - $"67F581BAE43867631FFD6CBBA131C07D7FA96BB28E0E572CB25028C7531AD8BE" - $"02E61AEA6ABA09C7F0B78C8283A2471C14178885FEF93199A2F53309DB6B9D1F" - $"5A8523B87099497F0000000049454E44AE426082" +resource(23, "repeat_down_on") #'PNG ' array { + $"89504E470D0A1A0A0000000D4948445200000030000000180806000000BCFD7E" + $"DC00000671494441545885D5975D6854E919C77FE72B67CE64BE27CECE4CDCB4" + $"A99B0FA2A498D42506F5A21706BC50285E2878D30B590BA2205E79D1923B2D82" + $"985E4428168A458294568B7665F5A2821749836D1CA2C9CE26D1B5EB3099C9A7" + $"93734E66E6E49C5E8439263B492CEDA6B07F3870785FE6CCFFFFFC9FE7799F57" + $"181F1F77F81E43DE6A531004F71145114110B69D90E338388E836DDBEEFB56D8" + $"508020084892842CCBC8B28C2449EB047CE8A3FF0B2AE4575656D63DB66DFF67" + $"024451A4A6A606555551148552A9C4F3E7CFC9E5724C4E4E6EBB008086860622" + $"9108EDEDEDA8AA8A65595896E5BAB2A90051145155154DD3300C839B376FF2F0" + $"E1438AC522A1508870388CD7EB4596B7CCBCFF1A8EE3B0B2B2423A9D46D7756C" + $"DBA6BBBB9B23478E1008045CF26B450895221604015555F17ABD4C4D4DD1DBDB" + $"8BAEEB747676D2D4D444341A45D3341445D9D65A701C8752A984699ACCCFCF33" + $"3D3D4DA954A2A7A78744225155176E286559465555969696E8EDEDC5E7F371F4" + $"E8515A5A5A0806834892B46DA437136259168B8B8BE47239D2E9348AA2100E87" + $"1145D11521C36AEA54227BE5CA15344DA3A7A787B6B636FC7E3FAAAABA02CAE5" + $"32A55269D3A2FAAE2008028AA2108944D0348D42A1C0ECEC2C8661108BC5A8A9" + $"A9792FA0D22653A9145353531C3E7C98D6D6562291088140004DD39024899595" + $"15969797310C03D334B12C6B4B12B95C8E6C364B7B7B3BE9749A402080244998" + $"A689611894CB653792952002E8BA4E474787BBAE691AAAAAE2380E994C86B76F" + $"DFD2D0D0B0DA292B020052A9144D4D4D343737138944088542F87C3EFEFAE801" + $"773FFF13D95C96B63D6D9C3EF11935928A6DDB9B3A91CD6679F1E205A9548AFB" + $"F7EF73E9D225060606902489B9B939F2F93CBAAEBB021445211008108FC78946" + $"A3DCBB778F63C78EB9224451449224FC7E3F63636344221182C1E0FB1AB06D1B" + $"D33449269384C361344DC3E3F1F0EBDF5CE6E6C06FF1463CF8E33EFE911FE457" + $"7F9CE2E79FFE82445DD2B5722D5EBF7ECDE4E4248F1E3DE2F2E5CBEEFA891327" + $"387FFE3CF97C9EDBB76F6FEADC8D1B37A8ADADA5AFAF8F73E7CEB9292549125E" + $"AF976C368BAEEB048341C4CA8F1CC74114457C3E9F5B0FD3F92CBFFFF3EFD8D9" + $"19A7FD67ADB41DD945F34F7F48EC27419E64BEE0C993272C2D2D5511989D9D65" + $"6262621DF90AAE5FBFFEC1FA3973E60C8220547DBB5217BAAE532E9701DE0B80" + $"55AB6459461004CAE5325F7DFD15893D3BF8C1A74976348709C6FD2412495A3F" + $"DA832A7B181C1C2497CB5511D0757D4B820303035BEE038442214AA552950060" + $"5D1391E1FDFC21CBB2DBA24CD324168AD1D8D9C08E4F22D47963A892878FBC09" + $"C29E08FF1CF90BF3F3F31B16B2699A84C3E10F92CC64322493C90DF744515CE7" + $"C0DAB96CED892C5604D8B64D20104014574D595E5EE6CBB1343BF21F93543FE6" + $"47C12676477F4C63F0135EFDFD1B3EFFC317D4D7D7E3F7FBABFE3C9FCFE3380E" + $"77EFDEFDA088E1E1E1AAB5542AC5C4C404D3D3D3EB04489244A150C0B66DD70D" + $"D701CBB2A8AFAF2793C9B811F0F97C880B35DCFFE5DF4836C7F07A6A79FDE5D7" + $"8C0CA6E8E8E8E0E0C18344A3D12A02A74E9DE2EAD5ABD4D6D672E7CE1D62B118" + $"7EBF1F4551DC001986C1CCCC0CD96C969191114E9F3ECDD0D010854281D1D151" + $"9E3D7BC6AD5BB7DC6F5606CB57AF5EB9EFAE808AA24422C1C2C2825B2C894482" + $"43870E11080448A552FC6B7A024DD33879F2245D5D5D3435356DD885002E5EBC" + $"C8D9B367B16D1B45515055D5256F59168661A0EB3AC56211555579F9F225D7AE" + $"5DE3C2850B64329975755299121445E1E9D3A7C4E371344D5B75667C7CDC597B" + $"6C2F2E2E9248245014C51D6B0DC3A05028609A268AA2100C0657DD11C50DC97F" + $"57A8A48DA66978BD5E868686E8EFEFE7F8F1E3ECDBB70F8FC7B3FE24160481C5" + $"C545545525994C22CB32B66D23CB323E9F6F5BC96E445C9665F73C9A9C9CA4AF" + $"AF8FCECE4E76EDDAB57E9480D59CAFADAD25140A914AA5C866B3747575B95D69" + $"BBEF006B5169E78AA2A0280A8F1F3FA6BFBF9FD6D656F6EFDF4F5D5D9DEBBE2B" + $"A0324EC7E3712CCB62747494E1E16176EFDECDDEBD7BD9B973A7DBC6B61B8220" + $"303B3BCBF0F0300F1E3CE0CD9B3774777773E0C0011A1B1BD7D59DF0ED4BBDE3" + $"38148B45E6E6E6989898606C6C8C743ACDCCCCCCB613FF36FC7E3FCDCDCDB4B7" + $"B7D3D2D242341AAD6A1A55022AB06D9B62B1C8C2C202F3F3F3BC7BF78E52A9F4" + $"7F49A5CACDD0EFF7BB439BAAAA1BBABFA980EF0BFE0D52D3CA4BBD7F96A40000" + $"000049454E44AE426082" }; -resource(22, "save_up") #'PNG ' array { - $"89504E470D0A1A0A0000000D494844520000002300000013080000000148CFDB" - $"BE000000096F464673000000000000000000DA2AB6CE00000009704859730000" - $"0FA000000FA001A06A8C77000000AD49444154789CA5D0316EC4300C04C0A1E0" - $"2AAF70A1EFE51BA953DCF32440A9EE07AE0E500ACB675C622306C2462477B15C" - $"6D7448AA5A1395E84835D428885E650A13348F418198AA8126F4CECAFBB2750F" - $"9B0A322890935F358DB7615EDB03D6413D0DED52F7E579B0C0E7AA943B7A3ED1" - $"DE0CF49F9B68078EC6E254A78CCF9F79BE1F030B6FE0E336B16CEBBCBB0A6507" - $"AE24748533BD4C7181A3C1DCE67FDD2A7904397B492BFAFB5F32B76F1913323C" - $"2181DF6C0000000049454E44AE426082" +resource(24, "repeat_up_on") #'PNG ' array { + $"89504E470D0A1A0A0000000D49484452000000300000001808030000008B238E" + $"EE0000000467414D410000AFC837058AE90000001974455874536F6674776172" + $"650041646F626520496D616765526561647971C9653C00000267504C5445ACAC" + $"ACDBDBDBCECECECFCFCFD8D8D8D2D2D2D6D6D6D1D1D1CDCDCDD4D4D4B8B8B8B7" + $"B7B7A2A2A2BBBBBB8686867A7A7A696969484848E3E3E3DFDFDFA6A6A6C9C9C9" + $"8D8D8DA0A0A0D9D9D9464646A4A4A4444444A3A3A3BABABA6C6C6C6E6E6E5656" + $"56E7E7E7CACACAA8A8A8BFBFBFB2B2B27474749E9E9EC4C4C4CBCBCBB4B4B481" + $"81815C5C5C898989AFAFAFE5E5E5999999ADADAD838383AAAAAA282828505050" + $"A7A7A7626262CCCCCCE6E6E6D3D3D3C1C1C1B6B6B6E4E4E4C6C6C6717171BEBE" + $"BE2F2F2F919191D7D7D7909090DEDEDEE8E8E88C8C8CA9A9A9ECECECE0E0E068" + $"6868B3B3B3C2C2C27070702D2D2D7B7B7B2323233C3C3C5454543F3F3FDADADA" + $"BDBDBD6B6B6B7373737979799F9F9F8080803A3A3AC7C7C79D9D9D7BC26DAAD6" + $"A1F0F1F08B8B8B539347284722F5F5F5589B4A3B68328B908AB0B0B0525E5084" + $"84847878788AA0863D6D3449494968B8587896727E7E7E828282A2D498C8C8C8" + $"8A9388C3C3C3B5B5B5E1E1E1586F526FBD605663537D7D7D9A9A9A5CA34E8FCB" + $"836A7A663E3E3E9696964242425151515B5B5B80897DB9B9B9676767656565A6" + $"B3A387C87A5555552A2A2AC1E2BA7C7C7C858585A1D49764A856878F865F5F5F" + $"4F534E727272C5C5C53D3D3DB1B1B16ABB5A767676508E449595953A60326C87" + $"66EDEDEDDDDDDD86C7798E8E8E9898982C2F2BB5BAB5454545595959303030D4" + $"D7D37E817EEAEAEA6666664040401E361A579A4A1B2F1720381B4B5449929292" + $"414141979797141414B2DCAA1C1C1C6A6A6A73B6659B9B9B93939391AF8B79C2" + $"6B6060605858584B4B4B4D4D4DA1A1A1949494E2E2E2DCDCDC353535E9E9E9D5" + $"D5D5D0D0D0EFB125B5000002DA4944415478DA623843220008200628CD6117A6" + $"A567C8801518AA76946B3243150204105803B312EF51A3DD2B4D8F6007A687BC" + $"8B0C7C663081350004104803B3868CFCCCA6F0689EA3D881B878B15FAFDC525E" + $"B02D0001C400526F102C1D65794A515FE8380E2024E46518308F9703A8012080" + $"801A44791474244E1D3FC1C2761A1760630965B45217F105BA0A208018CE3069" + $"C949B3583272B2E30D1C764E4E26656E51E6330001C47026F69824973E2313AF" + $"8CD331635F26A8BC2CCF19632E5E5565191E1E290F0F75B0160E2D59A0068000" + $"6238E3C02F60BB8843A46BD5AEC015DA151660F55C625315CEE4040804E70B0A" + $"1E698BE0D30687BCB10DD0150001C47086CB5E5D984D4F61C796DCFD0BA62539" + $"80ECC8141304A908E983DAE71D610ED220D27C9AF50C4000319CE1B6F7613CA3" + $"1BD8D8BFB3A4614F062F48439C0044A109CC076A0A600DB52C9C67000208A841" + $"8D5B42897F59C2A4C507AAD30A81669C39B35500CDCBD9A6200D32D3434F9F01" + $"0820A08639DC2C4C4BB27AE26717D4E755093903A574F9612A6D20149F3490B0" + $"382ACFC87606208018CEC84EE06261E55A337963F2DCF4CDEDA758402E888C86" + $"69D80B2279CCFD8164E97681136C67000288E18CB5982A1BEB198BEEF9291B36" + $"D5242AB28154E874F2BBC4F14849D5F1C9879F31703F08527FC67AA29C2BDB19" + $"80006238A369A66CC5CECCC9B8BA6CCAF2544F4656B0C9413121928282D2318E" + $"268EDBCEB4803DCFA4B7CEC88BED0C4000019386B594869D123B9BABE2424F7D" + $"A87A2C8059856FBDAC30E719800002A556955966C04867656371E6C4993498C2" + $"C424E52D81E601041050033B3BB3B86E14572C134ED5CC4A2A6691413AC29540" + $"0F020410C80676ABD3E2E67E462EFB8EE1004E7C729227F98FDBB20093064000" + $"81731CEB69090EF7D69378C0616D8EB5C759401E0408200668E29510B655743B" + $"851BB8099D380DCE000001042B04584FB330329EC0051819594E43C30F208018" + $"482D6600020C008BFA748CF2FECFB20000000049454E44AE426082" }; -resource(23, "save_down") #'PNG ' array { - $"89504E470D0A1A0A0000000D494844520000002300000013080000000148CFDB" - $"BE000000096F464673000000000000000000DA2AB6CE00000009704859730000" - $"0FA000000FA001A06A8C77000000A549444154789CA590CB11C3200C449F189A" - $"F08D63DA3025B80E5790E2E44E32E492369403E0908013CF642FE8B3B3BB0200" - $"049D371C6C1428A6A2794504050790120DCC2BCDD60CC003776A75A3AA00B168" - $"03B3A3832F6F02422E072CB17ED693D6653754804B568A06583CD0AE01EC7322" - $"6990A80C0E75B41C3F0E2DACDF4FE03A79586A175FA964971DBAF738C3F16F9D" - $"9CE09000420A7F79692C1F1968CF4278FC92999E50C526E88C462E9A00000000" - $"49454E44AE426082" +resource(29, "repeat_down") #'PNG ' array { + $"89504E470D0A1A0A0000000D49484452000000300000001808030000008B238E" + $"EE0000000467414D410000AFC837058AE90000001974455874536F6674776172" + $"650041646F626520496D616765526561647971C9653C000001E6504C5445D1D1" + $"D1CFCFCFD4D4D4D3D3D3CECECED6D6D6D2D2D2CACACAD5D5D5B7B7B7A2A2A248" + $"4848DEDEDEB0B0B0CDCDCDC8C8C8BCBCBCDDDDDDD9D9D9CBCBCBC6C6C6DADADA" + $"BEBEBEA9A9A9E2E2E2B2B2B2C7C7C7818181A4A4A4C5C5C5D8D8D8A8A8A88383" + $"83CCCCCC686868999999E4E4E44444447A7A7A4545456262629D9D9D6060603E" + $"3E3E9090909A9A9A282828A1A1A1BABABA898989E7E7E7E6E6E69696968D8D8D" + $"979797DBDBDBE1E1E19B9B9BB1B1B1C3C3C3ABABAB3A3A3A696969868686C1C1" + $"C17575756C6C6C666666565656C9C9C97878787373738484843F3F3FDFDFDF2D" + $"2D2DAFAFAF414141676767959595747474555555A0A0A08B8B8B5F5F5F6E6E6E" + $"B5B5B5B6B6B64D4D4DE8E8E8E0E0E07171716D6D6DAAAAAA7979799C9C9C8080" + $"80BFBFBF2F2F2FC2C2C2ACACAC4949493939395050506F6F6F989898777777B3" + $"B3B3C0C0C06B6B6B5C5C5C3C3C3CAEAEAE8A8A8A4B4B4B9E9E9EC4C4C4BBBBBB" + $"4040409191919292927B7B7BB4B4B4424242A6A6A64646462A2A2A5454546161" + $"615858585E5E5E858585636363A7A7A77C7C7C323232EAEAEA9393933B3B3BE3" + $"E3E36A6A6AADADADECECEC5B5B5BBDBDBDA3A3A38C8C8C7676763737377F7F7F" + $"9F9F9F5252526464647D7D7DE9E9E9E5E5E5949494B8B8B8353535DCDCDCD7D7" + $"D7D0D0D013E4ADB2000002C54944415478DA625848220008200618CDC6C4BA00" + $"1760E56086A95B08104010060387A897C46C9CA0DB824794950DA2142080C024" + $"B390C42C89B0A099B8409B72CA02413926B05A80000211CCE6C6820A5DF3D45D" + $"B46660052D5A8D11450AECAC6077010410103308CD2EE1D68E361197E49C8B1D" + $"705AC99B25A809801D05104040CC2A21CA1D6826C6872F6C1885056A2C131981" + $"AA0102886121DB7C15E7E9F1220C1C0B163031E0D6C2223B57328C7DE1428000" + $"6258C8E4C5A91E6CCD24A862AC22B8800D266FC0B530766EA9A4FC442E2E1971" + $"F162900E45E1025EBE850001C4B09083A7B0C78A8D2792737243391BCC8EB9A6" + $"212E0BDD2AEDEA53B9B923FADDEDA5C18129A0E3B0102080801AE64B7B38C8A9" + $"98B4AB36399926437CC26BCA0DA23CEBA0F629B96B00038795DF8D7321400001" + $"35982BE888082DB0F5B34C9114EB8D650729D0B48328D483B930C005A8618162" + $"8CE4428000026A106D9E23C52AABA49F2CCBCE6CA3200692AFB043F3B2473A50" + $"839CA212EF428000027A5AC8D0448A812548848541346AAAA30048DE500DA632" + $"1C42D9AB2E5CC826C4E2ECB31020801816322F30CB94E29BAB296C6E616CA31D" + $"6C0D76415C024C832588E4D2F006FA797ECE0CDE850001C4B090819957578A25" + $"5139346E66489A6336C4D7797E6A3A9A5C3232BAF6A1B90B95276901D52F5C10" + $"354DA96A214000312C645C2822C3CFA028C6251DE3388753186A72BEAD672D37" + $"B7AA6D925E92EFC26A90E79978666B64092C0408200650AC5BB1303330B25B8B" + $"39B832E2CC374C8246BCEAFEFC0B01020818517C13F40D581770B0E1CB664C72" + $"16B364CBA2395916020410500323BF8F21D77C1EC1F9B8018F84519FBCF60C79" + $"60240104102829308AD8483B29B31B45CEC2053A58F503A76488F30315030410" + $"38ED30BA72CE714A9D870FF83A77CE052702800082263616A9B9ADBA737002FF" + $"7871037E488000041003A9C50C408001004A7F040ABFF409890000000049454E" + $"44AE426082" }; -resource(24, "save_disabled") #'PNG ' array { - $"89504E470D0A1A0A0000000D494844520000002300000013080000000148CFDB" - $"BE000000096F464673000000000000000000DA2AB6CE00000009704859730000" - $"0FA000000FA001A06A8C77000000B649444154789CA5D0BB6DC4301004D04781" - $"A5B80C06EC84DD5C7C811B50270A18BA043370741D5C74802E10751F5B020478" - $"13EE67767638618641D3DA4023CC18DAA8856F84B9A9242264B70E81109B3E1D" - $"500A0BEEC79ADDA4CE820A127C0CFE44EC6FC6B4A41BA88D78087A525DAE8F83" - $"09CE0B532D2875877B15507E77C6BCA1A837767952FFFC9EE6CBEE6C89D367E4" - $"BA56F5A96A7CA53DE2D0114C7CABC6031819A63CFDEB56AADDC8C99B5BD16973" - $"F7EB25BF0326ED2E5BFED7474F0000000049454E44AE426082" +resource(34, "repeat_up") #'PNG ' array { + $"89504E470D0A1A0A0000000D49484452000000300000001808030000008B238E" + $"EE0000000467414D410000AFC837058AE90000001974455874536F6674776172" + $"650041646F626520496D616765526561647971C9653C000001CE504C5445CFCF" + $"CFD1D1D1D6D6D6D8D8D8DBDBDBD4D4D4D2D2D2CECECECDCDCDA2A2A2D3D3D386" + $"8686B7B7B7B8B8B8A4A4A4696969484848DFDFDFA3A3A3C9C9C9BABABAC4C4C4" + $"6E6E6EE6E6E6BFBFBFDADADA565656CBCBCB6C6C6CCACACABBBBBBE1E1E18D8D" + $"8DA6A6A6E3E3E3C7C7C79E9E9E444444A0A0A0D9D9D97A7A7A464646B2B2B2B4" + $"B4B4AFAFAFADADADDDDDDDA7A7A7C2C2C2282828959595838383E4E4E4A8A8A8" + $"9F9F9FB6B6B65050506868685C5C5CAAAAAA747474C5C5C5A9A9A98080806262" + $"627171719B9B9BC1C1C19999997373735454543C3C3C6B6B6BE5E5E54040403F" + $"3F3F3A3A3A9D9D9D7B7B7BBDBDBD7979799191912F2F2F2D2D2D909090898989" + $"828282C6C6C64B4B4B707070555555C0C0C08181818C8C8CE8E8E8858585E0E0" + $"E0787878ABABABB3B3B3E7E7E7B9B9B9323232C3C3C39696967D7D7D6666666A" + $"6A6A2A2A2A5B5B5B9A9A9A424242BCBCBC6060607C7C7CDEDEDE494949929292" + $"3D3D3D6767675858589898983E3E3E8484845151519797973939397E7E7E9393" + $"93414141727272767676AEAEAEC8C8C8BEBEBE5F5F5FB0B0B03B3B3BB1B1B15A" + $"5A5AEAEAEA646464CCCCCC595959ACACAC4D4D4D949494A1A1A1E2E2E2353535" + $"DCDCDCE9E9E9D5D5D5D0D0D0829638CF000002CF4944415478DA629849220008" + $"200628CD11EEAFADA33B012BD0D54A4D97862904082030CD202B37D938BBDF62" + $"227660516159EF926CCB0ED6001040200D0CA2426265551EF69C93B10335B5B0" + $"C828994A39B02D0001C40052EFE2A66A263E3DC553690A0EA0A494A0EB6724C7" + $"01D4001040400DC29C5256EAD3A74C63669A810B30314BB270A9281A005D0510" + $"400C33D9B5655499C5595819F1060E232B2BBB298F30C34C80006298A93C4993" + $"D79365A62D6F8B4E81302C2C4438675AF3CA69990A7172F2D9D9A980B570688B" + $"00E501028861669B06BF89DE4C91C0DE8951897C0690A0E05568979A99E8C7EF" + $"5622203031D7953B061CF2D6E64057000410C34C5E47154126096E2F4B456D23" + $"7B6B65901D1D0A022015DE3950FB2C5D1D401A143366B0CD04082086993C8EC9" + $"2C6C7652DCE2F2925C12136C411A7CF9210A0D613EB091026BC864669D091040" + $"400D363CEAEC66DDD324196495F992B8407E2FE547F372B50548835093E48C99" + $"000104D4D0CCC33C7342D84C69518324D7781656A054A8064CA53984E2560512" + $"7D93C5589866020410C34C91225E663651212D4E2723B14E274190069B007B98" + $"062710C9E9100C245B6BF9A731CD0408208699CE0A5A4C6C33D9A3F923EAD21C" + $"C5F5B8402AACCA35427C39F9F8F2B8C53C66BAC41682D4CF748E9729669A0910" + $"400C33A5F54DB91819D898588554A2A7CB3341E2CFDDC75B534040D527C830A8" + $"71663ED8F3EC3A59C6094C330102081828CE7CA2E1B233B998F5A6C84F63C219" + $"DF0CC09017013A18208040A128D1A50F8C74462E5656369C4983DD5F41534C9C" + $"856D2640000135303232A8859AF12AB3E3CE65B212FA01EE5682F24C33670204" + $"10C80646AE196A0E91C6210D937080406E19CDA91A534C98810E060820706A63" + $"9BA1CE115B33150F8888E1E899C20C72314000314013AFBAA0494ADC74DC204E" + $"69DA0C70800004102C3DB3CD60666199860BB0B030CF800608400031905ACC00" + $"04180072B5E546B93D81DD0000000049454E44AE426082" }; -resource(25, "repeat_up") #'PNG ' array { - $"89504E470D0A1A0A0000000D49484452000000230000001308060000001AA3B4" - $"F4000000A049444154789CED96CD0DC3200C461F15A3782486F104886118893B" - $"1BE44A0F154A0FADF86922A2A8EF6CACC767846C4A29850B608CC102E49C978A" - $"78EF015E3200DBB62D93A93C560BBC735F191121C6387DFEF06454755AC8B64B" - $"7644A45B48550921E09CEBEE7FEA9B51D5EE0BC0C9322104524ADDF543636A35" - $"AE298C8EA7727832B32230984C8B91917CE2BE9FDEAFFC65BE6161DF27566380" - $"4B6C7A004F04A22A52A51390770000000049454E44AE426082" +resource(35, "shuffle_down_on") #'PNG ' array { + $"89504E470D0A1A0A0000000D494844520000003A0000001808030000009C011E" + $"270000000467414D410000AFC837058AE90000001974455874536F6674776172" + $"650041646F626520496D616765526561647971C9653C00000249504C54453737" + $"376F6F6FD1D1D1D2D2D2D5D5D5B4B4B4C2C2C2CFCFCFCACACADFDFDFDDDDDD61" + $"6161D4D4D4535353CECECED9D9D9A6A6A6CCCCCCB3B3B3D6D6D64545452A2A2A" + $"E8E8E8A3A3A38B8B8BDADADAE0E0E01C1C1CBEBEBEC8C8C8ADADAD909090DBDB" + $"DB979797393939424242D3D3D3BABABAB7B7B7969696BDBDBDAEAEAEBFBFBFA1" + $"A1A17A7A7AE4E4E4989898E2E2E2D8D8D8C7C7C7E3E3E3B9B9B9ACACACC6C6C6" + $"E7E7E7EAEAEAE6E6E6EBEBEB8585857E7E7EC0C0C0BCBCBC5F5F5FEFEFEF6D6D" + $"6D515151686868CBCBCBC9C9C9E1E1E1707070AAAAAAAFAFAF8D8D8DA8A8A850" + $"5050B0B0B04747479B9B9BC4C4C4C3C3C30E0E0EF2F2F2A0A0A08ECB82D9DBD8" + $"8E8E8E50804732592B569849729C6A5393477C7C7C49494977777782C6751010" + $"1071717186868642503F898989B4DCAC3C3C3C37622F6BBB5BA4D59A63636392" + $"92923E3E3EB2B2B2566752C1C1C1939393B1DBA878787879A0728282829A9A9A" + $"79C26B5858586767678181819C9C9C5B5B5BB4BCB3F0F0F0D1D4D03A6731C5C5" + $"C5A4A4A4B1B6B0606F5D6060603C413C6B6B6B5CA34E89C97DB5B5B569696960" + $"A9514444441F361AC1E2BAABABABAAAFA96EBC5FB1B1B1DEDEDE1B2F174B4B4B" + $"6C7C69666666A0D3969D9D9D6E806ACACCC988C37C68B95859954D4343432541" + $"1F9E9E9E5A66577E877CA2A2A238622F5D5D5D3838388080801414144D4D4D66" + $"B456F4F4F49191916E6E6E8888887B7B7B8787875D705A40483E90A58C9F9F9F" + $"959595646464E5E5E5B8B8B8D7D7D7949494DCDCDCE9E9E97D7D7D3535350000" + $"00999999D0D0D01345A8F4000003034944415478DA6238443600082006388B49" + $"854578177E20CCC2C3CC04D700104050AD4C2CFC5CAE463B08005D7D292E7E61" + $"986E8000026B65E2513012B3746EF4DB4700146C9591E2946461066B05082090" + $"562661A9BD2A56CAFBD35695B76CC703B2B8AB1D7D7D57B0F143F40204100348" + $"A7ABB9BC52CF3A79713921B59DF8809A909C78B64E851E330F482F400001B5F2" + $"70EEDDB8DF415C4B90986065E7D010F09C7908E45F80006238C4246911C6B061" + $"27B32417970133519A778ACB0500190001C400B4948321CE7897857D90BD1917" + $"0F31367304C898A8B21F02082086432C9C9EDCEE2C626B262C4A9E56B70B622F" + $"EB418143871890540B88881C92606014E006DB7B885955AFE110400001B57259" + $"57DA70D62E9EB220A23EBC890324C72DC22872F0D00124AD22126C8702D9D80E" + $"32405381618CF1218000026A55289137940AED4D8F6EEF5E1D25E10F943AC006" + $"5270E0D04156A07D6C87585959451959050E1C046B653D78886997A043EE2180" + $"000269B5DA2DAB50B334726E46594831AF2650132F8300482B2FA334EB218683" + $"8718190F4AF31EDC77809115A85542845B94C940D0C9E71040000183893F45D1" + $"9079F6BC89F11D330A3729BB832C640C047AEA00581F582B88047900A8555AE2" + $"A0A897A4E0748F430001C470885958D14F96437CD69CCCD4BE2D2B97A9817DC3" + $"26CA08528A45EB014646C69D5C32DB7D0E0104102835ED5CE222E8E1D69AD7BC" + $"3941B914144E40AF7223B4828C416865D87788895F5FDD89F5104000311C6277" + $"9699C4C72CAB69EDADA4DCA56D0AB2539A4194F71054EB3E695E6E64ADAC0CCB" + $"953AF5A7EED33A0410400CA0D4E1C5C4C2C3EEAFA629C4C6473841A8F01B99EB" + $"386A731C020820A083F9F2B5B731491AB0A83011D4C6C4CCC2CF6926A693B3DE" + $"86FD10400081E2585055BDC8849373F21E82804B4A57CC5283777E922AD07900" + $"01044E1E821A558976F2427BC4F61202BA5AEABCFBED1465401E03082048CAE2" + $"3315DAEDE6ADB49F0810DBB65648961DA409208060699C4FD6B67FA1E26E4240" + $"2F58CED6851DA205208018C82F4C01020C00CABFF41A099EB877000000004945" + $"4E44AE426082" }; -resource(26, "repeat_down") #'PNG ' array { - $"89504E470D0A1A0A0000000D49484452000000230000001308060000001AA3B4" - $"F4000000A449444154789CED96410D03211045DF3698C0080290800E041014A0" - $"0A012B041BD34343DA4BCB4269D86CFAAE0393C71F42D800E10488080AC07BBF" - $"5424C608F0900170CE2D93A9DC560BBC725D196B2DFBBE0FEF9F9E4C08615848" - $"B5973CB1D61E16024829618C39DCFFA777268470F800D0994C2FBDC974C9E49C" - $"3FD66B0ABD1295E9631A1581C9636A25D7E2BA8FDEB7FC65DEB101524A59ED81" - $"D61A25728A8F1E0077F2B428384A1FEECA0000000049454E44AE426082" +resource(36, "shuffle_up_on") #'PNG ' array { + $"89504E470D0A1A0A0000000D494844520000003A0000001808030000009C011E" + $"270000000467414D410000AFC837058AE90000001974455874536F6674776172" + $"650041646F626520496D616765526561647971C9653C0000023D504C54453737" + $"376F6F6FB4B4B4D1D1D1A6A6A6D6D6D6CFCFCFD2D2D2D4D4D4C2C2C2CECECECD" + $"CDCD8B8B8BD7D7D7454545DBDBDB1C1C1C2A2A2A616161E8E8E8DADADAB7B7B7" + $"B8B8B87E7E7EBCBCBC535353E3E3E3D8D8D8D3D3D3B2B2B2BEBEBECBCBCB7D7D" + $"7D919191ADADADD9D9D9565656DFDFDFE4E4E47C7C7CE0E0E04F4F4FC9C9C9C5" + $"C5C5B0B0B0A9A9A99D9D9D818181656565DDDDDDEAEAEAA0A0A0CCCCCCDEDEDE" + $"747474E6E6E6CACACAE7E7E73F3F3FBABABAC0C0C0C6C6C6888888BBBBBBECEC" + $"EC9292928989895555550E0E0EA3A3A33B3B3BAFAFAF6C6C6C9A9A9A69696923" + $"2323707070C8C8C87A7A7A8D8D8DC7C7C7939393C3C3C3B3B3B3E5E5E5B6B6B6" + $"91AF8B789672A6B3A39595956E6E6E4B4B4B626262686868284722A7A7A74444" + $"446FBD60A8A8A8A2A2A2A2D4986A7A66BDBDBD6ABB5AB9B9B98A9388C1E2BA8A" + $"8A8A5E5E5E7171718B908A6C8766B5BAB54B544964A8563D6D34141414B2DCAA" + $"A4A4A49C9C9C7B7B7B5A5A5A79C26B3A6032C1C1C120381B579A4A393939C4C4" + $"C4828282525E50848484566353589B4A8AA086AAAAAA508E446060602C2F2B80" + $"897D6363631B2F17F5F5F573B6657E817E5CA34E6464648E8E8E87C87A8FCB83" + $"1E361AA1D497AAD6A1F0F1F0B1B1B1878F863B68324A4A4A9E9E9E767676EDED" + $"ED4F534EE1E1E1B5B5B586C779666666D4D7D397979786868653934740404075" + $"75757BC26D586F5230303067676773737368B8584C4C4CACACAC4D4D4DA1A1A1" + $"949494E2E2E2D5D5D5E9E9E9DCDCDC353535000000999999D0D0D0C3493C8B00" + $"00031B4944415478DA62D84736000820061883CDA22623D85D69331EA0A4132A" + $"17C00DD70A104010AD6C5AF62C3C663D2A9A5BF0014D95CEDC157AC10D50DD00" + $"0104D6CA2DB1D76BD56E67F5E6E4ADF880B1B1937ACEDCA5FEB2BE6C205D0001" + $"04D2CACDA46EA5A9A76A246CAE26B51D2F90525333643113D7D506E905082006" + $"90CEF9BB1D8585B71B2AF3B2EEC00F587995F977ED52CA56B205EA050820867D" + $"6C12E2BB3D8DB62B73301315AECC1CACAC699EA2166CFB000288619F965EB4E2" + $"4E0D760957C56DED9C5C2059A6BD2CFBF631202967E1E3DBC7C3C0C82204D12C" + $"C32C260BB416208018F6D9883B9B6BEC8B375827E0CDA7BFD864DF3E213E46BE" + $"BDFBF62069E5E3E1DCE7C2C9B9176A1CF33E596BA083010288619F98CFF245D2" + $"3A2A25856D61F90B79E4B8F6EDE104C9EFD9B79709681FE73E26262641462696" + $"3D7BC15A99F602E5B874CB39D8F7010410C33E511FD95DFB9CBC53B34A53A6F6" + $"E7D973ED936460016995641460DAC7B0771F23E35E01C9BD0A7B1899805A79F8" + $"84048101CBA22FCDB10F2080805ACD44452CFCBA664C5F5295D81ABE837DDF3E" + $"4617A0A7F680F581B582489007805A0578F60AB2ECE376DD20B2631F400001B5" + $"AE1655E69ADC34654DFAC689C56BA5788136720A32829462D1BA87919191699F" + $"BC71143FEB3E800062D867AD2026CD2E36A1A86E65C79CDAEE9DD2FB805E1542" + $"68051983D0CAA0000A07DF48AF5DACFB000288615F9062E80EE67D2611D571D3" + $"7A5B665AB2EE13601094DC07D5AA20202984AC95898101181272E21EAAACFB00" + $"0288611FB78EEE3E362E0EFE6599B30BFA1CF8D909A70AF9B24A3B0DD67D0001" + $"040C6FAD594C62DAFB584D2D17388410A5D3DDC38D5995631F400001B53273CB" + $"6DDB2A21CFCC2ACDCB41582397364BEC6E961011E67D0001044A20EC32367E8D" + $"F398824CD808EA0B9060D1DF549F246C0AB404208018C08992759F9D8A41058F" + $"63E036BC20D05F7C52C26E0336615360C0EE030820064882E6DDC5ACB8DE6A37" + $"41E016C3C365A4B60B9CCB0002089AA2D97788A84A990BEF240C2CA50C592161" + $"091040F0BCC5CEC12B02CCC60400BF082F072C1200028881FCC21420C0004C0F" + $"DFAD4AE51E720000000049454E44AE426082" }; -resource(27, "repeat_up_on") #'PNG ' array { - $"89504E470D0A1A0A0000000D49484452000000230000001308060000001AA3B4" - $"F4000000E849444154789CCD96410E832010451F8D47992371983981E1301C69" - $"F6DEC0AD5D588C6DD102B6D59FB011828F99FF096E9AA6890BC8394707300CC3" - $"A9207DDF03CC3000E3389E0693D47D5EB2AD1823AAFAF6DDCC9AF6BBB5428848" - $"160440448831FE1E26578D10C23292541511A9DABBBA4D6B901002DEFBA779EF" - $"FD13B08814B7ADAA32EBD2E740D640EB2A95AA0A269D760F240754DAAE2603E7" - $"54EB8F9C9A6054359B9657A0ADB46DA9CAC066B6FC702FD6C9B0697DA981ABD3" - $"D40254AAA63699D96E5AFE7A03C39C16335BC651904330391D01812FC21C0581" - $"8781D37BE26C39E0122F3D803B2D1971A06BDE4E510000000049454E44AE4260" - $"82" +resource(37, "shuffle_down") #'PNG ' array { + $"89504E470D0A1A0A0000000D494844520000003A0000001808030000009C011E" + $"270000000467414D410000AFC837058AE90000001974455874536F6674776172" + $"650041646F626520496D616765526561647971C9653C000001BC504C54453737" + $"37D1D1D16F6F6FD5D5D5D2D2D2C2C2C2B4B4B4CFCFCFBEBEBECACACAD4D4D461" + $"6161CECECED9D9D9CCCCCCD6D6D6DFDFDFDDDDDDA6A6A65353532A2A2AB3B3B3" + $"E4E4E44545458B8B8B1C1C1CE8E8E8ADADADE0E0E0DADADAB7B7B7BFBFBFD3D3" + $"D3909090393939A3A3A3C3C3C3979797969696BABABADBDBDBCBCBCB989898C6" + $"C6C67A7A7ABDBDBDC9C9C9D8D8D8CDCDCD9B9B9BE1E1E1C7C7C7E6E6E6E2E2E2" + $"ACACAC6D6D6DC8C8C8686868757575BCBCBCA1A1A1E3E3E38D8D8DABABAB5F5F" + $"5FC5C5C5AAAAAA4747478181813E3E3E858585B0B0B05151519D9D9D6E6E6EDE" + $"DEDEEBEBEB0E0E0EC1C1C1444444EAEAEA919191A0A0A0B2B2B2A2A2A2A8A8A8" + $"6767676363639595957070705B5B5B8989895E5E5E9292928888889E9E9E3A3A" + $"3AAFAFAF4949493C3C3C7171717777774343437878787B7B7B5858588282829F" + $"9F9FC0C0C0868686606060A4A4A4838383383838424242B5B5B54B4B4B9C9C9C" + $"7676765050507C7C7C3232324D4D4D6C6C6CB9B9B9E7E7E7808080B1B1B17F7F" + $"7F7E7E7E8787879393937979796666666B6B6B8E8E8E646464E5E5E5B8B8B8DC" + $"DCDCE9E9E9949494D7D7D77D7D7D353535000000999999D0D0D0BC64BC540000" + $"02F84944415478DA62984C3600082006388B518199BF0F3FE067E66261846B00" + $"0820A85646665E4123DB4E0240CC544690971FA61B2080C05A19B9346CA57C34" + $"F30DFB0980E66C0E1901596616B0568000026965E497E951702B9A905C9599D7" + $"810784734779383BD7B1F242F40204100348A75180A292BF97A2B2B4A85C173E" + $"20272AAD1CAB13A6C5C205D20B104040AD5C023D4D13CC95E5F9880956764E5D" + $"213BCFC920FF020410C36446599376860CB9C9CC7D7D5C8C4469EE5296560132" + $"00028801682927436A178BA0988998601F0B313673AA7098A9B34F06082086C9" + $"CC0276DC4E8CDE527265DC812C507BD926094D9ECC80A45A485C7CB204039310" + $"37D8DEC92CEA5A8E93010208A855B0D1455E5F4CADD23FA6DA8ED50024C72DCE" + $"243E69F24424ADE212AC937D595927314053817145CD648000026AD5C852D4E6" + $"ED4B0833340BE69076E2044A4D640529983879121BD03ED6C96C6C6C224C6C42" + $"132781B5B24D9ACCD8C7671E3C192080405ADD7A8DF91D2D6D581D3915EC0B38" + $"809A841984405A859924D926334C9ACCC43449527852FF442636A05609716E11" + $"467D3E4BF7C90001040C26DE685563469E206D1E465999062B6B90854CBE404F" + $"4D04EB036B0591200F00B54A4A4C120995E56B4D9C0C10400C9359F8550D2D0C" + $"BA3C35358C4CEC5D2554C0BE6115610229C5A2752213135397204787FB648000" + $"02A5A6AE103D1EF9495E2DFD0E4A56A2A070027A951BA115640C422B43FF6446" + $"5E53354BB6C90001C430995D93A39E87858F23C4C5DCAA574E1364A7248388F0" + $"64A8D67E49616E64AD6C0C854AC5A625FDF29301028801943A421999B94011ED" + $"A7C74E384128F0DA06E878D8704E060820A08379FC6C221865F5991508274346" + $"16665E815A291DD7B81CF6C90001048A633E75B574330101EF6E824050464CCA" + $"4757382D579D67F264800002270F3EDDD2140745D16EA91E42404C5E4D788283" + $"2A0750E764800082A42C1E6DD1DEC872A5094480A4B640510B70900004102C8D" + $"F35858DBC7ABF612025A41D2D6B0B004082006F20B538000030048DA3E5EA3F4" + $"11BB0000000049454E44AE426082" }; -resource(28, "repeat_down_on") #'PNG ' array { - $"89504E470D0A1A0A0000000D49484452000000230000001308060000001AA3B4" - $"F4000000FF49444154789CCD96E16DC4200C46DF5559820D328107F008998301" - $"5026602A066090AC417FB4AE92964B8144BAFBA4281120787CB6210FA0F0062A" - $"A5300178EF5F0AB2AE2BC0170CC0B22C2F83314DFF0F79AE9C3321843FED29A5" - $"A1F93E462154B50A02A0AAE49CBBE7ED76A6E6468CF1E7DBFAECDDE35237CC1E" - $"24C688881CFA534A0760556D06EA0AD3DEFA1A8849440E6EB5AA0BC6767B0652" - $"0352D5FB61CED4BAE09986604208D56AF90DF4ACDA6E81D927A201D95303B2F1" - $"AD09FC008AF7BEEB046E09494F49CFF38C736E2C4C29A5D36A193D8187AF0311" - $"392C6A6E8D82C08DD504D740E04698AB20F09DC0DBB65DA7B928E71C53296FF1" - $"A307C02781096F058F7CB3C80000000049454E44AE426082" -}; - -resource(30, "shuffle_up") #'PNG ' array { - $"89504E470D0A1A0A0000000D49484452000000230000001308060000001AA3B4" - $"F40000007D49444154789CDD96B90DC0200C00CF11A3302B53D2B3012D292224" - $"37F9142343AE85E2EC6B2CADB5C604880801A094E22A9252023864006AAD6E32" - $"9DCD5B4013EEBF408CF1F42DE76C26B3DE662CA7BFE2918C6664B2F532694626" - $"7B2DA3B14EB676268D75B24F321A8B64FFC9A4B14836DF66FA3DE18D00535C7A" - $"003B6C0624445116DF550000000049454E44AE426082" -}; - -resource(31, "shuffle_down") #'PNG ' array { - $"89504E470D0A1A0A0000000D49484452000000230000001308060000001AA3B4" - $"F40000008649444154789CDD96B90DC0200C008F8825588711988309188E7158" - $"C329A2486EF2298E805C6B1787AFC101C20088081E20E7DC55A49402B0C900A4" - $"94BAC9EC2CBD0534FE7A05628C87B35AAB99CC7C97B17CFD19B764345F269B2F" - $"93E6CB648F6534D6C9E6CEA4B14EF64A466391EC3F993416C986BA8C03A4B5D6" - $"DB8310025E64888F1E002BA1FC23C06E93FD8D0000000049454E44AE426082" -}; - -resource(32, "shuffle_up_on") #'PNG ' array { - $"89504E470D0A1A0A0000000D49484452000000230000001308060000001AA3B4" - $"F40000007D49444154789CDD96B10DC0200C04CF11A3302B53D2B301AD534428" - $"3421141070AE85E2FC2F904555950D10111C404A69A9480801E09201C8392F93" - $"291CAB056ADCFB15F0DE3F9EC51887C9D84B66E4F42DBA646A665666AFA69A99" - $"953565BE7A45053B35F54C3F323D3BC9F4F0DB1F782B1907F73EB11A01B6D8F4" - $"004E58642442B55F4BCA0000000049454E44AE426082" -}; - -resource(33, "shuffle_down_on") #'PNG ' array { - $"89504E470D0A1A0A0000000D49484452000000230000001308060000001AA3B4" - $"F40000008649444154789CDD96D10DC01014004F6309EB18C11C26309C71ACF1" - $"FAD148A4495513AA7ABF7C1C475080F00144040DE0BD9F2A1242003864009C73" - $"D36432DB6C81127D3F05ACB5976331C66E32EBED4CCFD5D768922919996CBD4C" - $"2523935565DEBA45997532BD758B328FCFCC999E29D7C9D4C26F9F0305484A69" - $"B607C618B4C8273E7A00EC731B23C09F9ED4020000000049454E44AE426082" -}; - -resource(35, "pause_up") #'PNG ' array { - $"89504E470D0A1A0A0000000D49484452000000230000001308060000001AA3B4" - $"F40000007349444154789CEDD6310E80200C40D15FC351382BA764E706AC7530" - $"2A2636461DDA813711C2F0C3D05454550940444800AD35D790520AC01603D07B" - $"778BD92DDE01A3F4FCE42AE77C9C6BADE6DD17A17E66C658668C65C658668CE5" - $"F504BE9BB07FA6EE28D4CF848A4970EE13DE0408B1E901AC69F9191025EE76CE" - $"0000000049454E44AE426082" -}; - -resource(36, "pause_down") #'PNG ' array { - $"89504E470D0A1A0A0000000D49484452000000230000001308060000001AA3B4" - $"F40000007B49444154789CEDD6C10D80200C40D1AF6109D66104E6600286631C" - $"D6A807A3C1C4C6A887F6C03F11C2E1A5878605101C24220480528A29A4D60AB0" - $"630072CE6698A3D51A30169E9F5C4B299DE7D69A7AF72557939918AD89D19A18" - $"AD89D17ABD81EF36EC9FAD3BE66A32AE300B20BD776B07314682888B8F1E001B" - $"026A19408271DF2C0000000049454E44AE426082" -}; - -resource(37, "pause_disabled") #'PNG ' array { - $"89504E470D0A1A0A0000000D49484452000000230000001308060000001AA3B4" - $"F40000007449444154789CEDD6310E80200C40D15FC3B1381F27E32EDC80B50E" - $"46C5C4C6A8433BF02642187E189A8AAA2A01880809A0B5E61A524A01D862007A" - $"EF6E31BBC53B60949E9F5CD55A8F73CED9BCFB22D4CFCC18CB8CB1CC18CB8CB1" - $"BC9EC07713F6CFD41D85FA99503109CE7DC29B0021363D801523B21550831E27" - $"7A0000000049454E44AE426082" +resource(38, "shuffle_up") #'PNG ' array { + $"89504E470D0A1A0A0000000D494844520000003A0000001808030000009C011E" + $"270000000467414D410000AFC837058AE90000001974455874536F6674776172" + $"650041646F626520496D616765526561647971C9653C000001B0504C54453737" + $"376F6F6FD1D1D1B4B4B4CFCFCFA6A6A6000000D4D4D4D6D6D6C2C2C2D2D2D2D3" + $"D3D3CDCDCDDADADACECECE8B8B8B454545B7B7B72A2A2AE8E8E8616161535353" + $"DBDBDBB2B2B2DFDFDFD7D7D7BCBCBCC0C0C0B8B8B81C1C1C7E7E7ECBCBCBE6E6" + $"E6DDDDDDC7C7C7E3E3E3C9C9C9919191565656D9D9D9ADADADC5C5C57D7D7DE4" + $"E4E4A9A9A9D8D8D8E1E1E1A0A0A0A4A4A4AFAFAF868686C6C6C6C4C4C4EAEAEA" + $"E0E0E0CACACA9595953B3B3BA3A3A37C7C7CBEBEBE5555559D9D9D6969694F4F" + $"4F747474C3C3C34B4B4BB0B0B0BBBBBB9E9E9E6565659A9A9A939393ABABAB8D" + $"8D8D9292927373738181816C6C6C6E6E6E9B9B9B393939C8C8C8828282B6B6B6" + $"686868DEDEDE6464645A5A5AA2A2A2BABABA7171710E0E0EB3B3B33F3F3F4040" + $"407070708888883232329C9C9C4A4A4A606060A8A8A8767676E7E7E74444447B" + $"7B7B626262848484BDBDBD4C4C4C7A7A7A8A8A8A636363CCCCCC898989757575" + $"676767AAAAAA808080E5E5E5AEAEAEB9B9B9B1B1B1BFBFBF9F9F9F5E5E5E9797" + $"97666666787878858585C1C1C14D4D4DA1A1A1ACACAC949494E2E2E2D5D5D5E9" + $"E9E9353535DCDCDC999999D0D0D05F4CA0E1000003074944415478DA62E8271B" + $"000410038CC162DE521D67A8D18E0768B884DA28F1C0B5020410442B8B8A2B2B" + $"BF63919A432B3EE0A096166364176702D50D104060AD3C527DF6093DB6D6B951" + $"6DF880BE7E89757D6AA3B778300B4817400081B4F2305BC73BD849980A2B682B" + $"77E205CADADA8AAC8E723A9A20BD0001C400D299D1E3232CDCA9A82EC9D1851F" + $"7048AA8BF5F66A146A1803F5020410433F8B945C8F8769A73A3B1351E1CAC4CE" + $"C191E72168CED20F10400CFD2A76CEAADD66ECC6325586522A604F30F7B1F6F7" + $"332029671510E8E7676064158168E6669211075A0B10400CFDD272B60A66DCAE" + $"AA11ADB64D069C7CFDFD22028C027DFD6C485A05F839FB633939FBA0C631F58B" + $"4703ED000820867E99C4063D5D69A3843056668B8A7225967E364E903C5B7F1F" + $"33D03ECE7E66666621466656B63EB056E63EA01C9F4E0A3B573F400031F40B26" + $"8AF772E9A81929E8F172D7B603C34E948115A455945196B99FA1AF9F91B14F56" + $"B44F8B8D9119A8955F40440818B0AC7EBAECFD000104D4EA28C8CB5717D9CBCB" + $"62AE64E0C50D0C2CC658A0A7D8C0FAC05A4124C80340ADB2FC7D42ACFD3C56BE" + $"BC5DFD000104D45A2AA8DEDF1ED22F6FC2E9E5DB2CC60EB491538811A4148B56" + $"36464646E67E79FD00318E7E800062E88FD692D1E532B1128F0AB408B00C9460" + $"EF077A5504A115640C422B8316281C822DEC7B39FA010288A1DF4935B48BA99F" + $"4FDADE392839464191BB5F964148B41FAA554B565404592B33030330246CE4FC" + $"2538FA010288A19FC745A79F858F8B83DDCA4DBA5B8F838884216F109964C6D1" + $"0F1040C0F056A96196D164E1D655ECD4EB254AA7A1BF2513D063000104D4CAC4" + $"63D3D12625DFCFCD0E8C2C82804F9335AC87B59297A91F20804009848B5BBA20" + $"C48DD9A99885A03E252956BFFCA074E170604400041003385172F427A9B967F3" + $"FB7876E0059EDE7211593DEE2CC2E1C080ED07082006488296EC65522D8BEF21" + $"082C73F8F94CB57BC1B90C2080A0299AAB8B57425941B89B30C85456E4800409" + $"4000C1F31617BB242F301B130062BC92F0B004082006F20B5380000300AAFF26" + $"3811A98DBD0000000049454E44AE426082" }; diff --git a/src/apps/cdplayer/DoubleShotDrawButton.cpp b/src/apps/cdplayer/DoubleShotDrawButton.cpp index 9f7d5b2938..ace83e85d2 100644 --- a/src/apps/cdplayer/DoubleShotDrawButton.cpp +++ b/src/apps/cdplayer/DoubleShotDrawButton.cpp @@ -1,3 +1,10 @@ +/* + * Copyright (c) 2006-2007, Haiku, Inc. + * Distributed under the terms of the MIT license. + * + * Author: + * DarkWyrm + */ #include "DoubleShotDrawButton.h" #include @@ -12,6 +19,7 @@ DoubleShotDrawButton::DoubleShotDrawButton(BRect frame, const char *name, BBitma { } + void DoubleShotDrawButton::MouseDown(BPoint point) { diff --git a/src/apps/cdplayer/DoubleShotDrawButton.h b/src/apps/cdplayer/DoubleShotDrawButton.h index 0b2a6c627e..7b1c7632d4 100644 --- a/src/apps/cdplayer/DoubleShotDrawButton.h +++ b/src/apps/cdplayer/DoubleShotDrawButton.h @@ -1,3 +1,10 @@ +/* + * Copyright (c) 2006-2007, Haiku, Inc. + * Distributed under the terms of the MIT license. + * + * Author: + * DarkWyrm + */ #ifndef _DOUBLESHOT_DRAW_BUTTON_H #define _DOUBLESHOT_DRAW_BUTTON_H @@ -13,8 +20,8 @@ class DoubleShotDrawButton : public DrawButton { public: DoubleShotDrawButton(BRect frame, const char *name, BBitmap *up, - BBitmap *down,BMessage *msg, int32 resize, - int32 flags); + BBitmap *down,BMessage *msg, int32 resize, + int32 flags); void MouseDown(BPoint point); }; diff --git a/src/apps/cdplayer/DrawButton.cpp b/src/apps/cdplayer/DrawButton.cpp index 7c116ec2d5..bcf9bc9bd8 100644 --- a/src/apps/cdplayer/DrawButton.cpp +++ b/src/apps/cdplayer/DrawButton.cpp @@ -1,14 +1,22 @@ +/* + * Copyright (c) 2006-2007, Haiku, Inc. + * Distributed under the terms of the MIT license. + * + * Author: + * DarkWyrm + */ #include "DrawButton.h" DrawButton::DrawButton(BRect frame, const char *name, BBitmap *up, BBitmap *down, BMessage *msg, int32 resize, int32 flags) - : BButton(frame, name, "", msg, resize, flags) + : BButton(frame, name, "", msg, resize, flags) { - fUp=up; - fDown=down; - fDisabled=NULL; + fUp = up; + fDown = down; + fDisabled = NULL; } + DrawButton::~DrawButton(void) { delete fUp; @@ -16,67 +24,65 @@ DrawButton::~DrawButton(void) delete fDisabled; } + void DrawButton::SetBitmaps(BBitmap *up, BBitmap *down) { delete fUp; delete fDown; - fUp=up; - fDown=down; + fUp = up; + fDown = down; - if(IsEnabled()) + if (IsEnabled()) Invalidate(); } + void DrawButton::SetDisabled(BBitmap *disabled) { delete fDisabled; - fDisabled=disabled; + fDisabled = disabled; - if(!IsEnabled()) + if (!IsEnabled()) Invalidate(); } + void DrawButton::Draw(BRect update) { - if(!IsEnabled()) - { - if(fDisabled) + if (!IsEnabled()) { + if (fDisabled) DrawBitmap(fDisabled, BPoint(0,0)); else StrokeRect(Bounds()); return; } - if(Value() == B_CONTROL_ON) - { - if(fDown) + if (Value() == B_CONTROL_ON) { + if (fDown) DrawBitmap(fDown, BPoint(0,0)); else StrokeRect(Bounds()); - } - else - { - if(fUp) + } else { + if (fUp) DrawBitmap(fUp, BPoint(0,0)); else StrokeRect(Bounds()); } } + void DrawButton::ResizeToPreferred(void) { - if(fUp) + if (fUp) ResizeTo(fUp->Bounds().Width(),fUp->Bounds().Height()); - else - if(fDown) + else if (fDown) ResizeTo(fDown->Bounds().Width(),fDown->Bounds().Height()); - else - if(fDisabled) + else if (fDisabled) ResizeTo(fDisabled->Bounds().Width(),fDisabled->Bounds().Height()); } diff --git a/src/apps/cdplayer/DrawButton.h b/src/apps/cdplayer/DrawButton.h index e3c2dcf87a..7c43f75cc7 100644 --- a/src/apps/cdplayer/DrawButton.h +++ b/src/apps/cdplayer/DrawButton.h @@ -1,3 +1,10 @@ +/* + * Copyright (c) 2006-2007, Haiku, Inc. + * Distributed under the terms of the MIT license. + * + * Author: + * DarkWyrm + */ #ifndef _DRAW_BUTTON_H #define _DRAW_BUTTON_H diff --git a/src/apps/cdplayer/DrawingTidbits.cpp b/src/apps/cdplayer/DrawingTidbits.cpp new file mode 100644 index 0000000000..c2989ef7c1 --- /dev/null +++ b/src/apps/cdplayer/DrawingTidbits.cpp @@ -0,0 +1,445 @@ +/* + * Copyright 2006, Haiku. + * Distributed under the terms of the MIT License. + * + * Authors: + * Stephan Aßmus + */ + +// TODO: remove this file again.... It originates from Be Sample code, +// but was added to the VLC Media Player BeOS interface, I added some stuff +// during my work on VLC, but I am not sure anymore if this file still +// contains work done by Tony Castley, which would be GPL! + +#include "DrawingTidbits.h" + +#include +#include +#include + +#include +#include + + +// ShiftComponent +inline uchar +ShiftComponent(uchar component, float percent) +{ + // change the color by , make sure we aren't rounding + // off significant bits + if (percent >= 1) + return (uchar)(component * (2 - percent)); + else + return (uchar)(255 - percent * (255 - component)); +} + +// ShiftColor +rgb_color +ShiftColor(rgb_color color, float percent) +{ + rgb_color result = { + ShiftComponent(color.red, percent), + ShiftComponent(color.green, percent), + ShiftComponent(color.blue, percent), + 0 + }; + + return result; +} + +// ReplaceColor +void +ReplaceColor(BBitmap *bitmap, rgb_color from, rgb_color to) +{ + ASSERT(bitmap->ColorSpace() == B_COLOR_8_BIT); // other color spaces not implemented yet + + BScreen screen(B_MAIN_SCREEN_ID); + uint32 fromIndex = screen.IndexForColor(from); + uint32 toIndex = screen.IndexForColor(to); + + uchar *bits = (uchar *)bitmap->Bits(); + int32 bitsLength = bitmap->BitsLength(); + for (int32 index = 0; index < bitsLength; index++) + if (bits[index] == fromIndex) + bits[index] = toIndex; +} + +// ReplaceTransparentColor +void +ReplaceTransparentColor(BBitmap *bitmap, rgb_color with) +{ + ASSERT(bitmap->ColorSpace() == B_COLOR_8_BIT); // other color spaces not implemented yet + + BScreen screen(B_MAIN_SCREEN_ID); + uint32 withIndex = screen.IndexForColor(with); + + uchar *bits = (uchar *)bitmap->Bits(); + int32 bitsLength = bitmap->BitsLength(); + for (int32 index = 0; index < bitsLength; index++) + if (bits[index] == B_TRANSPARENT_8_BIT) + bits[index] = withIndex; +} + +// ycrcb_to_rgb +inline void +ycbcr_to_rgb( uint8 y, uint8 cb, uint8 cr, + uint8& r, uint8& g, uint8& b) +{ + r = (uint8)max_c( 0, min_c( 255, 1.164 * ( y - 16 ) + 1.596 * ( cr - 128 ) ) ); + g = (uint8)max_c( 0, min_c( 255, 1.164 * ( y - 16 ) - 0.813 * ( cr - 128 ) + - 0.391 * ( cb - 128 ) ) ); + b = (uint8)max_c( 0, min_c( 255, 1.164 * ( y - 16 ) + 2.018 * ( cb - 128 ) ) ); +} + +// this function will not produce visually pleasing results! +// we'd have to convert to Lab colorspace, do the mixing +// and convert back to RGB - in an ideal world... +// +// mix_colors +inline void +mix_colors( uint8 ra, uint8 ga, uint8 ba, + uint8 rb, uint8 gb, uint8 bb, + uint8& r, uint8& g, uint8& b, float mixLevel ) +{ + float mixA = ( 1.0 - mixLevel ); + float mixB = mixLevel; + r = (uint8)(mixA * ra + mixB * rb); + g = (uint8)(mixA * ga + mixB * gb); + b = (uint8)(mixA * ba + mixB * bb); +} + +// the algorithm used is probably pretty slow, but it should be easy +// to understand what's going on... +// +// scale_bitmap +status_t +scale_bitmap( BBitmap* bitmap, uint32 fromWidth, uint32 fromHeight ) +{ + status_t status = B_BAD_VALUE; + + if ( bitmap && bitmap->IsValid() + && ( bitmap->ColorSpace() == B_RGB32 || bitmap->ColorSpace() == B_RGBA32 ) ) + { + status = B_MISMATCHED_VALUES; + // we only support upscaling as of now + uint32 destWidth = bitmap->Bounds().IntegerWidth() + 1; + uint32 destHeight = bitmap->Bounds().IntegerHeight() + 1; + if ( fromWidth <= destWidth && fromHeight <= destHeight ) + { + status = B_OK; + uint32 bpr = bitmap->BytesPerRow(); + if ( fromWidth < destWidth ) + { + // scale horizontally + uint8* src = (uint8*)bitmap->Bits(); + uint8* p = new uint8[fromWidth * 4]; // temp buffer + for ( uint32 y = 0; y < fromHeight; y++ ) + { + // copy valid pixels into temp buffer + memcpy( p, src, fromWidth * 4 ); + for ( uint32 x = 0; x < destWidth; x++ ) + { + // mix colors of left and right pixels and write it back + // into the bitmap + float xPos = ( (float)x / (float)destWidth ) * (float)fromWidth; + uint32 leftIndex = (uint32)floorf( xPos ) * 4; + uint32 rightIndex = (uint32)ceilf( xPos ) * 4; + rgb_color left; + left.red = p[leftIndex + 2]; + left.green = p[leftIndex + 1]; + left.blue = p[leftIndex + 0]; + rgb_color right; + right.red = p[rightIndex + 2]; + right.green = p[rightIndex + 1]; + right.blue = p[rightIndex + 0]; + rgb_color mix; + mix_colors( left.red, left.green, left.blue, + right.red, right.green, right.blue, + mix.red, mix.green, mix.blue, xPos - floorf( xPos ) ); + uint32 destIndex = x * 4; + src[destIndex + 2] = mix.red; + src[destIndex + 1] = mix.green; + src[destIndex + 0] = mix.blue; + } + src += bpr; + } + delete[] p; + } + if ( fromHeight < destHeight ) + { + // scale vertically + uint8* src = (uint8*)bitmap->Bits(); + uint8* p = new uint8[fromHeight * 3]; // temp buffer + for ( uint32 x = 0; x < destWidth; x++ ) + { + // copy valid pixels into temp buffer + for ( uint32 y = 0; y < fromHeight; y++ ) + { + uint32 destIndex = y * 3; + uint32 srcIndex = x * 4 + y * bpr; + p[destIndex + 0] = src[srcIndex + 0]; + p[destIndex + 1] = src[srcIndex + 1]; + p[destIndex + 2] = src[srcIndex + 2]; + } + // do the scaling + for ( uint32 y = 0; y < destHeight; y++ ) + { + // mix colors of upper and lower pixels and write it back + // into the bitmap + float yPos = ( (float)y / (float)destHeight ) * (float)fromHeight; + uint32 upperIndex = (uint32)floorf( yPos ) * 3; + uint32 lowerIndex = (uint32)ceilf( yPos ) * 3; + rgb_color upper; + upper.red = p[upperIndex + 2]; + upper.green = p[upperIndex + 1]; + upper.blue = p[upperIndex + 0]; + rgb_color lower; + lower.red = p[lowerIndex + 2]; + lower.green = p[lowerIndex + 1]; + lower.blue = p[lowerIndex + 0]; + rgb_color mix; + mix_colors( upper.red, upper.green, upper.blue, + lower.red, lower.green, lower.blue, + mix.red, mix.green, mix.blue, yPos - floorf( yPos ) ); + uint32 destIndex = x * 4 + y * bpr; + src[destIndex + 2] = mix.red; + src[destIndex + 1] = mix.green; + src[destIndex + 0] = mix.blue; + } + } + delete[] p; + } + } + } + return status; +} + +// convert_bitmap +status_t +convert_bitmap( BBitmap* inBitmap, BBitmap* outBitmap ) +{ + status_t status = B_BAD_VALUE; + // see that we got valid bitmaps + if ( inBitmap && inBitmap->IsValid() + && outBitmap && outBitmap->IsValid() ) + { + status = B_MISMATCHED_VALUES; + // see that bitmaps are compatible and that we support the conversion + if ( inBitmap->Bounds().Width() <= outBitmap->Bounds().Width() + && inBitmap->Bounds().Height() <= outBitmap->Bounds().Height() + && ( outBitmap->ColorSpace() == B_RGB32 + || outBitmap->ColorSpace() == B_RGBA32) ) + { + int32 width = inBitmap->Bounds().IntegerWidth() + 1; + int32 height = inBitmap->Bounds().IntegerHeight() + 1; + int32 srcBpr = inBitmap->BytesPerRow(); + int32 dstBpr = outBitmap->BytesPerRow(); + uint8* srcBits = (uint8*)inBitmap->Bits(); + uint8* dstBits = (uint8*)outBitmap->Bits(); + switch (inBitmap->ColorSpace()) + { + case B_YCbCr422: + // Y0[7:0] Cb0[7:0] Y1[7:0] Cr0[7:0] + // Y2[7:0] Cb2[7:0] Y3[7:0] Cr2[7:0] + for ( int32 y = 0; y < height; y++ ) + { + for ( int32 x = 0; x < width; x += 2 ) + { + int32 srcOffset = x * 2; + int32 dstOffset = x * 4; + ycbcr_to_rgb( srcBits[srcOffset + 0], + srcBits[srcOffset + 1], + srcBits[srcOffset + 3], + dstBits[dstOffset + 2], + dstBits[dstOffset + 1], + dstBits[dstOffset + 0] ); + ycbcr_to_rgb( srcBits[srcOffset + 2], + srcBits[srcOffset + 1], + srcBits[srcOffset + 3], + dstBits[dstOffset + 6], + dstBits[dstOffset + 5], + dstBits[dstOffset + 4] ); + // take care of alpha + dstBits[x * 4 + 3] = 255; + dstBits[x * 4 + 7] = 255; + } + srcBits += srcBpr; + dstBits += dstBpr; + } + status = B_OK; + break; + case B_YCbCr420: + // Non-interlaced only! + // Cb0 Y0 Y1 Cb2 Y2 Y3 on even scan lines ... + // Cr0 Y0 Y1 Cr2 Y2 Y3 on odd scan lines + status = B_ERROR; + break; + case B_YUV422: + // U0[7:0] Y0[7:0] V0[7:0] Y1[7:0] + // U2[7:0] Y2[7:0] V2[7:0] Y3[7:0] + status = B_ERROR; + break; + case B_RGB32: + case B_RGBA32: + memcpy( dstBits, srcBits, inBitmap->BitsLength() ); + status = B_OK; + break; + case B_RGB16: + // G[2:0],B[4:0] R[4:0],G[5:3] + for ( int32 y = 0; y < height; y ++ ) + { + for ( int32 x = 0; x < width; x++ ) + { + int32 srcOffset = x * 2; + int32 dstOffset = x * 4; + uint8 blue = srcBits[srcOffset + 0] & 0x1f; + uint8 green = ( srcBits[srcOffset + 0] >> 5 ) + | ( ( srcBits[srcOffset + 1] & 0x07 ) << 3 ); + uint8 red = srcBits[srcOffset + 1] & 0xf8; + // homogeneously scale each component to 8 bit + dstBits[dstOffset + 0] = (blue << 3) | (blue >> 2); + dstBits[dstOffset + 1] = (green << 2) | (green >> 4); + dstBits[dstOffset + 2] = red | (red >> 5); + } + srcBits += srcBpr; + dstBits += dstBpr; + } + status = B_OK; + break; + default: +//printf("unkown colorspace: %ld\n", inBitmap->ColorSpace()); + status = B_MISMATCHED_VALUES; + break; + } + if ( status == B_OK ) + { + if ( width < outBitmap->Bounds().IntegerWidth() + 1 + || height < outBitmap->Bounds().IntegerHeight() + 1 ) + { + scale_bitmap( outBitmap, width, height ); + } + } + } + } + return status; +} + +// clip_float +inline uint8 +clip_float(float value) +{ + if (value < 0) + value = 0; + if (value > 255) + value = 255; + return (uint8)value; +} + +// dim_bitmap +status_t +dim_bitmap(BBitmap* bitmap, rgb_color center, float dimLevel) +{ + status_t status = B_BAD_VALUE; + if (bitmap && bitmap->IsValid()) + { + switch (bitmap->ColorSpace()) + { + case B_CMAP8: + { + BScreen screen(B_MAIN_SCREEN_ID); + if (screen.IsValid()) + { + // iterate over each pixel, get the respective + // color from the screen object, find the distance + // to the "center" color and shorten the distance + // by "dimLevel" + int32 length = bitmap->BitsLength(); + uint8* bits = (uint8*)bitmap->Bits(); + for (int32 i = 0; i < length; i++) + { + // preserve transparent pixels + if (bits[i] != B_TRANSPARENT_MAGIC_CMAP8) + { + // get color for this index + rgb_color c = screen.ColorForIndex(bits[i]); + // red + float dist = (c.red - center.red) * dimLevel; + c.red = clip_float(center.red + dist); + // green + dist = (c.green - center.green) * dimLevel; + c.green = clip_float(center.green + dist); + // blue + dist = (c.blue - center.blue) * dimLevel; + c.blue = clip_float(center.blue + dist); + // write correct index of the dimmed color + // back into bitmap (and hope the match is close...) + bits[i] = screen.IndexForColor(c); + } + } + status = B_OK; + } + break; + } + case B_RGB32: + case B_RGBA32: + { + // iterate over each color component, find the distance + // to the "center" color and shorten the distance + // by "dimLevel" + uint8* bits = (uint8*)bitmap->Bits(); + int32 bpr = bitmap->BytesPerRow(); + int32 pixels = bitmap->Bounds().IntegerWidth() + 1; + int32 lines = bitmap->Bounds().IntegerHeight() + 1; + // iterate over color components + for (int32 y = 0; y < lines; y++) { + for (int32 x = 0; x < pixels; x++) { + int32 offset = 4 * x; // four bytes per pixel + // blue + float dist = (bits[offset + 0] - center.blue) * dimLevel; + bits[offset + 0] = clip_float(center.blue + dist); + // green + dist = (bits[offset + 1] - center.green) * dimLevel; + bits[offset + 1] = clip_float(center.green + dist); + // red + dist = (bits[offset + 2] - center.red) * dimLevel; + bits[offset + 2] = clip_float(center.red + dist); + // ignore alpha channel + } + // next line + bits += bpr; + } + status = B_OK; + break; + } + default: + status = B_ERROR; + break; + } + } + return status; +} + +// dimmed_color_cmap8 +rgb_color +dimmed_color_cmap8(rgb_color color, rgb_color center, float dimLevel) +{ + BScreen screen(B_MAIN_SCREEN_ID); + if (screen.IsValid()) + { + // red + float dist = (color.red - center.red) * dimLevel; + color.red = clip_float(center.red + dist); + // green + dist = (color.green - center.green) * dimLevel; + color.green = clip_float(center.green + dist); + // blue + dist = (color.blue - center.blue) * dimLevel; + color.blue = clip_float(center.blue + dist); + // get color index for dimmed color + int32 index = screen.IndexForColor(color); + // put color at index (closest match in palette + // to dimmed result) into returned color + color = screen.ColorForIndex(index); + } + return color; +} diff --git a/src/apps/cdplayer/DrawingTidbits.h b/src/apps/cdplayer/DrawingTidbits.h new file mode 100644 index 0000000000..8840105ddf --- /dev/null +++ b/src/apps/cdplayer/DrawingTidbits.h @@ -0,0 +1,77 @@ +/* + * Copyright 2006, Haiku. + * Distributed under the terms of the MIT License. + * + * Authors: + * Stephan Aßmus + */ + +// TODO: remove this file again.... It originates from Be Sample code, +// but was added to the VLC Media Player BeOS interface, I added some stuff +// during my work on VLC, but I am not sure anymore if this file still +// contains work done by Tony Castley, which would be GPL! + +#ifndef __DRAWING_TIBITS__ +#define __DRAWING_TIBITS__ + +#include + +class BBitmap; + +const rgb_color kBlack = { 0, 0, 0, 255 }; +const rgb_color kWhite = { 255, 255, 255, 255 }; + +rgb_color ShiftColor(rgb_color , float ); + +inline rgb_color +Color(int32 r, int32 g, int32 b, int32 alpha = 255) +{ + rgb_color result; + result.red = r; + result.green = g; + result.blue = b; + result.alpha = alpha; + + return result; +} + +const float kDarkness = 1.06; +const float kDimLevel = 0.6; + +void ReplaceColor(BBitmap *bitmap, rgb_color from, rgb_color to); +void ReplaceTransparentColor(BBitmap *bitmap, rgb_color with); + +// function can be used to scale the upper left part of +// a bitmap to fill the entire bitmap, ie fromWidth +// and fromHeight must be smaller or equal to the bitmaps size! +// only supported colorspaces are B_RGB32 and B_RGBA32 +status_t scale_bitmap( BBitmap* bitmap, + uint32 fromWidth, uint32 fromHeight ); + +// bitmaps need to be the same size, or this function will fail +// currently supported conversions: +// B_YCbCr422 -> B_RGB32 +// B_RGB32 -> B_RGB32 +// B_RGB16 -> B_RGB32 +// not yet implemented conversions: +// B_YCbCr420 -> B_RGB32 +// B_YUV422 -> B_RGB32 +status_t convert_bitmap(BBitmap* inBitmap, BBitmap* outBitmap); + +// dims bitmap (in place) by finding the distance of +// the color at each pixel to the provided "center" color +// and shortens that distance by dimLevel +// (dimLevel < 1 -> less contrast) +// (dimLevel > 1 -> more contrast) +// (dimLevel < 0 -> inverted colors) +// currently supported colorspaces: +// B_RGB32 +// B_RGBA32 +// B_CMAP8 +status_t dim_bitmap(BBitmap* bitmap, rgb_color center, + float dimLevel); + +rgb_color dimmed_color_cmap8(rgb_color color, rgb_color center, + float dimLevel); + +#endif // __DRAWING_TIBITS__ diff --git a/src/apps/cdplayer/Jamfile b/src/apps/cdplayer/Jamfile index 92173fa92e..a0c8fa14ce 100644 --- a/src/apps/cdplayer/Jamfile +++ b/src/apps/cdplayer/Jamfile @@ -8,9 +8,10 @@ Application CDPlayer : CDPlayer.cpp DoubleShotDrawButton.cpp DrawButton.cpp + DrawingTidbits.cpp PlayList.cpp - TrackMenu.cpp TwoStateDrawButton.cpp + VolumeSlider.cpp : be $(SELECT_UNAME_ETC_LIB) $(NETAPI_LIB) translation textencoding : CDPlayer.rdef diff --git a/src/apps/cdplayer/TwoStateDrawButton.cpp b/src/apps/cdplayer/TwoStateDrawButton.cpp index a3dff1dc2e..20c2789b9a 100644 --- a/src/apps/cdplayer/TwoStateDrawButton.cpp +++ b/src/apps/cdplayer/TwoStateDrawButton.cpp @@ -1,10 +1,17 @@ +/* + * Copyright (c) 2006-2007, Haiku, Inc. + * Distributed under the terms of the MIT license. + * + * Author: + * DarkWyrm + */ #include "TwoStateDrawButton.h" TwoStateDrawButton::TwoStateDrawButton(BRect frame, const char *name, BBitmap *upone, BBitmap *downone, BBitmap *uptwo, BBitmap *downtwo, BMessage *msg, const int32 &resize, const int32 &flags) - : BButton(frame, name, "", msg, resize, flags), + : BButton(frame, name, "", msg, resize, flags), fUpOne(upone), fDownOne(downone), fUpTwo(uptwo), @@ -14,9 +21,10 @@ TwoStateDrawButton::TwoStateDrawButton(BRect frame, const char *name, BBitmap *u fButtonState(true) { - fButtonState=false; + fButtonState = false; } + TwoStateDrawButton::~TwoStateDrawButton(void) { delete fUpOne; @@ -27,6 +35,7 @@ TwoStateDrawButton::~TwoStateDrawButton(void) delete fDisabledTwo; } + void TwoStateDrawButton::ResizeToPreferred(void) { @@ -49,9 +58,10 @@ TwoStateDrawButton::ResizeToPreferred(void) ResizeTo(fDisabledTwo->Bounds().Width(),fDisabledTwo->Bounds().Height()); } + void TwoStateDrawButton::SetBitmaps(BBitmap *upone, BBitmap *downone, BBitmap *uptwo, - BBitmap *downtwo) + BBitmap *downtwo) { delete fUpOne; delete fDownOne; @@ -64,7 +74,26 @@ TwoStateDrawButton::SetBitmaps(BBitmap *upone, BBitmap *downone, BBitmap *uptwo, fDownTwo = downtwo; } -void TwoStateDrawButton::SetDisabled(BBitmap *disabledone, BBitmap *disabledtwo) + +void +TwoStateDrawButton::SetBitmaps(const int32 state, BBitmap *up, BBitmap *down) +{ + if (state == 0) { + delete fUpOne; + delete fDownOne; + fUpOne = up; + fDownOne = down; + } else { + delete fUpTwo; + delete fDownTwo; + fUpTwo = up; + fDownTwo = down; + } +} + + +void +TwoStateDrawButton::SetDisabled(BBitmap *disabledone, BBitmap *disabledtwo) { delete fDisabledOne; delete fDisabledTwo; @@ -73,32 +102,31 @@ void TwoStateDrawButton::SetDisabled(BBitmap *disabledone, BBitmap *disabledtwo) fDisabledTwo = disabledtwo; } -void TwoStateDrawButton::MouseUp(BPoint pt) + +void +TwoStateDrawButton::MouseUp(BPoint pt) { BButton::MouseUp(pt); fButtonState = fButtonState ? false : true; Invalidate(); } + void TwoStateDrawButton::SetState(int32 value) { - if(fButtonState!=value) - { - if(value==0) - fButtonState = false; - else - fButtonState = true; + if(fButtonState != value) { + fButtonState = (value == 0) ? false : true; Invalidate(); } } -void TwoStateDrawButton::Draw(BRect update) + +void +TwoStateDrawButton::Draw(BRect update) { - if(fButtonState) - { - if(!IsEnabled()) - { + if(fButtonState) { + if(!IsEnabled()) { if(fDisabledTwo) DrawBitmap(fDisabledTwo, BPoint(0,0)); else @@ -106,25 +134,19 @@ void TwoStateDrawButton::Draw(BRect update) return; } - if(Value() == B_CONTROL_ON) - { + if(Value() == B_CONTROL_ON) { if(fDownTwo) DrawBitmap(fDownTwo, BPoint(0,0)); else StrokeRect(Bounds()); - } - else - { + } else { if(fUpTwo) DrawBitmap(fUpTwo, BPoint(0,0)); else StrokeRect(Bounds()); } - } - else - { - if(!IsEnabled()) - { + } else { + if(!IsEnabled()) { if(fDisabledOne) DrawBitmap(fDisabledOne, BPoint(0,0)); else @@ -132,15 +154,12 @@ void TwoStateDrawButton::Draw(BRect update) return; } - if(Value() == B_CONTROL_ON) - { + if(Value() == B_CONTROL_ON) { if(fDownOne) DrawBitmap(fDownOne, BPoint(0,0)); else StrokeRect(Bounds()); - } - else - { + } else { if(fUpOne) DrawBitmap(fUpOne, BPoint(0,0)); else diff --git a/src/apps/cdplayer/TwoStateDrawButton.h b/src/apps/cdplayer/TwoStateDrawButton.h index bae4a20c2b..58bdbdf455 100644 --- a/src/apps/cdplayer/TwoStateDrawButton.h +++ b/src/apps/cdplayer/TwoStateDrawButton.h @@ -1,3 +1,10 @@ +/* + * Copyright (c) 2006-2007, Haiku, Inc. + * Distributed under the terms of the MIT license. + * + * Author: + * DarkWyrm + */ #ifndef _TWOSTATE_DRAWBUTTON_H #define _TWOSTATE_DRAWBUTTON_H @@ -20,10 +27,10 @@ public: void SetBitmaps(BBitmap *upone, BBitmap *downone, BBitmap *uptwo, BBitmap *downtwo); + void SetBitmaps(const int32 state, BBitmap *up, BBitmap *down); void ResizeToPreferred(void); void SetDisabled(BBitmap *disabledone, BBitmap *disabledtwo); void MouseUp(BPoint pt); -// void MessageReceived(BMessage *msg); int32 GetState(void) { return fButtonState ? 1 : 0; }; void SetState(int32 value); diff --git a/src/apps/cdplayer/VolumeSlider.cpp b/src/apps/cdplayer/VolumeSlider.cpp new file mode 100644 index 0000000000..3cb25b6185 --- /dev/null +++ b/src/apps/cdplayer/VolumeSlider.cpp @@ -0,0 +1,317 @@ +/* + * Copyright 2006, Haiku. + * Distributed under the terms of the MIT License. + * + * Authors: + * Stephan Aßmus + */ + +// NOTE: Based on my code in the BeOS interface for the VLC media player +// that I did during the VLC 0.4.3 - 0.4.6 times. Code not done by me +// removed. -Stephan Aßmus + +#include "VolumeSlider.h" + +#include "ButtonBitmaps.h" +#include "DrawingTidbits.h" + +#include +#include + +#include +#include + + +// slider colors are hardcoded here, because that's just +// what they currently are within those bitmaps +const rgb_color kGreen = (rgb_color){ 152, 203, 152, 255 }; +const rgb_color kGreenShadow = (rgb_color){ 102, 152, 102, 255 }; +const rgb_color kBackground = (rgb_color){ 216, 216, 216, 255 }; +const rgb_color kSeekGreen = (rgb_color){ 171, 221, 161, 255 }; +const rgb_color kSeekGreenShadow = (rgb_color){ 144, 186, 136, 255 }; +const rgb_color kSeekRed = (rgb_color){ 255, 0, 0, 255 }; +const rgb_color kSeekRedLight = (rgb_color){ 255, 152, 152, 255 }; +const rgb_color kSeekRedShadow = (rgb_color){ 178, 0, 0, 255 }; + +#define DIM_LEVEL 0.4 + +// constructor +VolumeSlider::VolumeSlider(BRect frame, const char* name, + int32 minValue, int32 maxValue, + BMessage* message, BHandler* target) + : BControl(frame, name, NULL, message, B_FOLLOW_LEFT | B_FOLLOW_TOP, + B_WILL_DRAW | B_FULL_UPDATE_ON_RESIZE), + fLeftSideBits(NULL), + fRightSideBits(NULL), + fKnobBits(NULL), + fTracking(false), + fMuted(false), + fMinValue(minValue), + fMaxValue(maxValue) +{ + SetTarget(target); + + // create bitmaps + BRect r(0.0, 0.0, + kVolumeSliderBitmapWidth - 1, kVolumeSliderBitmapHeight - 1); + fLeftSideBits = new BBitmap(r, B_CMAP8); + fRightSideBits = new BBitmap(r, B_CMAP8); + r.Set(0.0, 0.0, + kVolumeSliderKnobWidth - 1, kVolumeSliderKnobHeight - 1); + fKnobBits = new BBitmap(r, B_CMAP8); + + _MakeBitmaps(); +} + +// destructor +VolumeSlider::~VolumeSlider() +{ + delete fLeftSideBits; + delete fRightSideBits; + delete fKnobBits; +} + +// AttachedToWindow +void +VolumeSlider::AttachedToWindow() +{ + BControl::AttachedToWindow(); + SetViewColor(B_TRANSPARENT_COLOR); +} + +// SetValue +void +VolumeSlider::SetValue(int32 value) +{ + if (value == Value()) + return; + + BControl::SetValue(value); + Invoke(); +} + +// SetEnabled +void +VolumeSlider::SetEnabled(bool enable) +{ + if (enable == IsEnabled()) + return; + + BControl::SetEnabled(enable); + + _MakeBitmaps(); + Invalidate(); +} + +// Draw +void +VolumeSlider::Draw(BRect updateRect) +{ + if (!IsValid()) { + fprintf(stderr, "VolumeSlider::Draw() - Error: no valid bitmaps!"); + SetHighColor(255, 0, 0); + FillRect(updateRect); + return; + } + + BRect r(Bounds()); + float sliderSideWidth = kVolumeSliderBitmapWidth; + float sliderStart = (r.left + sliderSideWidth); + float sliderEnd = (r.right - sliderSideWidth); + float knobPos = sliderStart + + (sliderEnd - sliderStart - 1.0) * (Value() - fMinValue) + / (fMaxValue - fMinValue); + // draw both sides (the original from Be doesn't seem + // to make a difference for enabled/disabled state) + DrawBitmapAsync(fLeftSideBits, r.LeftTop()); + DrawBitmapAsync(fRightSideBits, BPoint(sliderEnd + 1.0, r.top)); + // colors for the slider area between the two bitmaps + rgb_color background = kBackground;//ui_color(B_PANEL_BACKGROUND_COLOR); + rgb_color shadow = tint_color(background, B_DARKEN_2_TINT); + rgb_color softShadow = tint_color(background, B_DARKEN_1_TINT); + rgb_color darkShadow = tint_color(background, B_DARKEN_4_TINT); + rgb_color midShadow = tint_color(background, B_DARKEN_3_TINT); + rgb_color light = tint_color(background, B_LIGHTEN_MAX_TINT); + rgb_color softLight = tint_color(background, B_LIGHTEN_1_TINT); + rgb_color green = kGreen; + rgb_color greenShadow = kGreenShadow; + rgb_color black = kBlack; + rgb_color dotGrey = midShadow; + rgb_color dotGreen = greenShadow; + // make dimmed version of colors if we're disabled + if (!IsEnabled()) { + shadow = (rgb_color){ 200, 200, 200, 255 }; + softShadow = dimmed_color_cmap8(softShadow, background, DIM_LEVEL); + darkShadow = dimmed_color_cmap8(darkShadow, background, DIM_LEVEL); + midShadow = shadow; + light = dimmed_color_cmap8(light, background, DIM_LEVEL); + softLight = dimmed_color_cmap8(softLight, background, DIM_LEVEL); + green = dimmed_color_cmap8(green, background, DIM_LEVEL); + greenShadow = dimmed_color_cmap8(greenShadow, background, DIM_LEVEL); + black = dimmed_color_cmap8(black, background, DIM_LEVEL); + dotGreen = dotGrey; + } else if (fMuted) { + green = tint_color(kBackground, B_DARKEN_3_TINT); + greenShadow = tint_color(kBackground, B_DARKEN_4_TINT); + dotGreen = greenShadow; + } + // draw slider edges between bitmaps + BeginLineArray(7); + AddLine(BPoint(sliderStart, r.top), + BPoint(sliderEnd, r.top), softShadow); + AddLine(BPoint(sliderStart, r.bottom), + BPoint(sliderEnd, r.bottom), softLight); + r.InsetBy(0.0, 1.0); + AddLine(BPoint(sliderStart, r.top), + BPoint(sliderEnd, r.top), black); + AddLine(BPoint(sliderStart, r.bottom), + BPoint(sliderEnd, r.bottom), light); + r.top++; + AddLine(BPoint(sliderStart, r.top), + BPoint(knobPos, r.top), greenShadow); + AddLine(BPoint(knobPos, r.top), + BPoint(sliderEnd, r.top), midShadow); + r.top++; + AddLine(BPoint(sliderStart, r.top), + BPoint(knobPos, r.top), greenShadow); + EndLineArray(); + // fill rest inside of slider + r.InsetBy(0.0, 1.0); + r.left = sliderStart; + r.right = knobPos; + SetHighColor(green); + FillRect(r, B_SOLID_HIGH); + r.left = knobPos + 1.0; + r.right = sliderEnd; + r.top -= 1.0; + SetHighColor(shadow); + FillRect(r, B_SOLID_HIGH); + // draw little dots inside + int32 dotCount = (int32)((sliderEnd - sliderStart) / 5.0); + BPoint dotPos; + dotPos.y = r.top + 4.0; + for (int32 i = 0; i < dotCount; i++) { + dotPos.x = sliderStart + i * 5.0 + 4.0; + SetHighColor(dotPos.x < knobPos ? dotGreen : dotGrey); + StrokeLine(dotPos, BPoint(dotPos.x, dotPos.y + 1.0)); + } + // draw knob + r.top -= 1.0; + SetDrawingMode(B_OP_OVER); // part of knob is transparent + DrawBitmapAsync(fKnobBits, BPoint(knobPos - kVolumeSliderKnobWidth / 2, r.top)); +} + +// MouseDown +void +VolumeSlider::MouseDown(BPoint where) +{ + if (Bounds().Contains(where) && IsEnabled()) { + fTracking = true; + SetValue(_ValueFor(where.x)); + SetMouseEventMask(B_POINTER_EVENTS, B_LOCK_WINDOW_FOCUS); + } +} + +// MouseMoved +void +VolumeSlider::MouseMoved(BPoint where, uint32 transit, const BMessage* dragMessage) +{ + if (fTracking) + SetValue(_ValueFor(where.x)); +} + +// MouseUp +void +VolumeSlider::MouseUp(BPoint where) +{ + fTracking = false; +} + +// IsValid +bool +VolumeSlider::IsValid() const +{ + return (fLeftSideBits && fLeftSideBits->IsValid() + && fRightSideBits && fRightSideBits->IsValid() + && fKnobBits && fKnobBits->IsValid()); +} + +// SetMuted +void +VolumeSlider::SetMuted(bool mute) +{ + if (mute == fMuted) + return; + + fMuted = mute; + _MakeBitmaps(); + Invalidate(); +} + +// _MakeBitmaps +void +VolumeSlider::_MakeBitmaps() +{ + if (!IsValid()) + return; + + // left side of slider + memcpy(fLeftSideBits->Bits(), kVolumeSliderLeftBitmapBits, + fLeftSideBits->BitsLength()); + // right side of slider + memcpy(fRightSideBits->Bits(), kVolumeSliderRightBits, + fRightSideBits->BitsLength()); + // slider knob + int32 length = fKnobBits->BitsLength(); + memcpy(fKnobBits->Bits(), kVolumeSliderKnobBits, length); + uint8* bits = (uint8*)fKnobBits->Bits(); + // black was used in the knob to represent transparency + // use screen to get index for the "transarent" color used in the bitmap + BScreen screen(B_MAIN_SCREEN_ID); + uint8 blackIndex = screen.IndexForColor(kBlack); + // replace black index with transparent index + for (int32 i = 0; i < length; i++) + if (bits[i] == blackIndex) + bits[i] = B_TRANSPARENT_MAGIC_CMAP8; + + if (!IsEnabled()) { + // make ghosted versions of the bitmaps + dim_bitmap(fLeftSideBits, kBackground, DIM_LEVEL); + dim_bitmap(fRightSideBits, kBackground, DIM_LEVEL); + dim_bitmap(fKnobBits, kBackground, DIM_LEVEL); + } else if (fMuted) { + // replace green color (and shadow) in left slider side + bits = (uint8*)fLeftSideBits->Bits(); + length = fLeftSideBits->BitsLength(); + uint8 greenIndex = screen.IndexForColor(kGreen); + uint8 greenShadowIndex = screen.IndexForColor(kGreenShadow); + rgb_color shadow = tint_color(kBackground, B_DARKEN_3_TINT); + rgb_color midShadow = tint_color(kBackground, B_DARKEN_4_TINT); + uint8 replaceIndex = screen.IndexForColor(shadow); + uint8 replaceShadowIndex = screen.IndexForColor(midShadow); + for (int32 i = 0; i < length; i++) { + if (bits[i] == greenIndex) + bits[i] = replaceIndex; + else if (bits[i] == greenShadowIndex) + bits[i] = replaceShadowIndex; + } + } +} + +// _ValueFor +int32 +VolumeSlider::_ValueFor(float xPos) const +{ + BRect r(Bounds()); + float sliderStart = (r.left + kVolumeSliderBitmapWidth); + float sliderEnd = (r.right - kVolumeSliderBitmapWidth); + int32 value = fMinValue + (int32)(((xPos - sliderStart) + * (fMaxValue - fMinValue)) + / (sliderEnd - sliderStart - 1.0)); + if (value < fMinValue) + value = fMinValue; + if (value > fMaxValue) + value = fMaxValue; + return value; +} + diff --git a/src/apps/cdplayer/VolumeSlider.h b/src/apps/cdplayer/VolumeSlider.h new file mode 100644 index 0000000000..73db3277fa --- /dev/null +++ b/src/apps/cdplayer/VolumeSlider.h @@ -0,0 +1,55 @@ +/* + * Copyright 2006, Haiku. + * Distributed under the terms of the MIT License. + * + * Authors: + * Stephan Aßmus + */ + +#ifndef VOLUME_SLIDER_H +#define VOLUME_SLIDER_H + +#include + +class VolumeSlider : public BControl { + public: + VolumeSlider(BRect frame, + const char* name, + int32 minValue, + int32 maxValue, + BMessage* message = NULL, + BHandler* target = NULL); + + virtual ~VolumeSlider(); + + // BControl + virtual void AttachedToWindow(); + virtual void SetValue(int32 value); + virtual void SetEnabled(bool enable); + virtual void Draw(BRect updateRect); + virtual void MouseDown(BPoint where); + virtual void MouseMoved(BPoint where, uint32 transit, + const BMessage* dragMessage); + virtual void MouseUp(BPoint where); + + // VolumeSlider + bool IsValid() const; + void SetMuted(bool mute); + bool IsMuted() const + { return fMuted; } + + private: + void _MakeBitmaps(); + void _DimBitmap(BBitmap* bitmap); + int32 _ValueFor(float xPos) const; + + BBitmap* fLeftSideBits; + BBitmap* fRightSideBits; + BBitmap* fKnobBits; + bool fTracking; + bool fMuted; + int32 fMinValue; + int32 fMaxValue; +}; + +#endif // VOLUME_SLIDER_H