Ticket #11017: 0001-CDPlayer-remove-from-image-delete.patch

File 0001-CDPlayer-remove-from-image-delete.patch, 218.1 KB (added by waddlesplash, 10 years ago)

Remove CDPlayer.

  • build/jam/images/definitions/regular

    From 98a0031ed1d6675d54c4669412f9c24657009a9b Mon Sep 17 00:00:00 2001
    From: Augustin Cavalier <waddlesplash@gmail.com>
    Date: Tue, 8 Jul 2014 16:24:56 -0400
    Subject: [PATCH] CDPlayer: remove from image & delete
    
      * Does not work on recent hardware
      * It now lives at: https://github.com/HaikuArchives/CDPlayer
    ---
     build/jam/images/definitions/regular       |    4 +-
     src/apps/Jamfile                           |    1 -
     src/apps/cdplayer/ButtonBitmaps.h          | 1318 ----------------------------
     src/apps/cdplayer/CDAudioDevice.cpp        |  632 -------------
     src/apps/cdplayer/CDAudioDevice.h          |  142 ---
     src/apps/cdplayer/CDDBSupport.cpp          | 1179 -------------------------
     src/apps/cdplayer/CDDBSupport.h            |  212 -----
     src/apps/cdplayer/CDPlayer.cpp             |  678 --------------
     src/apps/cdplayer/CDPlayer.h               |   89 --
     src/apps/cdplayer/CDPlayer.rdef            |  407 ---------
     src/apps/cdplayer/DoubleShotDrawButton.cpp |   27 -
     src/apps/cdplayer/DoubleShotDrawButton.h   |   29 -
     src/apps/cdplayer/DrawButton.cpp           |   88 --
     src/apps/cdplayer/DrawButton.h             |   40 -
     src/apps/cdplayer/Jamfile                  |   24 -
     src/apps/cdplayer/LICENSE                  |   31 -
     src/apps/cdplayer/PlayList.cpp             |  299 -------
     src/apps/cdplayer/PlayList.h               |   49 --
     src/apps/cdplayer/TrackMenu.cpp            |  274 ------
     src/apps/cdplayer/TrackMenu.h              |   39 -
     src/apps/cdplayer/TwoStateDrawButton.cpp   |  166 ----
     src/apps/cdplayer/TwoStateDrawButton.h     |   51 --
     src/apps/cdplayer/VolumeSlider.cpp         |   37 -
     src/apps/cdplayer/VolumeSlider.h           |   29 -
     24 files changed, 2 insertions(+), 5843 deletions(-)
     delete mode 100644 src/apps/cdplayer/ButtonBitmaps.h
     delete mode 100644 src/apps/cdplayer/CDAudioDevice.cpp
     delete mode 100644 src/apps/cdplayer/CDAudioDevice.h
     delete mode 100644 src/apps/cdplayer/CDDBSupport.cpp
     delete mode 100644 src/apps/cdplayer/CDDBSupport.h
     delete mode 100644 src/apps/cdplayer/CDPlayer.cpp
     delete mode 100644 src/apps/cdplayer/CDPlayer.h
     delete mode 100644 src/apps/cdplayer/CDPlayer.rdef
     delete mode 100644 src/apps/cdplayer/DoubleShotDrawButton.cpp
     delete mode 100644 src/apps/cdplayer/DoubleShotDrawButton.h
     delete mode 100644 src/apps/cdplayer/DrawButton.cpp
     delete mode 100644 src/apps/cdplayer/DrawButton.h
     delete mode 100644 src/apps/cdplayer/Jamfile
     delete mode 100644 src/apps/cdplayer/LICENSE
     delete mode 100644 src/apps/cdplayer/PlayList.cpp
     delete mode 100644 src/apps/cdplayer/PlayList.h
     delete mode 100644 src/apps/cdplayer/TrackMenu.cpp
     delete mode 100644 src/apps/cdplayer/TrackMenu.h
     delete mode 100644 src/apps/cdplayer/TwoStateDrawButton.cpp
     delete mode 100644 src/apps/cdplayer/TwoStateDrawButton.h
     delete mode 100644 src/apps/cdplayer/VolumeSlider.cpp
     delete mode 100644 src/apps/cdplayer/VolumeSlider.h
    
    diff --git a/build/jam/images/definitions/regular b/build/jam/images/definitions/regular
    index bf55473..f17a5fa 100644
    a b SYSTEM_BIN += [ FFilterByBuildFeatures  
    1515] ;
    1616
    1717SYSTEM_APPS += [ FFilterByBuildFeatures
    18     CDPlayer CodyCam
     18    CodyCam
    1919    GLInfo@mesa
    2020    HaikuDepot
    2121    Icon-O-Matic Installer LaunchBox
    SYSTEM_APPS += [ FFilterByBuildFeatures  
    2828] ;
    2929
    3030DESKBAR_APPLICATIONS +=
    31     CodyCam CDPlayer
     31    CodyCam
    3232    HaikuDepot
    3333    Icon-O-Matic Installer
    3434    Magnify Mail MediaConverter MediaPlayer MidiPlayer
  • src/apps/Jamfile

    diff --git a/src/apps/Jamfile b/src/apps/Jamfile
    index 6b85ddc..8bdd434 100644
    a b HaikuSubInclude activitymonitor ;  
    66HaikuSubInclude autoraise ;
    77HaikuSubInclude bsnow ;
    88HaikuSubInclude bootmanager ;
    9 HaikuSubInclude cdplayer ;
    109HaikuSubInclude charactermap ;
    1110HaikuSubInclude clock ;
    1211HaikuSubInclude codycam ;
  • deleted file src/apps/cdplayer/ButtonBitmaps.h

    diff --git a/src/apps/cdplayer/ButtonBitmaps.h b/src/apps/cdplayer/ButtonBitmaps.h
    deleted file mode 100644
    index ef85e71..0000000
    + -  
    1 /*
    2  * Copyright 2006, Haiku.
    3  * Distributed under the terms of the MIT License.
    4  *
    5  * Authors:
    6  *      Stephan Aßmus <superstippi@gmx.de>
    7  */
    8 
    9 // NOTE: The images in here originate from Be Sample code. They have been
    10 // integrated in the BeOS interface for the VLC Media Player code. When I
    11 // worked on VLC during the 0.4.3-0.4.6 times, I reworked the bitmaps, and
    12 // all code left in this file is from my own work on the Be Sample code
    13 // buttons. -Stephan Aßmus
    14 
    15 #ifndef BUTTON_BITMAPS_H
    16 #define BUTTON_BITMAPS_H
    17 
    18 #include <SupportDefs.h>
    19 
    20 // #pragma mark play
    21 
    22 const int32 kPlayPauseBitmapWidth = 48;
    23 const int32 kPlayPauseBitmapHeight = 21;
    24 
    25 const unsigned char kPlayButtonBitmapBits [] = {
    26     0xff,0xff,0xff,0xff,0xff,0x19,0x17,0x14,0x13,0x11,0x11,0x10,0x10,0x10,0x10,0x10,
    27     0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
    28     0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x12,0x14,0x16,0x19,0x1a,0xff,0xff,0xff,0xff,
    29     0xff,0xff,0xff,0x1a,0x18,0x14,0x10,0x0d,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,
    30     0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,
    31     0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0f,0x13,0x17,0x1a,0xff,0xff,0xff,
    32     0xff,0xff,0x1a,0x17,0x11,0x0b,0x10,0x16,0x1a,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,
    33     0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,
    34     0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x19,0x12,0x12,0x16,0x19,0xff,0xff,
    35     0xff,0x1a,0x17,0x10,0x0d,0x16,0x1e,0x1e,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,
    36     0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,
    37     0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x18,0x14,0x17,0x1a,0xff,
    38     0xff,0x18,0x11,0x0d,0x18,0x1e,0x1d,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    39     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    40     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x19,0x16,0x19,0xff,
    41     0x19,0x14,0x0c,0x16,0x1e,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x00,0x1a,0x1a,
    42     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    43     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x17,0x18,0x1a,
    44     0x17,0x11,0x10,0x1d,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x00,0x00,
    45     0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x00,0x00,0x10,0x1a,0x1a,
    46     0x00,0x00,0x00,0x10,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x17,0x18,0x1b,
    47     0x16,0x0f,0x17,0x1d,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x17,
    48     0x00,0x00,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x3f,0x1a,0x1a,
    49     0x00,0x17,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x16,0x16,0x1b,
    50     0x14,0x0f,0x1b,0x1c,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x17,
    51     0x17,0x17,0x00,0x00,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x3f,0x1a,0x1a,
    52     0x00,0x17,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x16,0x12,0x1c,
    53     0x14,0x0f,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x17,
    54     0x17,0x17,0x17,0x17,0x00,0x00,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x3f,0x1a,0x1a,
    55     0x00,0x17,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x16,0x0f,0x1c,
    56     0x14,0x10,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x17,
    57     0x17,0x17,0x17,0x17,0x3f,0x3f,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x3f,0x1a,0x1a,
    58     0x00,0x17,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x16,0x0f,0x1d,
    59     0x16,0x11,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x17,
    60     0x17,0x17,0x3f,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x3f,0x1a,0x1a,
    61     0x00,0x17,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x14,0x0e,0x1d,
    62     0x17,0x13,0x19,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x17,
    63     0x3f,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x3f,0x1a,0x1a,
    64     0x00,0x17,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x18,0x12,0x10,0x1d,
    65     0x18,0x16,0x17,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x3f,0x3f,
    66     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x10,0x3f,0x3f,0x3f,0x1a,0x1a,
    67     0x10,0x3f,0x3f,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x16,0x0f,0x13,0x1d,
    68     0x1a,0x19,0x17,0x18,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x3f,0x3f,0x1a,0x1a,
    69     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    70     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x18,0x12,0x0c,0x19,0x1d,
    71     0xff,0xff,0x19,0x17,0x16,0x17,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    72     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    73     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x18,0x13,0x0c,0x13,0x1e,0x1d,
    74     0xff,0xff,0xff,0x1a,0x16,0x13,0x16,0x17,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    75     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    76     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x16,0x12,0x0b,0x10,0x1c,0x1d,0x1c,
    77     0xff,0xff,0xff,0xff,0xff,0x16,0x10,0x10,0x12,0x13,0x13,0x14,0x14,0x14,0x14,0x14,
    78     0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,
    79     0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x13,0x11,0x0d,0x0a,0x11,0x1c,0x1e,0x1c,0xff,
    80     0xff,0xff,0xff,0xff,0x1c,0x1c,0x19,0x13,0x0f,0x0b,0x0b,0x0b,0x0a,0x0a,0x0a,0x0a,
    81     0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,
    82     0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0b,0x0f,0x19,0x1e,0x1e,0x1c,0xff,0xff,
    83     0xff,0xff,0xff,0xff,0xff,0x1c,0x1c,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,
    84     0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,
    85     0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1c,0xff,0xff,0xff,
    86     0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,
    87     0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,
    88     0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0xff,0xff,0xff,0xff,0xff
    89 };
    90 
    91 const unsigned char kDisabledPlayButtonBitmapBits [] = {
    92     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    93     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    94     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    95     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,
    96     0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,
    97     0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    98     0x1b,0x1b,0x1b,0x1b,0x19,0x16,0x16,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,
    99     0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,
    100     0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x16,0x16,0x19,0x1b,0x1b,0x1b,0x1b,
    101     0x1b,0x1b,0x1b,0x18,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    102     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    103     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x18,0x1b,0x1b,0x1b,
    104     0x1b,0x1b,0x19,0x16,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    105     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    106     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x16,0x19,0x1b,0x1b,
    107     0x1b,0x1b,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x16,0x1b,0x1b,
    108     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    109     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x1b,0x1b,
    110     0x1b,0x18,0x16,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x16,0x16,
    111     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x16,0x16,0x1b,0x1b,0x1b,
    112     0x16,0x16,0x16,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x18,0x1b,
    113     0x1b,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x19,0x19,
    114     0x16,0x16,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x19,0x1c,0x1b,0x1b,
    115     0x16,0x19,0x19,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x1b,
    116     0x1b,0x14,0x19,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x19,0x19,
    117     0x19,0x19,0x16,0x16,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x19,0x1c,0x1b,0x1b,
    118     0x16,0x19,0x19,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x19,0x14,0x1b,
    119     0x1b,0x13,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x19,0x19,
    120     0x19,0x19,0x19,0x19,0x16,0x16,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x19,0x1c,0x1b,0x1b,
    121     0x16,0x19,0x19,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x13,0x1b,
    122     0x1b,0x13,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x19,0x19,
    123     0x19,0x19,0x19,0x19,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x19,0x1c,0x1b,0x1b,
    124     0x16,0x19,0x19,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x13,0x1b,
    125     0x1b,0x14,0x19,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x19,0x19,
    126     0x19,0x19,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x19,0x1c,0x1b,0x1b,
    127     0x16,0x19,0x19,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x19,0x14,0x1b,
    128     0x1b,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x19,0x19,
    129     0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x19,0x1c,0x1b,0x1b,
    130     0x16,0x19,0x19,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x1b,
    131     0x1b,0x18,0x16,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x1c,0x1c,
    132     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1b,0x1b,
    133     0x1b,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x18,0x1b,
    134     0x1b,0x1b,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1b,0x1b,
    135     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    136     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x1b,0x1b,
    137     0x1b,0x1b,0x19,0x16,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    138     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    139     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x16,0x19,0x1b,0x1b,
    140     0x1b,0x1b,0x1b,0x18,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    141     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    142     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x18,0x1b,0x1b,0x1b,
    143     0x1b,0x1b,0x1b,0x1b,0x19,0x16,0x16,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,
    144     0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,
    145     0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x16,0x16,0x19,0x1b,0x1b,0x1b,0x1b,
    146     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,
    147     0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,
    148     0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    149     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    150     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    151     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    152     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    153     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    154     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b
    155 };
    156 
    157 const unsigned char kPressedPlayButtonBitmapBits [] = {
    158     0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x19,0x19,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17,
    159     0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
    160     0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x19,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,
    161     0x1b,0x1b,0x1b,0x1a,0x19,0x17,0x14,0x13,0x12,0x11,0x10,0x10,0x10,0x10,0x10,0x10,
    162     0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
    163     0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x12,0x14,0x16,0x19,0x1a,0x1b,0x1b,0x1b,
    164     0x1b,0x1b,0x1a,0x18,0x14,0x11,0x0d,0x0b,0x0a,0x09,0x09,0x09,0x09,0x09,0x09,0x09,
    165     0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,
    166     0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x0a,0x0c,0x0e,0x12,0x14,0x18,0x1a,0x1a,0x1b,
    167     0x1b,0x1a,0x17,0x13,0x0e,0x0b,0x0c,0x0d,0x0f,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
    168     0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
    169     0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x0f,0x0d,0x0d,0x0f,0x11,0x14,0x18,0x1a,0x1a,
    170     0x1a,0x18,0x13,0x0d,0x0c,0x0e,0x11,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
    171     0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
    172     0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x11,0x0f,0x0f,0x13,0x16,0x19,0x1a,
    173     0x19,0x14,0x0e,0x0c,0x0f,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
    174     0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
    175     0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x0f,0x10,0x16,0x18,0x1a,
    176     0x17,0x11,0x0c,0x0e,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x00,0x13,
    177     0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
    178     0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x0f,0x13,0x18,0x1b,
    179     0x16,0x0d,0x0d,0x11,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x00,
    180     0x00,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x00,0x00,0x10,0x13,
    181     0x13,0x00,0x00,0x00,0x10,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x11,0x10,0x17,0x1b,
    182     0x14,0x0d,0x0e,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x10,
    183     0x10,0x00,0x00,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x10,0x19,0x13,
    184     0x13,0x00,0x10,0x10,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x10,0x16,0x1c,
    185     0x14,0x0d,0x0f,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x10,
    186     0x10,0x10,0x10,0x00,0x00,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x10,0x19,0x13,
    187     0x13,0x00,0x10,0x10,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x10,0x16,0x1c,
    188     0x14,0x0e,0x10,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x10,
    189     0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x13,0x13,0x13,0x13,0x00,0x10,0x10,0x19,0x13,
    190     0x13,0x00,0x10,0x10,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x0f,0x16,0x1c,
    191     0x16,0x0e,0x0f,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x10,
    192     0x10,0x10,0x10,0x10,0x10,0x19,0x19,0x13,0x13,0x13,0x13,0x00,0x10,0x10,0x19,0x13,
    193     0x13,0x00,0x10,0x10,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x10,0x17,0x1c,
    194     0x17,0x10,0x0f,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x10,
    195     0x10,0x10,0x10,0x19,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x10,0x19,0x13,
    196     0x13,0x00,0x10,0x10,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x11,0x11,0x18,0x1c,
    197     0x18,0x12,0x0f,0x10,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x10,
    198     0x10,0x19,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x10,0x19,0x13,
    199     0x13,0x00,0x10,0x10,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x10,0x13,0x1a,0x1c,
    200     0x1a,0x16,0x11,0x0f,0x11,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x19,
    201     0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x10,0x19,0x19,0x19,0x13,
    202     0x13,0x10,0x19,0x19,0x19,0x13,0x13,0x13,0x13,0x13,0x12,0x11,0x11,0x18,0x1b,0x1c,
    203     0x1b,0x1a,0x16,0x11,0x0f,0x11,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x19,0x19,0x13,
    204     0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
    205     0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x11,0x10,0x16,0x1b,0x1d,0x1c,
    206     0x1b,0x1b,0x1a,0x16,0x12,0x10,0x10,0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
    207     0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
    208     0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x11,0x10,0x11,0x16,0x1b,0x1c,0x1d,0x1c,
    209     0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x12,0x10,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,
    210     0x0f,0x0f,0x0f,0x0e,0x0e,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0e,
    211     0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x11,0x14,0x19,0x1b,0x1d,0x1d,0x1c,0x1b,
    212     0x1b,0x1b,0x1b,0x1b,0x1c,0x1a,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    213     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    214     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1c,0x1d,0x1d,0x1c,0x1c,0x1b,
    215     0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,
    216     0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,
    217     0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1b,0x1b,
    218     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,
    219     0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,
    220     0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b
    221 };
    222 
    223 const unsigned char kPlayingPlayButtonBitmapBits [] = {
    224     0x1b,0x1b,0x1b,0x1b,0x1a,0x19,0x17,0x14,0x13,0x11,0x11,0x10,0x10,0x10,0x10,0x10,
    225     0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
    226     0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x12,0x14,0x16,0x19,0x1a,0x1b,0x1b,0x1b,0x1b,
    227     0x1b,0x1b,0x1b,0x1a,0x18,0x14,0x10,0x0d,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,
    228     0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,
    229     0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0f,0x13,0x17,0x1a,0x1b,0x1b,0x1b,
    230     0x1b,0x1b,0x1a,0x17,0x11,0x0b,0x10,0x16,0x1a,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,
    231     0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,
    232     0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x19,0x12,0x12,0x16,0x19,0x1b,0x1b,
    233     0x1b,0x1a,0x17,0x10,0x0d,0x16,0x1e,0x1e,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,
    234     0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,
    235     0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x18,0x14,0x17,0x1a,0x1b,
    236     0x1a,0x18,0x11,0x0d,0x18,0x1e,0x1d,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    237     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    238     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x19,0x16,0x19,0x1a,
    239     0x19,0x14,0x0c,0x16,0x1e,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x00,0x1a,0x1a,
    240     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    241     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x17,0x18,0x1a,
    242     0x17,0x11,0x10,0x1d,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x34,0x00,0x00,
    243     0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x00,0x00,0x10,0x1a,0x1a,
    244     0x00,0x00,0x00,0x10,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x17,0x18,0x1b,
    245     0x16,0x0f,0x17,0x1d,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x34,0x34,0x34,
    246     0x00,0x00,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x3f,0x1a,0x1a,
    247     0x00,0x17,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x16,0x16,0x1b,
    248     0x14,0x0f,0x1b,0x1c,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x34,0x34,0x34,
    249     0x34,0x34,0x00,0x00,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x3f,0x1a,0x1a,
    250     0x00,0x17,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x16,0x12,0x1c,
    251     0x14,0x0f,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x34,0x34,0x34,
    252     0x34,0x34,0x34,0x34,0x00,0x00,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x3f,0x1a,0x1a,
    253     0x00,0x17,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x16,0x0f,0x1c,
    254     0x14,0x10,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x34,0x34,0x34,
    255     0x34,0x34,0x34,0x34,0x3f,0x3f,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x3f,0x1a,0x1a,
    256     0x00,0x17,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x16,0x0f,0x1d,
    257     0x16,0x11,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x34,0x34,0x34,
    258     0x34,0x34,0x3f,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x3f,0x1a,0x1a,
    259     0x00,0x17,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x14,0x0e,0x1d,
    260     0x17,0x13,0x19,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x34,0x34,0x34,
    261     0x3f,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x3f,0x1a,0x1a,
    262     0x00,0x17,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x18,0x12,0x10,0x1d,
    263     0x18,0x16,0x17,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x34,0x3f,0x3f,
    264     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x10,0x3f,0x3f,0x3f,0x1a,0x1a,
    265     0x10,0x3f,0x3f,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x16,0x0f,0x13,0x1d,
    266     0x1a,0x19,0x17,0x18,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x3f,0x3f,0x1a,0x1a,
    267     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    268     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x18,0x12,0x0c,0x19,0x1d,
    269     0x1b,0x1b,0x19,0x17,0x16,0x17,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    270     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    271     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x18,0x13,0x0c,0x13,0x1e,0x1d,
    272     0x1b,0x1b,0x1b,0x1a,0x16,0x13,0x16,0x17,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    273     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    274     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x16,0x12,0x0b,0x10,0x1c,0x1d,0x1c,
    275     0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x10,0x10,0x12,0x13,0x13,0x14,0x14,0x14,0x14,0x14,
    276     0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,
    277     0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x13,0x11,0x0d,0x0a,0x11,0x1c,0x1e,0x1c,0x1b,
    278     0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x19,0x13,0x0f,0x0b,0x0b,0x0b,0x0a,0x0a,0x0a,0x0a,
    279     0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,
    280     0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0b,0x0f,0x19,0x1e,0x1e,0x1c,0x1b,0x1b,
    281     0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,
    282     0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,
    283     0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1c,0x1b,0x1b,0x1b,
    284     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,
    285     0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,
    286     0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b
    287 };
    288 
    289 const unsigned char kPressedPlayingPlayButtonBitmapBits [] = {
    290     0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x19,0x19,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17,
    291     0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
    292     0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x19,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,
    293     0x1b,0x1b,0x1b,0x1a,0x19,0x17,0x14,0x13,0x12,0x11,0x10,0x10,0x10,0x10,0x10,0x10,
    294     0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
    295     0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x12,0x14,0x16,0x19,0x1a,0x1b,0x1b,0x1b,
    296     0x1b,0x1b,0x1a,0x18,0x14,0x11,0x0d,0x0b,0x0a,0x09,0x09,0x09,0x09,0x09,0x09,0x09,
    297     0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,
    298     0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x0a,0x0c,0x0e,0x12,0x14,0x18,0x1a,0x1a,0x1b,
    299     0x1b,0x1a,0x17,0x13,0x0e,0x0b,0x0c,0x0d,0x0f,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
    300     0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
    301     0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x0f,0x0d,0x0d,0x0f,0x11,0x14,0x18,0x1a,0x1a,
    302     0x1a,0x18,0x13,0x0d,0x0c,0x0e,0x11,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
    303     0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
    304     0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x11,0x0f,0x0f,0x13,0x16,0x19,0x1a,
    305     0x19,0x14,0x0e,0x0c,0x0f,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
    306     0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
    307     0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x0f,0x10,0x16,0x18,0x1a,
    308     0x17,0x11,0x0c,0x0e,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x00,0x13,
    309     0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
    310     0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x0f,0x13,0x18,0x1b,
    311     0x16,0x0d,0x0d,0x11,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x34,0x00,
    312     0x00,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x00,0x00,0x10,0x13,
    313     0x13,0x00,0x00,0x00,0x10,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x11,0x10,0x17,0x1b,
    314     0x14,0x0d,0x0e,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x34,0x34,
    315     0x34,0x00,0x00,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x10,0x19,0x13,
    316     0x13,0x00,0x10,0x10,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x10,0x16,0x1c,
    317     0x14,0x0d,0x0f,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x34,0x34,
    318     0x34,0x34,0x34,0x00,0x00,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x10,0x19,0x13,
    319     0x13,0x00,0x10,0x10,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x10,0x16,0x1c,
    320     0x14,0x0e,0x10,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x34,0x34,
    321     0x34,0x34,0x34,0x34,0x34,0x00,0x00,0x13,0x13,0x13,0x13,0x00,0x10,0x10,0x19,0x13,
    322     0x13,0x00,0x10,0x10,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x0f,0x16,0x1c,
    323     0x16,0x0e,0x0f,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x34,0x34,
    324     0x34,0x34,0x34,0x34,0x34,0x19,0x19,0x13,0x13,0x13,0x13,0x00,0x10,0x10,0x19,0x13,
    325     0x13,0x00,0x10,0x10,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x10,0x17,0x1c,
    326     0x17,0x10,0x0f,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x34,0x34,
    327     0x34,0x34,0x34,0x19,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x10,0x19,0x13,
    328     0x13,0x00,0x10,0x10,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x11,0x11,0x18,0x1c,
    329     0x18,0x12,0x0f,0x10,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x34,0x34,
    330     0x34,0x19,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x10,0x19,0x13,
    331     0x13,0x00,0x10,0x10,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x10,0x13,0x1a,0x1c,
    332     0x1a,0x16,0x11,0x0f,0x11,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x34,0x19,
    333     0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x10,0x19,0x19,0x19,0x13,
    334     0x13,0x10,0x19,0x19,0x19,0x13,0x13,0x13,0x13,0x13,0x12,0x11,0x11,0x18,0x1b,0x1c,
    335     0x1b,0x1a,0x16,0x11,0x0f,0x11,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x19,0x19,0x13,
    336     0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
    337     0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x11,0x10,0x16,0x1b,0x1d,0x1c,
    338     0x1b,0x1b,0x1a,0x16,0x12,0x10,0x10,0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
    339     0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
    340     0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x11,0x10,0x11,0x16,0x1b,0x1c,0x1d,0x1c,
    341     0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x12,0x10,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,
    342     0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,
    343     0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x11,0x14,0x19,0x1b,0x1d,0x1d,0x1c,0x1b,
    344     0x1b,0x1b,0x1b,0x1b,0x1c,0x1a,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    345     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    346     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1c,0x1d,0x1d,0x1c,0x1c,0x1b,
    347     0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,
    348     0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,
    349     0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1b,0x1b,
    350     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,
    351     0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,
    352     0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b
    353 };
    354 
    355 const unsigned char kPausedPlayButtonBitmapBits [] = {
    356     0x1b,0x1b,0x1b,0x1b,0x1a,0x19,0x17,0x14,0x13,0x11,0x11,0x10,0x10,0x10,0x10,0x10,
    357     0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
    358     0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x12,0x14,0x16,0x19,0x1a,0x1b,0x1b,0x1b,0x1b,
    359     0x1b,0x1b,0x1b,0x1a,0x18,0x14,0x10,0x0d,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,
    360     0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,
    361     0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0f,0x13,0x17,0x1a,0x1b,0x1b,0x1b,
    362     0x1b,0x1b,0x1a,0x17,0x11,0x0b,0x10,0x16,0x1a,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,
    363     0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,
    364     0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x19,0x12,0x12,0x16,0x19,0x1b,0x1b,
    365     0x1b,0x1a,0x17,0x10,0x0d,0x16,0x1e,0x1e,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,
    366     0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,
    367     0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x18,0x14,0x17,0x1a,0x1b,
    368     0x1a,0x18,0x11,0x0d,0x18,0x1e,0x1d,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    369     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    370     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x19,0x16,0x19,0x1a,
    371     0x19,0x14,0x0c,0x16,0x1e,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x00,0x1a,0x1a,
    372     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    373     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x17,0x18,0x1a,
    374     0x17,0x11,0x10,0x1d,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x00,0x00,
    375     0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x00,0x00,0x10,0x1a,0x1a,
    376     0x00,0x00,0x00,0x10,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x17,0x18,0x1b,
    377     0x16,0x0f,0x17,0x1d,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x17,
    378     0x00,0x00,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x34,0x34,0x3f,0x1a,0x1a,
    379     0x00,0x34,0x34,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x16,0x16,0x1b,
    380     0x14,0x0f,0x1b,0x1c,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x17,
    381     0x17,0x17,0x00,0x00,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x34,0x34,0x3f,0x1a,0x1a,
    382     0x00,0x34,0x34,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x16,0x12,0x1c,
    383     0x14,0x0f,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x17,
    384     0x17,0x17,0x17,0x17,0x00,0x00,0x1a,0x1a,0x1a,0x1a,0x00,0x34,0x34,0x3f,0x1a,0x1a,
    385     0x00,0x34,0x34,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x16,0x0f,0x1c,
    386     0x14,0x10,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x17,
    387     0x17,0x17,0x17,0x17,0x3f,0x3f,0x1a,0x1a,0x1a,0x1a,0x00,0x34,0x34,0x3f,0x1a,0x1a,
    388     0x00,0x34,0x34,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x16,0x0f,0x1d,
    389     0x16,0x11,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x17,
    390     0x17,0x17,0x3f,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x34,0x34,0x3f,0x1a,0x1a,
    391     0x00,0x34,0x34,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x14,0x0e,0x1d,
    392     0x17,0x13,0x19,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x17,
    393     0x3f,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x34,0x34,0x3f,0x1a,0x1a,
    394     0x00,0x34,0x34,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x18,0x12,0x10,0x1d,
    395     0x18,0x16,0x17,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x3f,0x3f,
    396     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x10,0x3f,0x3f,0x3f,0x1a,0x1a,
    397     0x10,0x3f,0x3f,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x16,0x0f,0x13,0x1d,
    398     0x1a,0x19,0x17,0x18,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x3f,0x3f,0x1a,0x1a,
    399     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    400     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x18,0x12,0x0c,0x19,0x1d,
    401     0x1b,0x1b,0x19,0x17,0x16,0x17,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    402     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    403     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x18,0x13,0x0c,0x13,0x1e,0x1d,
    404     0x1b,0x1b,0x1b,0x1a,0x16,0x13,0x16,0x17,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    405     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    406     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x16,0x12,0x0b,0x10,0x1c,0x1d,0x1c,
    407     0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x10,0x10,0x12,0x13,0x13,0x14,0x14,0x14,0x14,0x14,
    408     0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,
    409     0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x13,0x11,0x0d,0x0a,0x11,0x1c,0x1e,0x1c,0x1b,
    410     0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x19,0x13,0x0f,0x0b,0x0b,0x0b,0x0a,0x0a,0x0a,0x0a,
    411     0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,
    412     0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0b,0x0f,0x19,0x1e,0x1e,0x1c,0x1b,0x1b,
    413     0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,
    414     0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,
    415     0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1c,0x1b,0x1b,0x1b,
    416     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,
    417     0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,
    418     0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b
    419 };
    420 
    421 const unsigned char kPressedPausedPlayButtonBitmapBits [] = {
    422     0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x19,0x19,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17,
    423     0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
    424     0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x19,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,
    425     0x1b,0x1b,0x1b,0x1a,0x19,0x17,0x14,0x13,0x12,0x11,0x10,0x10,0x10,0x10,0x10,0x10,
    426     0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
    427     0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x12,0x14,0x16,0x19,0x1a,0x1b,0x1b,0x1b,
    428     0x1b,0x1b,0x1a,0x18,0x14,0x11,0x0d,0x0b,0x0a,0x09,0x09,0x09,0x09,0x09,0x09,0x09,
    429     0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,
    430     0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x0a,0x0c,0x0e,0x12,0x14,0x18,0x1a,0x1a,0x1b,
    431     0x1b,0x1a,0x17,0x13,0x0e,0x0b,0x0c,0x0d,0x0f,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
    432     0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
    433     0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x0f,0x0d,0x0d,0x0f,0x11,0x14,0x18,0x1a,0x1a,
    434     0x1a,0x18,0x13,0x0d,0x0c,0x0e,0x11,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
    435     0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
    436     0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x11,0x0f,0x0f,0x13,0x16,0x19,0x1a,
    437     0x19,0x14,0x0e,0x0c,0x0f,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
    438     0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
    439     0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x0f,0x10,0x16,0x18,0x1a,
    440     0x17,0x11,0x0c,0x0e,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x00,0x13,
    441     0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
    442     0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x0f,0x13,0x18,0x1b,
    443     0x16,0x0d,0x0d,0x11,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x00,
    444     0x00,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x00,0x00,0x10,0x13,
    445     0x13,0x00,0x00,0x00,0x10,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x11,0x10,0x17,0x1b,
    446     0x14,0x0d,0x0e,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x10,
    447     0x10,0x00,0x00,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x34,0x34,0x19,0x13,
    448     0x13,0x00,0x34,0x34,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x10,0x16,0x1c,
    449     0x14,0x0d,0x0f,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x10,
    450     0x10,0x10,0x10,0x00,0x00,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x34,0x34,0x19,0x13,
    451     0x13,0x00,0x34,0x34,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x10,0x16,0x1c,
    452     0x14,0x0e,0x10,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x10,
    453     0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x13,0x13,0x13,0x13,0x00,0x34,0x34,0x19,0x13,
    454     0x13,0x00,0x34,0x34,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x0f,0x16,0x1c,
    455     0x16,0x0e,0x0f,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x10,
    456     0x10,0x10,0x10,0x10,0x10,0x19,0x19,0x13,0x13,0x13,0x13,0x00,0x34,0x34,0x19,0x13,
    457     0x13,0x00,0x34,0x34,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x10,0x17,0x1c,
    458     0x17,0x10,0x0f,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x10,
    459     0x10,0x10,0x10,0x19,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x34,0x34,0x19,0x13,
    460     0x13,0x00,0x34,0x34,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x11,0x11,0x18,0x1c,
    461     0x18,0x12,0x0f,0x10,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x10,
    462     0x10,0x19,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x34,0x34,0x19,0x13,
    463     0x13,0x00,0x34,0x34,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x10,0x13,0x1a,0x1c,
    464     0x1a,0x16,0x11,0x0f,0x11,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x19,
    465     0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x10,0x19,0x19,0x19,0x13,
    466     0x13,0x10,0x19,0x19,0x19,0x13,0x13,0x13,0x13,0x13,0x12,0x11,0x11,0x18,0x1b,0x1c,
    467     0x1b,0x1a,0x16,0x11,0x0f,0x11,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x19,0x19,0x13,
    468     0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
    469     0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x11,0x10,0x16,0x1b,0x1d,0x1c,
    470     0x1b,0x1b,0x1a,0x16,0x12,0x10,0x10,0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
    471     0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
    472     0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x11,0x10,0x11,0x16,0x1b,0x1c,0x1d,0x1c,
    473     0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x12,0x10,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,
    474     0x0f,0x0f,0x0f,0x0e,0x0e,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,
    475     0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x11,0x14,0x19,0x1b,0x1d,0x1d,0x1c,0x1b,
    476     0x1b,0x1b,0x1b,0x1b,0x1c,0x1a,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    477     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    478     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1c,0x1d,0x1d,0x1c,0x1c,0x1b,
    479     0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,
    480     0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,
    481     0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1b,0x1b,
    482     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,
    483     0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,
    484     0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b
    485 };
    486 
    487 // #pragma mark stop
    488 
    489 const int32 kStopBitmapWidth = 31;
    490 const int32 kStopBitmapHeight = 21;
    491 
    492 const unsigned char kStopButtonBitmapBits [] = {
    493     0x1b,0x1b,0x1b,0x1b,0x1a,0x19,0x17,0x14,0x13,0x11,0x11,0x10,0x10,0x10,0x10,0x10,
    494     0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x12,0x14,0x16,0x19,0x1a,0x1b,0x1b,0x1b,0x3f,
    495     0x1b,0x1b,0x1b,0x1a,0x18,0x14,0x10,0x0d,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,
    496     0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0f,0x13,0x17,0x1a,0x1b,0x1b,0x1b,0x3f,
    497     0x1b,0x1b,0x1a,0x17,0x11,0x0b,0x10,0x16,0x1a,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,
    498     0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x19,0x12,0x12,0x16,0x19,0x1b,0x1b,0x3f,
    499     0x1b,0x1a,0x17,0x10,0x0d,0x16,0x1e,0x1e,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,
    500     0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x18,0x14,0x17,0x1a,0x1b,0x3f,
    501     0x1a,0x18,0x11,0x0d,0x18,0x1e,0x1d,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    502     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x19,0x16,0x19,0x1a,0x3f,
    503     0x19,0x14,0x0c,0x16,0x1e,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    504     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x17,0x18,0x1a,0x3f,
    505     0x17,0x11,0x10,0x1d,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x00,0x00,0x00,
    506     0x00,0x00,0x00,0x10,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x17,0x18,0x1b,0x3f,
    507     0x16,0x0f,0x17,0x1d,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x17,
    508     0x17,0x17,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x16,0x16,0x1b,0x3f,
    509     0x14,0x0f,0x1b,0x1c,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x17,
    510     0x17,0x17,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x16,0x12,0x1c,0x3f,
    511     0x14,0x0f,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x17,
    512     0x17,0x17,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x16,0x0f,0x1c,0x3f,
    513     0x14,0x10,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x17,
    514     0x17,0x17,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x16,0x0f,0x1d,0x3f,
    515     0x16,0x11,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x17,
    516     0x17,0x17,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x14,0x0e,0x1d,0x3f,
    517     0x17,0x13,0x19,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x17,
    518     0x17,0x17,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x18,0x12,0x10,0x1d,0x3f,
    519     0x18,0x16,0x17,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x10,0x3f,0x3f,0x3f,
    520     0x3f,0x3f,0x3f,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x16,0x0f,0x13,0x1d,0x3f,
    521     0x1a,0x19,0x17,0x18,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    522     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x18,0x12,0x0c,0x19,0x1d,0x3f,
    523     0x1b,0x1b,0x19,0x17,0x16,0x17,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    524     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x18,0x13,0x0c,0x13,0x1e,0x1d,0x3f,
    525     0x1b,0x1b,0x1b,0x1a,0x16,0x13,0x16,0x17,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    526     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x16,0x12,0x0b,0x10,0x1c,0x1d,0x1c,0x3f,
    527     0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x10,0x10,0x12,0x13,0x13,0x14,0x14,0x14,0x14,0x14,
    528     0x14,0x14,0x14,0x14,0x14,0x14,0x13,0x11,0x0d,0x0a,0x11,0x1c,0x1e,0x1c,0x1b,0x3f,
    529     0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x19,0x13,0x0f,0x0b,0x0b,0x0b,0x0a,0x0a,0x0a,0x0a,
    530     0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0b,0x0f,0x19,0x1e,0x1e,0x1c,0x1b,0x1b,0x3f,
    531     0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,
    532     0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1c,0x1b,0x1b,0x1b,0x3f,
    533     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,
    534     0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f
    535 };
    536 
    537 
    538 const unsigned char kDisabledStopButtonBitmapBits [] = {
    539     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    540     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,
    541     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,
    542     0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,
    543     0x1b,0x1b,0x1b,0x1b,0x19,0x16,0x16,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,
    544     0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x16,0x16,0x19,0x1b,0x1b,0x1b,0x1b,0x3f,
    545     0x1b,0x1b,0x1b,0x18,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    546     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x18,0x1b,0x1b,0x1b,0x3f,
    547     0x1b,0x1b,0x19,0x16,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    548     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x16,0x19,0x1b,0x1b,0x3f,
    549     0x1b,0x1b,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    550     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x1b,0x1b,0x3f,
    551     0x1b,0x18,0x16,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x16,0x16,0x16,
    552     0x16,0x16,0x16,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x18,0x1b,0x3f,
    553     0x1b,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x19,0x19,
    554     0x19,0x19,0x19,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x1b,0x3f,
    555     0x1b,0x14,0x19,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x19,0x19,
    556     0x19,0x19,0x19,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x19,0x14,0x1b,0x3f,
    557     0x1b,0x13,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x19,0x19,
    558     0x19,0x19,0x19,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x13,0x1b,0x3f,
    559     0x1b,0x13,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x19,0x19,
    560     0x19,0x19,0x19,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x13,0x1b,0x3f,
    561     0x1b,0x14,0x19,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x19,0x19,
    562     0x19,0x19,0x19,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x19,0x14,0x1b,0x3f,
    563     0x1b,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x19,0x19,
    564     0x19,0x19,0x19,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x1b,0x3f,
    565     0x1b,0x18,0x16,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,
    566     0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x18,0x1b,0x3f,
    567     0x1b,0x1b,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    568     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x1b,0x1b,0x3f,
    569     0x1b,0x1b,0x19,0x16,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    570     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x16,0x19,0x1b,0x1b,0x3f,
    571     0x1b,0x1b,0x1b,0x18,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    572     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x18,0x1b,0x1b,0x1b,0x3f,
    573     0x1b,0x1b,0x1b,0x1b,0x19,0x16,0x16,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,
    574     0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x16,0x16,0x19,0x1b,0x1b,0x1b,0x1b,0x3f,
    575     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,
    576     0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,
    577     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    578     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,
    579     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    580     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f
    581 };
    582 
    583 
    584 const unsigned char kPressedStopButtonBitmapBits [] = {
    585     0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x19,0x19,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17,
    586     0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x19,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x3f,
    587     0x1b,0x1b,0x1b,0x1a,0x19,0x17,0x14,0x13,0x12,0x11,0x10,0x10,0x10,0x10,0x10,0x10,
    588     0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x12,0x14,0x16,0x19,0x1a,0x1b,0x1b,0x1b,0x3f,
    589     0x1b,0x1b,0x1a,0x18,0x14,0x11,0x0d,0x0b,0x0a,0x09,0x09,0x09,0x09,0x09,0x09,0x09,
    590     0x09,0x09,0x09,0x09,0x09,0x09,0x0a,0x0c,0x0e,0x12,0x14,0x18,0x1a,0x1a,0x1b,0x3f,
    591     0x1b,0x1a,0x17,0x13,0x0e,0x0b,0x0c,0x0d,0x0f,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
    592     0x10,0x10,0x10,0x10,0x10,0x10,0x0f,0x0d,0x0d,0x0f,0x11,0x14,0x18,0x1a,0x1a,0x3f,
    593     0x1a,0x18,0x13,0x0d,0x0c,0x0e,0x11,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
    594     0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x11,0x0f,0x0f,0x13,0x16,0x19,0x1a,0x3f,
    595     0x19,0x14,0x0e,0x0c,0x0f,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
    596     0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x0f,0x10,0x16,0x18,0x1a,0x3f,
    597     0x17,0x11,0x0c,0x0e,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
    598     0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x0f,0x13,0x18,0x1b,0x3f,
    599     0x16,0x0d,0x0d,0x11,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x00,0x00,
    600     0x00,0x00,0x00,0x00,0x00,0x13,0x13,0x13,0x13,0x13,0x13,0x11,0x10,0x17,0x1b,0x3f,
    601     0x14,0x0d,0x0e,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x10,
    602     0x10,0x10,0x10,0x10,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x10,0x16,0x1c,0x3f,
    603     0x14,0x0d,0x0f,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x10,
    604     0x10,0x10,0x10,0x10,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x10,0x16,0x1c,0x3f,
    605     0x14,0x0e,0x10,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x10,
    606     0x10,0x10,0x10,0x10,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x0f,0x16,0x1c,0x3f,
    607     0x16,0x0e,0x0f,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x10,
    608     0x10,0x10,0x10,0x10,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x10,0x17,0x1c,0x3f,
    609     0x17,0x10,0x0f,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x10,
    610     0x10,0x10,0x10,0x10,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x11,0x11,0x18,0x1c,0x3f,
    611     0x18,0x12,0x0f,0x10,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x10,0x10,
    612     0x10,0x10,0x10,0x10,0x19,0x13,0x13,0x13,0x13,0x13,0x12,0x10,0x13,0x1a,0x1c,0x3f,
    613     0x1a,0x16,0x11,0x0f,0x11,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x19,0x19,
    614     0x19,0x19,0x19,0x19,0x19,0x13,0x13,0x13,0x13,0x12,0x11,0x11,0x18,0x1b,0x1c,0x3f,
    615     0x1b,0x1a,0x16,0x11,0x0f,0x11,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
    616     0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x11,0x10,0x16,0x1b,0x1d,0x1c,0x3f,
    617     0x1b,0x1b,0x1a,0x16,0x12,0x10,0x10,0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
    618     0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x11,0x10,0x11,0x16,0x1b,0x1c,0x1d,0x1c,0x3f,
    619     0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x12,0x10,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,
    620     0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x11,0x14,0x19,0x1b,0x1d,0x1d,0x1c,0x1b,0x3f,
    621     0x1b,0x1b,0x1b,0x1b,0x1c,0x1a,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    622     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1c,0x1d,0x1d,0x1c,0x1c,0x1b,0x3f,
    623     0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,
    624     0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1b,0x1b,0x3f,
    625     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,
    626     0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x3f
    627 };
    628 
    629 // #pragma mark rewind
    630 
    631 const int32 kRewindBitmapWidth = 38;
    632 const int32 kRewindBitmapHeight = 21;
    633 
    634 const unsigned char kRewindBitmapBits [] = {
    635     0x1b,0x1b,0x1b,0x1b,0x1a,0x19,0x17,0x14,0x13,0x11,0x11,0x10,0x10,0x10,0x10,0x10,
    636     0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x12,0x14,0x16,
    637     0x19,0x1a,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1a,0x18,0x14,0x10,0x0d,
    638     0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,
    639     0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0f,0x13,0x17,0x1a,0x1b,0x1b,0x1b,0x3f,0x3f,
    640     0x1b,0x1b,0x1a,0x17,0x11,0x0b,0x10,0x16,0x1a,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,
    641     0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x19,
    642     0x12,0x12,0x16,0x19,0x1b,0x1b,0x3f,0x3f,0x1b,0x1a,0x17,0x10,0x0d,0x16,0x1e,0x1e,
    643     0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,
    644     0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x18,0x14,0x17,0x1a,0x1b,0x3f,0x3f,
    645     0x1a,0x18,0x11,0x0d,0x18,0x1e,0x1d,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    646     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    647     0x1b,0x1b,0x19,0x16,0x19,0x1a,0x3f,0x3f,0x19,0x14,0x0c,0x16,0x1e,0x1c,0x1b,0x1a,
    648     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    649     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x17,0x18,0x1a,0x3f,0x3f,
    650     0x17,0x11,0x10,0x1d,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    651     0x00,0x00,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x00,0x1a,0x1a,0x1a,0x1a,0x1a,
    652     0x1a,0x1a,0x1a,0x17,0x18,0x1b,0x3f,0x3f,0x16,0x0f,0x17,0x1d,0x1b,0x1a,0x1a,0x1a,
    653     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x00,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,
    654     0x00,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x16,0x16,0x1b,0x3f,0x3f,
    655     0x14,0x0f,0x1b,0x1c,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x00,0x17,0x17,
    656     0x17,0x3f,0x1a,0x1a,0x1a,0x00,0x00,0x17,0x17,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,
    657     0x1a,0x1a,0x1a,0x16,0x12,0x1c,0x3f,0x3f,0x14,0x0f,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a,
    658     0x1a,0x1a,0x00,0x00,0x17,0x17,0x17,0x17,0x17,0x3f,0x1a,0x00,0x00,0x17,0x17,0x17,
    659     0x17,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x16,0x0f,0x1c,0x3f,0x3f,
    660     0x14,0x10,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x3f,0x3f,0x17,0x17,0x17,0x17,
    661     0x17,0x3f,0x1a,0x3f,0x3f,0x17,0x17,0x17,0x17,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,
    662     0x1a,0x1a,0x1a,0x16,0x0f,0x1d,0x3f,0x3f,0x16,0x11,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,
    663     0x1a,0x1a,0x1a,0x1a,0x3f,0x3f,0x17,0x17,0x17,0x3f,0x1a,0x1a,0x1a,0x3f,0x3f,0x17,
    664     0x17,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x14,0x0e,0x1d,0x3f,0x3f,
    665     0x17,0x13,0x19,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x3f,0x3f,
    666     0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x3f,0x3f,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,
    667     0x1a,0x1a,0x18,0x12,0x10,0x1d,0x3f,0x3f,0x18,0x16,0x17,0x1a,0x1a,0x1a,0x1a,0x1a,
    668     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x3f,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    669     0x1a,0x3f,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x16,0x0f,0x13,0x1d,0x3f,0x3f,
    670     0x1a,0x19,0x17,0x18,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    671     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    672     0x1a,0x18,0x12,0x0c,0x19,0x1d,0x3f,0x3f,0x1b,0x1b,0x19,0x17,0x16,0x17,0x19,0x1a,
    673     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    674     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x18,0x13,0x0c,0x13,0x1e,0x1d,0x3f,0x3f,
    675     0x1b,0x1b,0x1b,0x1a,0x16,0x13,0x16,0x17,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    676     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x16,
    677     0x12,0x0b,0x10,0x1c,0x1d,0x1c,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x10,0x10,
    678     0x12,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,
    679     0x14,0x14,0x14,0x14,0x14,0x13,0x11,0x0d,0x0a,0x11,0x1c,0x1e,0x1c,0x1b,0x3f,0x3f,
    680     0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x19,0x13,0x0f,0x0b,0x0b,0x0b,0x0a,0x0a,0x0a,0x0a,
    681     0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0b,0x0f,
    682     0x19,0x1e,0x1e,0x1c,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1d,
    683     0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,
    684     0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1c,0x1b,0x1b,0x1b,0x3f,0x3f,
    685     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,
    686     0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,
    687     0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f
    688 };
    689 
    690 
    691 const unsigned char kDisabledRewindBitmapBits [] = {
    692     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    693     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    694     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16,
    695     0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,
    696     0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,
    697     0x1b,0x1b,0x1b,0x1b,0x19,0x16,0x16,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,
    698     0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x16,
    699     0x16,0x19,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x18,0x16,0x18,0x1b,0x1b,
    700     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    701     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x18,0x1b,0x1b,0x1b,0x3f,0x3f,
    702     0x1b,0x1b,0x19,0x16,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    703     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    704     0x1b,0x1a,0x16,0x19,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x16,0x18,0x1b,0x1b,0x1b,0x1b,
    705     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    706     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x1b,0x1b,0x3f,0x3f,
    707     0x1b,0x18,0x16,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    708     0x16,0x16,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x16,0x1b,0x1b,0x1b,0x1b,0x1b,
    709     0x1b,0x1b,0x1b,0x16,0x18,0x1b,0x3f,0x3f,0x1b,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,
    710     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x16,0x19,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,
    711     0x16,0x19,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x1b,0x3f,0x3f,
    712     0x1b,0x14,0x19,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x16,0x19,0x19,
    713     0x19,0x1c,0x1b,0x1b,0x1b,0x16,0x16,0x19,0x19,0x19,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,
    714     0x1b,0x1b,0x1b,0x19,0x14,0x1b,0x3f,0x3f,0x1b,0x13,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    715     0x1b,0x1b,0x16,0x16,0x19,0x19,0x19,0x19,0x19,0x1c,0x1b,0x16,0x16,0x19,0x19,0x19,
    716     0x19,0x19,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x13,0x1b,0x3f,0x3f,
    717     0x1b,0x13,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x19,0x19,0x19,0x19,
    718     0x19,0x1c,0x1b,0x1c,0x1c,0x19,0x19,0x19,0x19,0x19,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,
    719     0x1b,0x1b,0x1b,0x1b,0x13,0x1b,0x3f,0x3f,0x1b,0x14,0x19,0x1b,0x1b,0x1b,0x1b,0x1b,
    720     0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x19,0x19,0x19,0x1c,0x1b,0x1b,0x1b,0x1c,0x1c,0x19,
    721     0x19,0x19,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x19,0x14,0x1b,0x3f,0x3f,
    722     0x1b,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,
    723     0x19,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x19,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,
    724     0x1b,0x1b,0x1b,0x18,0x16,0x1b,0x3f,0x3f,0x1b,0x18,0x16,0x1b,0x1b,0x1b,0x1b,0x1b,
    725     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    726     0x1b,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x18,0x1b,0x3f,0x3f,
    727     0x1b,0x1b,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    728     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    729     0x1b,0x1b,0x18,0x16,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x19,0x16,0x1a,0x1b,0x1b,0x1b,
    730     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    731     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x16,0x19,0x1b,0x1b,0x3f,0x3f,
    732     0x1b,0x1b,0x1b,0x18,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    733     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    734     0x18,0x16,0x18,0x1b,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x19,0x16,0x16,0x18,
    735     0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,
    736     0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x16,0x16,0x19,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,
    737     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,
    738     0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x18,
    739     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    740     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    741     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,
    742     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    743     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    744     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f
    745 };
    746 
    747 
    748 const unsigned char kPressedRewindBitmapBits [] = {
    749     0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x19,0x19,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17,
    750     0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x19,
    751     0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1a,0x19,0x17,0x14,0x13,
    752     0x12,0x11,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
    753     0x10,0x10,0x10,0x10,0x10,0x11,0x12,0x14,0x16,0x19,0x1a,0x1b,0x1b,0x1b,0x3f,0x3f,
    754     0x1b,0x1b,0x1a,0x18,0x14,0x11,0x0d,0x0b,0x0a,0x09,0x09,0x09,0x09,0x09,0x09,0x09,
    755     0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x0a,0x0c,0x0e,
    756     0x12,0x14,0x18,0x1a,0x1a,0x1b,0x3f,0x3f,0x1b,0x1a,0x17,0x13,0x0e,0x0b,0x0c,0x0d,
    757     0x0f,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
    758     0x10,0x10,0x10,0x10,0x10,0x0f,0x0d,0x0d,0x0f,0x11,0x14,0x18,0x1a,0x1a,0x3f,0x3f,
    759     0x1a,0x18,0x13,0x0d,0x0c,0x0e,0x11,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
    760     0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x11,
    761     0x0f,0x0f,0x13,0x16,0x19,0x1a,0x3f,0x3f,0x19,0x14,0x0e,0x0c,0x0f,0x12,0x13,0x13,
    762     0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
    763     0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x0f,0x10,0x16,0x18,0x1a,0x3f,0x3f,
    764     0x17,0x11,0x0c,0x0e,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
    765     0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
    766     0x13,0x12,0x0f,0x13,0x18,0x1b,0x3f,0x3f,0x16,0x0d,0x0d,0x11,0x13,0x13,0x13,0x13,
    767     0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x00,0x13,0x13,0x13,0x13,0x13,
    768     0x13,0x13,0x00,0x00,0x13,0x13,0x13,0x13,0x13,0x13,0x11,0x10,0x17,0x1b,0x3f,0x3f,
    769     0x14,0x0d,0x0e,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,
    770     0x00,0x34,0x19,0x13,0x13,0x13,0x13,0x13,0x00,0x00,0x34,0x19,0x13,0x13,0x13,0x13,
    771     0x13,0x13,0x12,0x10,0x16,0x1c,0x3f,0x3f,0x14,0x0d,0x0f,0x12,0x13,0x13,0x13,0x13,
    772     0x13,0x13,0x13,0x13,0x13,0x00,0x00,0x34,0x34,0x34,0x19,0x13,0x13,0x13,0x00,0x00,
    773     0x34,0x34,0x34,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x10,0x16,0x1c,0x3f,0x3f,
    774     0x14,0x0e,0x10,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x00,0x34,0x34,0x34,
    775     0x34,0x34,0x19,0x13,0x00,0x00,0x34,0x34,0x34,0x34,0x34,0x19,0x13,0x13,0x13,0x13,
    776     0x13,0x13,0x12,0x0f,0x16,0x1c,0x3f,0x3f,0x16,0x0e,0x0f,0x12,0x13,0x13,0x13,0x13,
    777     0x13,0x13,0x13,0x19,0x19,0x34,0x34,0x34,0x34,0x34,0x19,0x13,0x19,0x19,0x34,0x34,
    778     0x34,0x34,0x34,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x10,0x17,0x1c,0x3f,0x3f,
    779     0x17,0x10,0x0f,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x19,0x19,0x34,
    780     0x34,0x34,0x19,0x13,0x13,0x13,0x19,0x19,0x34,0x34,0x34,0x19,0x13,0x13,0x13,0x13,
    781     0x13,0x13,0x11,0x11,0x18,0x1c,0x3f,0x3f,0x18,0x12,0x0f,0x10,0x12,0x13,0x13,0x13,
    782     0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x19,0x19,0x34,0x19,0x13,0x13,0x13,0x13,0x13,
    783     0x19,0x19,0x34,0x19,0x13,0x13,0x13,0x13,0x13,0x12,0x10,0x13,0x1a,0x1c,0x3f,0x3f,
    784     0x1a,0x16,0x11,0x0f,0x11,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
    785     0x13,0x19,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x19,0x19,0x13,0x13,0x13,0x13,
    786     0x12,0x11,0x11,0x18,0x1b,0x1c,0x3f,0x3f,0x1b,0x1a,0x16,0x11,0x0f,0x11,0x12,0x13,
    787     0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
    788     0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x11,0x10,0x16,0x1b,0x1d,0x1c,0x3f,0x3f,
    789     0x1b,0x1b,0x1a,0x16,0x12,0x10,0x10,0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
    790     0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x11,0x10,
    791     0x11,0x16,0x1b,0x1c,0x1d,0x1c,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x12,0x10,
    792     0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,
    793     0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x11,0x14,0x19,0x1b,0x1d,0x1d,0x1c,0x1b,0x3f,0x3f,
    794     0x1b,0x1b,0x1b,0x1b,0x1c,0x1a,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    795     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,
    796     0x1c,0x1d,0x1d,0x1c,0x1c,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,
    797     0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,
    798     0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1b,0x1b,0x3f,0x3f,
    799     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,
    800     0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,
    801     0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f
    802 };
    803 
    804 const unsigned char kForwardBitmapBits [] = {
    805     0x1b,0x1b,0x1b,0x1b,0x1a,0x19,0x17,0x14,0x13,0x11,0x11,0x10,0x10,0x10,0x10,0x10,
    806     0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x12,0x14,0x16,
    807     0x19,0x1a,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1a,0x18,0x14,0x10,0x0d,
    808     0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,
    809     0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0f,0x13,0x17,0x1a,0x1b,0x1b,0x1b,0x3f,0x3f,
    810     0x1b,0x1b,0x1a,0x17,0x11,0x0b,0x10,0x16,0x1a,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,
    811     0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x19,
    812     0x12,0x12,0x16,0x19,0x1b,0x1b,0x3f,0x3f,0x1b,0x1a,0x17,0x10,0x0d,0x16,0x1e,0x1e,
    813     0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,
    814     0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x18,0x14,0x17,0x1a,0x1b,0x3f,0x3f,
    815     0x1a,0x18,0x11,0x0d,0x18,0x1e,0x1d,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    816     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    817     0x1b,0x1b,0x19,0x16,0x19,0x1a,0x3f,0x3f,0x19,0x14,0x0c,0x16,0x1e,0x1c,0x1b,0x1a,
    818     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    819     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x17,0x18,0x1a,0x3f,0x3f,
    820     0x17,0x11,0x10,0x1d,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x00,0x1a,0x1a,
    821     0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x00,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    822     0x1a,0x1a,0x1a,0x17,0x18,0x1b,0x3f,0x3f,0x16,0x0f,0x17,0x1d,0x1b,0x1a,0x1a,0x1a,
    823     0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x00,0x00,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x00,
    824     0x00,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x16,0x16,0x1b,0x3f,0x3f,
    825     0x14,0x0f,0x1b,0x1c,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x17,
    826     0x00,0x00,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x17,0x00,0x00,0x1a,0x1a,0x1a,0x1a,0x1a,
    827     0x1a,0x1a,0x1a,0x16,0x12,0x1c,0x3f,0x3f,0x14,0x0f,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a,
    828     0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x17,0x17,0x17,0x00,0x00,0x1a,0x00,0x17,0x17,
    829     0x17,0x17,0x17,0x00,0x00,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x16,0x0f,0x1c,0x3f,0x3f,
    830     0x14,0x10,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x17,
    831     0x17,0x17,0x3f,0x3f,0x1a,0x00,0x17,0x17,0x17,0x17,0x17,0x3f,0x3f,0x1a,0x1a,0x1a,
    832     0x1a,0x1a,0x1a,0x16,0x0f,0x1d,0x3f,0x3f,0x16,0x11,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,
    833     0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x17,0x3f,0x3f,0x1a,0x1a,0x1a,0x00,0x17,0x17,
    834     0x17,0x3f,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x14,0x0e,0x1d,0x3f,0x3f,
    835     0x17,0x13,0x19,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x3f,0x3f,
    836     0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x3f,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    837     0x1a,0x1a,0x18,0x12,0x10,0x1d,0x3f,0x3f,0x18,0x16,0x17,0x1a,0x1a,0x1a,0x1a,0x1a,
    838     0x1a,0x1a,0x1a,0x1a,0x3f,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x3f,0x3f,0x1a,
    839     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x16,0x0f,0x13,0x1d,0x3f,0x3f,
    840     0x1a,0x19,0x17,0x18,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    841     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    842     0x1a,0x18,0x12,0x0c,0x19,0x1d,0x3f,0x3f,0x1b,0x1b,0x19,0x17,0x16,0x17,0x19,0x1a,
    843     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    844     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x18,0x13,0x0c,0x13,0x1e,0x1d,0x3f,0x3f,
    845     0x1b,0x1b,0x1b,0x1a,0x16,0x13,0x16,0x17,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    846     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x16,
    847     0x12,0x0b,0x10,0x1c,0x1d,0x1c,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x10,0x10,
    848     0x12,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,
    849     0x14,0x14,0x14,0x14,0x14,0x13,0x11,0x0d,0x0a,0x11,0x1c,0x1e,0x1c,0x1b,0x3f,0x3f,
    850     0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x19,0x13,0x0f,0x0b,0x0b,0x0b,0x0a,0x0a,0x0a,0x0a,
    851     0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0b,0x0f,
    852     0x19,0x1e,0x1e,0x1c,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1d,
    853     0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,
    854     0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1c,0x1b,0x1b,0x1b,0x3f,0x3f,
    855     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,
    856     0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,
    857     0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f
    858 };
    859 
    860 const unsigned char kDisabledForwardBitmapBits [] = {
    861     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    862     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    863     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16,
    864     0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,
    865     0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,
    866     0x1b,0x1b,0x1b,0x1b,0x19,0x16,0x16,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,
    867     0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x16,
    868     0x16,0x19,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x18,0x16,0x18,0x1b,0x1b,
    869     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    870     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x18,0x1b,0x1b,0x1b,0x3f,0x3f,
    871     0x1b,0x1b,0x19,0x16,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    872     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    873     0x1b,0x1a,0x16,0x19,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x16,0x18,0x1b,0x1b,0x1b,0x1b,
    874     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    875     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x1b,0x1b,0x3f,0x3f,
    876     0x1b,0x18,0x16,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x16,0x1b,0x1b,
    877     0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x16,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    878     0x1b,0x1b,0x1b,0x16,0x18,0x1b,0x3f,0x3f,0x1b,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,
    879     0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x16,0x16,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x16,
    880     0x16,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x1b,0x3f,0x3f,
    881     0x1b,0x14,0x19,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x19,0x19,
    882     0x16,0x16,0x1b,0x1b,0x1b,0x16,0x19,0x19,0x19,0x16,0x16,0x1b,0x1b,0x1b,0x1b,0x1b,
    883     0x1b,0x1b,0x1b,0x19,0x14,0x1b,0x3f,0x3f,0x1b,0x13,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    884     0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x19,0x19,0x19,0x19,0x16,0x16,0x1b,0x16,0x19,0x19,
    885     0x19,0x19,0x19,0x16,0x16,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x13,0x1b,0x3f,0x3f,
    886     0x1b,0x13,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x19,0x19,
    887     0x19,0x19,0x1c,0x1c,0x1b,0x16,0x19,0x19,0x19,0x19,0x19,0x1c,0x1c,0x1b,0x1b,0x1b,
    888     0x1b,0x1b,0x1b,0x1b,0x13,0x1b,0x3f,0x3f,0x1b,0x14,0x19,0x1b,0x1b,0x1b,0x1b,0x1b,
    889     0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x19,0x19,0x1c,0x1c,0x1b,0x1b,0x1b,0x16,0x19,0x19,
    890     0x19,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x19,0x14,0x1b,0x3f,0x3f,
    891     0x1b,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x1c,0x1c,
    892     0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    893     0x1b,0x1b,0x1b,0x18,0x16,0x1b,0x3f,0x3f,0x1b,0x18,0x16,0x1b,0x1b,0x1b,0x1b,0x1b,
    894     0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1b,
    895     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x18,0x1b,0x3f,0x3f,
    896     0x1b,0x1b,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    897     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    898     0x1b,0x1b,0x18,0x16,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x19,0x16,0x1a,0x1b,0x1b,0x1b,
    899     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    900     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x16,0x19,0x1b,0x1b,0x3f,0x3f,
    901     0x1b,0x1b,0x1b,0x18,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    902     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    903     0x18,0x16,0x18,0x1b,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x19,0x16,0x16,0x18,
    904     0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,
    905     0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x16,0x16,0x19,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,
    906     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,
    907     0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x18,
    908     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    909     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    910     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,
    911     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    912     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    913     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f
    914 };
    915 
    916 const unsigned char kPressedForwardBitmapBits [] = {
    917     0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x19,0x19,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17,
    918     0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x19,
    919     0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1a,0x19,0x17,0x14,0x13,
    920     0x12,0x11,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
    921     0x10,0x10,0x10,0x10,0x10,0x11,0x12,0x14,0x16,0x19,0x1a,0x1b,0x1b,0x1b,0x3f,0x3f,
    922     0x1b,0x1b,0x1a,0x18,0x14,0x11,0x0d,0x0b,0x0a,0x09,0x09,0x09,0x09,0x09,0x09,0x09,
    923     0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x0a,0x0c,0x0e,
    924     0x12,0x14,0x18,0x1a,0x1a,0x1b,0x3f,0x3f,0x1b,0x1a,0x17,0x13,0x0e,0x0b,0x0c,0x0d,
    925     0x0f,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
    926     0x10,0x10,0x10,0x10,0x10,0x0f,0x0d,0x0d,0x0f,0x11,0x14,0x18,0x1a,0x1a,0x3f,0x3f,
    927     0x1a,0x18,0x13,0x0d,0x0c,0x0e,0x11,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
    928     0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x11,
    929     0x0f,0x0f,0x13,0x16,0x19,0x1a,0x3f,0x3f,0x19,0x14,0x0e,0x0c,0x0f,0x12,0x13,0x13,
    930     0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
    931     0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x0f,0x10,0x16,0x18,0x1a,0x3f,0x3f,
    932     0x17,0x11,0x0c,0x0e,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
    933     0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
    934     0x13,0x12,0x0f,0x13,0x18,0x1b,0x3f,0x3f,0x16,0x0d,0x0d,0x11,0x13,0x13,0x13,0x13,
    935     0x13,0x13,0x13,0x13,0x13,0x00,0x00,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x00,
    936     0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x11,0x10,0x17,0x1b,0x3f,0x3f,
    937     0x14,0x0d,0x0e,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x34,0x00,
    938     0x00,0x13,0x13,0x13,0x13,0x13,0x00,0x34,0x00,0x00,0x13,0x13,0x13,0x13,0x13,0x13,
    939     0x13,0x13,0x12,0x10,0x16,0x1c,0x3f,0x3f,0x14,0x0d,0x0f,0x12,0x13,0x13,0x13,0x13,
    940     0x13,0x13,0x13,0x13,0x13,0x00,0x34,0x34,0x34,0x00,0x00,0x13,0x13,0x13,0x00,0x34,
    941     0x34,0x34,0x00,0x00,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x10,0x16,0x1c,0x3f,0x3f,
    942     0x14,0x0e,0x10,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x34,0x34,
    943     0x34,0x34,0x34,0x00,0x00,0x13,0x00,0x34,0x34,0x34,0x34,0x34,0x00,0x00,0x13,0x13,
    944     0x13,0x13,0x12,0x0f,0x16,0x1c,0x3f,0x3f,0x16,0x0e,0x0f,0x12,0x13,0x13,0x13,0x13,
    945     0x13,0x13,0x13,0x13,0x13,0x00,0x34,0x34,0x34,0x34,0x34,0x19,0x19,0x13,0x00,0x34,
    946     0x34,0x34,0x34,0x34,0x19,0x19,0x13,0x13,0x13,0x13,0x12,0x10,0x17,0x1c,0x3f,0x3f,
    947     0x17,0x10,0x0f,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x34,0x34,
    948     0x34,0x19,0x19,0x13,0x13,0x13,0x00,0x34,0x34,0x34,0x19,0x19,0x13,0x13,0x13,0x13,
    949     0x13,0x13,0x11,0x11,0x18,0x1c,0x3f,0x3f,0x18,0x12,0x0f,0x10,0x12,0x13,0x13,0x13,
    950     0x13,0x13,0x13,0x13,0x13,0x00,0x34,0x19,0x19,0x13,0x13,0x13,0x13,0x13,0x00,0x34,
    951     0x19,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x10,0x13,0x1a,0x1c,0x3f,0x3f,
    952     0x1a,0x16,0x11,0x0f,0x11,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x19,0x19,0x13,
    953     0x13,0x13,0x13,0x13,0x13,0x13,0x19,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
    954     0x12,0x11,0x11,0x18,0x1b,0x1c,0x3f,0x3f,0x1b,0x1a,0x16,0x11,0x0f,0x11,0x12,0x13,
    955     0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
    956     0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x11,0x10,0x16,0x1b,0x1d,0x1c,0x3f,0x3f,
    957     0x1b,0x1b,0x1a,0x16,0x12,0x10,0x10,0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
    958     0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x11,0x10,
    959     0x11,0x16,0x1b,0x1c,0x1d,0x1c,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x12,0x10,
    960     0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,
    961     0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x11,0x14,0x19,0x1b,0x1d,0x1d,0x1c,0x1b,0x3f,0x3f,
    962     0x1b,0x1b,0x1b,0x1b,0x1c,0x1a,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    963     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,
    964     0x1c,0x1d,0x1d,0x1c,0x1c,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,
    965     0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,
    966     0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1b,0x1b,0x3f,0x3f,
    967     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,
    968     0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,
    969     0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f
    970 };
    971 
    972 
    973 // #pragma mark skip back
    974 
    975 const unsigned char kSkipBackBitmapBits [] = {
    976     0x1b,0x1b,0x1b,0x1b,0x1a,0x19,0x17,0x14,0x13,0x11,0x10,0x10,0x10,0x10,0x10,0x10,
    977     0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x12,0x14,
    978     0x16,0x19,0x1a,0x1b,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1a,0x18,0x14,0x10,0x0d,
    979     0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,
    980     0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0f,0x13,0x17,0x1a,0x1b,0x1b,0x1b,0x3f,0x3f,
    981     0x1b,0x1b,0x1a,0x17,0x11,0x0b,0x10,0x16,0x1a,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,
    982     0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x19,
    983     0x12,0x12,0x16,0x19,0x1b,0x1b,0x3f,0x3f,0x1b,0x1a,0x17,0x10,0x0d,0x16,0x1e,0x1e,
    984     0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,
    985     0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x18,0x14,0x17,0x1a,0x1b,0x3f,0x3f,
    986     0x1a,0x18,0x11,0x0d,0x18,0x1e,0x1d,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    987     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    988     0x1b,0x1b,0x19,0x16,0x19,0x1a,0x3f,0x3f,0x19,0x14,0x0c,0x16,0x1e,0x1c,0x1b,0x1a,
    989     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    990     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x17,0x18,0x1a,0x3f,0x3f,
    991     0x17,0x11,0x10,0x1d,0x1c,0x1b,0x1a,0x1a,0x1a,0x00,0x00,0x1a,0x1a,0x1a,0x1a,0x1a,
    992     0x1a,0x1a,0x00,0x00,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x00,0x1a,0x1a,0x1a,
    993     0x1a,0x1a,0x1a,0x17,0x18,0x1b,0x3f,0x3f,0x16,0x0f,0x17,0x1d,0x1b,0x1a,0x1a,0x1a,
    994     0x1a,0x00,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x00,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,
    995     0x1a,0x00,0x00,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x16,0x16,0x1b,0x3f,0x3f,
    996     0x14,0x0f,0x1b,0x1c,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x3f,0x1a,0x1a,0x1a,0x00,0x00,
    997     0x17,0x17,0x17,0x3f,0x1a,0x1a,0x1a,0x00,0x00,0x17,0x17,0x17,0x3f,0x1a,0x1a,0x1a,
    998     0x1a,0x1a,0x1a,0x16,0x12,0x1c,0x3f,0x3f,0x14,0x0f,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a,
    999     0x1a,0x00,0x3f,0x1a,0x00,0x00,0x17,0x17,0x17,0x17,0x17,0x3f,0x1a,0x00,0x00,0x17,
    1000     0x17,0x17,0x17,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x16,0x0f,0x1c,0x3f,0x3f,
    1001     0x14,0x10,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x3f,0x1a,0x3f,0x3f,0x17,0x17,
    1002     0x17,0x17,0x17,0x3f,0x1a,0x3f,0x3f,0x17,0x17,0x17,0x17,0x17,0x3f,0x1a,0x1a,0x1a,
    1003     0x1a,0x1a,0x1a,0x16,0x0f,0x1d,0x3f,0x3f,0x16,0x11,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,
    1004     0x1a,0x00,0x3f,0x1a,0x1a,0x1a,0x3f,0x3f,0x17,0x17,0x17,0x3f,0x1a,0x1a,0x1a,0x3f,
    1005     0x3f,0x17,0x17,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x14,0x0e,0x1d,0x3f,0x3f,
    1006     0x17,0x13,0x19,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,
    1007     0x3f,0x3f,0x17,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x3f,0x3f,0x17,0x3f,0x1a,0x1a,0x1a,
    1008     0x1a,0x1a,0x18,0x12,0x10,0x1d,0x3f,0x3f,0x18,0x16,0x17,0x1a,0x1a,0x1a,0x1a,0x1a,
    1009     0x1a,0x3f,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x3f,0x3f,0x1a,0x1a,0x1a,0x1a,
    1010     0x1a,0x1a,0x1a,0x3f,0x3f,0x1a,0x1a,0x1a,0x1a,0x19,0x16,0x0f,0x13,0x1d,0x3f,0x3f,
    1011     0x1a,0x19,0x17,0x18,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    1012     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    1013     0x1a,0x18,0x12,0x0c,0x19,0x1d,0x3f,0x3f,0x1b,0x1b,0x19,0x17,0x16,0x17,0x19,0x1a,
    1014     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    1015     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x18,0x13,0x0c,0x13,0x1e,0x1d,0x3f,0x3f,
    1016     0x1b,0x1b,0x1b,0x1a,0x16,0x13,0x16,0x17,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    1017     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x16,
    1018     0x12,0x0b,0x10,0x1c,0x1d,0x1c,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x10,0x10,
    1019     0x12,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,
    1020     0x14,0x14,0x14,0x14,0x14,0x13,0x11,0x0d,0x0a,0x11,0x1c,0x1e,0x1c,0x1b,0x3f,0x3f,
    1021     0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x19,0x13,0x0f,0x0b,0x0b,0x0a,0x0a,0x0a,0x0a,0x0a,
    1022     0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0b,0x0f,
    1023     0x19,0x1e,0x1e,0x1c,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1d,
    1024     0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,
    1025     0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1c,0x1b,0x1b,0x1b,0x3f,0x3f,
    1026     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,
    1027     0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,
    1028     0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f
    1029 };
    1030 
    1031 const unsigned char kDisabledSkipBackBitmapBits [] = {
    1032     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    1033     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    1034     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x18,0x16,
    1035     0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,
    1036     0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x18,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,
    1037     0x1b,0x1b,0x1b,0x1b,0x18,0x15,0x15,0x17,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,
    1038     0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x17,0x15,
    1039     0x15,0x18,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x18,0x16,0x18,0x1b,0x1b,
    1040     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    1041     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x18,0x1b,0x1b,0x1b,0x3f,0x3f,
    1042     0x1b,0x1b,0x18,0x16,0x19,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    1043     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    1044     0x1b,0x19,0x16,0x18,0x1b,0x1b,0x3f,0x3f,0x1b,0x1a,0x15,0x18,0x1b,0x1b,0x1b,0x1b,
    1045     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    1046     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x15,0x1a,0x1b,0x3f,0x3f,
    1047     0x1b,0x18,0x15,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x16,0x1b,0x1b,0x1b,0x1b,0x1b,
    1048     0x1b,0x1b,0x16,0x16,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x16,0x1b,0x1b,0x1b,
    1049     0x1b,0x1b,0x1b,0x15,0x18,0x1b,0x3f,0x3f,0x1b,0x16,0x17,0x1b,0x1b,0x1b,0x1b,0x1b,
    1050     0x1b,0x16,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x16,0x19,0x1c,0x1b,0x1b,0x1b,0x1b,
    1051     0x1b,0x16,0x16,0x19,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x17,0x16,0x1b,0x3f,0x3f,
    1052     0x1b,0x14,0x19,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x1c,0x1b,0x1b,0x1b,0x16,0x16,
    1053     0x19,0x19,0x19,0x1c,0x1b,0x1b,0x1b,0x16,0x16,0x19,0x19,0x19,0x1c,0x1b,0x1b,0x1b,
    1054     0x1b,0x1b,0x1b,0x19,0x14,0x1b,0x3f,0x3f,0x1b,0x13,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,
    1055     0x1b,0x16,0x1c,0x1b,0x16,0x16,0x19,0x19,0x19,0x19,0x19,0x1c,0x1b,0x16,0x16,0x19,
    1056     0x19,0x19,0x19,0x19,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x13,0x1b,0x3f,0x3f,
    1057     0x1b,0x13,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x1c,0x1b,0x1c,0x1c,0x19,0x19,
    1058     0x19,0x19,0x19,0x1c,0x1b,0x1c,0x1c,0x19,0x19,0x19,0x19,0x19,0x1c,0x1b,0x1b,0x1b,
    1059     0x1b,0x1b,0x1b,0x1a,0x13,0x1b,0x3f,0x3f,0x1b,0x14,0x19,0x1b,0x1b,0x1b,0x1b,0x1b,
    1060     0x1b,0x16,0x1c,0x1b,0x1b,0x1b,0x1c,0x1c,0x19,0x19,0x19,0x1c,0x1b,0x1b,0x1b,0x1c,
    1061     0x1c,0x19,0x19,0x19,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x19,0x14,0x1b,0x3f,0x3f,
    1062     0x1b,0x16,0x17,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,
    1063     0x1c,0x1c,0x19,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x19,0x1c,0x1b,0x1b,0x1b,
    1064     0x1b,0x1b,0x1b,0x17,0x16,0x1b,0x3f,0x3f,0x1b,0x18,0x15,0x1b,0x1b,0x1b,0x1b,0x1b,
    1065     0x1b,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,
    1066     0x1b,0x1b,0x1b,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x15,0x18,0x1b,0x3f,0x3f,
    1067     0x1b,0x1a,0x15,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    1068     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    1069     0x1b,0x1b,0x18,0x15,0x1a,0x1b,0x3f,0x3f,0x1b,0x1b,0x18,0x16,0x19,0x1b,0x1b,0x1b,
    1070     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    1071     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x19,0x16,0x18,0x1b,0x1b,0x3f,0x3f,
    1072     0x1b,0x1b,0x1b,0x18,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    1073     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    1074     0x18,0x16,0x18,0x1b,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x18,0x15,0x15,0x17,
    1075     0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,
    1076     0x19,0x19,0x19,0x19,0x18,0x18,0x17,0x15,0x15,0x18,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,
    1077     0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x18,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,
    1078     0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x18,
    1079     0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    1080     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    1081     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,
    1082     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    1083     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    1084     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f
    1085 };
    1086 
    1087 
    1088 const unsigned char kPressedSkipBackBitmapBits [] = {
    1089     0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x19,0x19,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17,
    1090     0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x19,
    1091     0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1a,0x19,0x17,0x14,0x13,
    1092     0x12,0x11,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
    1093     0x10,0x10,0x10,0x10,0x10,0x11,0x12,0x14,0x16,0x19,0x1a,0x1b,0x1b,0x1b,0x3f,0x3f,
    1094     0x1b,0x1b,0x1a,0x18,0x14,0x11,0x0d,0x0b,0x0a,0x09,0x09,0x09,0x09,0x09,0x09,0x09,
    1095     0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x0a,0x0c,0x0e,
    1096     0x12,0x14,0x18,0x1a,0x1a,0x1b,0x3f,0x3f,0x1b,0x1a,0x17,0x13,0x0e,0x0b,0x0c,0x0d,
    1097     0x0f,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
    1098     0x10,0x10,0x10,0x10,0x10,0x0f,0x0d,0x0d,0x0f,0x11,0x14,0x18,0x1a,0x1a,0x3f,0x3f,
    1099     0x1a,0x18,0x13,0x0d,0x0c,0x0e,0x11,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
    1100     0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x11,
    1101     0x0f,0x0f,0x13,0x16,0x19,0x1a,0x3f,0x3f,0x19,0x14,0x0e,0x0c,0x0f,0x12,0x13,0x13,
    1102     0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
    1103     0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x0f,0x10,0x16,0x18,0x1a,0x3f,0x3f,
    1104     0x17,0x11,0x0c,0x0e,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
    1105     0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
    1106     0x13,0x12,0x0f,0x13,0x18,0x1b,0x3f,0x3f,0x16,0x0d,0x0d,0x11,0x13,0x13,0x13,0x13,
    1107     0x13,0x13,0x00,0x00,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x00,0x13,0x13,0x13,
    1108     0x13,0x13,0x13,0x13,0x00,0x00,0x13,0x13,0x13,0x13,0x11,0x10,0x17,0x1b,0x3f,0x3f,
    1109     0x14,0x0d,0x0e,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x19,0x13,0x13,0x13,0x13,
    1110     0x13,0x00,0x00,0x34,0x19,0x13,0x13,0x13,0x13,0x13,0x00,0x00,0x34,0x19,0x13,0x13,
    1111     0x13,0x13,0x12,0x10,0x16,0x1c,0x3f,0x3f,0x14,0x0d,0x0f,0x12,0x13,0x13,0x13,0x13,
    1112     0x13,0x13,0x00,0x19,0x13,0x13,0x13,0x00,0x00,0x34,0x34,0x34,0x19,0x13,0x13,0x13,
    1113     0x00,0x00,0x34,0x34,0x34,0x19,0x13,0x13,0x13,0x13,0x12,0x10,0x16,0x1c,0x3f,0x3f,
    1114     0x14,0x0e,0x10,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x19,0x13,0x00,0x00,0x34,
    1115     0x34,0x34,0x34,0x34,0x19,0x13,0x00,0x00,0x34,0x34,0x34,0x34,0x34,0x19,0x13,0x13,
    1116     0x13,0x13,0x12,0x0f,0x16,0x1c,0x3f,0x3f,0x16,0x0e,0x0f,0x12,0x13,0x13,0x13,0x13,
    1117     0x13,0x13,0x00,0x19,0x13,0x19,0x19,0x34,0x34,0x34,0x34,0x34,0x19,0x13,0x19,0x19,
    1118     0x34,0x34,0x34,0x34,0x34,0x19,0x13,0x13,0x13,0x13,0x12,0x10,0x17,0x1c,0x3f,0x3f,
    1119     0x17,0x10,0x0f,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x19,0x13,0x13,0x13,0x19,
    1120     0x19,0x34,0x34,0x34,0x19,0x13,0x13,0x13,0x19,0x19,0x34,0x34,0x34,0x19,0x13,0x13,
    1121     0x13,0x13,0x11,0x11,0x18,0x1c,0x3f,0x3f,0x18,0x12,0x0f,0x10,0x12,0x13,0x13,0x13,
    1122     0x13,0x13,0x00,0x19,0x13,0x13,0x13,0x13,0x13,0x19,0x19,0x34,0x19,0x13,0x13,0x13,
    1123     0x13,0x13,0x19,0x19,0x34,0x19,0x13,0x13,0x13,0x12,0x10,0x13,0x1a,0x1c,0x3f,0x3f,
    1124     0x1a,0x16,0x11,0x0f,0x11,0x13,0x13,0x13,0x13,0x13,0x19,0x19,0x13,0x13,0x13,0x13,
    1125     0x13,0x13,0x13,0x19,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x19,0x19,0x13,0x13,
    1126     0x12,0x11,0x11,0x18,0x1b,0x1c,0x3f,0x3f,0x1b,0x1a,0x16,0x11,0x0f,0x11,0x12,0x13,
    1127     0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
    1128     0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x11,0x10,0x16,0x1b,0x1d,0x1c,0x3f,0x3f,
    1129     0x1b,0x1b,0x1a,0x16,0x12,0x10,0x10,0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
    1130     0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x11,0x10,
    1131     0x11,0x16,0x1b,0x1c,0x1d,0x1c,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x12,0x10,
    1132     0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,
    1133     0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x11,0x14,0x19,0x1b,0x1d,0x1d,0x1c,0x1b,0x3f,0x3f,
    1134     0x1b,0x1b,0x1b,0x1b,0x1c,0x1a,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    1135     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,
    1136     0x1c,0x1d,0x1d,0x1c,0x1c,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,
    1137     0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,
    1138     0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1b,0x1b,0x3f,0x3f,
    1139     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,
    1140     0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,
    1141     0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f
    1142 };
    1143 
    1144 // #pragma mark skip forward
    1145 
    1146 const unsigned char kSkipForwardBitmapBits [] = {
    1147     0x1b,0x1b,0x1b,0x1b,0x1a,0x19,0x17,0x14,0x13,0x11,0x10,0x10,0x10,0x10,0x10,0x10,
    1148     0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x12,0x14,
    1149     0x16,0x19,0x1a,0x1b,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1a,0x18,0x14,0x10,0x0d,
    1150     0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,
    1151     0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0f,0x13,0x17,0x1a,0x1b,0x1b,0x1b,0x3f,0x3f,
    1152     0x1b,0x1b,0x1a,0x17,0x11,0x0b,0x10,0x16,0x1a,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,
    1153     0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x19,
    1154     0x12,0x12,0x16,0x19,0x1b,0x1b,0x3f,0x3f,0x1b,0x1a,0x17,0x10,0x0d,0x16,0x1e,0x1e,
    1155     0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,
    1156     0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x18,0x14,0x17,0x1a,0x1b,0x3f,0x3f,
    1157     0x1a,0x18,0x11,0x0d,0x18,0x1e,0x1d,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    1158     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    1159     0x1b,0x1b,0x19,0x16,0x19,0x1a,0x3f,0x3f,0x19,0x14,0x0c,0x16,0x1e,0x1c,0x1b,0x1a,
    1160     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    1161     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x17,0x18,0x1a,0x3f,0x3f,
    1162     0x17,0x11,0x10,0x1d,0x1c,0x1b,0x1a,0x1a,0x1a,0x00,0x00,0x1a,0x1a,0x1a,0x1a,0x1a,
    1163     0x1a,0x1a,0x00,0x00,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x00,0x1a,0x1a,0x1a,
    1164     0x1a,0x1a,0x1a,0x17,0x18,0x1b,0x3f,0x3f,0x16,0x0f,0x17,0x1d,0x1b,0x1a,0x1a,0x1a,
    1165     0x1a,0x00,0x17,0x00,0x00,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x00,0x00,0x1a,0x1a,
    1166     0x1a,0x1a,0x1a,0x00,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x16,0x16,0x1b,0x3f,0x3f,
    1167     0x14,0x0f,0x1b,0x1c,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x17,0x00,0x00,0x1a,
    1168     0x1a,0x1a,0x00,0x17,0x17,0x17,0x00,0x00,0x1a,0x1a,0x1a,0x00,0x3f,0x1a,0x1a,0x1a,
    1169     0x1a,0x1a,0x1a,0x16,0x12,0x1c,0x3f,0x3f,0x14,0x0f,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a,
    1170     0x1a,0x00,0x17,0x17,0x17,0x17,0x17,0x00,0x00,0x1a,0x00,0x17,0x17,0x17,0x17,0x17,
    1171     0x00,0x00,0x1a,0x00,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x16,0x0f,0x1c,0x3f,0x3f,
    1172     0x14,0x10,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x17,0x17,0x17,0x3f,
    1173     0x3f,0x1a,0x00,0x17,0x17,0x17,0x17,0x17,0x3f,0x3f,0x1a,0x00,0x3f,0x1a,0x1a,0x1a,
    1174     0x1a,0x1a,0x1a,0x16,0x0f,0x1d,0x3f,0x3f,0x16,0x11,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,
    1175     0x1a,0x00,0x17,0x17,0x17,0x3f,0x3f,0x1a,0x1a,0x1a,0x00,0x17,0x17,0x17,0x3f,0x3f,
    1176     0x1a,0x1a,0x1a,0x00,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x14,0x0e,0x1d,0x3f,0x3f,
    1177     0x17,0x13,0x19,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x17,0x3f,0x3f,0x1a,0x1a,0x1a,
    1178     0x1a,0x1a,0x00,0x17,0x3f,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x00,0x3f,0x1a,0x1a,0x1a,
    1179     0x1a,0x1a,0x18,0x12,0x10,0x1d,0x3f,0x3f,0x18,0x16,0x17,0x1a,0x1a,0x1a,0x1a,0x1a,
    1180     0x1a,0x3f,0x3f,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x3f,0x3f,0x1a,0x1a,0x1a,0x1a,
    1181     0x1a,0x1a,0x1a,0x3f,0x3f,0x1a,0x1a,0x1a,0x1a,0x19,0x16,0x0f,0x13,0x1d,0x3f,0x3f,
    1182     0x1a,0x19,0x17,0x18,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    1183     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    1184     0x1a,0x18,0x12,0x0c,0x19,0x1d,0x3f,0x3f,0x1b,0x1b,0x19,0x17,0x16,0x17,0x19,0x1a,
    1185     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    1186     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x18,0x13,0x0c,0x13,0x1e,0x1d,0x3f,0x3f,
    1187     0x1b,0x1b,0x1b,0x1a,0x16,0x13,0x16,0x17,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    1188     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x16,
    1189     0x12,0x0b,0x10,0x1c,0x1d,0x1c,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x10,0x10,
    1190     0x12,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,
    1191     0x14,0x14,0x14,0x14,0x14,0x13,0x11,0x0d,0x0a,0x11,0x1c,0x1e,0x1c,0x1b,0x3f,0x3f,
    1192     0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x19,0x13,0x0f,0x0b,0x0b,0x0b,0x0a,0x0a,0x0a,0x0a,
    1193     0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0b,0x0f,
    1194     0x19,0x1e,0x1e,0x1c,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1d,
    1195     0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,
    1196     0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1c,0x1b,0x1b,0x1b,0x3f,0x3f,
    1197     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,
    1198     0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,
    1199     0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f
    1200 };
    1201 
    1202 
    1203 const unsigned char kDisabledSkipForwardBitmapBits [] = {
    1204     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    1205     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    1206     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x18,0x16,
    1207     0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,
    1208     0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x18,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,
    1209     0x1b,0x1b,0x1b,0x1b,0x18,0x15,0x15,0x17,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,
    1210     0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x17,0x15,
    1211     0x15,0x18,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x18,0x16,0x18,0x1b,0x1b,
    1212     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    1213     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x18,0x1b,0x1b,0x1b,0x3f,0x3f,
    1214     0x1b,0x1b,0x18,0x16,0x19,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    1215     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    1216     0x1b,0x19,0x16,0x18,0x1b,0x1b,0x3f,0x3f,0x1b,0x1a,0x15,0x18,0x1b,0x1b,0x1b,0x1b,
    1217     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    1218     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x15,0x1a,0x1b,0x3f,0x3f,
    1219     0x1b,0x18,0x15,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x16,0x1b,0x1b,0x1b,0x1b,0x1b,
    1220     0x1b,0x1b,0x16,0x16,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x16,0x1b,0x1b,0x1b,
    1221     0x1b,0x1b,0x1b,0x15,0x18,0x1b,0x3f,0x3f,0x1b,0x16,0x17,0x1b,0x1b,0x1b,0x1b,0x1b,
    1222     0x1b,0x16,0x19,0x16,0x16,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x16,0x16,0x1b,0x1b,
    1223     0x1b,0x1b,0x1b,0x16,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x17,0x16,0x1b,0x3f,0x3f,
    1224     0x1b,0x14,0x19,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x19,0x19,0x16,0x16,0x1b,
    1225     0x1b,0x1b,0x16,0x19,0x19,0x19,0x16,0x16,0x1b,0x1b,0x1b,0x16,0x1c,0x1b,0x1b,0x1b,
    1226     0x1b,0x1b,0x1b,0x19,0x14,0x1b,0x3f,0x3f,0x1b,0x13,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,
    1227     0x1b,0x16,0x19,0x19,0x19,0x19,0x19,0x16,0x16,0x1b,0x16,0x19,0x19,0x19,0x19,0x19,
    1228     0x16,0x16,0x1b,0x16,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x13,0x1b,0x3f,0x3f,
    1229     0x1b,0x13,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x19,0x19,0x19,0x19,0x1c,
    1230     0x1c,0x1b,0x16,0x19,0x19,0x19,0x19,0x19,0x1c,0x1c,0x1b,0x16,0x1c,0x1b,0x1b,0x1b,
    1231     0x1b,0x1b,0x1b,0x1a,0x13,0x1b,0x3f,0x3f,0x1b,0x14,0x19,0x1b,0x1b,0x1b,0x1b,0x1b,
    1232     0x1b,0x16,0x19,0x19,0x19,0x1c,0x1c,0x1b,0x1b,0x1b,0x16,0x19,0x19,0x19,0x1c,0x1c,
    1233     0x1b,0x1b,0x1b,0x16,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x19,0x14,0x1b,0x3f,0x3f,
    1234     0x1b,0x16,0x17,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x19,0x1c,0x1c,0x1b,0x1b,0x1b,
    1235     0x1b,0x1b,0x16,0x19,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x16,0x1c,0x1b,0x1b,0x1b,
    1236     0x1b,0x1b,0x1b,0x17,0x16,0x1b,0x3f,0x3f,0x1b,0x18,0x15,0x1b,0x1b,0x1b,0x1b,0x1b,
    1237     0x1b,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,
    1238     0x1b,0x1b,0x1b,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x15,0x18,0x1b,0x3f,0x3f,
    1239     0x1b,0x1a,0x15,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    1240     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    1241     0x1b,0x1b,0x18,0x15,0x1a,0x1b,0x3f,0x3f,0x1b,0x1b,0x18,0x16,0x19,0x1b,0x1b,0x1b,
    1242     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    1243     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x19,0x16,0x18,0x1b,0x1b,0x3f,0x3f,
    1244     0x1b,0x1b,0x1b,0x18,0x16,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    1245     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    1246     0x18,0x16,0x18,0x1b,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x18,0x15,0x15,0x17,
    1247     0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,
    1248     0x19,0x19,0x19,0x19,0x18,0x18,0x17,0x15,0x15,0x18,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,
    1249     0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x18,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,
    1250     0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x18,
    1251     0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    1252     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    1253     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,
    1254     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    1255     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
    1256     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f
    1257 };
    1258 
    1259 
    1260 const unsigned char kPressedSkipForwardBitmapBits [] = {
    1261     0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x19,0x19,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17,
    1262     0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x19,
    1263     0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1a,0x19,0x17,0x14,0x13,
    1264     0x12,0x11,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
    1265     0x10,0x10,0x10,0x10,0x10,0x11,0x12,0x14,0x16,0x19,0x1a,0x1b,0x1b,0x1b,0x3f,0x3f,
    1266     0x1b,0x1b,0x1a,0x18,0x14,0x11,0x0d,0x0b,0x0a,0x09,0x09,0x09,0x09,0x09,0x09,0x09,
    1267     0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x0a,0x0c,0x0e,
    1268     0x12,0x14,0x18,0x1a,0x1a,0x1b,0x3f,0x3f,0x1b,0x1a,0x17,0x13,0x0e,0x0b,0x0c,0x0d,
    1269     0x0f,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
    1270     0x10,0x10,0x10,0x10,0x10,0x0f,0x0d,0x0d,0x0f,0x11,0x14,0x18,0x1a,0x1a,0x3f,0x3f,
    1271     0x1a,0x18,0x13,0x0d,0x0c,0x0e,0x11,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
    1272     0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x11,
    1273     0x0f,0x0f,0x13,0x16,0x19,0x1a,0x3f,0x3f,0x19,0x14,0x0e,0x0c,0x0f,0x12,0x13,0x13,
    1274     0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
    1275     0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x0f,0x10,0x16,0x18,0x1a,0x3f,0x3f,
    1276     0x17,0x11,0x0c,0x0e,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
    1277     0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
    1278     0x13,0x12,0x0f,0x13,0x18,0x1b,0x3f,0x3f,0x16,0x0d,0x0d,0x11,0x13,0x13,0x13,0x13,
    1279     0x13,0x13,0x00,0x00,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x00,0x13,0x13,0x13,
    1280     0x13,0x13,0x13,0x13,0x00,0x00,0x13,0x13,0x13,0x13,0x11,0x10,0x17,0x1b,0x3f,0x3f,
    1281     0x14,0x0d,0x0e,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x34,0x00,0x00,0x13,0x13,
    1282     0x13,0x13,0x13,0x00,0x34,0x00,0x00,0x13,0x13,0x13,0x13,0x13,0x00,0x19,0x13,0x13,
    1283     0x13,0x13,0x12,0x10,0x16,0x1c,0x3f,0x3f,0x14,0x0d,0x0f,0x12,0x13,0x13,0x13,0x13,
    1284     0x13,0x13,0x00,0x34,0x34,0x34,0x00,0x00,0x13,0x13,0x13,0x00,0x34,0x34,0x34,0x00,
    1285     0x00,0x13,0x13,0x13,0x00,0x19,0x13,0x13,0x13,0x13,0x12,0x10,0x16,0x1c,0x3f,0x3f,
    1286     0x14,0x0e,0x10,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x34,0x34,0x34,0x34,0x34,
    1287     0x00,0x00,0x13,0x00,0x34,0x34,0x34,0x34,0x34,0x00,0x00,0x13,0x00,0x19,0x13,0x13,
    1288     0x13,0x13,0x12,0x0f,0x16,0x1c,0x3f,0x3f,0x16,0x0e,0x0f,0x12,0x13,0x13,0x13,0x13,
    1289     0x13,0x13,0x00,0x34,0x34,0x34,0x34,0x34,0x19,0x19,0x13,0x00,0x34,0x34,0x34,0x34,
    1290     0x34,0x19,0x19,0x13,0x00,0x19,0x13,0x13,0x13,0x13,0x12,0x10,0x17,0x1c,0x3f,0x3f,
    1291     0x17,0x10,0x0f,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x00,0x34,0x34,0x34,0x19,0x19,
    1292     0x13,0x13,0x13,0x00,0x34,0x34,0x34,0x19,0x19,0x13,0x13,0x13,0x00,0x19,0x13,0x13,
    1293     0x13,0x13,0x11,0x11,0x18,0x1c,0x3f,0x3f,0x18,0x12,0x0f,0x10,0x12,0x13,0x13,0x13,
    1294     0x13,0x13,0x00,0x34,0x19,0x19,0x13,0x13,0x13,0x13,0x13,0x00,0x34,0x19,0x19,0x13,
    1295     0x13,0x13,0x13,0x13,0x00,0x19,0x13,0x13,0x13,0x12,0x10,0x13,0x1a,0x1c,0x3f,0x3f,
    1296     0x1a,0x16,0x11,0x0f,0x11,0x13,0x13,0x13,0x13,0x13,0x19,0x19,0x13,0x13,0x13,0x13,
    1297     0x13,0x13,0x13,0x19,0x19,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x19,0x19,0x13,0x13,
    1298     0x12,0x11,0x11,0x18,0x1b,0x1c,0x3f,0x3f,0x1b,0x1a,0x16,0x11,0x0f,0x11,0x12,0x13,
    1299     0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
    1300     0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x11,0x10,0x16,0x1b,0x1d,0x1c,0x3f,0x3f,
    1301     0x1b,0x1b,0x1a,0x16,0x12,0x10,0x10,0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
    1302     0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x11,0x10,
    1303     0x11,0x16,0x1b,0x1c,0x1d,0x1c,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x18,0x16,0x12,0x10,
    1304     0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,
    1305     0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x11,0x14,0x19,0x1b,0x1d,0x1d,0x1c,0x1b,0x3f,0x3f,
    1306     0x1b,0x1b,0x1b,0x1b,0x1c,0x1a,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
    1307     0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,
    1308     0x1c,0x1d,0x1d,0x1c,0x1c,0x1b,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,
    1309     0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,
    1310     0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1b,0x1b,0x3f,0x3f,
    1311     0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,
    1312     0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,
    1313     0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f
    1314 };
    1315 
    1316 
    1317 #endif  // BUTTON_BITMAPS_H
    1318 
  • deleted file src/apps/cdplayer/CDAudioDevice.cpp

    diff --git a/src/apps/cdplayer/CDAudioDevice.cpp b/src/apps/cdplayer/CDAudioDevice.cpp
    deleted file mode 100644
    index bb84e32..0000000
    + -  
    1 /*
    2  * Copyright 2006-2007, Haiku, Inc. All Rights Reserved.
    3  * Distributed under the terms of the MIT license.
    4  *
    5  * Author:
    6  *      DarkWyrm, bpmagic@columbus.rr.com
    7  */
    8 
    9 
    10 #include "CDAudioDevice.h"
    11 #include "scsi.h"
    12 
    13 #include <Debug.h>
    14 #include <Directory.h>
    15 #include <Entry.h>
    16 #include <Path.h>
    17 #include <String.h>
    18 
    19 #include <errno.h>
    20 #include <stdio.h>
    21 #include <stdlib.h>
    22 #include <string.h>
    23 #include <unistd.h>
    24 
    25 
    26 struct ConvertedToc {
    27     int32 min;
    28     int32 sec;
    29     int32 frame;
    30 };
    31 
    32 
    33 static int32
    34 cddb_sum(int n)
    35 {
    36     char buf[12];
    37     int32 ret = 0;
    38    
    39     sprintf(buf, "%u", n);
    40     for (const char *p = buf; *p != '\0'; p++)
    41         ret += (*p - '0');
    42     return ret;
    43 }
    44 
    45 
    46 //  #pragma mark -
    47 
    48 
    49 CDAudioData::CDAudioData(const int32 &id, const int32 &count,
    50     const int32 &discLength)
    51     :
    52     fDiscId(id),
    53     fTrackCount(count),
    54     fLength(discLength)
    55 {
    56 }
    57 
    58 
    59 CDAudioData::CDAudioData(const CDAudioData &from)
    60     :
    61     fDiscId(from.fDiscId),
    62     fTrackCount(from.fTrackCount),
    63     fLength(from.fLength)
    64 {
    65 }
    66 
    67 
    68 CDAudioData &
    69 CDAudioData::operator=(const CDAudioData &from)
    70 {
    71     fDiscId = from.fDiscId;
    72     fTrackCount = from.fTrackCount;
    73     fLength = from.fLength;
    74     fFrameOffsets = from.fFrameOffsets;
    75     return *this;
    76 }
    77 
    78 
    79 //  #pragma mark -
    80 
    81 
    82 CDAudioTime::CDAudioTime(const int32 min,const int32 &sec)
    83     :
    84     fMinutes(min),
    85     fSeconds(sec)
    86 {
    87 }
    88 
    89 
    90 CDAudioTime::CDAudioTime(const CDAudioTime &from)
    91     :
    92     fMinutes(from.fMinutes),
    93     fSeconds(from.fSeconds)
    94 {
    95 }
    96 
    97 
    98 CDAudioTime &
    99 CDAudioTime::operator=(const CDAudioTime &from)
    100 {
    101     fMinutes = from.fMinutes;
    102     fSeconds = from.fSeconds;
    103     return *this;
    104 }
    105 
    106 
    107 CDAudioTime
    108 CDAudioTime::operator+(const CDAudioTime &from)
    109 {
    110     CDAudioTime time;
    111 
    112     time.fMinutes = fMinutes + from.fMinutes;
    113     time.fSeconds = fSeconds + from.fSeconds;
    114 
    115     while (time.fSeconds > 59) {
    116         time.fMinutes++;
    117         time.fSeconds -= 60;
    118     }
    119     return time;
    120 }
    121 
    122 
    123 CDAudioTime
    124 CDAudioTime::operator-(const CDAudioTime &from)
    125 {
    126     CDAudioTime time;
    127 
    128     int32 tsec = ((fMinutes * 60) + fSeconds) - ((from.fMinutes * 60)
    129         + from.fSeconds);
    130     if (tsec < 0) {
    131         time.fMinutes = 0;
    132         time.fSeconds = 0;
    133         return time;
    134     }
    135 
    136     time.fMinutes = tsec / 60;
    137     time.fSeconds = tsec % 60;
    138 
    139     return time;
    140 }
    141 
    142 
    143 //  #pragma mark -
    144 
    145 
    146 CDAudioDevice::CDAudioDevice()
    147 {
    148     _FindDrives("/dev/disk");
    149     if (CountDrives() > 0)
    150         SetDrive(0);
    151 }
    152 
    153 
    154 CDAudioDevice::~CDAudioDevice()
    155 {
    156     for (int32 i = 0; i < fDriveList.CountItems(); i++)
    157         delete (BString*) fDriveList.ItemAt(i);
    158 }
    159 
    160 
    161 
    162 //! This plays only one track - the track specified
    163 bool
    164 CDAudioDevice::Play(const int16 &track)
    165 {
    166     if (GetState() == kNoCD) {
    167         // no CD available, bail out
    168         ioctl(fFileHandle, B_LOAD_MEDIA, 0, 0);
    169         return false;
    170     }
    171 
    172     scsi_play_track playtrack;
    173 
    174     playtrack.start_track = track;
    175     playtrack.start_index = 1;
    176     playtrack.end_track = track;
    177     playtrack.end_index = 1;
    178 
    179     status_t result = ioctl(fFileHandle, B_SCSI_PLAY_TRACK, &playtrack);
    180     if (result != B_OK) {
    181         printf("Couldn't play track: %s\n", strerror(errno));
    182         return false;
    183     }
    184    
    185     return true;
    186 }
    187 
    188 
    189 bool
    190 CDAudioDevice::Pause()
    191 {
    192     status_t result = ioctl(fFileHandle, B_SCSI_PAUSE_AUDIO);
    193     if (result != B_OK) {
    194         printf("Couldn't pause track: %s\n", strerror(errno));
    195         return false;
    196     }
    197     return true;
    198 }
    199 
    200 
    201 bool
    202 CDAudioDevice::Resume()
    203 {
    204     CDState state = GetState();
    205     if (state == kNoCD) {
    206         // no CD available, bail out
    207         ioctl(fFileHandle, B_LOAD_MEDIA, 0, 0);
    208         return false;
    209     } else {
    210         if (state == kStopped)
    211             return Play(0);
    212     }
    213 
    214     status_t result = ioctl(fFileHandle, B_SCSI_RESUME_AUDIO);
    215     if (result != B_OK) {
    216         printf("Couldn't resume track: %s\n", strerror(errno));
    217         return false;
    218     }
    219     return true;
    220 }
    221 
    222 
    223 bool
    224 CDAudioDevice::Stop()
    225 {
    226     status_t result = ioctl(fFileHandle, B_SCSI_STOP_AUDIO);
    227     if (result != B_OK) {
    228         printf("Couldn't stop CD: %s\n", strerror(errno));
    229         return false;
    230     }
    231     return true;
    232 }
    233 
    234 
    235 //! Open or close the CD tray
    236 bool
    237 CDAudioDevice::Eject()
    238 {
    239     status_t media_status = B_DEV_NO_MEDIA;
    240 
    241     // get the status first
    242     ioctl(fFileHandle, B_GET_MEDIA_STATUS, &media_status, sizeof(media_status));
    243 
    244     // if door open, load the media, else eject the CD
    245     status_t result = ioctl(fFileHandle,
    246         media_status == B_DEV_DOOR_OPEN ? B_LOAD_MEDIA : B_EJECT_DEVICE);
    247 
    248     if (result != B_OK) {
    249         printf("Couldn't eject CD: %s\n", strerror(errno));
    250         return false;
    251     }
    252     return true;
    253 }
    254 
    255 
    256 bool
    257 CDAudioDevice::StartFastFwd()
    258 {
    259     scsi_scan scan;
    260     scan.direction = 1;
    261     scan.speed = 1;
    262     status_t result = ioctl(fFileHandle, B_SCSI_SCAN, &scan);
    263     if (result != B_OK) {
    264         printf("Couldn't fast forward: %s\n", strerror(errno));
    265         return false;
    266     }
    267     return true;
    268 }
    269 
    270 
    271 bool
    272 CDAudioDevice::StopFastFwd()
    273 {
    274     scsi_scan scan;
    275     scan.direction = 0;
    276     scan.speed = 1;
    277     status_t result = ioctl(fFileHandle, B_SCSI_SCAN, &scan);
    278     if (result != B_OK) {
    279         printf("Couldn't stop fast forwarding: %s\n", strerror(errno));
    280         return false;
    281     }
    282     return true;
    283 }
    284 
    285 
    286 bool
    287 CDAudioDevice::StartRewind()
    288 {
    289     scsi_scan scan;
    290     scan.direction = -1;
    291     scan.speed = 1;
    292     status_t result = ioctl(fFileHandle, B_SCSI_SCAN, &scan);
    293     if (result != B_OK) {
    294         printf("Couldn't rewind: %s\n", strerror(errno));
    295         return false;
    296     }
    297     return true;
    298 }
    299 
    300 
    301 bool
    302 CDAudioDevice::StopRewind()
    303 {
    304     scsi_scan scan;
    305     scan.direction = 0;
    306     scan.speed = 1;
    307     status_t result = ioctl(fFileHandle, B_SCSI_SCAN, &scan);
    308     if (result != B_OK) {
    309         printf("Couldn't stop rewinding: %s\n", strerror(errno));
    310         return false;
    311     }
    312     return true;
    313 }
    314 
    315 
    316 bool
    317 CDAudioDevice::SetVolume(uint8 value)
    318 {
    319     scsi_volume vol;
    320 
    321     // change only port0's volume
    322     vol.flags = 2;
    323     vol.port0_volume = value;
    324 
    325     status_t result = ioctl(fFileHandle, B_SCSI_SET_VOLUME, &vol);
    326     if (result != B_OK) {
    327         printf("Couldn't set volume: %s\n", strerror(errno));
    328         return false;
    329     }
    330     return true;
    331 }
    332 
    333 
    334 uint8
    335 CDAudioDevice::GetVolume()
    336 {
    337     scsi_volume vol;
    338     ioctl(fFileHandle, B_SCSI_GET_VOLUME, &vol);
    339     return vol.port0_volume;
    340 }
    341 
    342 
    343 //! Check the current CD play state
    344 CDState
    345 CDAudioDevice::GetState()
    346 {
    347     scsi_position pos;
    348     status_t media_status = B_DEV_NO_MEDIA;
    349 
    350     ioctl(fFileHandle, B_GET_MEDIA_STATUS, &media_status, sizeof(media_status));
    351     if (media_status != B_OK)
    352         return kNoCD;
    353 
    354     status_t result = ioctl(fFileHandle, B_SCSI_GET_POSITION, &pos);
    355     if (result != B_OK)
    356         return kNoCD;
    357     else if ((!pos.position[1]) || (pos.position[1] >= 0x13) ||
    358            ((pos.position[1] == 0x12) && (!pos.position[6])))
    359         return kStopped;
    360     else if (pos.position[1] == 0x11)
    361         return kPlaying;
    362     else
    363         return kPaused;
    364 }
    365 
    366 
    367 int16
    368 CDAudioDevice::CountTracks()
    369 {
    370     scsi_toc toc;
    371     status_t result = ioctl(fFileHandle, B_SCSI_GET_TOC, &toc);
    372 
    373     if (result != B_OK)
    374         return -1;
    375 
    376     return toc.toc_data[3];
    377 }
    378 
    379 
    380 //! Get the 0-based index of the current track
    381 int16
    382 CDAudioDevice::GetTrack()
    383 {
    384     scsi_position pos;
    385 
    386     status_t media_status = B_DEV_NO_MEDIA;
    387 
    388     ioctl(fFileHandle, B_GET_MEDIA_STATUS, &media_status, sizeof(media_status));
    389     if (media_status != B_OK)
    390         return -1;
    391 
    392     status_t result = ioctl(fFileHandle, B_SCSI_GET_POSITION, &pos);
    393     if (result != B_OK)
    394         return -1;
    395 
    396     if (!pos.position[1] || pos.position[1] >= 0x13
    397         || (pos.position[1] == 0x12 && !pos.position[6]))
    398         return 0;
    399     else
    400         return pos.position[6];
    401 }
    402 
    403 
    404 uint8
    405 CDAudioDevice::CountDrives()
    406 {
    407     return fDriveList.CountItems();
    408 }
    409 
    410 
    411 bool
    412 CDAudioDevice::SetDrive(const int32 &drive)
    413 {
    414     BString *path = (BString*) fDriveList.ItemAt(drive);
    415 
    416     if (!path)
    417         return false;
    418 
    419     int device = open(path->String(), O_RDONLY);
    420     if (device >= 0) {
    421         fFileHandle = device;
    422         fDrivePath = path;
    423         fDriveIndex = drive;
    424         return true;
    425     }
    426    
    427     return false;
    428 }
    429 
    430 
    431 const char *
    432 CDAudioDevice::GetDrivePath() const
    433 {
    434     if (!fDrivePath)
    435         return NULL;
    436 
    437     return fDrivePath->String();
    438 }
    439 
    440 
    441 int32
    442 CDAudioDevice::_FindDrives(const char *path)
    443 {
    444     BDirectory dir(path);
    445 
    446     if (dir.InitCheck() != B_OK)
    447         return B_ERROR;
    448 
    449     dir.Rewind();
    450 
    451     BEntry entry;
    452     while (dir.GetNextEntry(&entry) >= 0) {
    453         BPath path;
    454         const char *name;
    455         entry_ref e;
    456 
    457         if (entry.GetPath(&path) != B_OK)
    458             continue;
    459 
    460         name = path.Path();
    461         if (entry.GetRef(&e) != B_OK)
    462             continue;
    463 
    464         if (entry.IsDirectory()) {
    465             // ignore floppy -- it is not silent
    466             if (strcmp(e.name, "floppy") == 0)
    467                 continue;
    468             else if (strcmp(e.name, "ata") == 0)
    469                 continue;
    470 
    471             // Note that if we check for the count here, we could
    472             // just search for one drive. However, we want to find *all* drives
    473             // that are available, so we keep searching even if we've found one
    474             _FindDrives(name);
    475 
    476         } else {
    477             int devfd;
    478             device_geometry g;
    479 
    480             // ignore partitions
    481             if (strcmp(e.name, "raw") != 0)
    482                 continue;
    483 
    484             devfd = open(name, O_RDONLY);
    485             if (devfd < 0)
    486                 continue;
    487 
    488             if (ioctl(devfd, B_GET_GEOMETRY, &g, sizeof(g)) >= 0) {
    489                 if (g.device_type == B_CD)
    490                     fDriveList.AddItem(new BString(name));
    491             }
    492             close(devfd);
    493         }
    494     }
    495     return fDriveList.CountItems();
    496 }
    497 
    498 
    499 bool
    500 CDAudioDevice::GetTime(CDAudioTime &track, CDAudioTime &disc)
    501 {
    502     scsi_position pos;
    503 
    504     // Sanity check
    505     status_t media_status = B_DEV_NO_MEDIA;
    506     ioctl(fFileHandle, B_GET_MEDIA_STATUS, &media_status, sizeof(media_status));
    507     if (media_status != B_OK)
    508         return false;
    509 
    510     status_t result = ioctl(fFileHandle, B_SCSI_GET_POSITION, &pos);
    511 
    512     if (result != B_OK)
    513         return false;
    514 
    515     if ((!pos.position[1]) || (pos.position[1] >= 0x13) ||
    516         ((pos.position[1] == 0x12) && (!pos.position[6]))) {
    517         // This indicates that we have a CD, but we are stopped.
    518         return false;
    519     }
    520 
    521     disc.SetMinutes(pos.position[9]);
    522     disc.SetSeconds(pos.position[10]);
    523     track.SetMinutes(pos.position[13]);
    524     track.SetSeconds(pos.position[14]);
    525     return true;
    526 }
    527 
    528 
    529 bool
    530 CDAudioDevice::GetTimeForTrack(const int16 &index, CDAudioTime &track)
    531 {
    532     scsi_toc toc;
    533     status_t result = ioctl(fFileHandle, B_SCSI_GET_TOC, &toc);
    534 
    535     if (result != B_OK)
    536         return false;
    537 
    538     int16 trackcount = toc.toc_data[3] - toc.toc_data[2] + 1;
    539 
    540     if (index < 1 || index > trackcount)
    541         return false;
    542 
    543     TrackDescriptor *desc = (TrackDescriptor*)&(toc.toc_data[4]);
    544 
    545     int32 tracktime = (desc[index].min * 60) + desc[index].sec;
    546 
    547     tracktime -= (desc[index - 1].min * 60) + desc[index - 1].sec;
    548     track.SetMinutes(tracktime / 60);
    549     track.SetSeconds(tracktime % 60);
    550    
    551     return true;
    552 }
    553 
    554 
    555 bool
    556 CDAudioDevice::GetTimeForDisc(CDAudioTime &disc)
    557 {
    558     scsi_toc toc;
    559     status_t result = ioctl(fFileHandle, B_SCSI_GET_TOC, &toc);
    560 
    561     if (result != B_OK)
    562         return false;
    563 
    564     int16 trackcount = toc.toc_data[3] - toc.toc_data[2] + 1;
    565     TrackDescriptor *desc = (TrackDescriptor*)&(toc.toc_data[4]);
    566 
    567     disc.SetMinutes(desc[trackcount].min);
    568     disc.SetSeconds(desc[trackcount].sec);
    569 
    570     return true;
    571 }
    572 
    573 
    574 int32
    575 CDAudioDevice::GetDiscID()
    576 {
    577     // Read the disc
    578     scsi_toc toc;
    579     status_t result = ioctl(fFileHandle, B_SCSI_GET_TOC, &toc);
    580 
    581     if (result != B_OK)
    582         return -1;
    583 
    584 
    585     int32 id, numTracks;
    586     BString frameOffsetsString;
    587 
    588     ConvertedToc tocData[100];
    589 
    590     // figure out the disc ID
    591     for (int index = 0; index < 100; index++) {
    592         tocData[index].min = toc.toc_data[9 + 8 * index];
    593         tocData[index].sec = toc.toc_data[10 + 8 * index];
    594         tocData[index].frame = toc.toc_data[11 + 8 * index];
    595     }
    596     numTracks = toc.toc_data[3] - toc.toc_data[2] + 1;
    597 
    598     int32 sum1 = 0;
    599     int32 sum2 = 0;
    600     for (int index = 0; index < numTracks; index++) {
    601         sum1 += cddb_sum((tocData[index].min * 60) + tocData[index].sec);
    602        
    603         // the following is probably running over too far
    604         sum2 += (tocData[index + 1].min * 60 + tocData[index + 1].sec) -
    605             (tocData[index].min * 60 + tocData[index].sec);
    606     }
    607     id = ((sum1 % 0xff) << 24) + (sum2 << 8) + numTracks;
    608 
    609     return id;
    610 }
    611 
    612 
    613 bool
    614 CDAudioDevice::IsDataTrack(const int16 &track)
    615 {
    616     scsi_toc toc;
    617     status_t result = ioctl(fFileHandle, B_SCSI_GET_TOC, &toc);
    618 
    619     if (result != B_OK)
    620         return false;
    621 
    622     TrackDescriptor *trackindex = (TrackDescriptor*) &(toc.toc_data[4]);
    623     if (track > toc.toc_data[3])
    624         return false;
    625 
    626     // At least under R5, the SCSI CD drive has each legitimate audio track
    627     // have a value of 0x10. Data tracks have a value of 0x14;
    628     if (trackindex[track].adr_control & 4)
    629         return true;
    630 
    631     return false;
    632 }
  • deleted file src/apps/cdplayer/CDAudioDevice.h

    diff --git a/src/apps/cdplayer/CDAudioDevice.h b/src/apps/cdplayer/CDAudioDevice.h
    deleted file mode 100644
    index 14f8d37..0000000
    + -  
    1 /*
    2  * Copyright 2006-2007, Haiku, Inc. All Rights Reserved.
    3  * Distributed under the terms of the MIT license.
    4  *
    5  * Author:
    6  *      DarkWyrm, bpmagic@columbus.rr.com
    7  */
    8 #ifndef CDAUDIODEVICE_H
    9 #define CDAUDIODEVICE_H
    10 
    11 #include <List.h>
    12 #include <String.h>
    13 #include <SupportDefs.h>
    14 
    15 
    16 // The SCSI table of contents consists of a 4-byte header followed by 100 track
    17 // descriptors, which are each 8 bytes. We don't really need the first 5 bytes
    18 // of the track descriptor, so we'll just ignore them. All we really want is the
    19 // fLength of each track, which happen to be the last 3 bytes of the descriptor.
    20 typedef struct {
    21     uint8   reserved;
    22     uint8   adr_control;    // bytes 0-3 are control, 4-7 are ADR
    23     uint8   track_number;
    24     uint8   reserved2;
    25 
    26     uint8   reserved3;
    27     uint8   min;
    28     uint8   sec;
    29     uint8   frame;
    30 } TrackDescriptor;
    31 
    32 enum CDState {
    33     kNoCD = 0,
    34     kStopped,
    35     kPaused,
    36     kPlaying,
    37     kSkipping,
    38     kError,
    39     kInit
    40 };
    41 
    42 
    43 class CDAudioTime {
    44     public:
    45         CDAudioTime(const int32 min = -1, const int32 &sec = -1);
    46         CDAudioTime(const CDAudioTime &from);
    47         CDAudioTime &operator=(const CDAudioTime &from);
    48         CDAudioTime operator+(const CDAudioTime &from);
    49         CDAudioTime operator-(const CDAudioTime &from);
    50 
    51         void SetMinutes(const int32& minutes)
    52         {
    53             fMinutes = minutes;
    54         }
    55 
    56         void SetSeconds(const int32& seconds)
    57         {
    58             fSeconds = seconds;
    59         }
    60 
    61         int32 GetMinutes() const
    62         {
    63             return fMinutes;
    64         }
    65 
    66         int32 GetSeconds() const
    67         {
    68             return fSeconds;
    69         }
    70 
    71     private:
    72         int32   fMinutes;
    73         int32   fSeconds;
    74 };
    75 
    76 
    77 class CDAudioData {
    78     public:
    79         CDAudioData(const int32 &id = -1, const int32 &count = -1,
    80             const int32 &discLength = -1);
    81         CDAudioData(const CDAudioData &from);
    82         CDAudioData &operator=(const CDAudioData &from);
    83 
    84     private:
    85         int32   fDiscId;
    86         int32   fTrackCount;
    87         int32   fLength;
    88         BString fFrameOffsets;
    89 };
    90 
    91 
    92 class CDAudioDevice {
    93     public:
    94         CDAudioDevice();
    95         ~CDAudioDevice();
    96 
    97         bool Play(const int16 &track);
    98         bool Pause();
    99         bool Resume();
    100         bool Stop();
    101         bool Eject();
    102 
    103         bool StartFastFwd();
    104         bool StopFastFwd();
    105 
    106         bool StartRewind();
    107         bool StopRewind();
    108 
    109         bool SetVolume(uint8 value);
    110         uint8 GetVolume();
    111 
    112         CDState GetState();
    113 
    114         int16 CountTracks();
    115         int16 GetTrack();
    116 
    117         uint8 CountDrives();
    118         bool SetDrive(const int32 &drive);
    119         const char* GetDrivePath() const;
    120 
    121         int32 GetDrive() const
    122         {
    123             return fDriveIndex;
    124         }
    125 
    126         bool GetTime(CDAudioTime &track, CDAudioTime &disc);
    127         bool GetTimeForTrack(const int16 &index, CDAudioTime &track);
    128         bool GetTimeForDisc(CDAudioTime &disc);
    129         int32 GetDiscID();
    130 
    131         bool IsDataTrack(const int16 &track);
    132 
    133     private:
    134         int32 _FindDrives(const char *path);
    135 
    136         int         fFileHandle;
    137         BString*    fDrivePath;
    138         BList       fDriveList;
    139         int32       fDriveIndex;
    140 };
    141 
    142 #endif  // CDAUDIODEVICE_H
  • deleted file src/apps/cdplayer/CDDBSupport.cpp

    diff --git a/src/apps/cdplayer/CDDBSupport.cpp b/src/apps/cdplayer/CDDBSupport.cpp
    deleted file mode 100644
    index d108901..0000000
    + -  
    1 // Copyright 1992-2000, Be Incorporated, All Rights Reserved.
    2 // This file may be used under the terms of the Be Sample Code License.
    3 //
    4 // send comments/suggestions/feedback to pavel@be.com
    5 //
    6 
    7 #include "CDDBSupport.h"
    8 
    9 #include <Alert.h>
    10 #include <Debug.h>
    11 #include <Directory.h>
    12 #include <Entry.h>
    13 #include <File.h>
    14 #include <FindDirectory.h>
    15 #include <fs_attr.h>
    16 #include <fs_index.h>
    17 #include <NetAddress.h>
    18 #include <Path.h>
    19 #include <Query.h>
    20 #include <UTF8.h>
    21 #include <Volume.h>
    22 #include <VolumeRoster.h>
    23 
    24 #include <errno.h>
    25 #include <netdb.h>
    26 #include <signal.h>
    27 #include <stdio.h>
    28 #include <stdlib.h>
    29 #include <stdlib.h>
    30 
    31 
    32 //#define DEBUG_CDDB
    33 
    34 #ifdef DEBUG_CDDB
    35 #define STRACE(x) printf x
    36 #else
    37 #define STRACE(x) /* nothing */
    38 #endif
    39 
    40 const int kTerminatingSignal = SIGINT; // SIGCONT;
    41 
    42 // The SCSI table of contents consists of a 4-byte header followed by 100 track
    43 // descriptors, which are each 8 bytes. We don't really need the first 5 bytes
    44 // of the track descriptor, so we'll just ignore them. All we really want is the
    45 // length of each track, which happen to be the last 3 bytes of the descriptor.
    46 struct TrackRecord {
    47     int8    unused[5];
    48 
    49     int8    min;
    50     int8    sec;
    51     int8    frame;
    52 };
    53 
    54 
    55 static void
    56 DoNothing(int)
    57 {
    58 }
    59 
    60 
    61 static int32
    62 cddb_sum(int n)
    63 {
    64     char buf[12];
    65     int32 ret = 0;
    66 
    67     sprintf(buf, "%u", n);
    68     for (const char *p = buf; *p != '\0'; p++)
    69         ret += (*p - '0');
    70     return ret;
    71 }
    72 
    73 
    74 BString
    75 GetLineFromString(const char *string)
    76 {
    77     if (!string)
    78         return NULL;
    79 
    80     BString out(string);
    81 
    82     int32 lineFeed = out.FindFirst("\n");
    83 
    84     if (lineFeed > 0)
    85         out.Truncate(lineFeed);
    86 
    87     return out;
    88 }
    89 
    90 
    91 //  #pragma mark -
    92 
    93 
    94 CDDBData::CDDBData(int32 discId)
    95     :
    96     fDiscID(discId),
    97     fYear(-1)
    98 {
    99 }
    100 
    101 
    102 CDDBData::CDDBData(const CDDBData &from)
    103     :
    104     fDiscID(from.fDiscID),
    105     fArtist(from.fArtist),
    106     fAlbum(from.fAlbum),
    107     fGenre(from.fGenre),
    108     fDiscTime(from.fDiscTime),
    109     fYear(from.fYear)
    110 {
    111     STRACE(("CDDBData::Copy Constructor\n"));
    112 
    113     for (int32 i = 0; i < from.fTrackList.CountItems(); i++) {
    114         BString *string = (BString*)from.fTrackList.ItemAt(i);
    115         CDAudioTime *time = (CDAudioTime*)from.fTimeList.ItemAt(i);
    116 
    117         if (!string || !time)
    118             continue;
    119 
    120         AddTrack(string->String(), *time);
    121     }
    122 }
    123 
    124 
    125 CDDBData::~CDDBData()
    126 {
    127     STRACE(("CDDBData::~CDDBData\n"));
    128     _EmptyLists();
    129 }
    130 
    131 
    132 CDDBData &
    133 CDDBData::operator=(const CDDBData &from)
    134 {
    135     _EmptyLists();
    136     fDiscID = from.fDiscID;
    137     fArtist = from.fArtist;
    138     fAlbum = from.fAlbum;
    139     fGenre = from.fGenre;
    140     fDiscTime = from.fDiscTime;
    141     fYear = from.fYear;
    142 
    143     for (int32 i = 0; i < from.fTrackList.CountItems(); i++) {
    144         BString *string = (BString*)from.fTrackList.ItemAt(i);
    145         CDAudioTime *time = (CDAudioTime*)from.fTimeList.ItemAt(i);
    146 
    147         if (!string || !time)
    148             continue;
    149 
    150         AddTrack(string->String(),*time);
    151     }
    152     return *this;
    153 }
    154 
    155 
    156 void
    157 CDDBData::MakeEmpty()
    158 {
    159     STRACE(("CDDBData::MakeEmpty\n"));
    160 
    161     _EmptyLists();
    162     fDiscID = -1;
    163     fArtist = "";
    164     fAlbum = "";
    165     fGenre = "";
    166     fDiscTime.SetMinutes(-1);
    167     fDiscTime.SetSeconds(-1);
    168     fYear = -1;
    169 }
    170 
    171 
    172 void
    173 CDDBData::_EmptyLists()
    174 {
    175     STRACE(("CDDBData::_EmptyLists\n"));
    176    
    177     for (int32 i = 0; i < fTrackList.CountItems(); i++) {
    178         BString *string = (BString*)fTrackList.ItemAt(i);
    179         delete string;
    180     }
    181     fTrackList.MakeEmpty();
    182 
    183     for (int32 j = 0; j < fTimeList.CountItems(); j++) {
    184         CDAudioTime *time = (CDAudioTime*)fTimeList.ItemAt(j);
    185         delete time;
    186     }
    187     fTimeList.MakeEmpty();
    188 }
    189 
    190 
    191 status_t
    192 CDDBData::Load(const entry_ref &ref)
    193 {
    194     STRACE(("CDDBData::Load(%s)\n", ref.name));
    195 
    196     BFile file(&ref, B_READ_ONLY);
    197 
    198     if (file.InitCheck() != B_OK) {
    199         STRACE(("CDDBData::Load failed\n"));
    200         return file.InitCheck();
    201     }
    202 
    203     attr_info info;
    204 
    205     if (file.GetAttrInfo("Audio:Genre", &info) == B_OK && info.size > 0) {
    206         char genreData[info.size + 2];
    207 
    208         if (file.ReadAttr("Audio:Genre", B_STRING_TYPE, 0, genreData, info.size) > 0)
    209             fGenre = genreData;
    210     }
    211 
    212     if (file.GetAttrInfo("Audio:Year", &info) == B_OK && info.size > 0) {
    213         int32 yearData;
    214 
    215         if (file.ReadAttr("Audio:Year", B_INT32_TYPE, 0, &yearData, info.size) > 0)
    216             fYear = yearData;
    217     }
    218 
    219     // TODO: Attempt reading the file before attempting to read the attributes
    220     if (file.GetAttrInfo("CD:tracks", &info) == B_OK && info.size > 0) {
    221         char trackData[info.size + 2];
    222 
    223         if (file.ReadAttr("CD:tracks", B_STRING_TYPE, 0, trackData, info.size) > 0) {
    224             trackData[info.size] = 0;
    225             BString tmp = GetLineFromString(trackData);
    226             char *index;
    227 
    228             if (fTrackList.CountItems() > 0)
    229                 _EmptyLists();
    230 
    231             fArtist = tmp;
    232             fArtist.Truncate(fArtist.FindFirst(" - "));
    233             STRACE(("CDDBData::Load: Artist set to %s\n", fArtist.String()));
    234 
    235             fAlbum = tmp.String() + (tmp.FindFirst(" - ") + 3);
    236             STRACE(("CDDBData::Load: Album set to %s\n", fAlbum.String()));
    237 
    238             index = strchr(trackData, '\n') + 1;
    239             while (*index) {
    240                 tmp = GetLineFromString(index);
    241 
    242                 if (tmp.CountChars() > 0) {
    243                     BString *newTrack = new BString(tmp);
    244                     CDAudioTime *time = new CDAudioTime;
    245                     time->SetMinutes(0);
    246                     time->SetSeconds(0);
    247 
    248                     STRACE(("CDDBData::Load: Adding Track %s (%" B_PRId32 ":%" B_PRId32 ")\n", newTrack->String(),
    249                             time->minutes, time->seconds));
    250 
    251                     fTrackList.AddItem(newTrack);
    252                     fTimeList.AddItem(time);
    253                 }
    254 
    255                 index = strchr(index,'\n') + 1;
    256             }
    257 
    258             // We return this so that the caller knows to initialize tracktimes
    259             return B_NO_INIT;
    260         }
    261     }
    262 
    263     return B_ERROR;
    264 }
    265 
    266 
    267 status_t
    268 CDDBData::Load()
    269 {
    270     // This uses the default R5 path
    271 
    272     BPath path;
    273     if (find_directory(B_USER_DIRECTORY, &path, true) != B_OK)
    274         return B_ERROR;
    275 
    276     path.Append("cd");
    277     create_directory(path.Path(), 0755);
    278 
    279     BString filename(path.Path());
    280     filename << "/" << Artist() << " - " << Album();
    281 
    282     if (filename.Compare("Artist") == 0)
    283         filename << "." << DiscID();
    284 
    285     BEntry entry(filename.String());
    286     if (entry.InitCheck() != B_OK)
    287         return entry.InitCheck();
    288 
    289     entry_ref ref;
    290     entry.GetRef(&ref);
    291 
    292     return Load(ref);
    293 }
    294 
    295 
    296 status_t
    297 CDDBData::Save()
    298 {
    299     // This uses the default R5 path
    300 
    301     BPath path;
    302     if (find_directory(B_USER_DIRECTORY, &path, true) != B_OK)
    303         return B_ERROR;
    304 
    305     path.Append("cd");
    306     create_directory(path.Path(), 0755);
    307 
    308     BString filename(path.Path());
    309     filename << "/" << Artist() << " - " << Album();
    310 
    311     if (filename.Compare("Artist")==0)
    312         filename << "." << DiscID();
    313 
    314     return Save(filename.String());
    315 }
    316 
    317 
    318 status_t
    319 CDDBData::Save(const char *filename)
    320 {
    321     if (!filename) {
    322         STRACE(("CDDBData::Save failed - NULL filename\n"));
    323         return B_ERROR;
    324     }
    325 
    326     BFile file(filename, B_READ_WRITE | B_CREATE_FILE | B_ERASE_FILE);
    327     if (file.InitCheck() != B_OK) {
    328         STRACE(("CDDBData::Save failed - couldn't create file %s\n", filename));
    329         return file.InitCheck();
    330     }
    331 
    332     BString entry;
    333     char timestring[10];
    334 
    335     sprintf(timestring,"%.2" B_PRId32 ":%.2" B_PRId32 "", fDiscTime.GetMinutes(),
    336         fDiscTime.GetSeconds());
    337 
    338     entry << fArtist << " - " << fAlbum << "\t" << timestring << "\n";
    339     file.Write(entry.String(), entry.Length());
    340 
    341     STRACE(("CDDBData::Save: wrote first line: %s", entry.String()));
    342 
    343     BString tracksattr(fArtist);
    344     tracksattr << " - " << fAlbum << "\n";
    345 
    346     for (int32 i = 0; i < fTrackList.CountItems(); i++) {
    347         BString *trackstr = (BString *)fTrackList.ItemAt(i);
    348         CDAudioTime *time= (CDAudioTime*)fTimeList.ItemAt(i);
    349 
    350         if (!trackstr || !time)
    351             continue;
    352 
    353         entry = *trackstr;
    354 
    355         sprintf(timestring,"%.2" B_PRId32 ":%.2" B_PRId32 "", time->GetMinutes(),
    356             time->GetSeconds());
    357 
    358         entry << "\t" << timestring << "\n";
    359         file.Write(entry.String(), entry.Length());
    360         STRACE(("CDDBData::Save: Wrote line: %s", entry.String()));
    361        
    362         tracksattr << *trackstr << "\n";
    363     }
    364 
    365     file.WriteAttr("CD:key", B_INT32_TYPE, 0, &fDiscID, sizeof(int32));
    366     STRACE(("CDDBData::Save: Wrote CD identifier: %" B_PRId32 "(%" B_PRIx32 ")\n",
    367         fDiscID, fDiscID));
    368     file.WriteAttr("CD:tracks", B_STRING_TYPE, 0, tracksattr.String(), tracksattr.Length() + 1);
    369 
    370     if (fGenre.CountChars() > 0)
    371         file.WriteAttr("Audio:Genre",B_STRING_TYPE, 0, fGenre.String(), fGenre.Length() + 1);
    372 
    373     if (fYear > 0)
    374         file.WriteAttr("Audio:Year", B_INT32_TYPE, 0, &fYear, sizeof(int32));
    375 
    376     return B_OK;
    377 }
    378 
    379 
    380 uint16
    381 CDDBData::CountTracks() const
    382 {
    383     return fTrackList.CountItems();
    384 }
    385 
    386 
    387 bool
    388 CDDBData::RenameTrack(const int32 &index, const char *newName)
    389 {
    390     if (!newName) {
    391         STRACE(("CDDBData::RenameTrack failed - NULL newName\n"));
    392         return false;
    393     }
    394 
    395     BString *name = (BString*)fTrackList.ItemAt(index);
    396     if (name) {
    397         STRACE(("CDDBData::RenameTrack(%" B_PRId32 ",%s)\n", index, newName));
    398         name->SetTo(newName);
    399         return true;
    400     }
    401 
    402     STRACE(("CDDBData::RenameTrack failed - invalid index\n"));
    403     return false;
    404 }
    405 
    406 
    407 void
    408 CDDBData::AddTrack(const char *track, const CDAudioTime &time,
    409     const int16 &index)
    410 {
    411     if (!track) {
    412         STRACE(("CDDBData::AddTrack failed - NULL name\n"));
    413         return;
    414     }
    415     STRACE(("CDDBData::AddTrack(%s, %" B_PRId32 ":%.2" B_PRId32 ",%d)\n", track,
    416         time.minutes, time.seconds, index));
    417 
    418     fTrackList.AddItem(new BString(track));
    419     fTimeList.AddItem(new CDAudioTime(time));
    420 }
    421 
    422 
    423 void
    424 CDDBData::RemoveTrack(const int16 &index)
    425 {
    426     // This breaks the general following of the BList style because
    427     // removing a track would require returning 2 pointers
    428 
    429     fTrackList.RemoveItem(index);
    430     fTimeList.RemoveItem(index);
    431 
    432     STRACE(("CDDBData::RemoveTrack(%d)\n", index));
    433 }
    434 
    435 
    436 const char *
    437 CDDBData::TrackAt(const int16 &index) const
    438 {
    439     BString *track = (BString*)fTrackList.ItemAt(index);
    440     if (!track)
    441         return NULL;
    442 
    443     return track->String();
    444 }
    445 
    446 
    447 CDAudioTime *
    448 CDDBData::TrackTimeAt(const int16 &index)
    449 {
    450     return (CDAudioTime *)fTimeList.ItemAt(index);
    451 }
    452 
    453 
    454 //  #pragma mark -
    455 
    456 
    457 CDDBQuery::CDDBQuery(const char *server, int32 port)
    458     :
    459     fServerName(server),
    460     fPort(port),
    461     fConnected(false),
    462     fState(kInitial)
    463 {
    464 }
    465 
    466 
    467 CDDBQuery::~CDDBQuery()
    468 {
    469     kill_thread(fThread);
    470 }
    471 
    472 
    473 void
    474 CDDBQuery::SetToSite(const char *server, int32 port)
    475 {
    476     _Disconnect();
    477     fServerName = server;
    478     fPort = port;
    479     fState = kInitial;
    480 }
    481 
    482 
    483 void
    484 CDDBQuery::SetToCD(const char *path)
    485 {
    486     if (!path)
    487         return;
    488 
    489     // Get the SCSI table of contents from the device passed to us
    490     int device = open(path, O_RDONLY);
    491     if (device < 0)
    492         return;
    493 
    494     status_t result = ioctl(device, B_SCSI_GET_TOC, &fSCSIData);
    495 
    496     close(device);
    497 
    498     if (result != B_OK)
    499         return;
    500 
    501     // Calculate the disc's CDDB ID
    502     if (fState == kInitial) {
    503         fCDData.SetDiscID(GetDiscID(&fSCSIData));
    504         fCDData.SetDiscTime(GetDiscTime(&fSCSIData));
    505     } else {
    506         int32 discID = GetDiscID(&fSCSIData);
    507 
    508         if (fCDData.DiscID() == discID)
    509             return;
    510 
    511         fCDData.SetDiscID(discID);
    512         fCDData.SetDiscTime(GetDiscTime(&fSCSIData));
    513         fFrameOffsetString = OffsetsToString(&fSCSIData);
    514     }
    515 
    516     result = B_OK;
    517     fState = kReading;
    518     fThread = spawn_thread(&CDDBQuery::_QueryThread, "CDDBLookup", B_NORMAL_PRIORITY, this);
    519 
    520     if (fThread >= 0)
    521         resume_thread(fThread);
    522     else {
    523         fState = kError;
    524         result = fThread;
    525     }
    526 }
    527 
    528 
    529 const char *
    530 CDDBQuery::_GetToken(const char *stream, BString &result)
    531 {
    532     result = "";
    533     while (*stream && *stream <= ' ')
    534         stream++;
    535     while (*stream && *stream > ' ')
    536         result += *stream++;
    537 
    538     return stream;
    539 }
    540 
    541 
    542 status_t
    543 CDDBQuery::GetSites(bool (*eachFunc)(const char *site, int port, const char *latitude,
    544         const char *longitude, const char *description, void *state), void *passThru)
    545 {
    546     if (!_IsConnected())
    547         _Connect();
    548 
    549     BString tmp;
    550 
    551     tmp = "sites\n";
    552     STRACE((">%s", tmp.String()));
    553 
    554     if (fSocket.Send(tmp.String(), tmp.Length()) == -1)
    555         return B_ERROR;
    556 
    557     _ReadLine(tmp);
    558 
    559     if (tmp.FindFirst("210") == -1) {
    560         _Disconnect();
    561         return B_ERROR;
    562     }
    563 
    564     for (;;) {
    565         BString site;
    566         int32 sitePort;
    567         BString latitude;
    568         BString longitude;
    569         BString description;
    570 
    571         _ReadLine(tmp);
    572         if (tmp == ".")
    573             break;
    574         const char *scanner = tmp.String();
    575 
    576         scanner = _GetToken(scanner, site);
    577         BString portString;
    578         scanner = _GetToken(scanner, portString);
    579         sitePort = atoi(portString.String());
    580         scanner = _GetToken(scanner, latitude);
    581         scanner = _GetToken(scanner, longitude);
    582         description = scanner;
    583 
    584         if (eachFunc(site.String(), sitePort, latitude.String(),
    585                 longitude.String(), description.String(), passThru))
    586             break;
    587     }
    588     _Disconnect();
    589     return B_OK;
    590 }
    591 
    592 
    593 bool
    594 CDDBQuery::GetData(CDDBData *data, bigtime_t timeout)
    595 {
    596     if (!data)
    597         return false;
    598 
    599     bigtime_t deadline = system_time() + timeout;
    600     while (fState == kReading) {
    601         snooze(50000);
    602         if (system_time() > deadline)
    603             break;
    604     }
    605     if (fState != kDone)
    606         return false;
    607 
    608     *data = fCDData;
    609 
    610     return true;
    611 }
    612 
    613 
    614 int32
    615 CDDBQuery::GetDiscID(const scsi_toc *toc)
    616 {
    617     // The SCSI TOC data has a 4-byte header and then each track record starts
    618     TrackRecord *tocData = (TrackRecord*)&(toc->toc_data[4]);
    619 
    620     int32 numTracks = toc->toc_data[3] - toc->toc_data[2] + 1;
    621 
    622     int32 sum1 = 0;
    623     int32 sum2 = 0;
    624     for (int index = 0; index < numTracks; index++) {
    625         sum1 += cddb_sum((tocData[index].min * 60) + tocData[index].sec);
    626 
    627         // the following is probably running over too far
    628         sum2 += (tocData[index + 1].min * 60 + tocData[index + 1].sec)
    629                 - (tocData[index].min * 60 + tocData[index].sec);
    630     }
    631     int32 discID = ((sum1 % 0xff) << 24) + (sum2 << 8) + numTracks;
    632 
    633     return discID;
    634 }
    635 
    636 
    637 BString
    638 CDDBQuery::OffsetsToString(const scsi_toc *toc)
    639 {
    640     TrackRecord *tocData = (TrackRecord*)&(toc->toc_data[4]);
    641 
    642     int32 numTracks = toc->toc_data[3] - toc->toc_data[2] + 1;
    643 
    644     BString string;
    645     for (int index = 0; index < numTracks; index++) {
    646         string << tocData[index].min * 4500 + tocData[index].sec * 75
    647             + tocData[index].frame << ' ';
    648     }
    649 
    650     return string;
    651 }
    652 
    653 
    654 int32
    655 CDDBQuery::GetTrackCount(const scsi_toc *toc)
    656 {
    657     return toc->toc_data[3] - toc->toc_data[2] + 1;
    658 }
    659 
    660 
    661 CDAudioTime
    662 CDDBQuery::GetDiscTime(const scsi_toc *toc)
    663 {
    664     int16 trackcount = toc->toc_data[3] - toc->toc_data[2] + 1;
    665     TrackRecord *desc = (TrackRecord*)&(toc->toc_data[4]);
    666 
    667     CDAudioTime disc;
    668     disc.SetMinutes(desc[trackcount].min);
    669     disc.SetSeconds(desc[trackcount].sec);
    670    
    671     return disc;
    672 }
    673 
    674 
    675 void
    676 CDDBQuery::GetTrackTimes(const scsi_toc *toc, vector<CDAudioTime> &times)
    677 {
    678     TrackRecord *tocData = (TrackRecord*)&(toc->toc_data[4]);
    679     int16 trackCount = toc->toc_data[3] - toc->toc_data[2] + 1;
    680 
    681     for (int index = 0; index < trackCount + 1; index++) {
    682         CDAudioTime cdtime;
    683         cdtime.SetMinutes(tocData[index].min);
    684         cdtime.SetSeconds(tocData[index].sec);
    685         times.push_back(cdtime);
    686     }
    687 }
    688 
    689 
    690 status_t
    691 CDDBQuery::_ReadFromServer(BString &data)
    692 {
    693     // This function queries the given CDDB server for the existence of the
    694     // disc's data and saves the data to file once obtained.
    695 
    696     // Query for the existence of the disc in the database
    697     char idString[10];
    698     sprintf(idString, "%08" B_PRIx32, fCDData.DiscID());
    699     BString query;
    700 
    701     int32 trackCount = GetTrackCount(&fSCSIData);
    702     BString offsetString = OffsetsToString(&fSCSIData);
    703     int32 discLength = (fCDData.DiscTime()->GetMinutes() * 60)
    704         + fCDData.DiscTime()->GetSeconds();
    705 
    706     query << "cddb query " << idString << ' ' << trackCount << ' '
    707             << offsetString << ' ' << discLength << '\n';
    708 
    709     STRACE((">%s", query.String()));
    710 
    711     if (fSocket.Send(query.String(), query.Length()) == -1) {
    712         _Disconnect();
    713         return B_ERROR;
    714     }
    715 
    716     BString tmp;
    717     _ReadLine(tmp);
    718     STRACE(("<%s", tmp.String()));
    719 
    720     BString category;
    721     BString queryDiscID(idString);
    722 
    723     if (tmp.FindFirst("200") != 0) {
    724         if (tmp.FindFirst("211") == 0) {
    725             // A 211 means that the query was not exact. To make sure that we
    726             // don't have a problem with this in the future, we will choose the
    727             // first entry that the server returns. This may or may not be wise,
    728             // but in my experience, the first one has been the right one.
    729 
    730             _ReadLine(tmp);
    731 
    732             // Get the category from the what the server returned
    733             _GetToken(tmp.String(), category);
    734 
    735             // Now we will get the disc ID for the CD. We will need this when we
    736             // query for the track name list. If we send the track name query
    737             // with the real discID, nothing will be returned. However, if we
    738             // send the one from the entry, we'll get the names and we can take
    739             // these names attach them to the disc that we have.
    740             _GetToken(tmp.String() + category.CountChars(), queryDiscID);
    741 
    742             // This is to suck up any more search results that the server sends
    743             // us.
    744             BString throwaway;
    745             _ReadLine(throwaway);
    746             while (throwaway.ByteAt(0) != '.')
    747                 _ReadLine(throwaway);
    748         } else {
    749             // We get here for any time the CDDB server does not recognize the
    750             // CD, amongst other things
    751             STRACE(("CDDB lookup error: %s\n", tmp.String()));
    752             fCDData.SetGenre("misc");
    753             return B_NAME_NOT_FOUND;
    754         }
    755     } else {
    756         _GetToken(tmp.String() + 3, category);
    757     }
    758     STRACE(("CDDBQuery::_ReadFromServer: Genre: %s\n", category.String()));
    759     if (!category.Length()) {
    760         STRACE(("Set genre to 'misc'\n"));
    761         category = "misc";
    762     }
    763 
    764     // Query for the disc's data - artist, album, tracks, etc.
    765     query = "";
    766     query << "cddb read " << category << ' ' << queryDiscID << '\n' ;
    767     if (fSocket.Send(query.String(), query.Length()) == -1) {
    768         _Disconnect();
    769         return B_ERROR;
    770     }
    771 
    772     while (true) {
    773         _ReadLine(tmp);
    774 
    775         if (tmp == "." || tmp == ".\n")
    776             break;
    777 
    778         data << tmp << '\n';
    779     }
    780 
    781     return B_OK;
    782 }
    783 
    784 
    785 status_t
    786 CDDBQuery::_Connect()
    787 {
    788     if (fConnected)
    789         _Disconnect();
    790 
    791     BNetAddress address;
    792 
    793     status_t status = address.SetTo(fServerName.String(), fPort);
    794     if (status != B_OK)
    795         return status;
    796 
    797     status = fSocket.Connect(address);
    798     if (status != B_OK)
    799         return status;
    800 
    801     fConnected = true;
    802 
    803     BString tmp;
    804     _ReadLine(tmp);
    805     _IdentifySelf();
    806 
    807     return B_OK;
    808 }
    809 
    810 
    811 bool
    812 CDDBQuery::_IsConnected() const
    813 {
    814     return fConnected;
    815 }
    816 
    817 
    818 void
    819 CDDBQuery::_Disconnect()
    820 {
    821     if (fConnected) {
    822         fSocket.Close();
    823         fConnected = false;
    824     }
    825 }
    826 
    827 
    828 void
    829 CDDBQuery::_ReadLine(BString &buffer)
    830 {
    831     buffer = "";
    832     unsigned char ch;
    833 
    834     for (;;) {
    835         if (fSocket.Receive(&ch, 1) <= 0)
    836             break;
    837 
    838 
    839         // This function is more work than it should have to be. FreeDB lookups
    840         // can sometimes  be in a non-ASCII encoding, such as Latin-1 or UTF8.
    841         // The problem lies in Be's implementation of BString, which does not
    842         // support UTF8 string assignments. The Be Book says we have to flatten
    843         // the string and adjust the character counts manually. Man, this
    844         // *really* sucks.
    845         if (ch > 0x7f)  {
    846             // Obviously non-ASCII character detected. Let's see if it's Latin-1
    847             // or UTF8.
    848             unsigned char *string, *stringindex;
    849             int32 length = buffer.Length();
    850 
    851             // The first byte of a UTF8 string will be 110xxxxx
    852             if ( ((ch & 0xe0) == 0xc0)) {
    853                 // This is UTF8. Get the next byte
    854                 unsigned char ch2;
    855                 if (fSocket.Receive(&ch2, 1) <= 0)
    856                     break;
    857 
    858                 if ( (ch2 & 0xc0) == 0x80) {
    859                     string = (unsigned char *)buffer.LockBuffer(length + 10);
    860                     stringindex = string + length;
    861 
    862                     stringindex[0] = ch;
    863                     stringindex[1] = ch2;
    864                     stringindex[2] = 0;
    865                    
    866                     buffer.UnlockBuffer();
    867                    
    868                     // We've added the character, so go to the next iteration
    869                     continue;
    870                 }
    871             }
    872 
    873             // Nope. Just Latin-1. Convert to UTF8 and assign
    874             char srcstr[2], deststr[5];
    875             int32 srclen, destlen, state;
    876 
    877             srcstr[0] = ch;
    878             srcstr[1] = '\0';
    879             srclen = 1;
    880             destlen = 5;
    881             memset(deststr, 0, 5);
    882 
    883             if (convert_to_utf8(B_ISO1_CONVERSION, srcstr, &srclen, deststr,
    884                     &destlen, &state) == B_OK) {
    885                 // We succeeded. Amazing. Now we hack the string into having the
    886                 // character
    887                 length = buffer.Length();
    888 
    889                 string = (unsigned char *)buffer.LockBuffer(length + 10);
    890                 stringindex = string + length;
    891 
    892                 for (int i = 0; i < 5; i++) {
    893                     stringindex[i] = deststr[i];
    894                     if (!deststr[i])
    895                         break;
    896                 }
    897 
    898                 buffer.UnlockBuffer();
    899             } else {
    900                 // well, we tried. Append the character to the string and live
    901                 // with it
    902                 buffer += ch;
    903             }
    904         } else
    905             buffer += ch;
    906 
    907         if (ch == '\n')
    908             break;
    909     }
    910 
    911     buffer.RemoveAll("\r");
    912     STRACE(("<%s", buffer.String()));
    913 }
    914 
    915 
    916 status_t
    917 CDDBQuery::_IdentifySelf()
    918 {
    919     BString username, hostname;
    920 
    921     username = getenv("USER");
    922     hostname = getenv("HOSTNAME");
    923 
    924     if (username.Length() < 1)
    925         username = "baron";
    926 
    927     if (hostname.Length() < 1)
    928         hostname = "haiku";
    929 
    930     BString tmp;
    931     tmp << "cddb hello " << username << " " << hostname
    932         << " HaikuCDPlayer 1.0\n";
    933 
    934     STRACE((">%s", tmp.String()));
    935     if (fSocket.Send(tmp.String(), tmp.Length())==-1) {
    936         _Disconnect();
    937         return B_ERROR;
    938     }
    939 
    940     _ReadLine(tmp);
    941 
    942     return B_OK;
    943 }
    944 
    945 
    946 status_t
    947 CDDBQuery::_OpenContentFile(const int32 &discID)
    948 {
    949     // Makes sure that the lookup has a valid file to work with for the CD
    950     // content. Returns true if there is an existing file, false if a lookup is
    951     // required.
    952 
    953     BFile file;
    954     BString predicate;
    955     predicate << "CD:key == " << discID;
    956     entry_ref ref;
    957 
    958     BVolumeRoster roster;
    959     BVolume volume;
    960     roster.Rewind();
    961     while (roster.GetNextVolume(&volume) == B_OK) {
    962         if (volume.IsReadOnly() || !volume.IsPersistent() || !volume.KnowsAttr()
    963             || !volume.KnowsQuery())
    964             continue;
    965 
    966         // make sure the volume we are looking at is indexed right
    967         fs_create_index(volume.Device(), "CD:key", B_INT32_TYPE, 0);
    968 
    969         BQuery query;
    970         query.SetVolume(&volume);
    971         query.SetPredicate(predicate.String());
    972         if (query.Fetch() != B_OK)
    973             continue;
    974 
    975         if (query.GetNextRef(&ref) == B_OK)
    976             break;
    977     }
    978 
    979     status_t status = fCDData.Load(ref);
    980     if (status == B_NO_INIT) {
    981         // We receive this error when the Load() function couldn't load the
    982         // track times This just means that we get it from the SCSI data given
    983         // to us in SetToCD
    984         vector<CDAudioTime> times;
    985         GetTrackTimes(&fSCSIData,times);
    986 
    987         for (int32 i = 0; i < fCDData.CountTracks(); i++) {
    988             CDAudioTime *item = fCDData.TrackTimeAt(i);
    989             *item = times[i + 1] - times[i];
    990         }
    991 
    992         status = B_OK;
    993     }
    994 
    995     return status;
    996 }
    997 
    998 
    999 int32
    1000 CDDBQuery::_QueryThread(void *owner)
    1001 {
    1002     CDDBQuery *query = (CDDBQuery *)owner;
    1003 
    1004     signal(kTerminatingSignal, DoNothing);
    1005 
    1006     if (query->_OpenContentFile(query->fCDData.DiscID()) != B_OK) {
    1007         // new content file, read it in from the server
    1008         if (query->_Connect() == B_OK) {
    1009             BString data;
    1010 
    1011             query->_ReadFromServer(data);
    1012             query->_ParseData(data);
    1013             query->_WriteFile();
    1014         } else {
    1015             // We apparently couldn't connect to the server, so we'll need to
    1016             // handle creating tracknames. Note that we do not save to disk.
    1017             // This is because it should be up to the user what to do.
    1018             query->_SetDefaultInfo();
    1019         }
    1020     }
    1021 
    1022     query->fState = kDone;
    1023     query->fThread = -1;
    1024     query->fResult = B_OK;
    1025 
    1026     return 0;
    1027 }
    1028 
    1029 
    1030 void
    1031 CDDBQuery::_WriteFile()
    1032 {
    1033     BPath path;
    1034     if (find_directory(B_USER_DIRECTORY, &path, true) != B_OK)
    1035         return;
    1036 
    1037     path.Append("cd");
    1038     create_directory(path.Path(), 0755);
    1039 
    1040     BString filename(path.Path());
    1041     filename << "/" << fCDData.Artist() << " - " << fCDData.Album();
    1042 
    1043     if (filename.Compare("Artist") == 0)
    1044         filename << "." << fCDData.DiscID();
    1045 
    1046     fCDData.Save(filename.String());
    1047 }
    1048 
    1049 
    1050 void
    1051 CDDBQuery::_SetDefaultInfo()
    1052 {
    1053     for (int16 i = fCDData.CountTracks(); i >= 0; i--)
    1054         fCDData.RemoveTrack(i);
    1055 
    1056     vector<CDAudioTime> trackTimes;
    1057     GetTrackTimes(&fSCSIData, trackTimes);
    1058     int32 trackCount = GetTrackCount(&fSCSIData);
    1059 
    1060     fCDData.SetArtist("Artist");
    1061     fCDData.SetAlbum("Audio CD");
    1062     fCDData.SetGenre("Misc");
    1063 
    1064     for (int32 i = 0; i < trackCount; i++) {
    1065         BString trackname("Track ");
    1066 
    1067         if (i < 9)
    1068             trackname << "0";
    1069 
    1070         trackname << i + 1;
    1071 
    1072         CDAudioTime time = trackTimes[i + 1] - trackTimes[i];
    1073         fCDData.AddTrack(trackname.String(), time);
    1074     }
    1075 }           
    1076 
    1077 
    1078 void
    1079 CDDBQuery::_ParseData(const BString &data)
    1080 {
    1081     // Can't simply call MakeEmpty() because the thread is spawned when the
    1082     // discID kept in fCDData is not the same as what's in the drive and
    1083     // MakeEmpty invalidates *everything* in the object. Considering that we
    1084     // reassign everything here, simply emptying the track list should be sufficient
    1085     for (int16 i = fCDData.CountTracks(); i >= 0; i--)
    1086         fCDData.RemoveTrack(i);
    1087 
    1088     vector<CDAudioTime> trackTimes;
    1089     GetTrackTimes(&fSCSIData,trackTimes);
    1090     int32 trackCount = GetTrackCount(&fSCSIData);
    1091 
    1092     if (data.CountChars() < 1) {
    1093         // This case occurs when the CDDB lookup fails. On these occasions, we
    1094         // need to generate the file ourselves. This is actually pretty easy.
    1095         fCDData.SetArtist("Artist");
    1096         fCDData.SetAlbum("Audio CD");
    1097         fCDData.SetGenre("Misc");
    1098 
    1099         for (int32 i = 0; i < trackCount; i++)  {
    1100             BString trackname("Track ");
    1101 
    1102             if (i < 9)
    1103                 trackname << "0";
    1104 
    1105             trackname << i + 1;
    1106 
    1107             CDAudioTime time = trackTimes[i + 1] - trackTimes[i];
    1108             fCDData.AddTrack(trackname.String(), time);
    1109         }
    1110     }
    1111 
    1112     // TODO: This function is dog slow, but it works. Optimize.
    1113 
    1114     // Ideally, the search should be done sequentially using GetLineFromString()
    1115     // and strchr(). Order: genre(category), frame offsets, disc length,
    1116     // artist/album, track titles
    1117 
    1118     int32 pos;
    1119 
    1120     pos = data.FindFirst("DYEAR=");
    1121     if (pos > 0) {
    1122         BString artist,album;
    1123         artist = album = GetLineFromString(data.String() + sizeof("DYEAR")
    1124             + pos);
    1125 
    1126         // TODO: finish, once I find an entry which actually has a year in it
    1127         BAlert *alert = new BAlert("SimplyVorbis", "DYEAR entry found\n", "OK");
    1128         alert->SetFlags(alert->Flags() | B_CLOSE_ON_ESCAPE);
    1129         alert->Go();
    1130        
    1131     }
    1132 
    1133     pos = data.FindFirst("DTITLE=");
    1134     if (pos > 0) {
    1135         BString artist,album;
    1136         artist = album = GetLineFromString(data.String() + sizeof("DTITLE")
    1137             + pos);
    1138 
    1139         pos = artist.FindFirst(" / ");
    1140         if (pos > 0)
    1141             artist.Truncate(pos);
    1142         fCDData.SetArtist(artist.String());
    1143 
    1144         album = album.String() + pos + sizeof(" / ") - 1;
    1145         fCDData.SetAlbum(album.String());
    1146     }
    1147 
    1148     BString category = GetLineFromString(data.String() + 4);
    1149     pos = category.FindFirst(" ");
    1150     if (pos > 0)
    1151         category.Truncate(pos);
    1152     fCDData.SetGenre(category.String());
    1153 
    1154     pos = data.FindFirst("TTITLE0=");
    1155     if (pos > 0) {
    1156         int32 trackCount = 0;
    1157         BString searchString = "TTITLE0=";
    1158 
    1159         while (pos > 0) {
    1160             BString trackName = data.String() + pos + searchString.Length();
    1161             trackName.Truncate(trackName.FindFirst("\n"));
    1162 
    1163             CDAudioTime tracktime = trackTimes[trackCount + 1]
    1164                 - trackTimes[trackCount];
    1165             fCDData.AddTrack(trackName.String(),tracktime);
    1166 
    1167             trackCount++;
    1168             searchString = "TTITLE";
    1169             searchString << trackCount << "=";
    1170             pos = data.FindFirst(searchString.String(),pos);
    1171         }
    1172     }
    1173 }
    1174 
    1175 
    1176 void CDDBQuery::SetData(const CDDBData &data)
    1177 {
    1178     fCDData = data;
    1179 }
  • deleted file src/apps/cdplayer/CDDBSupport.h

    diff --git a/src/apps/cdplayer/CDDBSupport.h b/src/apps/cdplayer/CDDBSupport.h
    deleted file mode 100644
    index df3c724..0000000
    + -  
    1 #ifndef CDDBSUPPORT_H
    2 #define CDDBSUPPORT_H
    3 
    4 #include "CDAudioDevice.h"
    5 
    6 #include <Entry.h>
    7 #include <List.h>
    8 #include <NetEndpoint.h>
    9 #include <String.h>
    10 
    11 #include <scsi.h>
    12 #include <vector>
    13 
    14 using std::vector;
    15 
    16 
    17 class CDDBData {
    18     public:
    19         CDDBData(int32 discid = -1);
    20         CDDBData(const CDDBData &from);
    21         ~CDDBData();
    22         CDDBData& operator=(const CDDBData &from);
    23 
    24         status_t Load(const entry_ref &ref);
    25         status_t Save(const char *filename);
    26 
    27         status_t Load();
    28         status_t Save();
    29 
    30         void MakeEmpty();
    31 
    32         void SetDiscID(const int32 &id)
    33         {
    34             fDiscID = id;
    35         }
    36 
    37         int32       DiscID() const
    38         {
    39             return fDiscID;
    40         }
    41 
    42         uint16  CountTracks() const;
    43         const char* TrackAt(const int16 &index) const;
    44         bool RenameTrack(const int32 &index, const char *newname);
    45         void AddTrack(const char *track, const CDAudioTime &time,
    46                 const int16 &index=-1);
    47         void RemoveTrack(const int16 &index);
    48 
    49         CDAudioTime* TrackTimeAt(const int16 &index);
    50 
    51         void SetDiscTime(const CDAudioTime time)
    52         {
    53             fDiscTime = time;
    54         }
    55 
    56         CDAudioTime* DiscTime()
    57         {
    58             return &fDiscTime;
    59         }
    60 
    61         void SetGenre(const char *genre)
    62         {
    63             fGenre=genre;
    64         }
    65 
    66         const char* Genre()
    67         {
    68             return fGenre.String();
    69         }
    70 
    71         void SetArtist(const char *artist)
    72         {
    73             fArtist = artist;
    74         }
    75 
    76         const char* Artist() const
    77         {
    78             return fArtist.String();
    79         }
    80 
    81         void SetAlbum(const char *album)
    82         {
    83             fAlbum = album;
    84         }
    85 
    86         const char* Album() const
    87         {
    88             return fAlbum.String();
    89         }
    90 
    91         void SetYear(const int16 &year)
    92         {
    93             fYear = year;
    94         }
    95 
    96         int16 Year() const
    97         {
    98             return fYear;
    99         }
    100 
    101     private:
    102         void        _EmptyLists();
    103 
    104         int32       fDiscID;
    105 
    106         BString     fArtist;
    107         BString     fAlbum;
    108         BString     fGenre;
    109 
    110         BList       fTrackList;
    111         BList       fTimeList;
    112 
    113         CDAudioTime fDiscTime;
    114         int32       fYear;
    115 };
    116 
    117 
    118 // based on Jukebox by Chip Paul
    119 
    120 
    121 class CDDBQuery {
    122     public:
    123         CDDBQuery(const char *server, int32 port = 888);
    124         ~CDDBQuery();
    125         void SetToSite(const char *server, int32 port);
    126         status_t GetSites(bool (*)(const char *site, int port,
    127             const char *latitude, const char *longitude,
    128             const char *description, void *state), void *);
    129 
    130         void SetToCD(const char *devicepath);
    131 
    132         const char* GetArtist()
    133         {
    134             return fCDData.Artist();
    135         }
    136 
    137         const char* GetAlbum()
    138         {
    139             return fCDData.Album();
    140         }
    141 
    142         const char* GetGenre()
    143         {
    144             return fCDData.Genre();
    145         }
    146 
    147         bool GetData(CDDBData *data, bigtime_t timeout);
    148         void SetData(const CDDBData &data);
    149 
    150         bool Ready() const
    151         {
    152             return fState == kDone;
    153         }
    154 
    155         int32 CurrentDiscID() const
    156         {
    157             return fCDData.DiscID();
    158         }
    159 
    160         static int32 GetDiscID(const scsi_toc *);
    161         static int32 GetTrackCount(const scsi_toc *);
    162         static CDAudioTime GetDiscTime(const scsi_toc *);
    163         static void GetTrackTimes(const scsi_toc *, vector<CDAudioTime> &times);
    164         static BString OffsetsToString(const scsi_toc *);
    165 
    166     private:
    167         status_t _Connect();
    168         void _Disconnect();
    169         bool _IsConnected() const;
    170 
    171         static int32 _QueryThread(void *);
    172 
    173         // cached retrieved data
    174         enum State {
    175             kInitial,
    176             kReading,
    177             kDone,
    178             kInterrupting,
    179             kError
    180         };
    181 
    182         void _SetDefaultInfo();
    183         status_t _OpenContentFile(const int32 &discID);
    184 
    185         status_t _ReadFromServer(BString &data);
    186         void _ParseData(const BString &data);
    187         void _WriteFile();
    188 
    189         void _ReadLine(BString &);
    190         status_t _IdentifySelf();
    191 
    192         const char* _GetToken(const char*, BString &);
    193 
    194         // state data
    195         BString         fServerName;
    196         BNetEndpoint    fSocket;
    197         int32           fPort;
    198         bool            fConnected;
    199 
    200         thread_id       fThread;
    201         State           fState;
    202         status_t        fResult;
    203    
    204         // disc information
    205         CDDBData        fCDData;
    206         BString         fFrameOffsetString;
    207         scsi_toc        fSCSIData;
    208 };
    209 
    210 BString GetLineFromString(const char *string);
    211 
    212 #endif  // CDDBSUPPORT_H
  • deleted file src/apps/cdplayer/CDPlayer.cpp

    diff --git a/src/apps/cdplayer/CDPlayer.cpp b/src/apps/cdplayer/CDPlayer.cpp
    deleted file mode 100644
    index b4304b3..0000000
    + -  
    1 /*
    2  * Copyright 2006-2009, Haiku, Inc. All Rights Reserved.
    3  * Distributed under the terms of the MIT license.
    4  *
    5  * Author:
    6  *      DarkWyrm, bpmagic@columbus.rr.com
    7  */
    8 
    9 
    10 #include "ButtonBitmaps.h"
    11 #include "CDPlayer.h"
    12 #include "DrawButton.h"
    13 #include "DoubleShotDrawButton.h"
    14 #include "TwoStateDrawButton.h"
    15 
    16 #include <Alert.h>
    17 #include <Application.h>
    18 #include <Bitmap.h>
    19 #include <BitmapStream.h>
    20 #include <Box.h>
    21 #include <Button.h>
    22 #include <Catalog.h>
    23 #include <Debug.h>
    24 #include <Deskbar.h>
    25 #include <Dragger.h>
    26 #include <Entry.h>
    27 #include <MenuItem.h>
    28 #include <PopUpMenu.h>
    29 #include <Roster.h>
    30 #include <TranslatorFormats.h>
    31 #include <TranslatorRoster.h>
    32 #include <TranslationUtils.h>
    33 #include <Window.h>
    34 
    35 #include <stdlib.h>
    36 #include <string.h>
    37 
    38 #undef B_TRANSLATION_CONTEXT
    39 #define B_TRANSLATION_CONTEXT "CDPlayer"
    40 
    41 enum {
    42     M_STOP = 'mstp',
    43     M_PLAY,
    44     M_NEXT_TRACK,
    45     M_PREV_TRACK,
    46     M_FFWD,
    47     M_REWIND,
    48     M_EJECT,
    49     M_SAVE,
    50     M_SHUFFLE,
    51     M_REPEAT,
    52     M_SET_VOLUME,
    53     M_SET_CD_TITLE
    54 };
    55 
    56 
    57 class CDPlayerWindow : public BWindow {
    58     public:
    59         CDPlayerWindow();
    60         bool QuitRequested();
    61 };
    62 
    63 
    64 inline void
    65 SetLabel(BStringView *label, const char *text)
    66 {
    67     if (strcmp(label->Text(), text) != 0)
    68         label->SetText(text);
    69 }
    70 
    71 
    72 //  #pragma mark -
    73 
    74 
    75 CDPlayer::CDPlayer(BRect frame, const char *name, uint32 resizeMask,
    76         uint32 flags)
    77     : BView(frame, name, resizeMask, flags | B_FRAME_EVENTS),
    78     fCDQuery("freedb.freedb.org")
    79 {
    80     SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
    81 
    82     fVolume = 255;
    83 
    84     BuildGUI();
    85 
    86     if (fCDDrive.CountDrives() < 1) {
    87         BAlert *alert = new BAlert("CDPlayer", B_TRANSLATE(
    88             "It appears that there are no CD"
    89             " drives on your computer or there is no system software to "
    90             "support one. Sorry."), B_TRANSLATE("OK"));
    91         alert->SetFlags(alert->Flags() | B_CLOSE_ON_ESCAPE);
    92         alert->Go();
    93     }
    94 
    95     fWindowState = fCDDrive.GetState();
    96     fVolumeSlider->SetValue(fCDDrive.GetVolume());
    97     if (fVolumeSlider->Value() <= 2) {
    98         fCDDrive.SetVolume(255);
    99         fVolumeSlider->SetValue(255);
    100     }
    101     _WatchCDState();
    102 }
    103 
    104 
    105 CDPlayer::~CDPlayer()
    106 {
    107     fCDDrive.Stop();
    108 }
    109 
    110 
    111 bool
    112 CDPlayer::InitCheck()
    113 {
    114     return fCDDrive.CountDrives() > 0;
    115 }
    116 
    117 
    118 void
    119 CDPlayer::BuildGUI()
    120 {
    121     fStopColor.red = 80;
    122     fStopColor.green = 164;
    123     fStopColor.blue = 80;
    124     fStopColor.alpha = 255;
    125 
    126     fPlayColor.red = 40;
    127     fPlayColor.green = 230;
    128     fPlayColor.blue = 40;
    129     fPlayColor.alpha = 255;
    130 
    131     BRect r(Bounds().InsetByCopy(10, 10));
    132     BBox *box = new BBox(r, "", B_FOLLOW_LEFT_RIGHT | B_FOLLOW_TOP);
    133     AddChild(box);
    134 
    135     r = box->Bounds().InsetByCopy(10, 10);
    136     r.bottom = 25;
    137 
    138     float labelWidth, labelHeight;
    139     fCDTitle = new BStringView(r, "CDTitle", B_TRANSLATE("CD drive is empty"),
    140         B_FOLLOW_LEFT_RIGHT);
    141     fCDTitle->GetPreferredSize(&labelWidth, &labelHeight);
    142     fCDTitle->ResizeTo(r.Width(), labelHeight);
    143     box->AddChild(fCDTitle);
    144 
    145     r.bottom = r.top + labelHeight;
    146     r.OffsetBy(0, r.Height() + 5);
    147 
    148     fCurrentTrack = new BStringView(r, "TrackNumber",
    149          "", B_FOLLOW_LEFT_RIGHT);
    150     box->AddChild(fCurrentTrack);
    151 
    152     r.OffsetBy(0, r.Height() + 5);
    153     r.right = r.left + (r.Width() / 2);
    154     fTrackTime = new BStringView(r, "TrackTime",
    155          B_TRANSLATE("Track: 88:88 / 88:88"), B_FOLLOW_LEFT_RIGHT);
    156     fTrackTime->ResizeToPreferred();
    157     fTrackTime->SetText(B_TRANSLATE("Track: --:-- / --:--"));
    158     box->AddChild(fTrackTime);
    159 
    160     r.OffsetTo(fTrackTime->Frame().right + 5, r.top);
    161     fDiscTime = new BStringView(r, "DiscTime",
    162         B_TRANSLATE("Disc: 88:88 / 88:88"), B_FOLLOW_RIGHT);
    163     fDiscTime->ResizeToPreferred();
    164     fDiscTime->SetText(B_TRANSLATE("Disc: --:-- / --:--"));
    165     box->AddChild(fDiscTime);
    166 
    167     float maxWidth = max_c(fDiscTime->Frame().right, fCDTitle->Frame().right);
    168 
    169     box->ResizeTo(maxWidth + 5, fDiscTime->Frame().bottom + 10);
    170 
    171     fStop = new DrawButton(BRect(0, 0, 1, 1), "Stop",
    172         BTranslationUtils::GetBitmap(B_PNG_FORMAT, "stop_up"),
    173         BTranslationUtils::GetBitmap(B_PNG_FORMAT, "stop_down"),
    174         new BMessage(M_STOP), B_FOLLOW_BOTTOM, B_WILL_DRAW);
    175     fStop->ResizeToPreferred();
    176     fStop->MoveTo(10, box->Frame().bottom + 15);
    177     fStop->SetDisabled(BTranslationUtils::GetBitmap(B_PNG_FORMAT,
    178         "stop_disabled"));
    179     AddChild(fStop);
    180     float stopTop = fStop->Frame().top;
    181 
    182 
    183     fPlay = new TwoStateDrawButton(BRect(0, 0, 1, 1), "Play",
    184         BTranslationUtils::GetBitmap(B_PNG_FORMAT, "play_up"),
    185         BTranslationUtils::GetBitmap(B_PNG_FORMAT, "play_down"),
    186         BTranslationUtils::GetBitmap(B_PNG_FORMAT, "play_up_on"),
    187         BTranslationUtils::GetBitmap(B_PNG_FORMAT, "play_down"),
    188         new BMessage(M_PLAY), B_FOLLOW_NONE, B_WILL_DRAW);
    189 
    190     fPlay->ResizeToPreferred();
    191     fPlay->MoveTo(fStop->Frame().right + 2, stopTop);
    192     AddChild(fPlay);
    193 
    194     fPrevTrack = new DrawButton(BRect(0, 0, 1, 1), "PrevTrack",
    195         BTranslationUtils::GetBitmap(B_PNG_FORMAT, "prev_up"),
    196         BTranslationUtils::GetBitmap(B_PNG_FORMAT, "prev_down"),
    197         new BMessage(M_PREV_TRACK), 0, B_WILL_DRAW);
    198     fPrevTrack->ResizeToPreferred();
    199     fPrevTrack->MoveTo(fPlay->Frame().right + 40, stopTop);
    200     AddChild(fPrevTrack);
    201 
    202     fNextTrack = new DrawButton(BRect(0, 0, 1, 1), "NextTrack",
    203         BTranslationUtils::GetBitmap(B_PNG_FORMAT, "next_up"),
    204         BTranslationUtils::GetBitmap(B_PNG_FORMAT, "next_down"),
    205         new BMessage(M_NEXT_TRACK), 0, B_WILL_DRAW);
    206     fNextTrack->ResizeToPreferred();
    207     fNextTrack->MoveTo(fPrevTrack->Frame().right + 1, stopTop);
    208     AddChild(fNextTrack);
    209 
    210     fRewind = new DoubleShotDrawButton(BRect(0, 0, 1, 1), "Rewind",
    211         BTranslationUtils::GetBitmap(B_PNG_FORMAT, "rew_up"),
    212         BTranslationUtils::GetBitmap(B_PNG_FORMAT, "rew_down"),
    213         new BMessage(M_REWIND), 0, B_WILL_DRAW);
    214     fRewind->ResizeToPreferred();
    215     fRewind->MoveTo(fNextTrack->Frame().right + 40, stopTop);
    216     AddChild(fRewind);
    217 
    218     fFastFwd = new DoubleShotDrawButton(BRect(0, 0, 1, 1), "FastFwd",
    219         BTranslationUtils::GetBitmap(B_PNG_FORMAT, "ffwd_up"),
    220         BTranslationUtils::GetBitmap(B_PNG_FORMAT, "ffwd_down"),
    221         new BMessage(M_FFWD), 0, B_WILL_DRAW);
    222     fFastFwd->ResizeToPreferred();
    223     fFastFwd->MoveTo(fRewind->Frame().right + 1, stopTop);
    224     AddChild(fFastFwd);
    225 
    226     r.left = 10;
    227     r.right = fPlay->Frame().right;
    228     r.top = fStop->Frame().bottom + 14;
    229     r.bottom = r.top + 14;
    230     fVolumeSlider = new VolumeSlider(r, "VolumeSlider",
    231         0, 255, new BMessage(M_SET_VOLUME), this);
    232     AddChild(fVolumeSlider);
    233 
    234     fRepeat = new TwoStateDrawButton(BRect(0, 0, 1, 1), "Repeat",
    235         BTranslationUtils::GetBitmap(B_PNG_FORMAT, "repeat_up_off"),
    236         BTranslationUtils::GetBitmap(B_PNG_FORMAT, "repeat_down"),
    237         BTranslationUtils::GetBitmap(B_PNG_FORMAT, "repeat_up_on"),
    238         BTranslationUtils::GetBitmap(B_PNG_FORMAT, "repeat_down"),
    239         new BMessage(M_REPEAT), B_FOLLOW_NONE, B_WILL_DRAW);
    240     fRepeat->ResizeToPreferred();
    241     fRepeat->MoveTo(fPrevTrack->Frame().left, fVolumeSlider->Frame().top -
    242         ((fRepeat->Frame().Height() - fVolumeSlider->Frame().Height()) / 2));
    243     AddChild(fRepeat);
    244 
    245     fShuffle = new TwoStateDrawButton(BRect(0, 0, 1, 1), "Shuffle",
    246         BTranslationUtils::GetBitmap(B_PNG_FORMAT, "shuffle_up_off"),
    247         BTranslationUtils::GetBitmap(B_PNG_FORMAT, "shuffle_down"),
    248         BTranslationUtils::GetBitmap(B_PNG_FORMAT, "shuffle_up_on"),
    249         BTranslationUtils::GetBitmap(B_PNG_FORMAT, "shuffle_down"),
    250         new BMessage(M_SHUFFLE), B_FOLLOW_NONE, B_WILL_DRAW);
    251     fShuffle->ResizeToPreferred();
    252     fShuffle->MoveTo(fRepeat->Frame().right + 2, fRepeat->Frame().top);
    253     AddChild(fShuffle);
    254 
    255     fEject = new DrawButton(BRect(0, 0, 1, 1), "Eject",
    256         BTranslationUtils::GetBitmap(B_PNG_FORMAT, "eject_up"),
    257         BTranslationUtils::GetBitmap(B_PNG_FORMAT, "eject_down"),
    258         new BMessage(M_EJECT), 0, B_WILL_DRAW);
    259     fEject->ResizeToPreferred();
    260     fEject->MoveTo(fFastFwd->Frame().left, fShuffle->Frame().top);
    261     AddChild(fEject);
    262 
    263     ResizeTo(box->Frame().right + 10, fVolumeSlider->Frame().bottom + 10); 
    264 }
    265 
    266 
    267 void
    268 CDPlayer::MessageReceived(BMessage *msg)
    269 {
    270     switch (msg->what) {
    271         case M_SET_VOLUME:
    272             fCDDrive.SetVolume(fVolumeSlider->Value());
    273             break;
    274 
    275         case M_STOP:
    276             if (fWindowState == kPaused) {
    277                 fPlay->SetBitmaps(0, BTranslationUtils::GetBitmap(B_PNG_FORMAT,
    278                     "play_up"),
    279                     BTranslationUtils::GetBitmap(B_PNG_FORMAT, "play_down"));
    280                 fPlay->SetState(1);
    281             }
    282             fWindowState = kStopped;
    283             fCDDrive.Stop();
    284             break;
    285 
    286         case M_PLAY:
    287             // If we are currently playing, then we will be showing
    288             // the pause images and will want to switch back to the play images
    289             if (fWindowState == kPlaying) {
    290                 fWindowState = kPaused;
    291                 fCDDrive.Pause();
    292                 fPlay->SetBitmaps(0, BTranslationUtils::GetBitmap(B_PNG_FORMAT,
    293                     "paused_up"),
    294                     BTranslationUtils::GetBitmap(B_PNG_FORMAT, "play_down"));
    295             } else if (fWindowState == kPaused) {
    296                 fWindowState = kPlaying;
    297                 fCDDrive.Resume();
    298                 fPlay->SetBitmaps(0, BTranslationUtils::GetBitmap(B_PNG_FORMAT,
    299                     "play_up"),
    300                     BTranslationUtils::GetBitmap(B_PNG_FORMAT, "play_down"));
    301             } else {
    302                 fWindowState = kPlaying;
    303                 fCDDrive.Play(fPlayList.GetCurrentTrack());
    304             }
    305             break;
    306 
    307         case M_EJECT:
    308             fCDDrive.Eject();
    309             break;
    310 
    311         case M_NEXT_TRACK:
    312         {
    313             int16 next = fPlayList.GetNextTrack();
    314             if (next <= 0) {
    315                 // force a "wrap around" when possible. This makes it
    316                 // possible for the user to be able to, for example, jump
    317                 // back to the first track from the last one with 1 button push
    318                 next = fPlayList.GetFirstTrack();
    319             }
    320 
    321             if (next > 0) {
    322                 CDState state = fCDDrive.GetState();
    323                 if (state == kPlaying) {
    324                     while (!fCDDrive.Play(next)) {
    325                         next = fPlayList.GetNextTrack();
    326                         if (next < 1) {
    327                             fWindowState = kStopped;
    328                             fCDDrive.Stop();
    329                             fPlayList.Rewind();
    330                             break;
    331                         }
    332                     }
    333                 }
    334                 else if (state == kPaused) {
    335                     fCDDrive.Play(next);
    336                     fCDDrive.Pause();
    337                 }
    338                 else
    339                     fPlayList.SetCurrentTrack(next);
    340                
    341                 // Force an update for better responsiveness
    342                 _WatchCDState();
    343             }
    344             break;
    345         }
    346 
    347         case M_PREV_TRACK:
    348         {
    349             int16 prev = fPlayList.GetPreviousTrack();
    350             if (prev <= 0) {
    351                 // force a "wrap around" when possible. This makes it
    352                 // possible for the user to be able to, for example, jump
    353                 // back to the first track from the last one with 1 button push
    354                 prev = fPlayList.GetLastTrack();
    355             }
    356 
    357             if (prev > 0) {
    358                 CDState state = fCDDrive.GetState();
    359                 if (state == kPlaying) {
    360                     while (!fCDDrive.Play(prev)) {
    361                         prev = fPlayList.GetPreviousTrack();
    362                         if (prev < 1) {
    363                             fWindowState = kStopped;
    364                             fCDDrive.Stop();
    365                             fPlayList.Rewind();
    366                             break;
    367                         }
    368                     }
    369                 } else if (state == kPaused) {
    370                     fCDDrive.Play(prev);
    371                     fCDDrive.Pause();
    372                 } else
    373                     fPlayList.SetCurrentTrack(prev);
    374                
    375                 // Force an update for better responsiveness
    376                 _WatchCDState();
    377             }
    378             break;
    379         }
    380 
    381         case M_FFWD:
    382             if (fFastFwd->Value() == B_CONTROL_ON)
    383                 fCDDrive.StartFastFwd();
    384             else
    385                 fCDDrive.StopFastFwd();
    386             break;
    387 
    388         case M_REWIND:
    389             if (fRewind->Value() == B_CONTROL_ON)
    390                 fCDDrive.StartRewind();
    391             else
    392                 fCDDrive.StopRewind();
    393             break;
    394 
    395         case M_SHUFFLE:
    396             if (fPlayList.IsShuffled()) {
    397                 int16 track = fPlayList.GetCurrentTrack();
    398                 fPlayList.SetShuffle(false);
    399                 fPlayList.SetStartingTrack(track);
    400                 fPlayList.SetTrackCount(fCDDrive.CountTracks());
    401                 fShuffle->SetState(0);
    402             } else {
    403                 fPlayList.SetTrackCount(fCDDrive.CountTracks());
    404                 fPlayList.SetShuffle(true);
    405                     fShuffle->SetState(1);
    406             }
    407             break;
    408 
    409         case M_REPEAT:
    410             if (fPlayList.IsLoop()) {
    411                 fPlayList.SetLoop(false);
    412                 fRepeat->SetState(0);
    413             } else {
    414                 fPlayList.SetLoop(true);
    415                 fRepeat->SetState(1);
    416             }
    417             break;
    418 
    419         default:
    420             BView::MessageReceived(msg);
    421             break;     
    422 
    423     }
    424 }
    425 
    426 
    427 void
    428 CDPlayer::AttachedToWindow()
    429 {
    430     fStop->SetTarget(this);
    431     fPlay->SetTarget(this);
    432     fNextTrack->SetTarget(this);
    433     fPrevTrack->SetTarget(this);
    434     fFastFwd->SetTarget(this);
    435     fRewind->SetTarget(this);
    436     fEject->SetTarget(this);
    437     fShuffle->SetTarget(this);
    438     fRepeat->SetTarget(this);
    439 }
    440 
    441 
    442 void
    443 CDPlayer::Pulse()
    444 {
    445     _WatchCDState();
    446 }
    447 
    448 
    449 void
    450 CDPlayer::_WatchCDState()
    451 {
    452     // One watcher function to rule them all
    453    
    454     // first, watch the one setting independent of having a CD: volume
    455     uint8 driveVolume = fCDDrive.GetVolume();
    456     if (fVolume == driveVolume) {
    457         fVolume = driveVolume;
    458         fVolumeSlider->SetValue(fVolume);
    459     }
    460 
    461     // Second, establish whether or not we have a CD in the drive
    462     CDState playState = fCDDrive.GetState();
    463     bool internalTrackChange = false;
    464 
    465     if (playState == kNoCD) {
    466         // Yes, we have no bananas!
    467 
    468         // Do something only if there is a change in the app's play state
    469         if (fWindowState != kNoCD) {
    470             // We have just discovered that we have no bananas
    471             fWindowState = kNoCD;
    472 
    473             // Because we are changing play states, we will need to update
    474             // the GUI
    475             fCDData.SetDiscID(-1);
    476             SetLabel(fCDTitle, B_TRANSLATE("CD drive is empty"));
    477 
    478             SetLabel(fCurrentTrack, "");
    479             SetLabel(fTrackTime, B_TRANSLATE("Track: --:-- / --:--"));
    480             SetLabel(fDiscTime, B_TRANSLATE("Disc: --:-- / --:--"));
    481             fPlayList.SetTrackCount(0);
    482             fPlayList.SetStartingTrack(1);
    483             fPlayList.SetCurrentTrack(1);
    484 
    485             if (fPlay->GetState() == 1)
    486                 fPlay->SetState(0);
    487         }
    488 
    489         return;
    490     }
    491 
    492     // Now otherwise handle the play state
    493     if (playState == kStopped) {
    494         if (fWindowState == kPlaying) {
    495             internalTrackChange = true;
    496 
    497             // This means that the drive finished playing the song, so get
    498             // the next one from the list and play it
    499             int16 next = fPlayList.GetNextTrack();
    500             if (next > 0)
    501                 fCDDrive.Play(next);
    502         }
    503 
    504         if (fPlay->GetState() == 1)
    505             fPlay->SetState(0);
    506     } else if (playState == kPlaying) {
    507         if (fPlay->GetState() == 0)
    508             fPlay->SetState(1);
    509     } else if (playState == kPaused)
    510         fPlay->SetState(0);
    511 
    512     // If we got this far, then there must be a CD in the drive. The next order
    513     // on the agenda is to find out which CD it is
    514     int32 discId = fCDDrive.GetDiscID();
    515     bool updateTrackGui = false;
    516 
    517     if (discId != fCDData.DiscID()) {
    518         updateTrackGui = true;
    519 
    520         // Apparently the disc has changed since we last looked.
    521         if (fCDQuery.CurrentDiscID() != discId)
    522             fCDQuery.SetToCD(fCDDrive.GetDrivePath());
    523 
    524         if (fCDQuery.Ready()) {
    525             // Note that we only update the CD title for now. We still need a
    526             // track number in order to update the display for the selected track
    527             if (fCDQuery.GetData(&fCDData, 1000000)) {
    528                 BString display(fCDData.Artist());
    529                 display << " - " << fCDData.Album();
    530                 SetLabel(fCDTitle, display.String());
    531             } else
    532                 SetLabel(fCDTitle, B_TRANSLATE("Audio CD"));
    533         }
    534     }
    535 
    536     // Now that we know which CD it is, update the track info
    537     int16 driveCount = fCDDrive.CountTracks();
    538     int16 driveTrack = fCDDrive.GetTrack();
    539 
    540     int16 playlistTrack = fPlayList.GetCurrentTrack();
    541     int16 playlistCount = fPlayList.TrackCount();
    542 
    543     if (playState == kPlaying) {
    544         if (playlistTrack != driveTrack) {
    545             playlistTrack = driveTrack;
    546 
    547             if (!internalTrackChange) {
    548                 // The main thing is that we need to make sure that the
    549                 // playlist and the drive's track stay in sync. The CD's
    550                 // track may have been changed by an outside source, so if
    551                 // the drive is playing, check for playlist sync.
    552                 fPlayList.SetTrackCount(driveCount);
    553                 fPlayList.SetCurrentTrack(driveTrack);
    554             }
    555         }
    556         updateTrackGui = true;
    557     } else {
    558         if (playlistCount != driveCount) {
    559             // This happens only when CDs are changed
    560             if (driveCount < 0) {
    561                 // There is no CD in the drive. The playlist needs to have its
    562                 // track count set to 0 and it also needs to be rewound.
    563                 fPlayList.SetStartingTrack(1);
    564                 fPlayList.SetTrackCount(0);
    565                 playlistTrack = 1;
    566                 playlistCount = 0;
    567             } else {
    568                 // Two possible cases here: playlist is empty or playlist has a
    569                 // different number of tracks. In either case, the playlist
    570                 // needs to be reinitialized to the current track data
    571                 fPlayList.SetStartingTrack(1);
    572                 fPlayList.SetTrackCount(driveCount);
    573                 playlistTrack = fPlayList.GetCurrentTrack();
    574                 playlistCount = driveCount;
    575             }
    576         } else {
    577             // update only with a track change
    578             if (playlistTrack != driveTrack)
    579                 updateTrackGui = true;
    580         }
    581     }
    582 
    583     if (updateTrackGui) {
    584         BString currentTrackName(B_TRANSLATE("Track %whichTrack%: %trackAt%"));
    585 
    586         if (playlistTrack >= 0) {
    587             int16 whichTrack = playlistTrack;
    588 
    589             if (whichTrack == 0)
    590                 whichTrack++;
    591 
    592             BString stringTrack;
    593             stringTrack << whichTrack;
    594 
    595             BString stringTrackAt;
    596             stringTrack << fCDData.TrackAt(whichTrack - 1);
    597 
    598             currentTrackName.ReplaceFirst("%whichTrack%", stringTrack);
    599             currentTrackName.ReplaceFirst("%trackAt%", stringTrackAt);
    600 
    601             SetLabel(fCurrentTrack, currentTrackName.String());
    602 
    603         } else
    604             SetLabel(fCurrentTrack, "");
    605     }
    606 
    607     // Now update the time info
    608     CDAudioTime trackTime;
    609     CDAudioTime discTime;
    610     CDAudioTime trackTotal;
    611     CDAudioTime discTotal;
    612     char timeString[1024];
    613 
    614     if (fCDDrive.GetTime(trackTime, discTime)) {
    615         fCDDrive.GetTimeForDisc(discTotal);
    616         sprintf(timeString, B_TRANSLATE("Disc: %ld:%.2ld / %ld:%.2ld"),
    617             discTime.GetMinutes(), discTime.GetSeconds(),
    618             discTotal.GetMinutes(), discTotal.GetSeconds());
    619         SetLabel(fDiscTime, timeString);
    620 
    621         fCDDrive.GetTimeForTrack(playlistTrack, trackTotal);
    622         sprintf(timeString, B_TRANSLATE("Track: %ld:%.2ld / %ld:%.2ld"),
    623             trackTime.GetMinutes(), trackTime.GetSeconds(),
    624             trackTotal.GetMinutes(), trackTotal.GetSeconds());
    625         SetLabel(fTrackTime, timeString);
    626     } else {
    627         SetLabel(fTrackTime, B_TRANSLATE("Track: --:-- / --:--"));
    628         SetLabel(fDiscTime, B_TRANSLATE("Disc: --:-- / --:--"));
    629     }
    630 }
    631 
    632 
    633 //  #pragma mark -
    634 
    635 
    636 CDPlayerWindow::CDPlayerWindow()
    637     :
    638     BWindow(BRect (100, 100, 405, 280), B_TRANSLATE_SYSTEM_NAME("CDPlayer"),
    639         B_TITLED_WINDOW, B_NOT_RESIZABLE | B_NOT_ZOOMABLE
    640         | B_ASYNCHRONOUS_CONTROLS)
    641 {
    642 }
    643 
    644 
    645 bool
    646 CDPlayerWindow::QuitRequested()
    647 {
    648     be_app->PostMessage(B_QUIT_REQUESTED);
    649     return true;
    650 }
    651 
    652 
    653 //  #pragma mark -
    654 
    655 
    656 CDPlayerApplication::CDPlayerApplication()
    657     : BApplication("application/x-vnd.Haiku-CDPlayer")
    658 {
    659     BWindow *window = new CDPlayerWindow();
    660     CDPlayer *view = new CDPlayer(window->Bounds(), B_TRANSLATE("CD"));
    661     if (view->InitCheck()) {
    662         window->ResizeTo(view->Bounds().Width(), view->Bounds().Height());
    663         window->AddChild(view);
    664         window->Show();
    665     } else
    666         PostMessage(B_QUIT_REQUESTED);
    667 }
    668 
    669 
    670 int
    671 main(int, char **argv)
    672 {
    673     CDPlayerApplication app;
    674     app.Run();
    675 
    676     return 0;
    677 }
    678 
  • deleted file src/apps/cdplayer/CDPlayer.h

    diff --git a/src/apps/cdplayer/CDPlayer.h b/src/apps/cdplayer/CDPlayer.h
    deleted file mode 100644
    index b79167a..0000000
    + -  
    1 /*
    2     Copyright 1999, Be Incorporated.   All Rights Reserved.
    3     This file may be used under the terms of the Be Sample Code License.
    4 */
    5 // This defines the replicant button
    6 
    7 #ifndef CDPLAYER_H
    8 #define CDPLAYER_H
    9 
    10 #include "CDAudioDevice.h"
    11 #include "CDDBSupport.h"
    12 #include "PlayList.h"
    13 #include "VolumeSlider.h"
    14 
    15 #include <Application.h>
    16 #include <Box.h>
    17 #include <Button.h>
    18 #include <StringView.h>
    19 #include <TextControl.h>
    20 #include <View.h>
    21 #include <Window.h>
    22 
    23 
    24 class DrawButton;
    25 class DoubleShotDrawButton;
    26 class TwoStateDrawButton;
    27 
    28 
    29 class CDPlayer : public BView {
    30     public:
    31         CDPlayer(BRect frame, const char *name, uint32 resizeMask = B_FOLLOW_ALL,
    32             uint32 flags = B_WILL_DRAW | B_NAVIGABLE | B_PULSE_NEEDED);
    33         virtual ~CDPlayer();
    34 
    35         void BuildGUI();
    36         bool InitCheck();
    37        
    38         virtual void AttachedToWindow();   
    39         virtual void Pulse();
    40         virtual void MessageReceived(BMessage *);
    41 
    42     private:
    43         void                _WatchCDState();
    44 
    45         DrawButton          *fStop,
    46                             *fNextTrack,
    47                             *fPrevTrack,
    48                             *fEject;
    49 
    50         DoubleShotDrawButton
    51                             *fFastFwd,
    52                             *fRewind;
    53 
    54         TwoStateDrawButton  *fShuffle,
    55                             *fRepeat,
    56                             *fPlay;
    57 
    58         VolumeSlider        *fVolumeSlider;
    59 
    60         BStringView         *fCDTitle,
    61                             *fCurrentTrack,
    62                             *fTrackTime,
    63                             *fDiscTime;
    64 
    65         BBox                *fCDBox,
    66                             *fTrackBox,
    67                             *fTimeBox;
    68 
    69         CDState             fCDState;
    70 
    71         rgb_color           fStopColor;
    72         rgb_color           fPlayColor;
    73 
    74         CDAudioDevice       fCDDrive;
    75         PlayList            fPlayList;
    76         CDState             fWindowState;
    77         CDDBQuery           fCDQuery;
    78         CDDBData            fCDData;
    79         uint8               fVolume;
    80 };
    81 
    82 
    83 class CDPlayerApplication : public BApplication {
    84     public:
    85         CDPlayerApplication();
    86 };
    87 
    88 
    89 #endif  // CDPLAYER_H
  • deleted file src/apps/cdplayer/CDPlayer.rdef

    diff --git a/src/apps/cdplayer/CDPlayer.rdef b/src/apps/cdplayer/CDPlayer.rdef
    deleted file mode 100644
    index d0985ab..0000000
    + -  
    1 resource app_signature "application/x-vnd.Haiku-CDPlayer";
    2 
    3 resource app_name_catalog_entry "x-vnd.Haiku-CDPlayer:System name:CDPlayer";
    4 
    5 resource app_flags B_SINGLE_LAUNCH;
    6 
    7 resource app_version {
    8     major  = 1,
    9     middle = 0,
    10     minor  = 0,
    11 
    12     /* 0 = development  1 = alpha           2 = beta
    13        3 = gamma        4 = golden master   5 = final */
    14     variety = 2,
    15 
    16     internal = 0,
    17 
    18     short_info = "CDPlayer",
    19     long_info  = "CDPlayer ©2005-2009 Haiku, Inc."
    20 };
    21 
    22 resource vector_icon {
    23     $"6E6369660F050004006A02000602AD28AB3B838DBC3FFCAE05CB4B2E7848A224"
    24     $"00FF5E06FFFF9806020006023C60000000000000004000004AD00000000000FF"
    25     $"7200FFFF980002000602B78719BB8D143DE1CFB9DB454A835A491AE900DD6311"
    26     $"FEFF9F59020006023A98E5BA20E63A20E63A98E54A99374A20B800FFD600FFD7"
    27     $"4F0502000604B8123C00000000000038123C4A9CEB4A564700CBCBFF54CBFFCB"
    28     $"AACBFF33FFFFCB6603FFA200020006023B77D73A60C0BAD3D43C0FD7487A314A"
    29     $"859D00FFDD59FFFFCB00020006023C8000000000000000400000484000000000"
    30     $"00FEFFACFFFFEA3E03005C00038EB68E02030605B63D2FBC2D3D3C1BD3B62B46"
    31     $"4A1AE649E3B100F1F1F136D9DDF48A9996B9B4B8BEDBFFF4F4F403C9A5880200"
    32     $"06023C92C0388F5FB854503C576348D8DF48895B004137A9FFB9B9B9110A065C"
    33     $"42415E485E574E604E5E430A0D552A372236233E35294426422246224E3E5C42"
    34     $"5C5A445A405B3F0A043E355A40465328450A0446585A445A404653020442364A"
    35     $"363A363240323A3246424A3A4A4A4A52405246523A0204423D443D403D3F3F3F"
    36     $"3E3F40424140414441453F4540453E0204483F483D4841424346433E433C3F3C"
    37     $"413C3D423B3E3B463B0A043E543E5C425C42540A0446504254425C46580A0422"
    38     $"483E543E5C224E0A062642224622483E54425446500A06264246504653475247"
    39     $"4F26400A04552A542B5A405B3F0A043623542B552A37220A043E355A40542B36"
    40     $"230A06304931C323B64FC19EB524C2C92648B64FC2040A043049B649C20A2648"
    41     $"2E4B120A010100000A0001011001178400040A050102000A030103000A04010C"
    42     $"000A08010D000A02010E000A000204051001178400040A0C020604000A0D0205"
    43     $"06000A0E01061001178200040A070107000A030108000A080109000A09010A00"
    44     $"0A00010B000A0A010F0815FF0A0B011000"
    45 };
    46 
    47 resource(1, "stop_down") #'PNG ' array {
    48     $"89504E470D0A1A0A0000000D494844520000001C00000015080300000062DC7E"
    49     $"6E0000000467414D410000AFC837058AE90000001974455874536F6674776172"
    50     $"650041646F626520496D616765526561647971C9653C00000021504C54451818"
    51     $"18BFBFBFCECBCE101010848284000000E7E7E76361637B7D7B2124216365639D"
    52     $"66D1620000008E4944415478DA6260C203000288818985031760010820A02403"
    53     $"330EC0021040404966561C80052080C0920CD8010B4000E19504082024494618"
    54     $"804B0204105E498000C22B0910407825010208AF244000E195040820BC920001"
    55     $"8457122080F04A020410DE10020820BC920001049264E0C40E5800020828C9C9"
    56     $"8503B000041050921D27000820062636DC0020C0004B4D065C99EE4871000000"
    57     $"0049454E44AE426082"
    58 };
    59 
    60 resource(2, "stop_up") #'PNG ' array {
    61     $"89504E470D0A1A0A0000000D494844520000001C00000015080300000062DC7E"
    62     $"6E0000000467414D410000AFC837058AE90000001974455874536F6674776172"
    63     $"650041646F626520496D616765526561647971C9653C0000001B504C54459C9A"
    64     $"9CDEDBDE636163EFEFEFCECBCE848284404040FFFFFFE7E7E724E86FE5000000"
    65     $"8C4944415478DA6260C10300028881851537000820A02407330EC00A10404049"
    66     $"66761C80152080C0921CD8012B4000E19504082024493618804B0204105E4980"
    67     $"00C22B0910407825010208AF244000E195040820BC9200018457122080F04A02"
    68     $"0410DE10020820BC9200010492E460C40E5801020828C9C88003B00204105092"
    69     $"092700082006160EDC0020C00066DB0D59EF1DF8F60000000049454E44AE4260"
    70     $"82"
    71 };
    72 
    73 resource(3, "shuffle_up_on") #'PNG ' array {
    74     $"89504E470D0A1A0A0000000D494844520000003A000000150803000000209F0D"
    75     $"F90000000467414D410000AFC837058AE90000001974455874536F6674776172"
    76     $"650041646F626520496D616765526561647971C9653C000000DE504C54456D6D"
    77     $"6DDCDCDCC6C6C6D1D1D15656566161614B4B4BAFAFAFA4A4A48E8E8E69BA59E9"
    78     $"E9E9E8E8E86CBB5CD8D8D886C87AE3E3E33F7035EBEBEB4F6A4BA7C7A1979797"
    79     $"577452D2D2D2579A4A91BD87C3C3C3727D7042753894CE89838383B2B2B2DEDE"
    80     $"DEECECEC85BF7885C77884BE788AA385EAEAEA9D9D9D9A9A9A559748F0F0F0AD"
    81     $"C1A97D8B7A62AE53CCD8CA597753A8A8A892B38BE4E7E3788A74EBECEBD9D9D9"
    82     $"529045B7B9B7BCBCBC8DA788C2CEC0EDEDED599E4B8C8C8CAAD8A1404040BABA"
    83     $"BADEDBDE9C9A9CEFEFEF636163848284CECBCE999999FFFFFFE7E7E7FF841062"
    84     $"0000019D4944415478DA6270231B000410839B2B99C0132080805A3D9DC9008E"
    85     $"2E9E000104D4EAEC413AF07472F1040820B0564F928123502B400051A0152080"
    86     $"30B5323A38307A3231200BB933B8833007278A5680008269E593175597520032"
    87     $"98D95859183C1DEC917432D9B3B383B03B038A568000826A15B795B634543537"
    88     $"05DAC002D40ED4CAE8C0ECE909B29FD9D3DDDE81118C815A99814250AD000104"
    89     $"D56AA06327CBAFACC227E0C96ECF099474B067616563F6B477F004BA95D59E81"
    90     $"0984815A39D840C210AD000104D5AA21C9CFC5C56BA60714656761E3006AE500"
    91     $"E9836805B91E84815A59381D58DCA15A010208AAD54289978B4B57C68A1B144E"
    92     $"9CF64C2095D8B4DAB332307040B50204102C9844346D2404C54CB881FEF464B4"
    93     $"77806B656243B5550E114C000104D5CAC3ADAD2F6C6CA40894B7676083843050"
    94     $"2B2B0B0BAA56763656569883010208662B8F9AB596B310382A1C9840910B0E5E"
    95     $"6030034318C4016166B08403CC568000A22035010410055A010208A4D5D39174"
    96     $"00D40A104040AD8E4E640057174F8000026A75210F78020410839B27B90020C0"
    97     $"0028E229A6998C9D9D0000000049454E44AE426082"
    98 };
    99 
    100 resource(4, "shuffle_up_off") #'PNG ' array {
    101     $"89504E470D0A1A0A0000000D494844520000003A000000150803000000209F0D"
    102     $"F90000000467414D410000AFC837058AE90000001974455874536F6674776172"
    103     $"650041646F626520496D616765526561647971C9653C000000D5504C54456D6D"
    104     $"6DDCDCDCC6C6C6D1D1D16161614B4B4B565656AFAFAFA4A4A48E8E8EC4C4C4EB"
    105     $"EBEBE9E9E9D5D5D5CACACAC5C5C5D0D0D09DA19C757874E5E7E4C6CFC5A2A2A2"
    106     $"DDDDDD8A9288939593ECECECF2F2F2B8B8B86B706AABB0AAEFF0EFBABFB97B7B"
    107     $"7BCBCBCBBBC2BA989898F5F5F59F9F9FF0F0F0A7B9A4838383686C67CFCFCF67"
    108     $"6767BFBFBF595C58A6B0A48A8A8A7A7A7A5D605DDFDFDF6B6B6B767676636363"
    109     $"BCC3BB555555656964A6A6A6F4F4F4ADBBAA404040BABABADEDBDE9C9A9CEFEF"
    110     $"EF636163848284CECBCE999999FFFFFFE7E7E7D832BDA00000019D4944415478"
    111     $"DA6270261B00041083B31399C00D2080805ADD1CC800768E6E000104D4EAE04A"
    112     $"3A70B37774030820B0563792811D502B400051A015208030B532DADA32BA3131"
    113     $"200BB930B8803007278A5680008269E5D33735E6E00532985959D818DC6C6D90"
    114     $"7432D9B0B383B00B038A568000826AD531D7159415975004DAC006D40ED4CA68"
    115     $"CBECE606B29FD9CDC5C696118C815A99814250AD000104D56A2023C62BA065CD"
    116     $"67E4C66EC30994B4B56163616576B3B17503BA95C586810984815A395841C210"
    117     $"AD000104D5AA2D2FC0C5C5AF2C0214656763E5006AE500E9836805B91E84815A"
    118     $"D9386DD95CA05A010208AAD5C58C9F8B4B5A41891B144E9C364C2095D8B4DAB0"
    119     $"30307040B50204102C98D4552D454D2CE4B881FE7463B4B1856B656245B55503"
    120     $"114C000104D5CAC3ADA7692824AC0694B76160858430502B0B1B1BAA56765616"
    121     $"169883010208662B8FA4948A9503382A6C9940910B0E5E6030034318C4016166"
    122     $"B0842DCC568000A22035010410055A010208A4D5CD8E7400D40A104040AD76F6"
    123     $"64002747378000026A75240FB801041083B31BB90020C0003F2F1CF1AA88B47B"
    124     $"0000000049454E44AE426082"
    125 };
    126 
    127 resource(5, "shuffle_down") #'PNG ' array {
    128     $"89504E470D0A1A0A0000000D494844520000003A000000150803000000209F0D"
    129     $"F90000000467414D410000AFC837058AE90000001974455874536F6674776172"
    130     $"650041646F626520496D616765526561647971C9653C000000E4504C54451818"
    131     $"18CECBCEE7E7E7848284636163101010636563212421000000454545BFBFBF66"
    132     $"66669292922323233939392E2E2EA9A9A99E9E9EB4B4B45050505B5B5B717171"
    133     $"9645A61616167937852727279344A31717177C7C7C1212126E42781414148274"
    134     $"857A388787758B212121A661B4AA68B7725877686868262626BD8AC7B095B448"
    135     $"4648523E564343431515158D828F6D4C746565659D51ACC08FCA332735A688AC"
    136     $"141314AD6FBAA88BAD7A4087755C7A5757573C3C3C6262626B31767B41871313"
    137     $"131B181C3D313F55275E7373732D2D2D7B7D7B4D4D4D0F0F0FA865B51C1C1C58"
    138     $"385E209137060000019D4944415478DA6260241B000410032333998009208080"
    139     $"5A1958C900EC2C4C000104D4CACA413A60606361020820B0560692013B502B40"
    140     $"0051A015208030B5F27272F232F0F1200B71F37083B088288A56800082699574"
    141     $"57B7B5510632F8850405781838B99074F271090B8330370F8A568000826A7575"
    142     $"D15733B0D2D600DA2000D40ED4CACBC9CFC000B29F9F819B8B93178C815AF981"
    143     $"4250AD000104D56AADE06C27A1682FE9C520CC250A94E4E4121014E267E0E264"
    144     $"00BA55908B870F84815A458440C210AD000104D56A2827212626656E02141516"
    145     $"1012016A1501E9836805B91E84815A05443905B8A15A010208AA55D7524A4CCC"
    146     $"48D3491C144EA25C7C2095D8B47209F2F08840B50204102C98BC55553C8D2DCC"
    147     $"C481FE64E0E5E2846BE51342B55506114C000104D52A2DAE63AAA5E4E80094E7"
    148     $"E21182843050ABA08000AA5661214141988301020866ABB49EAC07AB3C382A38"
    149     $"F940910B0E5E6030034318C401617EB00427CC568000A22035010410055A0102"
    150     $"08A495819D7400D40A104040ADEC6C64003716268000026A65210F3001041003"
    151     $"2313B90020C000992E1E6DC556B8640000000049454E44AE426082"
    152 };
    153 
    154 resource(6, "rew_down") #'PNG ' array {
    155     $"89504E470D0A1A0A0000000D4948445200000023000000150803000000FB24A7"
    156     $"DB0000000467414D410000AFC837058AE90000001974455874536F6674776172"
    157     $"650041646F626520496D616765526561647971C9653C00000024504C54451818"
    158     $"18BFBFBFCECBCE848284101010000000E7E7E76361632124216365637B7D7B1C"
    159     $"1C1CBC1DBBD0000000B24944415478DA6260220C00028881899920000820A01A"
    160     $"0616FC800B2080806A5858F1032E800002AB61C00BB80002881835000184AE86"
    161     $"911183C5051040A86A1819613208160317400021AB616484C920582035000184"
    162     $"50C3C8089341B0206A000208A686110B80A901082062CC010820B81A6EB82BB8"
    163     $"D1DD031040C4F80B208088091F800022269C010288183500010452C3C0811770"
    164     $"010410500D07277EC00510404035EC840040003130B1110400010600A1E40785"
    165     $"A9210D8B0000000049454E44AE426082"
    166 };
    167 
    168 resource(7, "rew_up") #'PNG ' array {
    169     $"89504E470D0A1A0A0000000D4948445200000023000000150803000000FB24A7"
    170     $"DB0000000467414D410000AFC837058AE90000001974455874536F6674776172"
    171     $"650041646F626520496D616765526561647971C9653C0000001E504C5445E3E3"
    172     $"E39C9A9CDEDBDE636163EFEFEFCECBCE848284404040FFFFFFE7E7E7E071FC71"
    173     $"000000B24944415478DA6260250C00028881958D20000820A01A4E16FC800D20"
    174     $"80806A5838F00336800002ABE1C40BD80002881835000184AE869D1D83C50610"
    175     $"40A86AD8D961320816271B400021AB616787C92058203500018450C3CE0E9341"
    176     $"B0206A000208A6861D0B80A901082062CC010820B81A06B82B18D0DD031040C4"
    177     $"F80B208088091F800022269C010288183500010452C3C98417B0010410500D13"
    178     $"237EC00610404035CC8400400031B072120400010600E9AA13AA1F2D6E440000"
    179     $"000049454E44AE426082"
    180 };
    181 
    182 resource(8, "prev_down") #'PNG ' array {
    183     $"89504E470D0A1A0A0000000D494844520000001F00000015080300000089EBC5"
    184     $"6D0000000467414D410000AFC837058AE90000001974455874536F6674776172"
    185     $"650041646F626520496D616765526561647971C9653C00000021504C54451818"
    186     $"18BFBFBF848284CECBCE101010000000E7E7E76361636365632124211C1C1C7E"
    187     $"A8A44E000000A34944415478DA6260C60F0002888199092F000820A03C030B6E"
    188     $"C004104040791656DC80092080C0F20C38011340001192070820247946464698"
    189     $"309CC5041040D8E419112A99000208539E9111591E2080D0E5191951E5010208"
    190     $"551E0160F2000144483F4000A1C973A1DB0F104084DC0F104084FC0F104084C2"
    191     $"0F208008C9030410489E81132760020820A03C27076EC00410404079767C0020"
    192     $"801898D9F002800003004041062DA94CAAB70000000049454E44AE426082"
    193 };
    194 
    195 resource(9, "prev_up") #'PNG ' array {
    196     $"89504E470D0A1A0A0000000D494844520000001F00000015080300000089EBC5"
    197     $"6D0000000467414D410000AFC837058AE90000001974455874536F6674776172"
    198     $"650041646F626520496D616765526561647971C9653C0000001E504C5445E3E3"
    199     $"E39C9A9CDEDBDE636163EFEFEFCECBCE848284404040FFFFFFE7E7E7E071FC71"
    200     $"000000A34944415478DA6260C50F00028881950D2F000820A03C270B6EC00610"
    201     $"404079160EDC800D2080C0F29C38011B40001192070820247976767698309CC5"
    202     $"061040D8E4D9112AD9000208539E9D1D591E2080D0E5D9D951E5010208551E01"
    203     $"60F2000144483F4000A1C933A0DB0F104084DC0F104084FC0F104084C20F2080"
    204     $"08C9030410489E93092760030820A03C13236EC00610404079667C0020801858"
    205     $"39F1028000030094AB11758434ABDD0000000049454E44AE426082"
    206 };
    207 
    208 resource(10, "play_down") #'PNG ' array {
    209     $"89504E470D0A1A0A0000000D494844520000002800000015080300000003C45C"
    210     $"2C0000000467414D410000AFC837058AE90000001974455874536F6674776172"
    211     $"650041646F626520496D616765526561647971C9653C00000024504C54451818"
    212     $"18BFBFBFE7E7E7636163848284636563212421CECBCE1010100000007B7D7B1C"
    213     $"1C1CE52CB398000000B14944415478DA62602712000410030B71800920801858"
    214     $"3888006CCC4C0001C4C0C2491830B03233010410030B0361C00654081040442B"
    215     $"040820B8424646241946108F112E0452081040480A91946251081040280A4132"
    216     $"DC38140204109A42A81C1685000184A1102C8B45214000116D22400061B81197"
    217     $"42800022DAD70001447438020410D131031040442B0408200616362200502140"
    218     $"0031B0B01201B89899000288819938C00410400C4C4402800003000BCF081A22"
    219     $"DA76AF0000000049454E44AE426082"
    220 };
    221 
    222 resource(11, "play_up") #'PNG ' array {
    223     $"89504E470D0A1A0A0000000D494844520000002800000015080300000003C45C"
    224     $"2C0000000467414D410000AFC837058AE90000001974455874536F6674776172"
    225     $"650041646F626520496D616765526561647971C9653C0000001E504C5445E3E3"
    226     $"E3EFEFEFCECBCEDEDBDE9C9A9C636163848284404040FFFFFFE7E7E7217A6570"
    227     $"000000B14944415478DA62602212000410031B718013208018D8188900CCAC9C"
    228     $"0001C4C0C6411870B2B072020410031B2761C00C54081040442B040820B84276"
    229     $"76241976108F1D2E0452081040480A91946251081040280A41320C3814020410"
    230     $"9A42A81C1685000184A1102C8B45214000116D22400061B8119742800022DAD7"
    231     $"0001447438020410D131031040442B04082006366622005021400031B0B11001"
    232     $"D85839010288819538C00910400C9C440280000300C6C8169FB4102432000000"
    233     $"0049454E44AE426082"
    234 };
    235 
    236 resource(12, "next_down") #'PNG ' array {
    237     $"89504E470D0A1A0A0000000D494844520000001D0000001508030000008D1E15"
    238     $"500000000467414D410000AFC837058AE90000001974455874536F6674776172"
    239     $"650041646F626520496D616765526561647971C9653C00000024504C54451818"
    240     $"18BFBFBFE7E7E7636163636563212421CECBCE8482841010100000001C1C1C7B"
    241     $"7D7B41373F2B000000A04944415478DA6260C307000288811D0F60020820060E"
    242     $"9C8095990920801838710106166626800062C0095881B20001845F162080606C"
    243     $"4646048B112E0B104048628C98B20001842C0B12E6429105082054599004B22C"
    244     $"4000A1CB323222CB0204107EBD0001846E2FAA2C4000E177334000E1F72F4000"
    245     $"E10F2B8000C22F0B10400CAC380150162080185870026E662680006260C60398"
    246     $"00028881091F00083000D82205D9820E455D0000000049454E44AE426082"
    247 };
    248 
    249 resource(13, "next_up") #'PNG ' array {
    250     $"89504E470D0A1A0A0000000D494844520000001D0000001508030000008D1E15"
    251     $"500000000467414D410000AFC837058AE90000001974455874536F6674776172"
    252     $"650041646F626520496D616765526561647971C9653C0000001E504C5445E3E3"
    253     $"E3EFEFEFCECBCE848284DEDBDE9C9A9C636163404040FFFFFFE7E7E7CD8E4595"
    254     $"000000A34944415478DA6260C20700028881190FE004082006469C80858D1320"
    255     $"80183870014E56364E800062E0C4055880B20001845F16208060B2ECEC9C7016"
    256     $"3B5C16208010B23079645980004296050933A0C8020410AA2C480259162080D0"
    257     $"65D9D99165010208BF5E800042B71755162080F0BB192080F0FB172080F08715"
    258     $"4000E19705082006169C00280B10400CAC3801331B27400031B0E1019C000184"
    259     $"DB5E1000083000F03F1072763DB7B80000000049454E44AE426082"
    260 };
    261 
    262 resource(14, "repeat_up_on") #'PNG ' array {
    263     $"89504E470D0A1A0A0000000D494844520000002C0000001508030000000A2FFC"
    264     $"560000000467414D410000AFC837058AE90000001974455874536F6674776172"
    265     $"650041646F626520496D616765526561647971C9653C000000B7504C544569BA"
    266     $"59E9E9E96CBB5C86C87AD8D8D8E8E8E885C778577452F0F0F09A9A9AEAEAEA7D"
    267     $"8B7AE3E3E3427538D2D2D2D9D9D9A7C7A18C8C8CADC1A962AE534F6A4B599E4B"
    268     $"EBECEBCCD8CAB7B9B7529045BCBCBCA8A8A8DEDEDEC2CEC0579A4A91BD87EDED"
    269     $"ED788A74597753559748C3C3C392B38BE4E7E3EBEBEB84BE7885BF7894CE8972"
    270     $"7D708DA7883F7035B2B2B29797979D9D9DAAD8A1ECECEC8AA385DEDBDE9C9A9C"
    271     $"EFEFEF636163848284CECBCE494949FFFFFFE7E7E72E5D330E0000010F494441"
    272     $"5478DA62B0240100041083A505D1C0062080808A6DCC880226E636000104546C"
    273     $"664D0CB03135B7010820B0621B2280095031400091A4182080B02AB6B2022204"
    274     $"802B0608209862163D7D031519985A2CAA418A010208AA984F505B47D558821F"
    275     $"AA166A3C5C2F5431400041154B731B6A31B369B0F020A9B24272154431400041"
    276     $"1573CA33333030498AA31889A1182080A08AA5349918188479651951145BA129"
    277     $"0608209807059445E574D9C518116E866B43B8192080A08A591985944414D58C"
    278     $"E0A1010F08E4D000082098C9AC5C0A1C66EA08FF23AB86873340009114830001"
    279     $"44926280000229B6312106001503041050B1892951C0C2DC062080808ACD8905"
    280     $"360001C46069433C00083000A3F2C770525CB4110000000049454E44AE426082"
    281 };
    282 
    283 resource(15, "repeat_up_off") #'PNG ' array {
    284     $"89504E470D0A1A0A0000000D494844520000002C0000001508030000000A2FFC"
    285     $"560000000467414D410000AFC837058AE90000001974455874536F6674776172"
    286     $"650041646F626520496D616765526561647971C9653C000000A5504C5445C4C4"
    287     $"C4E9E9E9C5C5C5D0D0D0C3C3C3D8D8D8ECECECE8E8E8D9D9D99898989F9F9FA6"
    288     $"A6A68B8B8BBCBCBCB7B7B7C7C7C77B7B7BD2D2D2B9B9B9CFCFCF8D8D8DB2B2B2"
    289     $"CBCBCB6D6D6D7A7A7ADADADAEBEBEBDEDEDEDDDDDDEDEDED9D9D9DE3E3E38C8C"
    290     $"8C979797F0F0F0A2A2A2A8A8A8767676B8B8B8EAEAEA7E7E7ED5D5D5ABABAB77"
    291     $"77779A9A9AA7A7A7DEDBDE9C9A9CEFEFEF636163848284CECBCE494949FFFFFF"
    292     $"E7E7E70B3909DF0000010F4944415478DA6230260100041083B111D1C00C2080"
    293     $"808ACD0C88027A8666000104546C604A0C30D33734030820B0623322801E5031"
    294     $"400091A4182080B02A3631012204802B0608209862565145391669985A2CAA41"
    295     $"8A010208AA585041438B4F578803AA166A3C5C2F543140004115AB88C868320B"
    296     $"33B1CA23A932417215443140004115EB3030333030714AA21889A1182080A08A"
    297     $"79F9991818D404981951149BA0290608209807C5B8B89555B5D918116E866B43"
    298     $"B8192080A08AD9195924C479CCD8E0A1010F08E4D000082098C9ECEAB24A0652"
    299     $"08FF23AB868733400091148300014492628000022936D32306001503041050B1"
    300     $"9E3E51C0C8D00C2080808A0D8905660001C4606C463C000830007CBDB25B32D5"
    301     $"44EB0000000049454E44AE426082"
    302 };
    303 
    304 resource(16, "repeat_down") #'PNG ' array {
    305     $"89504E470D0A1A0A0000000D494844520000002C0000001508030000000A2FFC"
    306     $"560000000467414D410000AFC837058AE90000001974455874536F6674776172"
    307     $"650041646F626520496D616765526561647971C9653C000000BD504C54451818"
    308     $"18B6B6B6CECBCEE7E7E78482846361631010106365632124210000009645A616"
    309     $"16162727271717177937859344A313131387758B212121151515725877262626"
    310     $"58385E6E4278BD8AC77B7D7B523E56A688AC434343A88BAD1C1C1CAA68B76B31"
    311     $"76AD6FBAA661B48274856868684D4D4D6D4C74C08FCA7A38871B181C7B418714"
    312     $"14143C3C3C121212484648B095B4A865B59D51AC0F0F0F6565653327357A4087"
    313     $"3D313F737373755C7A55275E1413142D2D2D5757578D828F626262FA21648900"
    314     $"00010F4944415478DA6260220100041003130BD180192080808A19D888021CAC"
    315     $"CC00010454CCC6490C60606765060820B062062200075031400091A4182080B0"
    316     $"2A6664042204802B06082098621E55153B1D21985A2CAA418A010208AAD8DADC"
    317     $"5644CD424F14AA166A3C5C2F543140004115DB285B2AF06968F1C821A9624472"
    318     $"154431400041151B8BF37171F12B9AA01889A1182080A08A654CF9B9B80C25CC"
    319     $"B8511433A2290608209807C5E4950CD465ADB8116E866B43B8192080A08A79B9"
    320     $"A5A4F5053505E0A1010F08E4D000082098C9BCC2BA466CDA08FF23AB86873340"
    321     $"0091148300014492628000022966E0200600150304105031073B514092951920"
    322     $"80808A598905CC0001C4C0C44C3C00083000D89E119E45174D07000000004945"
    323     $"4E44AE426082"
    324 };
    325 
    326 resource(17, "ffwd_down") #'PNG ' array {
    327     $"89504E470D0A1A0A0000000D494844520000001E0000001508030000006629AE"
    328     $"530000000467414D410000AFC837058AE90000001974455874536F6674776172"
    329     $"650041646F626520496D616765526561647971C9653C00000024504C54451818"
    330     $"18BFBFBFE7E7E7636163636563212421CECBCE8482841010100000001C1C1C7B"
    331     $"7D7B41373F2B000000A84944415478DA6260C30B000288811D1F60020820060E"
    332     $"DC8095990920801838710206166626800062C00D5881D2000144401A20804034"
    333     $"23234C04C1824A0304104410268C6041A5010208260812E6426241A501020821"
    334     $"0D1246B0A0D20001842C8D0CA0D20001444037400021DB8DCC824A0304100197"
    335     $"030410017F030410815003082002D20001C4C08A1B00A5010288810537E06666"
    336     $"02082006667C800920801898F0028000030099530626E0F55351000000004945"
    337     $"4E44AE426082"
    338 };
    339 
    340 resource(18, "ffwd_up") #'PNG ' array {
    341     $"89504E470D0A1A0A0000000D494844520000001E0000001508030000006629AE"
    342     $"530000000467414D410000AFC837058AE90000001974455874536F6674776172"
    343     $"650041646F626520496D616765526561647971C9653C0000001E504C5445E3E3"
    344     $"E3EFEFEFCECBCE848284DEDBDE9C9A9C636163404040FFFFFFE7E7E7CD8E4595"
    345     $"000000A94944415478DA6260C20B00028881191FE00408200646DC80858D1320"
    346     $"80183870024E56364E800062E0C4095880D2000144401A208040D2ECEC301104"
    347     $"0B2A0D104010699830820595060820983448980189059506082084344818C182"
    348     $"4A030410B23432804A03041001DD0001846C37320B2A0D1040045C0E104004FC"
    349     $"0D104004420D20800848030410030B6E00940608200656DC80998D13208018D8"
    350     $"F0014E8000C26337080004180000C610D6FAA81D2B0000000049454E44AE4260"
    351     $"82"
    352 };
    353 
    354 resource(19, "eject_down") #'PNG ' array {
    355     $"89504E470D0A1A0A0000000D494844520000002000000015080300000010131C"
    356     $"D80000000467414D410000AFC837058AE90000001974455874536F6674776172"
    357     $"650041646F626520496D616765526561647971C9653C00000021504C54451818"
    358     $"18BFBFBFCECBCEE7E7E78482846361631010106365632124210000007B7D7B54"
    359     $"B16A73000000AC4944415478DA626022000002888189052F60060820A0020636"
    360     $"9C808395192080800AD8387101067656668000022B60C00138800A000288A002"
    361     $"80004257C0C888A6002080D014303222AB002900082054058C8C282A400A0002"
    362     $"0845012323AA0A9002800022A8002080082A00082082DE040820822600041041"
    363     $"05000144D00A800022A8002080400A18387001A0028000022AE060C709B85899"
    364     $"010208A880151F60060820062666FC0020C000DD73078EF9B85C950000000049"
    365     $"454E44AE426082"
    366 };
    367 
    368 resource(20, "eject_up") #'PNG ' array {
    369     $"89504E470D0A1A0A0000000D494844520000002000000015080300000010131C"
    370     $"D80000000467414D410000AFC837058AE90000001974455874536F6674776172"
    371     $"650041646F626520496D616765526561647971C9653C0000001B504C5445DEDB"
    372     $"DE9C9A9CEFEFEF636163848284404040CECBCEFFFFFFE7E7E70F06920C000000"
    373     $"AC4944415478DA62602300000288818D052FE0000820A0020E269C8081990320"
    374     $"80800A98D871010E46660E8000022BE0C00118800A000288A00280004257C0CA"
    375     $"8AA6002080D014B0B222AB00290008205405ACAC282A400A00020845012B2BAA"
    376     $"0A9002800022A8002080082A00082082DE04082082260004104105000144D00A"
    377     $"800022A8002080400A38187001A0028000022A6060C409589839000208A88019"
    378     $"1FE000082006360EFC0020C000B61F0ED83F7D28B30000000049454E44AE4260"
    379     $"82"
    380 };
    381 
    382 resource(21, "paused_up") #'PNG ' array {
    383     $"89504E470D0A1A0A0000000D494844520000002800000015080300000003C45C"
    384     $"2C0000000467414D410000AFC837058AE90000001974455874536F6674776172"
    385     $"650041646F626520496D616765526561647971C9653C00000021504C5445E7E7"
    386     $"E784828463616369BA599C9A9CDEDBDE404040CECBCEEFEFEFFFFFFFE3E3E3BB"
    387     $"3117C6000000AF4944415478DA62602712000410032371800120801818398800"
    388     $"AC4C0C0001C4C0C8491830B0303100041003230361C00A54081040442B040820"
    389     $"B84236362419666666280157081040480A91946251081040280A414AB9702804"
    390     $"082034855053B1280408200C8560A55814020410D126020410861B7129040820"
    391     $"A27D0D10404487234000111D33000144B4428000626064250200150204100323"
    392     $"0B11809189012080189888030C0001C4402C00083000E49407BBAA2FBF830000"
    393     $"000049454E44AE426082"
    394 };
    395 
    396 resource(22, "play_up_on") #'PNG ' array {
    397     $"89504E470D0A1A0A0000000D4948445200000028000000150802000000BB783B"
    398     $"49000000D549444154789CC5D5310A83301406E0DF9203E4223D90B374922E1E"
    399     $"A08360C75E2337B09B3D40C1C503644C86824BC125438740905A4D02E9F39F5E"
    400     $"10F97C0F79C9FA678F3DC2DA7B4BAF16A7820128CF251939BEC6E6DA00600038"
    401     $"E734AAD6BA7B74B666F64C034FEFC9D5071A7219B6F6A01E2A0097E36DFBFD3C"
    402     $"CF6D2184581E37E2E9B81E2AFB05C91334EA396F8C4902AF8EFA278F80E10726"
    403     $"FAE74A35FC888E6D52751C01A72223E0B46410FC0FD20307925F8BC2BB375C76"
    404     $"5D99F3DD4D0ABBAB8A20EE2664524A292519EC9229A5E855001F00D549BD62C7"
    405     $"07500000000049454E44AE426082"
    406 };
    407 
  • deleted file src/apps/cdplayer/DoubleShotDrawButton.cpp

    diff --git a/src/apps/cdplayer/DoubleShotDrawButton.cpp b/src/apps/cdplayer/DoubleShotDrawButton.cpp
    deleted file mode 100644
    index b5e7fd3..0000000
    + -  
    1 /*
    2  * Copyright (c) 2006-2007, Haiku, Inc.
    3  * Distributed under the terms of the MIT license.
    4  *
    5  * Author:
    6  *      DarkWyrm <bpmagic@columbus.rr.com>
    7  */
    8 #include "DoubleShotDrawButton.h"
    9 #include <stdio.h>
    10 
    11 // The only difference between this class and DrawButton is the fact that it is
    12 // invoked twice during a mousedown-mouseup cycle. It fires when pushed, and
    13 // then again when released.
    14 
    15 DoubleShotDrawButton::DoubleShotDrawButton(BRect frame, const char *name,
    16     BBitmap *up, BBitmap *down,BMessage *msg, int32 resize, int32 flags)
    17     : DrawButton(frame, name, up,down, msg, resize, flags)
    18 {
    19 }
    20 
    21 
    22 void
    23 DoubleShotDrawButton::MouseDown(BPoint point)
    24 {
    25     Invoke();
    26     DrawButton::MouseDown(point);
    27 }
  • deleted file src/apps/cdplayer/DoubleShotDrawButton.h

    diff --git a/src/apps/cdplayer/DoubleShotDrawButton.h b/src/apps/cdplayer/DoubleShotDrawButton.h
    deleted file mode 100644
    index 7b1c763..0000000
    + -  
    1 /*
    2  * Copyright (c) 2006-2007, Haiku, Inc.
    3  * Distributed under the terms of the MIT license.
    4  *
    5  * Author:
    6  *      DarkWyrm <bpmagic@columbus.rr.com>
    7  */
    8 #ifndef _DOUBLESHOT_DRAW_BUTTON_H
    9 #define _DOUBLESHOT_DRAW_BUTTON_H
    10 
    11 #include <Looper.h>
    12 #include <Application.h>
    13 #include <Window.h>
    14 #include <Button.h>
    15 #include <Bitmap.h>
    16 #include <Rect.h>
    17 #include "DrawButton.h"
    18 
    19 class DoubleShotDrawButton : public DrawButton
    20 {
    21 public:
    22             DoubleShotDrawButton(BRect frame, const char *name, BBitmap *up,
    23                                 BBitmap *down,BMessage *msg, int32 resize,
    24                                 int32 flags);
    25    
    26     void    MouseDown(BPoint point);
    27 };
    28 
    29 #endif
  • deleted file src/apps/cdplayer/DrawButton.cpp

    diff --git a/src/apps/cdplayer/DrawButton.cpp b/src/apps/cdplayer/DrawButton.cpp
    deleted file mode 100644
    index bcf9bc9..0000000
    + -  
    1 /*
    2  * Copyright (c) 2006-2007, Haiku, Inc.
    3  * Distributed under the terms of the MIT license.
    4  *
    5  * Author:
    6  *      DarkWyrm <bpmagic@columbus.rr.com>
    7  */
    8 #include "DrawButton.h"
    9 
    10 DrawButton::DrawButton(BRect frame, const char *name, BBitmap *up, BBitmap *down,
    11                         BMessage *msg, int32 resize, int32 flags)
    12  :  BButton(frame, name, "", msg, resize, flags)
    13 {
    14     fUp = up;
    15     fDown = down;
    16     fDisabled = NULL;
    17 }
    18 
    19 
    20 DrawButton::~DrawButton(void)
    21 {
    22     delete fUp;
    23     delete fDown;
    24     delete fDisabled;
    25 }
    26 
    27 
    28 void
    29 DrawButton::SetBitmaps(BBitmap *up, BBitmap *down)
    30 {
    31     delete fUp;
    32     delete fDown;
    33    
    34     fUp = up;
    35     fDown = down;
    36    
    37     if (IsEnabled())
    38         Invalidate();
    39 }
    40 
    41 
    42 void
    43 DrawButton::SetDisabled(BBitmap *disabled)
    44 {
    45     delete fDisabled;
    46    
    47     fDisabled = disabled;
    48    
    49     if (!IsEnabled())
    50         Invalidate();
    51 }
    52 
    53 
    54 void
    55 DrawButton::Draw(BRect update)
    56 {
    57     if (!IsEnabled()) {
    58         if (fDisabled)
    59             DrawBitmap(fDisabled, BPoint(0,0));
    60         else
    61             StrokeRect(Bounds());
    62         return;
    63     }
    64    
    65     if (Value() == B_CONTROL_ON) {
    66         if (fDown)
    67             DrawBitmap(fDown, BPoint(0,0));
    68         else
    69             StrokeRect(Bounds());
    70     } else {
    71         if (fUp)
    72             DrawBitmap(fUp, BPoint(0,0));
    73         else
    74             StrokeRect(Bounds());
    75     }
    76 }
    77 
    78 
    79 void
    80 DrawButton::ResizeToPreferred(void)
    81 {
    82     if (fUp)
    83         ResizeTo(fUp->Bounds().Width(),fUp->Bounds().Height());
    84     else if (fDown)
    85         ResizeTo(fDown->Bounds().Width(),fDown->Bounds().Height());
    86     else if (fDisabled)
    87         ResizeTo(fDisabled->Bounds().Width(),fDisabled->Bounds().Height());
    88 }
  • deleted file src/apps/cdplayer/DrawButton.h

    diff --git a/src/apps/cdplayer/DrawButton.h b/src/apps/cdplayer/DrawButton.h
    deleted file mode 100644
    index 7c43f75..0000000
    + -  
    1 /*
    2  * Copyright (c) 2006-2007, Haiku, Inc.
    3  * Distributed under the terms of the MIT license.
    4  *
    5  * Author:
    6  *      DarkWyrm <bpmagic@columbus.rr.com>
    7  */
    8 #ifndef _DRAW_BUTTON_H
    9 #define _DRAW_BUTTON_H
    10 
    11 #include <Looper.h>
    12 #include <Application.h>
    13 #include <Window.h>
    14 #include <Button.h>
    15 #include <Bitmap.h>
    16 #include <Rect.h>
    17 
    18 
    19 class DrawButton : public BButton
    20 {
    21 public:
    22                     DrawButton(BRect frame, const char *name, BBitmap *up,
    23                         BBitmap *down,BMessage *msg, int32 resize,
    24                         int32 flags);
    25     virtual         ~DrawButton(void);
    26    
    27             void    Draw(BRect update);
    28 
    29             void    SetBitmaps(BBitmap *up, BBitmap *down);
    30             void    ResizeToPreferred(void);
    31             void    SetDisabled(BBitmap *disabled);
    32    
    33 private:
    34    
    35     BBitmap *fUp,
    36             *fDown,
    37             *fDisabled;
    38 };
    39 
    40 #endif
  • deleted file src/apps/cdplayer/Jamfile

    diff --git a/src/apps/cdplayer/Jamfile b/src/apps/cdplayer/Jamfile
    deleted file mode 100644
    index aec488d..0000000
    + -  
    1 SubDir HAIKU_TOP src apps cdplayer ;
    2 
    3 SetSubDirSupportedPlatformsBeOSCompatible ;
    4 
    5 Application CDPlayer :
    6     CDAudioDevice.cpp
    7     CDDBSupport.cpp
    8     CDPlayer.cpp
    9     DoubleShotDrawButton.cpp
    10     DrawButton.cpp
    11     PlayList.cpp
    12     TwoStateDrawButton.cpp
    13     VolumeSlider.cpp
    14 
    15     : be $(TARGET_SELECT_UNAME_ETC_LIB) $(TARGET_NETAPI_LIB) $(TARGET_LIBSTDC++)
    16         localestub translation textencoding
    17     : CDPlayer.rdef
    18 ;
    19 
    20 DoCatalogs CDPlayer :
    21     x-vnd.Haiku-CDPlayer
    22     :
    23     CDPlayer.cpp
    24 ;
  • deleted file src/apps/cdplayer/LICENSE

    diff --git a/src/apps/cdplayer/LICENSE b/src/apps/cdplayer/LICENSE
    deleted file mode 100644
    index 86a4268..0000000
    + -  
    1 ----------------------
    2 Be Sample Code License
    3 ----------------------
    4 
    5 Copyright 1991-1999, Be Incorporated.
    6 All rights reserved.
    7 
    8 Redistribution and use in source and binary forms, with or without
    9 modification, are permitted provided that the following conditions
    10 are met:
    11 
    12 1. Redistributions of source code must retain the above copyright
    13    notice, this list of conditions, and the following disclaimer.
    14 
    15 2. Redistributions in binary form must reproduce the above copyright
    16    notice, this list of conditions, and the following disclaimer in the
    17    documentation and/or other materials provided with the distribution.
    18 
    19 3. The name of the author may not be used to endorse or promote products
    20    derived from this software without specific prior written permission.
    21 
    22 THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR
    23 IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
    24 OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    25 PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
    26 DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    27 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    28 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
    29 AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
    30 TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    31 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.   
  • deleted file src/apps/cdplayer/PlayList.cpp

    diff --git a/src/apps/cdplayer/PlayList.cpp b/src/apps/cdplayer/PlayList.cpp
    deleted file mode 100644
    index a7a0127..0000000
    + -  
    1 #include "PlayList.h"
    2 
    3 #include <OS.h>
    4 
    5 #include <stdlib.h>
    6 #include <string.h>
    7 
    8 //#define DEBUG_PLAYLIST
    9 
    10 #ifdef DEBUG_PLAYLIST
    11 #include <stdio.h>
    12 #define STRACE(x) printf x
    13 #else
    14 #define STRACE(x) /* nothing */
    15 #endif
    16 
    17 
    18 PlayList::PlayList(int16 count, int16 start)
    19     :
    20     fTrackCount(count),
    21     fTrackIndex(0),
    22     fStartingTrack(start),
    23     fRandom(false),
    24     fLoop(false)
    25 {
    26     STRACE(("PlayList(count=%d,start=%d)\n",count,start));
    27 
    28     srand(real_time_clock_usecs());
    29 
    30     if (fTrackCount < 0)
    31         fTrackCount = 0;
    32     else if (fTrackCount > 500)
    33         fTrackCount = 500;
    34 
    35     if (fStartingTrack >= fTrackCount)
    36         fStartingTrack = fTrackCount - 1;
    37 
    38     if (fStartingTrack < 1)
    39         fStartingTrack = 1;
    40 
    41     memset(fTrackList, -1, 500);
    42 
    43     Unrandomize();
    44 }
    45 
    46 
    47 void
    48 PlayList::SetTrackCount(const int16 &count)
    49 {
    50     fLocker.Lock();
    51    
    52     STRACE(("PlayList::SetTrackCount(%d)\n",count));
    53    
    54     if (count <= 0) {
    55         fTrackCount = 0;
    56         fTrackIndex = 0;
    57     }
    58     else if (count > 500)
    59         fTrackCount = 500;
    60     else
    61         fTrackCount = count;
    62 
    63     memset(fTrackList, -1, 500);
    64     SetShuffle(IsShuffled());
    65 
    66     fLocker.Unlock();
    67 }
    68 
    69 
    70 void
    71 PlayList::SetStartingTrack(const int16 &start)
    72 {
    73     fLocker.Lock();
    74    
    75     STRACE(("PlayList::SetStartingTrack(%d)\n",start));
    76    
    77     fStartingTrack = start;
    78    
    79     fLocker.Unlock();
    80 }
    81 
    82 
    83 void
    84 PlayList::Rewind()
    85 {
    86     STRACE(("PlayList::Rewind()\n"));
    87     fLocker.Lock();
    88    
    89     fTrackIndex = 0;
    90    
    91     fLocker.Unlock();
    92 }
    93 
    94 
    95 void
    96 PlayList::SetShuffle(const bool &random)
    97 {
    98     STRACE(("PlayList::SetShuffle(%s)\n", random ? "random" : "sequential"));
    99     fLocker.Lock();
    100 
    101     if (random)
    102         Randomize();
    103     else
    104         Unrandomize();
    105    
    106     fRandom = random;
    107    
    108     fLocker.Unlock();
    109 }
    110 
    111 
    112 void
    113 PlayList::SetLoop(const bool &loop)
    114 {
    115     STRACE(("PlayList::SetLoop(%s)\n", loop ? "loop" : "non-loop"));
    116     fLocker.Lock();
    117 
    118     fLoop = loop;
    119 
    120     fLocker.Unlock();
    121 }
    122 
    123    
    124 void
    125 PlayList::SetCurrentTrack(const int16 &track)
    126 {
    127     STRACE(("PlayList::SetCurrentTrack(%d)\n",track));
    128    
    129     if (track < 0 || track > fTrackCount)
    130         return;
    131 
    132     fLocker.Lock();
    133    
    134     for (int16 i = 0; i < fTrackCount; i++) {
    135         if (fTrackList[i] == track) {
    136             fTrackIndex = i;
    137             break;
    138         }
    139     }
    140 
    141     fLocker.Unlock();
    142 }
    143 
    144 
    145 int16
    146 PlayList::GetCurrentTrack()
    147 {
    148     fLocker.Lock();
    149 
    150     int16 value = fTrackList[fTrackIndex];
    151 //  STRACE(("PlayList::GetCurrentTrack()=%d\n",value));
    152 
    153     fLocker.Unlock();
    154     return value;
    155 }
    156 
    157 
    158 int16
    159 PlayList::GetNextTrack()
    160 {
    161     fLocker.Lock();
    162 
    163     if (fTrackCount < 1) {
    164         fLocker.Unlock();
    165         STRACE(("PlayList::GetNextTrack()=-1 (no tracks)\n"));
    166         return -1;
    167     }
    168 
    169     if (fTrackIndex > (fTrackCount - fStartingTrack)) {
    170         if (fLoop)
    171             fTrackIndex = 0;
    172         else {
    173             fLocker.Unlock();
    174             STRACE(("PlayList::GetNextTrack()=-1 (track index out of range)\n"));
    175             return -1;
    176         }
    177     }
    178     else
    179         fTrackIndex++;
    180    
    181     int16 value = fTrackList[fTrackIndex];
    182     STRACE(("PlayList::GetNextTrack()=%d\n",value));
    183    
    184     fLocker.Unlock();
    185     return value;
    186 }
    187 
    188 
    189 int16
    190 PlayList::GetPreviousTrack()
    191 {
    192     fLocker.Lock();
    193 
    194     if (fTrackCount < 1) {
    195         fLocker.Unlock();
    196         STRACE(("PlayList::GetPreviousTrack()=-1 (no tracks)\n"));
    197         return -1;
    198     }
    199 
    200     if (fTrackIndex == 0) {
    201         if (fLoop)
    202             fTrackIndex = (fTrackCount - fStartingTrack);
    203         else {
    204             fLocker.Unlock();
    205             STRACE(("PlayList::GetPreviousTrack()=-1 (track index out of range)\n"));
    206             return -1;
    207         }
    208     }
    209     else
    210         fTrackIndex--;
    211    
    212     int16 value = fTrackList[fTrackIndex];
    213     STRACE(("PlayList::GetPreviousTrack()=%d\n",value));
    214     fLocker.Unlock();
    215     return value;
    216 }
    217 
    218 
    219 int16
    220 PlayList::GetLastTrack()
    221 {
    222     fLocker.Lock();
    223 
    224     if (fTrackCount < 1) {
    225         fLocker.Unlock();
    226         STRACE(("PlayList::GetLastTrack()=-1 (no tracks)\n"));
    227         return -1;
    228     }
    229 
    230     fTrackIndex = fTrackCount - 1;
    231     int16 value = fTrackList[fTrackIndex];
    232     STRACE(("PlayList::GetLastTrack()=%d\n",value));
    233     fLocker.Unlock();
    234     return value;
    235 }
    236 
    237 
    238 int16
    239 PlayList::GetFirstTrack()
    240 {
    241     fLocker.Lock();
    242    
    243     if (fTrackCount < 1) {
    244         fLocker.Unlock();
    245         STRACE(("PlayList::GetFirstTrack()=-1 (no tracks)\n"));
    246         return -1;
    247     }
    248    
    249     fTrackIndex = 0;
    250     int16 value = fTrackList[fTrackIndex];
    251     STRACE(("PlayList::GetFirstTrack()=%d\n",value));
    252     fLocker.Unlock();
    253     return value;
    254 }
    255 
    256 
    257 void
    258 PlayList::Randomize()
    259 {
    260     STRACE(("PlayList::Randomize()\n"));
    261    
    262     // Reinitialize the count
    263     for (int16 i = fStartingTrack; i <= fTrackCount; i++)
    264         fTrackList[i - fStartingTrack] = i;
    265    
    266     // There are probably *much* better ways to do this,
    267     // but this is the only one I could think of. :(
    268    
    269     int32 listcount = (fTrackCount - fStartingTrack);
    270     int32 swapcount =  listcount * 2;
    271    
    272     int16 temp, first, second;
    273     for (int32 i = 0; i < swapcount; i++) {
    274         // repeatedly pick two elements at random and swap them
    275         // This way we are sure to not have any duplicates and still have
    276         // all tracks eventually be played.
    277        
    278         first = (int16)(listcount * ((float)rand() / RAND_MAX));
    279         second = (int16)(listcount * ((float)rand() / RAND_MAX));
    280 
    281         temp = fTrackList[first];
    282         fTrackList[first] = fTrackList[second];
    283         fTrackList[second] = temp;
    284     }
    285 
    286     #ifdef DEBUG_PLAYLIST
    287         for (int16 i = fStartingTrack; i <= fTrackCount; i++)
    288             printf("\tSlot %d: track %d\n", i, fTrackList[i]);
    289     #endif
    290 }
    291 
    292 
    293 void
    294 PlayList::Unrandomize()
    295 {
    296     STRACE(("PlayList::Unrandomize()\n"));
    297     for (int16 i = fStartingTrack; i <= fTrackCount; i++)
    298         fTrackList[i - fStartingTrack] = i;
    299 }
  • deleted file src/apps/cdplayer/PlayList.h

    diff --git a/src/apps/cdplayer/PlayList.h b/src/apps/cdplayer/PlayList.h
    deleted file mode 100644
    index 39abc74..0000000
    + -  
    1 #ifndef PLAYLIST_H
    2 #define PLAYLIST_H
    3 
    4 #include <Locker.h>
    5 #include <SupportDefs.h>
    6 
    7 class PlayList {
    8     public:
    9         PlayList(int16 tracks = 0, int16 startingtrack = 1);
    10    
    11         void SetTrackCount(const int16 &count);
    12         int16 TrackCount() const { return fTrackCount; }
    13 
    14         void SetStartingTrack(const int16 &start);
    15         int16 StartingTrack() const { return fStartingTrack; }
    16 
    17         void Rewind();
    18 
    19         void SetShuffle(const bool &random);
    20         bool IsShuffled() const { return fRandom; }
    21 
    22         void SetLoop(const bool &loop);
    23         bool IsLoop() const { return fLoop; }
    24    
    25         void SetCurrentTrack(const int16 &track);
    26         int16 GetCurrentTrack();
    27    
    28         int16 GetNextTrack();
    29         int16 GetPreviousTrack();
    30 
    31         int16 GetFirstTrack();
    32         int16 GetLastTrack();
    33 
    34     private:
    35         void Randomize();
    36         void Unrandomize();
    37 
    38         int16 fTrackCount;
    39         int16 fTrackIndex;
    40         int16 fStartingTrack;
    41         int16 fTrackList[500];  // This should be big enough. :)
    42 
    43         bool fRandom;
    44         bool fLoop;
    45 
    46         BLocker fLocker;
    47 };
    48 
    49 #endif  // PLAYLIST_H
  • deleted file src/apps/cdplayer/TrackMenu.cpp

    diff --git a/src/apps/cdplayer/TrackMenu.cpp b/src/apps/cdplayer/TrackMenu.cpp
    deleted file mode 100644
    index 02e547a..0000000
    + -  
    1 #include "TrackMenu.h"
    2 
    3 #include <Font.h>
    4 #include <Message.h>
    5 #include <Region.h>
    6 #include <String.h>
    7 #include <Window.h>
    8 
    9 #include <stdio.h>
    10 
    11 
    12 TrackMenu::TrackMenu(const BRect &frame, const char *name, BMessage *msg,
    13     const int32 &resize, const int32 &flags)
    14     : BView(frame, name, resize, flags), BInvoker(msg, NULL),
    15     fCurrentItem(-1),
    16     fCount(0),
    17     fIsTracking(false)
    18 {
    19     SetViewColor(20, 20, 20);
    20    
    21     fItemRect.Set(1, 1, 1 + StringWidth("00") + 3, Bounds().bottom - 1);
    22    
    23     BFont font;
    24     font.SetSize(11);
    25     font.SetSpacing(B_STRING_SPACING);
    26     SetFont(&font);
    27    
    28     font_height fh;
    29     GetFontHeight(&fh);
    30    
    31     fFontHeight = fh.ascent + fh.descent + fh.leading;
    32 }
    33 
    34 
    35 TrackMenu::~TrackMenu()
    36 {
    37 }
    38 
    39 
    40 void
    41 TrackMenu::AttachedToWindow()
    42 {
    43     if (!Messenger().IsValid())
    44         SetTarget(Window());
    45 
    46     BView::AttachedToWindow();
    47 }
    48 
    49    
    50 void
    51 TrackMenu::MessageReceived(BMessage *msg)
    52 {
    53     switch (msg->what) {
    54         default:
    55             BView::MessageReceived(msg);
    56             break;
    57     }
    58 }
    59 
    60 
    61 void
    62 TrackMenu::SetItemCount(const int32 &count)
    63 {
    64     if (count < 0) {
    65         fCount = 0;
    66         fCurrentItem = -1;
    67         Invalidate();
    68         return;
    69     }
    70 
    71     fCount = count;
    72 
    73     if (fCurrentItem > fCount - 1)
    74         fCurrentItem = fCount - 1;
    75     else if(fCurrentItem < 0)
    76         fCurrentItem = 0;
    77 
    78     Invalidate();
    79 }
    80 
    81 
    82 void
    83 TrackMenu::SetValue(const int32 &value)
    84 {
    85     if (value < 0 || value > fCount)
    86         return;
    87 
    88     if (value != Value()) {
    89         fCurrentItem = value;
    90         Invalidate();
    91     }
    92 }
    93 
    94 
    95 int32
    96 TrackMenu::ItemAt(const BPoint &pt)
    97 {
    98     // TODO: Optimize. This is simple, but costly in performance
    99     BRect r(fItemRect);
    100     for (int32 i = 0; i < fCount; i++) {
    101         if (r.Contains(pt))
    102             return i;
    103         r.OffsetBy(r.Width()+1,0);
    104     }
    105 
    106     return -1;
    107 }
    108 
    109 
    110 void
    111 TrackMenu::MouseDown(BPoint point)
    112 {
    113     BPoint pt(point);
    114     int32 saveditem = fCurrentItem;
    115     int32 item = ItemAt(pt);
    116 
    117     if (item >= 0) {
    118         fCurrentItem = item;
    119         Invalidate();
    120 
    121         // Shamelessly stolen from BButton. :D
    122         if (Window()->Flags() & B_ASYNCHRONOUS_CONTROLS) {
    123             SetMouseEventMask(B_POINTER_EVENTS, B_LOCK_WINDOW_FOCUS);
    124             fIsTracking = true;
    125        
    126         } else {
    127             uint32 buttons;
    128 
    129             do {
    130                 Window()->UpdateIfNeeded();
    131 
    132                 snooze(40000);
    133 
    134                 GetMouse(&pt, &buttons, true);
    135 
    136                 int32 mouseitem = ItemAt(pt);
    137                 if (mouseitem > -1) {
    138                     fCurrentItem = mouseitem;
    139                     Draw(Bounds());
    140                 }
    141 
    142             } while (buttons != 0);
    143 
    144             if (fCurrentItem != saveditem)
    145                 Invoke();
    146         }
    147     }
    148 }
    149 
    150 
    151 void
    152 TrackMenu::MouseUp(BPoint pt)
    153 {
    154     if (!fIsTracking)
    155         return;
    156 
    157     int32 item = ItemAt(pt);
    158 
    159     if (item >= 0)
    160         Invoke();
    161 
    162     fIsTracking = false;
    163 }
    164 
    165 
    166 void
    167 TrackMenu::MouseMoved(BPoint pt, uint32 transit, const BMessage *msg)
    168 {
    169     if (!fIsTracking)
    170         return;
    171 
    172     int32 item = ItemAt(pt);
    173 
    174     if (item >= 0) {
    175         fCurrentItem = item;
    176         Invalidate();
    177     }
    178 }
    179 
    180 
    181 void
    182 TrackMenu::Draw(BRect update)
    183 {
    184     rgb_color dark = {20, 20, 20, 255};
    185     rgb_color light = {200, 200, 200, 255};
    186     BPoint pt1, pt2;
    187 
    188     // Draw the frame
    189     SetHighColor(dark);
    190     pt1.Set(0, 0);
    191     pt2 = Bounds().RightTop();
    192     StrokeLine(pt1, pt2);
    193 
    194     pt2.Set(0, Bounds().bottom);
    195     StrokeLine(pt1, pt2);
    196 
    197     SetHighColor(255,255,255);
    198     pt1 = Bounds().RightBottom();
    199     pt2.Set(Bounds().right, 1);
    200     StrokeLine(pt1, pt2);
    201 
    202     pt2.Set(1,Bounds().bottom);
    203     StrokeLine(pt1, pt2);
    204 
    205     // Draw the items
    206     BRect r(fItemRect);
    207 
    208     for (int32 i = 0; i < fCount; i++) {
    209         // Draw the item's frame
    210         if (i == fCurrentItem)
    211             SetHighColor(dark);
    212         else
    213             SetHighColor(light);
    214 
    215         pt1.Set(r.left, r.top);
    216         pt2.Set(r.right, r.top);
    217         StrokeLine(pt1, pt2);
    218 
    219         pt2.Set(r.left, r.bottom);
    220         StrokeLine(pt1, pt2);
    221 
    222         if (i == fCurrentItem) {
    223             SetHighColor(light);
    224             pt1.Set(r.right, r.bottom);
    225             pt2.Set(r.right, r.top + 1);
    226             StrokeLine(pt1, pt2);
    227 
    228             pt2.Set(r.left + 1, r.bottom);
    229             StrokeLine(pt1, pt2);
    230 
    231             SetHighColor(light);
    232             FillRect(r.InsetByCopy(1, 1));
    233             SetHighColor(dark);
    234         }
    235         else if (i == fCount - 1) {
    236             SetHighColor(light);
    237             pt1.Set(r.right, r.bottom);
    238             pt2.Set(r.right, r.top + 1);
    239             StrokeLine(pt1, pt2);
    240         }
    241 
    242         // Draw the label, center justified
    243 
    244         BString label;
    245         label << (i + 1);
    246 
    247         BPoint labelpt;
    248         labelpt.x = r.left + (r.Width() - StringWidth(label.String())) / 2 + 2;
    249         labelpt.y = r.bottom - (r.Height() - fFontHeight + 4) / 2;
    250 
    251         if (i == fCurrentItem) {
    252             SetHighColor(dark);
    253             SetLowColor(light);
    254         } else {
    255             SetHighColor(light);
    256             SetLowColor(dark);
    257         }
    258         DrawString(label.String(), labelpt);
    259 
    260         // Setup for next iteration
    261         r.OffsetBy(r.Width() + 1, 0);
    262 
    263         if (r.left > Bounds().right - 2) {
    264             ConstrainClippingRegion(NULL);
    265             break;
    266         }
    267 
    268         if (r.right > Bounds().right - 2) {
    269             r.right = Bounds().right - 2;
    270             BRegion reg(r);
    271             ConstrainClippingRegion(&reg);
    272         }
    273     }
    274 }
  • deleted file src/apps/cdplayer/TrackMenu.h

    diff --git a/src/apps/cdplayer/TrackMenu.h b/src/apps/cdplayer/TrackMenu.h
    deleted file mode 100644
    index 2e5abc6..0000000
    + -  
    1 #ifndef TRACKMENU_H
    2 #define TRACKMENU_H
    3 
    4 #include <Invoker.h>
    5 #include <View.h>
    6 
    7 class TrackMenu : public BView, public BInvoker {
    8     public:
    9         TrackMenu(const BRect &frame, const char *name, BMessage *msg,
    10             const int32 &resize = B_FOLLOW_LEFT | B_FOLLOW_TOP,
    11             const int32 &flags = B_WILL_DRAW);
    12         ~TrackMenu();
    13    
    14         void AttachedToWindow();
    15         void MessageReceived(BMessage *msg);
    16         void Draw(BRect update);
    17         void MouseDown(BPoint pt);
    18         void MouseUp(BPoint pt);
    19         void MouseMoved(BPoint pt, uint32 transit, const BMessage *msg);
    20 
    21         int32 CountItems() const { return fCount; }
    22         void SetItemCount(const int32 &count);
    23 
    24         int32 Value() const { return fCurrentItem; }
    25         void SetValue(const int32 &value);
    26 
    27     private:
    28         int32 ItemAt(const BPoint &pt);
    29 
    30         int32 fCurrentItem;
    31         int32 fCount;
    32         BRect fItemRect;
    33 
    34         bool fIsTracking;
    35 
    36         float fFontHeight;
    37 };
    38 
    39 #endif  // TRACKMENU_H
  • deleted file src/apps/cdplayer/TwoStateDrawButton.cpp

    diff --git a/src/apps/cdplayer/TwoStateDrawButton.cpp b/src/apps/cdplayer/TwoStateDrawButton.cpp
    deleted file mode 100644
    index 4197925..0000000
    + -  
    1 /*
    2  * Copyright (c) 2006-2007, Haiku, Inc.
    3  * Distributed under the terms of the MIT license.
    4  *
    5  * Author:
    6  *      DarkWyrm, bpmagic@columbus.rr.com
    7  */
    8 
    9 
    10 #include "TwoStateDrawButton.h"
    11 
    12 
    13 TwoStateDrawButton::TwoStateDrawButton(BRect frame, const char *name,
    14     BBitmap *upone, BBitmap *downone, BBitmap *uptwo, BBitmap *downtwo,
    15     BMessage *msg, const int32 &resize, const int32 &flags)
    16     : BButton(frame, name, "", msg, resize, flags),
    17     fUpOne(upone),
    18     fDownOne(downone),
    19     fUpTwo(uptwo),
    20     fDownTwo(downtwo),
    21     fDisabledOne(NULL),
    22     fDisabledTwo(NULL),
    23     fButtonState(true)
    24 
    25 {
    26     fButtonState = false;
    27 }
    28 
    29 
    30 TwoStateDrawButton::~TwoStateDrawButton()
    31 {
    32     delete fUpOne;
    33     delete fDownOne;
    34     delete fUpTwo;
    35     delete fDownTwo;
    36     delete fDisabledOne;
    37     delete fDisabledTwo;
    38 }
    39 
    40 
    41 void
    42 TwoStateDrawButton::ResizeToPreferred()
    43 {
    44     if (fUpOne)
    45         ResizeTo(fUpOne->Bounds().Width(), fUpOne->Bounds().Height());
    46     else if (fDownOne)
    47         ResizeTo(fDownOne->Bounds().Width(), fDownOne->Bounds().Height());
    48     else if (fUpTwo)
    49         ResizeTo(fUpTwo->Bounds().Width(),fUpTwo->Bounds().Height());
    50     else if (fDownTwo)
    51         ResizeTo(fDownTwo->Bounds().Width(), fDownTwo->Bounds().Height());
    52     else if (fDisabledOne)
    53         ResizeTo(fDisabledOne->Bounds().Width(), fDisabledOne->Bounds().Height());
    54     else if(fDisabledTwo)
    55         ResizeTo(fDisabledTwo->Bounds().Width(), fDisabledTwo->Bounds().Height());
    56 }
    57 
    58 
    59 void
    60 TwoStateDrawButton::SetBitmaps(BBitmap *upone, BBitmap *downone, BBitmap *uptwo,
    61     BBitmap *downtwo)
    62 {   
    63     delete fUpOne;
    64     delete fDownOne;
    65     delete fUpTwo;
    66     delete fDownTwo;
    67 
    68     fUpOne = upone;
    69     fDownOne = downone;
    70     fUpTwo = uptwo;
    71     fDownTwo = downtwo;
    72 }
    73 
    74 
    75 void
    76 TwoStateDrawButton::SetBitmaps(const int32 state, BBitmap *up, BBitmap *down)
    77 {
    78     if (state == 0) {
    79         delete fUpOne;
    80         delete fDownOne;
    81         fUpOne = up;
    82         fDownOne = down;
    83     } else {
    84         delete fUpTwo;
    85         delete fDownTwo;
    86         fUpTwo = up;
    87         fDownTwo = down;
    88     }
    89 }
    90 
    91 
    92 void
    93 TwoStateDrawButton::SetDisabled(BBitmap *disabledone, BBitmap *disabledtwo)
    94 {
    95     delete fDisabledOne;
    96     delete fDisabledTwo;
    97    
    98     fDisabledOne = disabledone;
    99     fDisabledTwo = disabledtwo;
    100 }
    101 
    102 
    103 void
    104 TwoStateDrawButton::MouseUp(BPoint pt)
    105 {
    106     BButton::MouseUp(pt);
    107     fButtonState = fButtonState ? false : true;
    108     Invalidate();
    109 }
    110 
    111 
    112 void
    113 TwoStateDrawButton::SetState(int32 value)
    114 {
    115     if (fButtonState != value) {
    116         fButtonState = (value == 0) ? false : true;
    117         Invalidate();
    118     }
    119 }
    120 
    121 
    122 void
    123 TwoStateDrawButton::Draw(BRect update)
    124 {
    125     if (fButtonState) {
    126         if (!IsEnabled()) {
    127             if (fDisabledTwo)
    128                 DrawBitmap(fDisabledTwo, BPoint(0,0));
    129             else
    130                 StrokeRect(Bounds());
    131             return;
    132         }
    133        
    134         if (Value() == B_CONTROL_ON) {
    135             if (fDownTwo)
    136                 DrawBitmap(fDownTwo, BPoint(0,0));
    137             else
    138                 StrokeRect(Bounds());
    139         } else {
    140             if (fUpTwo)
    141                 DrawBitmap(fUpTwo, BPoint(0,0));
    142             else
    143                 StrokeRect(Bounds());
    144         }
    145     } else {
    146         if (!IsEnabled()) {
    147             if (fDisabledOne)
    148                 DrawBitmap(fDisabledOne, BPoint(0,0));
    149             else
    150                 StrokeRect(Bounds());
    151             return;
    152         }
    153 
    154         if (Value() == B_CONTROL_ON) {
    155             if (fDownOne)
    156                 DrawBitmap(fDownOne, BPoint(0,0));
    157             else
    158                 StrokeRect(Bounds());
    159         } else {
    160             if (fUpOne)
    161                 DrawBitmap(fUpOne, BPoint(0,0));
    162             else
    163                 StrokeRect(Bounds());
    164         }
    165     }
    166 }
  • deleted file src/apps/cdplayer/TwoStateDrawButton.h

    diff --git a/src/apps/cdplayer/TwoStateDrawButton.h b/src/apps/cdplayer/TwoStateDrawButton.h
    deleted file mode 100644
    index 65d7080..0000000
    + -  
    1 /*
    2  * Copyright (c) 2006-2007, Haiku, Inc.
    3  * Distributed under the terms of the MIT license.
    4  *
    5  * Author:
    6  *      DarkWyrm <bpmagic@columbus.rr.com>
    7  */
    8 #ifndef _TWOSTATE_DRAWBUTTON_H
    9 #define _TWOSTATE_DRAWBUTTON_H
    10 
    11 
    12 #include <Bitmap.h>
    13 #include <Button.h>
    14 #include <View.h>
    15 #include <Window.h>
    16 
    17 
    18 class TwoStateDrawButton : public BButton {
    19     public:
    20         TwoStateDrawButton(BRect frame, const char *name, BBitmap *upone,
    21             BBitmap *downone, BBitmap *uptwo, BBitmap *downtwo,
    22             BMessage *msg, const int32 &resize, const int32 &flags);
    23 
    24         ~TwoStateDrawButton();
    25 
    26         void Draw(BRect update);
    27 
    28         void SetBitmaps(BBitmap *upone, BBitmap *downone, BBitmap *uptwo,
    29             BBitmap *downtwo);
    30 
    31         void SetBitmaps(const int32 state, BBitmap *up, BBitmap *down);
    32         void ResizeToPreferred();
    33         void SetDisabled(BBitmap *disabledone, BBitmap *disabledtwo);
    34         void MouseUp(BPoint pt);
    35 
    36         int32 GetState() { return fButtonState ? 1 : 0; };
    37         void SetState(int32 value);
    38 
    39     private:
    40         BBitmap *fUpOne,
    41                 *fDownOne,
    42                 *fUpTwo,
    43                 *fDownTwo,
    44                 *fDisabledOne,
    45                 *fDisabledTwo;
    46 
    47         bool fButtonState;
    48             // true if in state two
    49 };
    50 
    51 #endif  // _TWOSTATE_DRAWBUTTON_H
  • deleted file src/apps/cdplayer/VolumeSlider.cpp

    diff --git a/src/apps/cdplayer/VolumeSlider.cpp b/src/apps/cdplayer/VolumeSlider.cpp
    deleted file mode 100644
    index fe63bbe..0000000
    + -  
    1 /*
    2  * Copyright 2009, Haiku.
    3  * Distributed under the terms of the MIT License.
    4  *
    5  * Authors:
    6  *      Stephan Aßmus, superstippi@gmx.de
    7  *      Jonas Sundström, jonas@kirilla.com
    8  */
    9 
    10 
    11 #include "VolumeSlider.h"
    12 
    13 
    14 VolumeSlider::VolumeSlider(BRect frame, const char* name, int32 minValue,
    15     int32 maxValue, BMessage* message, BHandler* target)
    16     :
    17     BSlider(frame, name, NULL, message, minValue, maxValue)
    18 {
    19     SetTarget(target);
    20 }
    21 
    22 
    23 VolumeSlider::~VolumeSlider()
    24 {
    25 }
    26 
    27 
    28 void
    29 VolumeSlider::SetValue(int32 value)
    30 {
    31     if (value == Value())
    32         return;
    33 
    34     BSlider::SetValue(value);
    35     Invoke();
    36 }
    37 
  • deleted file src/apps/cdplayer/VolumeSlider.h

    diff --git a/src/apps/cdplayer/VolumeSlider.h b/src/apps/cdplayer/VolumeSlider.h
    deleted file mode 100644
    index ce1e6b3..0000000
    + -  
    1 /*
    2  * Copyright 2009, Haiku.
    3  * Distributed under the terms of the MIT License.
    4  *
    5  * Authors:
    6  *      Stephan Aßmus, superstippi@gmx.de
    7  *      Jonas Sundström, jonas@kirilla.com
    8  */
    9 #ifndef VOLUME_SLIDER_H
    10 #define VOLUME_SLIDER_H
    11 
    12 
    13 #include <Slider.h>
    14 
    15 
    16 class VolumeSlider : public BSlider {
    17 public:
    18                             VolumeSlider(BRect frame, const char* name,
    19                                 int32 minValue, int32 maxValue,
    20                                 BMessage* message = NULL,
    21                                 BHandler* target = NULL);
    22 
    23     virtual                 ~VolumeSlider();
    24     virtual void            SetValue(int32 value);
    25 
    26 };
    27 
    28 #endif  // VOLUME_SLIDER_H
    29