experiment with twirling icon while core API downloads

This commit is contained in:
David Rose 2011-08-25 00:52:17 +00:00
parent 84187f6e6d
commit 939fc2da2d
6 changed files with 939 additions and 11 deletions

View File

@ -181,7 +181,8 @@
find_root_dir.cxx find_root_dir.h \
$[if $[IS_OSX],find_root_dir_assist.mm] \
is_pathsep.h is_pathsep.I \
mkdir_complete.cxx mkdir_complete.h
mkdir_complete.cxx mkdir_complete.h \
get_twirl_data.cxx get_twirl_data.h
#begin static_lib_target
//

View File

@ -0,0 +1,739 @@
// Filename: get_twirl_data.cxx
// Created by: drose (24Aug11)
//
////////////////////////////////////////////////////////////////////
//
// PANDA 3D SOFTWARE
// Copyright (c) Carnegie Mellon University. All rights reserved.
//
// All use of this software is subject to the terms of the revised BSD
// license. You should have received a copy of this license along
// with this source code in a file named "LICENSE."
//
////////////////////////////////////////////////////////////////////
#include "get_twirl_data.h"
#include "string.h"
struct twirl_flip {
int _index;
bool _flip_x;
bool _flip_y;
bool _exchange;
};
static twirl_flip twirl_flip_table[twirl_num_steps] = {
{ 0, false, false, false }, // 0
{ 1, false, false, false }, // 30
{ 2, false, false, false }, // 60
{ 0, false, true, true }, // 90
{ 1, false, true, true }, // 120
{ 2, false, true, true }, // 150
{ 0, true, true, false }, // 180
{ 1, true, true, false }, // 210
{ 2, true, true, false }, // 240
{ 0, true, false, true }, // 270
{ 1, true, false, true }, // 300
{ 2, true, false, true } // 330
};
// These tables are the raw data for the twirl icon data. They're
// extracted with bin2c from the three layers of twirl.xcf, in this
// directory.
static const unsigned char twirl_0_data[] = {
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdc,
0x5a, 0x3c, 0x3c, 0x5a, 0xdc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xff, 0xff, 0xca, 0x15, 0x00, 0x00, 0x15, 0xca, 0xff, 0xff,
0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xff, 0xfe, 0xb0,
0xe4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcc, 0x1a, 0x00, 0x00,
0x1a, 0xcc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xf2, 0xfe,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe,
0xff, 0xc4, 0x45, 0x29, 0x94, 0xfc, 0xfe, 0xff, 0xff, 0xff, 0xff,
0xcc, 0x1a, 0x00, 0x00, 0x1a, 0xcc, 0xff, 0xff, 0xff, 0xff, 0xfe,
0xfe, 0xec, 0xdf, 0xe4, 0xf6, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x97, 0x28, 0x2a, 0x29, 0x2e, 0xe5, 0xff,
0xfe, 0xff, 0xff, 0xff, 0xcc, 0x1a, 0x00, 0x00, 0x1a, 0xcc, 0xff,
0xff, 0xff, 0xfe, 0xff, 0xf9, 0xdf, 0xdf, 0xdf, 0xdf, 0xf0, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xcb, 0x33, 0x2b,
0x2b, 0x23, 0x6b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcc, 0x1a, 0x00,
0x00, 0x1a, 0xcc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe6, 0xdf, 0xe0,
0xdf, 0xe2, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x80, 0x25, 0x2b, 0x2a, 0x24, 0xba, 0xff, 0xfe, 0xff,
0xff, 0xcc, 0x1a, 0x00, 0x00, 0x1a, 0xcc, 0xff, 0xff, 0xfe, 0xff,
0xf1, 0xdf, 0xe0, 0xe0, 0xde, 0xf0, 0xff, 0xfe, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfb, 0x35, 0x29, 0x2b, 0x2a,
0x43, 0xf8, 0xff, 0xff, 0xff, 0xcc, 0x1a, 0x00, 0x00, 0x1a, 0xcc,
0xff, 0xfe, 0xff, 0xfb, 0xe2, 0xdf, 0xe0, 0xdf, 0xe4, 0xff, 0xff,
0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff,
0xb7, 0x22, 0x2a, 0x2b, 0x2d, 0x92, 0xff, 0xff, 0xff, 0xcc, 0x1a,
0x00, 0x00, 0x1a, 0xcc, 0xff, 0xff, 0xff, 0xec, 0xe0, 0xe0, 0xdf,
0xde, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfe,
0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xfe,
0xff, 0xff, 0xff, 0xfe, 0xfa, 0x62, 0x25, 0x2b, 0x29, 0x45, 0xde,
0xff, 0xff, 0xcc, 0x1a, 0x00, 0x00, 0x1a, 0xcc, 0xff, 0xff, 0xf8,
0xe2, 0xdf, 0xdf, 0xdf, 0xeb, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xfe,
0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff,
0xaf, 0xdc, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xc4, 0x35,
0x2a, 0x2a, 0x26, 0x8a, 0xfc, 0xff, 0xcc, 0x1a, 0x00, 0x00, 0x1a,
0xcc, 0xff, 0xfe, 0xeb, 0xdf, 0xdf, 0xdf, 0xe2, 0xf8, 0xff, 0xff,
0xff, 0xff, 0xfe, 0xff, 0xff, 0xf3, 0xe8, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xd1, 0x55, 0x60, 0xa4, 0xff, 0xff, 0xfe, 0xff,
0xff, 0xff, 0xfe, 0x70, 0x2a, 0x2b, 0x2a, 0x29, 0xe1, 0xff, 0xcc,
0x1a, 0x00, 0x00, 0x1a, 0xcc, 0xff, 0xf7, 0xde, 0xdf, 0xe0, 0xe0,
0xec, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfe, 0xe3, 0xd3, 0xd1,
0xf3, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x6c, 0x57, 0x57, 0x52,
0x65, 0xce, 0xfc, 0xff, 0xff, 0xfe, 0xff, 0xd5, 0x37, 0x2a, 0x2b,
0x25, 0x60, 0xff, 0xcc, 0x1a, 0x00, 0x00, 0x1a, 0xcc, 0xff, 0xe4,
0xdf, 0xe0, 0xdf, 0xe2, 0xfb, 0xff, 0xfe, 0xff, 0xff, 0xfe, 0xef,
0xd4, 0xd0, 0xd2, 0xd1, 0xd7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbe,
0x56, 0x57, 0x58, 0x58, 0x56, 0x51, 0x8a, 0xd5, 0xff, 0xff, 0xfe,
0xff, 0x86, 0x24, 0x2b, 0x2b, 0x20, 0xb5, 0xd3, 0x13, 0x00, 0x00,
0x14, 0xcc, 0xf1, 0xde, 0xe0, 0xe0, 0xdf, 0xf1, 0xff, 0xfe, 0xff,
0xfe, 0xf2, 0xdd, 0xd0, 0xd1, 0xd2, 0xd2, 0xd1, 0xd1, 0xee, 0xff,
0xff, 0xff, 0xff, 0xe8, 0xa4, 0x57, 0x52, 0x58, 0x58, 0x57, 0x53,
0x62, 0x93, 0xe4, 0xff, 0xff, 0xf9, 0x41, 0x28, 0x2b, 0x25, 0x38,
0xca, 0x70, 0x74, 0x74, 0x6f, 0xd7, 0xe1, 0xdf, 0xe0, 0xdf, 0xe6,
0xff, 0xff, 0xff, 0xf5, 0xe0, 0xd4, 0xd0, 0xd1, 0xd2, 0xd1, 0xd0,
0xd3, 0xe9, 0xf9, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfc, 0xe6, 0x83,
0x52, 0x57, 0x58, 0x58, 0x57, 0x57, 0x63, 0xa8, 0xfd, 0xff, 0xc5,
0x1e, 0x21, 0x63, 0xd6, 0xfc, 0xf8, 0xfa, 0xfa, 0xf8, 0xfc, 0xf9,
0xe8, 0xde, 0xdf, 0xf9, 0xff, 0xfd, 0xe4, 0xd4, 0xd1, 0xd1, 0xd2,
0xd2, 0xd1, 0xd1, 0xe1, 0xfa, 0xfe, 0xff, 0xfe, 0xff, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xc1, 0x68, 0x59, 0x57, 0x57, 0x58, 0x57,
0x52, 0x70, 0xd8, 0xf3, 0x73, 0xa6, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xff, 0xfe, 0xff, 0xff, 0xf1, 0xed, 0xfc, 0xf2, 0xd6, 0xd0,
0xd1, 0xd2, 0xd1, 0xd1, 0xd2, 0xd7, 0xf0, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xf4, 0xa3,
0x6a, 0x53, 0x57, 0x58, 0x58, 0x55, 0x4f, 0x98, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xe1, 0xcf, 0xd1, 0xd2, 0xd2, 0xd1, 0xd1, 0xd8, 0xe8, 0xfe, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xe1, 0x9d, 0x54, 0x54, 0x58, 0x58, 0x50,
0xb8, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xec, 0xd0, 0xd2, 0xd2, 0xd0, 0xd2, 0xe7,
0xf8, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0xe2,
0x7a, 0x50, 0x53, 0x84, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xde, 0xd0,
0xd0, 0xde, 0xf9, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xbc, 0x5f, 0xdf, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xf6, 0xd5, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xeb, 0xe2, 0xe3, 0xe3,
0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe9, 0xda,
0xfd, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xf3, 0xf4, 0xf2, 0xf2,
0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf6,
0xa4, 0x7e, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
0x81, 0x81, 0x7e, 0xb1, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
0xdc, 0xc6, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7,
0xc7, 0xc7, 0xc6, 0xd7, 0x94, 0x6f, 0x72, 0x72, 0x72, 0x72, 0x72,
0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x6e, 0xb2, 0xfc, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xfd, 0xdd, 0xbe, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xbf, 0xcf, 0x94, 0x6f, 0x72,
0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x6e,
0xb2, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xdd, 0xbe, 0xc0,
0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xbf,
0xcf, 0xa4, 0x7e, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
0x81, 0x81, 0x81, 0x7e, 0xb0, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xfd, 0xdd, 0xc6, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7,
0xc7, 0xc7, 0xc7, 0xc6, 0xd7, 0xeb, 0xe2, 0xe3, 0xe3, 0xe3, 0xe3,
0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe6, 0xe1, 0xfd, 0xfe,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xfe, 0xfe, 0xf0, 0xf5, 0xf2, 0xf2, 0xf2, 0xf2,
0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf6, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xd8, 0xa4, 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xb6, 0xe4,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff,
0xff, 0xfd, 0xed, 0xb2, 0x9c, 0x9e, 0xba, 0xff, 0xff, 0xfe, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff,
0xff, 0xc6, 0xaf, 0xae, 0xc5, 0xf3, 0xfe, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xed, 0xc7, 0x9e, 0x9f, 0xa1, 0xa1, 0x9c,
0xd7, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xdf, 0xae, 0xb2, 0xb2, 0xb0, 0xb1, 0xd4,
0xf3, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xf8, 0xca, 0xaa, 0x9e, 0xa0,
0xa1, 0xa1, 0x9f, 0x9c, 0xc6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcc, 0xad, 0xb0,
0xb2, 0xb2, 0xb1, 0xb0, 0xbb, 0xd7, 0xfc, 0xff, 0xff, 0xfe, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xda, 0xa9,
0xa1, 0xa0, 0xa0, 0xa1, 0xa0, 0x9d, 0xb0, 0xea, 0xf9, 0xbd, 0xd8,
0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xd7,
0xc5, 0xf9, 0xea, 0xba, 0xaf, 0xb1, 0xb2, 0xb1, 0xb1, 0xb2, 0xba,
0xe6, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfd,
0xf0, 0xb7, 0x9d, 0xa0, 0xa1, 0xa1, 0xa0, 0xa1, 0xa7, 0xd0, 0xfe,
0xff, 0xdf, 0x9b, 0x9c, 0xba, 0xed, 0xfe, 0xfc, 0xfd, 0xfd, 0xfc,
0xfd, 0xed, 0xba, 0x9c, 0x9c, 0xe9, 0xff, 0xfc, 0xd3, 0xb6, 0xb1,
0xb1, 0xb2, 0xb2, 0xb1, 0xaf, 0xc9, 0xf5, 0xfe, 0xff, 0xfe, 0xff,
0xff, 0xff, 0xf1, 0xca, 0xa0, 0x9e, 0xa1, 0xa1, 0xa0, 0x9e, 0xa7,
0xc3, 0xf1, 0xff, 0xff, 0xfa, 0xa7, 0xa0, 0xa1, 0x9e, 0xa9, 0xed,
0xca, 0xcc, 0xcc, 0xca, 0xe8, 0xa4, 0x9e, 0xa1, 0x9f, 0xae, 0xfd,
0xff, 0xff, 0xef, 0xca, 0xb5, 0xaf, 0xb1, 0xb2, 0xb1, 0xaf, 0xb3,
0xd8, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xda, 0xa0, 0xa0, 0xa1, 0xa1,
0x9f, 0x9d, 0xbf, 0xe8, 0xff, 0xff, 0xfe, 0xff, 0xc4, 0x9e, 0xa1,
0xa1, 0x9c, 0xe4, 0xef, 0xa8, 0x9d, 0x9d, 0xa8, 0xf0, 0xd9, 0x9c,
0xa1, 0xa1, 0x9e, 0xce, 0xff, 0xfe, 0xff, 0xfe, 0xe9, 0xc6, 0xae,
0xb1, 0xb2, 0xb2, 0xb1, 0xb1, 0xe2, 0xff, 0xff, 0xff, 0xff, 0xff,
0xac, 0xa0, 0xa0, 0x9d, 0xaa, 0xe5, 0xfd, 0xff, 0xff, 0xfe, 0xff,
0xe7, 0xa5, 0xa0, 0xa1, 0x9e, 0xbf, 0xff, 0xec, 0xaa, 0xa0, 0xa0,
0xaa, 0xec, 0xff, 0xb4, 0x9f, 0xa1, 0xa0, 0xa7, 0xf0, 0xff, 0xfe,
0xff, 0xff, 0xfd, 0xe5, 0xb6, 0xaf, 0xb2, 0xb1, 0xbc, 0xff, 0xff,
0xff, 0xff, 0xfe, 0xff, 0xe5, 0x9f, 0xa6, 0xcd, 0xff, 0xff, 0xfe,
0xff, 0xff, 0xff, 0xfd, 0xbc, 0xa0, 0xa1, 0xa0, 0xa3, 0xf5, 0xff,
0xec, 0xaa, 0xa0, 0xa0, 0xaa, 0xec, 0xff, 0xee, 0x9f, 0xa0, 0xa1,
0xa0, 0xc2, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfd, 0xd1, 0xb5,
0xb0, 0xe9, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xd2, 0xec,
0xff, 0xff, 0xfe, 0xff, 0xff, 0xfe, 0xff, 0xe1, 0xa3, 0xa0, 0xa0,
0x9f, 0xd0, 0xfe, 0xff, 0xec, 0xaa, 0xa0, 0xa0, 0xaa, 0xec, 0xff,
0xfd, 0xc7, 0x9e, 0xa0, 0xa0, 0xa6, 0xe7, 0xff, 0xff, 0xff, 0xff,
0xfe, 0xff, 0xff, 0xec, 0xd9, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xfc,
0xb4, 0x9e, 0xa1, 0xa0, 0xaf, 0xf3, 0xff, 0xff, 0xec, 0xaa, 0xa0,
0xa0, 0xaa, 0xec, 0xff, 0xff, 0xee, 0xab, 0xa0, 0xa1, 0x9e, 0xbd,
0xfd, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xd9, 0x9d, 0xa0, 0xa1, 0xa2, 0xd3, 0xff, 0xff,
0xff, 0xec, 0xaa, 0xa0, 0xa0, 0xaa, 0xec, 0xff, 0xff, 0xff, 0xcb,
0xa1, 0xa1, 0xa0, 0x9d, 0xe4, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff,
0xfe, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfa, 0xa2, 0xa0, 0xa1, 0xa0,
0xae, 0xff, 0xff, 0xff, 0xff, 0xec, 0xaa, 0xa0, 0xa0, 0xaa, 0xec,
0xff, 0xff, 0xff, 0xf9, 0xaa, 0xa0, 0xa1, 0xa0, 0xa9, 0xff, 0xff,
0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc1,
0x9f, 0xa1, 0xa0, 0x9f, 0xe6, 0xff, 0xfe, 0xff, 0xff, 0xec, 0xaa,
0xa0, 0xa0, 0xaa, 0xec, 0xff, 0xff, 0xfe, 0xff, 0xdc, 0x9d, 0xa1,
0xa1, 0x9e, 0xcb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xfe, 0xff, 0xe3, 0xa3, 0xa1, 0xa1, 0x9c, 0xc3, 0xff, 0xfe, 0xff,
0xff, 0xff, 0xec, 0xaa, 0xa0, 0xa0, 0xaa, 0xec, 0xff, 0xff, 0xff,
0xff, 0xff, 0xb9, 0x9e, 0xa1, 0xa0, 0xa5, 0xeb, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0x9f, 0xa0, 0xa0, 0xa6,
0xf6, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xec, 0xaa, 0xa0, 0xa0, 0xaa,
0xec, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xf1, 0xa0, 0xa0, 0xa0, 0x9f,
0xd2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xff,
0xe5, 0xac, 0xa0, 0xd4, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xec,
0xaa, 0xa0, 0xa0, 0xaa, 0xec, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfd,
0xcc, 0xa0, 0xac, 0xe5, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xde, 0xf4, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xec, 0xaa, 0xa0, 0xa0, 0xaa, 0xec, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xf2, 0xdb, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xec, 0xa9, 0x9e, 0x9e,
0xa9, 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff,
0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xf2, 0xc2, 0xb7, 0xb7, 0xc2, 0xf2, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff
};
static const unsigned char twirl_30_data[] = {
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe2,
0x73, 0x58, 0x57, 0x70, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xff, 0xff, 0xd5, 0x3e, 0x26, 0x26, 0x3b, 0xd2, 0xff, 0xff,
0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xff, 0xfe, 0xbd,
0xe8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd6, 0x42, 0x2a, 0x2a,
0x3f, 0xd3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdd, 0x98, 0xf9,
0xff, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe,
0xff, 0xd1, 0x6c, 0x56, 0xa4, 0xfc, 0xfe, 0xff, 0xff, 0xff, 0xff,
0xd6, 0x42, 0x2a, 0x2a, 0x3f, 0xd3, 0xff, 0xff, 0xff, 0xff, 0xfe,
0xfb, 0x7d, 0x00, 0x19, 0xad, 0xff, 0xfe, 0xfe, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xb0, 0x55, 0x57, 0x57, 0x57, 0xe6, 0xff,
0xfe, 0xff, 0xff, 0xff, 0xd6, 0x42, 0x2a, 0x2a, 0x3f, 0xd3, 0xff,
0xff, 0xff, 0xfe, 0xff, 0xdf, 0x04, 0x00, 0x00, 0x00, 0x7a, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xdb, 0x60, 0x57,
0x58, 0x53, 0x82, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd6, 0x42, 0x2a,
0x2a, 0x3f, 0xd3, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x00, 0x00,
0x00, 0x0a, 0xc1, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xa3, 0x52, 0x58, 0x58, 0x52, 0xc1, 0xff, 0xfe, 0xff,
0xff, 0xd6, 0x42, 0x2a, 0x2a, 0x3f, 0xd3, 0xff, 0xff, 0xfe, 0xff,
0xab, 0x00, 0x00, 0x00, 0x00, 0x67, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfe, 0x65, 0x56, 0x58, 0x57,
0x68, 0xf4, 0xff, 0xfe, 0xff, 0xd6, 0x42, 0x2a, 0x2a, 0x3f, 0xd3,
0xff, 0xff, 0xff, 0xf7, 0x1c, 0x00, 0x00, 0x00, 0x0d, 0xfa, 0xff,
0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff,
0xce, 0x51, 0x57, 0x58, 0x59, 0xa3, 0xff, 0xff, 0xff, 0xd6, 0x42,
0x2a, 0x2a, 0x3f, 0xd3, 0xff, 0xff, 0xff, 0x7c, 0x02, 0x00, 0x00,
0x00, 0xa9, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfe,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
0xff, 0xff, 0xff, 0xfe, 0xfb, 0x89, 0x53, 0x58, 0x57, 0x69, 0xe0,
0xff, 0xff, 0xd6, 0x42, 0x2a, 0x2a, 0x3f, 0xd3, 0xff, 0xff, 0xd7,
0x20, 0x00, 0x00, 0x00, 0x42, 0xfa, 0xfe, 0xff, 0xff, 0xff, 0xfe,
0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff,
0xbc, 0xda, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xd5, 0x62,
0x57, 0x57, 0x53, 0x9d, 0xfc, 0xff, 0xd6, 0x42, 0x2a, 0x2a, 0x3f,
0xd3, 0xff, 0xfb, 0x72, 0x00, 0x00, 0x00, 0x0c, 0xb8, 0xff, 0xff,
0xff, 0xff, 0xfe, 0xff, 0xff, 0xf6, 0xee, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xdc, 0x71, 0x78, 0xa9, 0xfb, 0xff, 0xfe, 0xff,
0xff, 0xff, 0xff, 0x93, 0x57, 0x58, 0x57, 0x54, 0xe1, 0xff, 0xd6,
0x42, 0x2a, 0x2a, 0x3f, 0xd3, 0xff, 0xda, 0x00, 0x00, 0x00, 0x00,
0x53, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfd, 0xea, 0xe1, 0xdf,
0xf5, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x85, 0x72, 0x73, 0x6f,
0x78, 0xcd, 0xfc, 0xff, 0xff, 0xfe, 0xff, 0xe4, 0x63, 0x57, 0x58,
0x54, 0x79, 0xff, 0xd6, 0x42, 0x2a, 0x2a, 0x3f, 0xd3, 0xff, 0x40,
0x00, 0x00, 0x00, 0x0f, 0xcd, 0xff, 0xfe, 0xff, 0xff, 0xfe, 0xf2,
0xe0, 0xdf, 0xe0, 0xdf, 0xe3, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xcd,
0x71, 0x72, 0x73, 0x73, 0x72, 0x6d, 0x95, 0xd6, 0xfd, 0xff, 0xfe,
0xff, 0xa8, 0x52, 0x58, 0x58, 0x50, 0xbc, 0xdb, 0x3c, 0x23, 0x23,
0x39, 0xdb, 0xa6, 0x00, 0x00, 0x00, 0x00, 0x6e, 0xff, 0xfe, 0xff,
0xfe, 0xf5, 0xe6, 0xde, 0xdf, 0xe0, 0xe0, 0xdf, 0xdf, 0xf3, 0xff,
0xff, 0xff, 0xff, 0xee, 0xb9, 0x76, 0x6d, 0x72, 0x73, 0x72, 0x6f,
0x78, 0x9f, 0xe0, 0xff, 0xff, 0xfc, 0x70, 0x55, 0x58, 0x53, 0x5f,
0xd2, 0x8b, 0x8e, 0x8f, 0x8b, 0xd0, 0x10, 0x00, 0x00, 0x00, 0x1b,
0xf8, 0xff, 0xff, 0xf7, 0xe8, 0xe1, 0xdf, 0xdf, 0xe0, 0xdf, 0xde,
0xe1, 0xf0, 0xfb, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfd, 0xee, 0x9e,
0x6f, 0x72, 0x73, 0x73, 0x72, 0x72, 0x7a, 0xad, 0xfa, 0xff, 0xd8,
0x4f, 0x50, 0x85, 0xdf, 0xfc, 0xfa, 0xfb, 0xfb, 0xfa, 0xfc, 0xd4,
0x4f, 0x00, 0x00, 0xba, 0xff, 0xfd, 0xec, 0xe1, 0xdf, 0xdf, 0xe0,
0xe0, 0xdf, 0xdf, 0xeb, 0xfc, 0xfe, 0xff, 0xfe, 0xff, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xd3, 0x83, 0x74, 0x72, 0x72, 0x73, 0x72,
0x6f, 0x7f, 0xd6, 0xf5, 0x97, 0xb7, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xff, 0xfe, 0xff, 0xff, 0x9f, 0x5b, 0xf5, 0xf4, 0xe1, 0xdf,
0xdf, 0xe0, 0xdf, 0xdf, 0xe0, 0xe4, 0xf7, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfb, 0xb8,
0x85, 0x6f, 0x72, 0x73, 0x73, 0x71, 0x6a, 0xa0, 0xfe, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xe9, 0xdd, 0xdf, 0xe0, 0xe0, 0xdf, 0xdf, 0xe4, 0xf0, 0xff, 0xff,
0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xea, 0xb3, 0x72, 0x6f, 0x73, 0x73, 0x6c,
0xc1, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xf4, 0xde, 0xe0, 0xe0, 0xdf, 0xe1, 0xef,
0xfb, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xec,
0x98, 0x6b, 0x6f, 0x94, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xea, 0xde,
0xde, 0xea, 0xfb, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xd0, 0x7b, 0xdf, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xfa, 0xe3, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0xe9, 0xe9, 0xe9,
0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xee, 0xe4,
0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xf7, 0xf5, 0xf4, 0xf4,
0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf8,
0xc3, 0xa5, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
0xa8, 0xa8, 0xa5, 0xc7, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
0xe6, 0xd4, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5,
0xd5, 0xd5, 0xd4, 0xdf, 0xba, 0x9e, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0,
0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0x9d, 0xc8, 0xfc, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xfe, 0xe7, 0xd0, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1,
0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xdb, 0xba, 0x9e, 0xa0,
0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0x9d,
0xc8, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xe7, 0xd0, 0xd1,
0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1,
0xdb, 0xc6, 0xaa, 0xac, 0xac, 0xac, 0xac, 0xac, 0xad, 0xac, 0xac,
0xac, 0xac, 0xac, 0xab, 0xca, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xfe, 0xe8, 0xd6, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7,
0xd7, 0xd7, 0xd7, 0xd7, 0xe1, 0xf4, 0xee, 0xee, 0xee, 0xee, 0xee,
0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xf2, 0xe5, 0xfd, 0xfe,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xfe, 0xfe, 0xf3, 0xf9, 0xf7, 0xf7, 0xf7, 0xf7,
0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf9, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xd2, 0xa2, 0xe8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0xc3, 0xe5,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff,
0xff, 0xfd, 0xe9, 0xae, 0x9d, 0x9e, 0xb5, 0xff, 0xff, 0xfe, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff,
0xff, 0xd2, 0xbf, 0xbe, 0xcc, 0xf3, 0xfe, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xeb, 0xc2, 0x9d, 0x9f, 0xa1, 0xa1, 0x9c,
0xd2, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xe6, 0xbe, 0xc1, 0xc1, 0xbf, 0xbf, 0xd9,
0xf3, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xf5, 0xc6, 0xa9, 0x9e, 0xa0,
0xa1, 0xa1, 0x9e, 0x9d, 0xc9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xda, 0xbd, 0xbf,
0xc1, 0xc1, 0xc0, 0xbf, 0xc7, 0xdc, 0xfa, 0xff, 0xff, 0xfe, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xd5, 0xa8,
0xa1, 0xa0, 0xa0, 0xa1, 0xa0, 0x9d, 0xb3, 0xed, 0xfa, 0xc4, 0xd3,
0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xdf,
0xcc, 0xfa, 0xf1, 0xca, 0xbe, 0xc0, 0xc1, 0xc0, 0xc0, 0xc1, 0xc6,
0xe7, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfc,
0xed, 0xb3, 0x9d, 0xa0, 0xa1, 0xa1, 0xa0, 0xa1, 0xa8, 0xd4, 0xff,
0xff, 0xe9, 0x9c, 0x9c, 0xb6, 0xe9, 0xfd, 0xfc, 0xfd, 0xfd, 0xfc,
0xfe, 0xef, 0xc6, 0xae, 0xad, 0xea, 0xff, 0xfe, 0xdf, 0xc5, 0xc1,
0xc0, 0xc1, 0xc1, 0xc0, 0xbe, 0xcf, 0xf5, 0xfd, 0xff, 0xfe, 0xff,
0xff, 0xff, 0xf0, 0xc7, 0x9d, 0x9e, 0xa1, 0xa1, 0xa0, 0x9e, 0xa8,
0xc6, 0xf4, 0xff, 0xff, 0xfd, 0xad, 0x9f, 0xa1, 0x9e, 0xa4, 0xe7,
0xc9, 0xca, 0xca, 0xc8, 0xeb, 0xb6, 0xaf, 0xb2, 0xb1, 0xba, 0xfc,
0xff, 0xff, 0xf6, 0xd7, 0xc5, 0xbf, 0xc0, 0xc1, 0xc1, 0xbf, 0xc0,
0xdc, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xa0, 0xa0, 0xa1, 0xa1,
0x9f, 0x9d, 0xc2, 0xea, 0xff, 0xff, 0xfe, 0xff, 0xcd, 0x9d, 0xa1,
0xa1, 0x9c, 0xd9, 0xf0, 0xa9, 0x9d, 0x9d, 0xa7, 0xee, 0xe4, 0xad,
0xb2, 0xb2, 0xaf, 0xd3, 0xff, 0xfe, 0xff, 0xff, 0xf0, 0xd4, 0xbe,
0xc0, 0xc1, 0xc1, 0xc0, 0xc0, 0xe5, 0xff, 0xff, 0xff, 0xff, 0xff,
0xaf, 0xa0, 0xa0, 0x9d, 0xad, 0xe9, 0xfd, 0xff, 0xff, 0xfe, 0xff,
0xef, 0xa7, 0xa0, 0xa1, 0x9f, 0xb3, 0xff, 0xed, 0xab, 0xa0, 0xa0,
0xaa, 0xeb, 0xff, 0xc6, 0xb0, 0xb2, 0xb1, 0xb6, 0xef, 0xff, 0xfe,
0xff, 0xff, 0xfd, 0xee, 0xc7, 0xbe, 0xc0, 0xc0, 0xc7, 0xfe, 0xff,
0xff, 0xff, 0xfe, 0xff, 0xea, 0xa0, 0xa7, 0xd1, 0xff, 0xff, 0xfe,
0xff, 0xff, 0xff, 0xff, 0xc2, 0xa0, 0xa1, 0xa0, 0x9e, 0xee, 0xff,
0xec, 0xab, 0xa0, 0xa0, 0xaa, 0xeb, 0xff, 0xf3, 0xb1, 0xb1, 0xb2,
0xb1, 0xcb, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xdd, 0xc4,
0xc0, 0xec, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xd7, 0xef,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xa6, 0xa0, 0xa0,
0x9e, 0xc7, 0xfd, 0xff, 0xec, 0xab, 0xa0, 0xa0, 0xaa, 0xeb, 0xff,
0xfe, 0xd4, 0xb0, 0xb1, 0xb1, 0xb5, 0xe9, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xf2, 0xe1, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xfd,
0xbc, 0x9e, 0xa1, 0xa0, 0xaa, 0xed, 0xff, 0xff, 0xec, 0xab, 0xa0,
0xa0, 0xaa, 0xeb, 0xff, 0xff, 0xf3, 0xbb, 0xb1, 0xb2, 0xb0, 0xc5,
0xfd, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xfe,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xe3, 0x9d, 0xa0, 0xa1, 0xa1, 0xcb, 0xff, 0xff,
0xff, 0xec, 0xab, 0xa0, 0xa0, 0xaa, 0xeb, 0xff, 0xff, 0xff, 0xd7,
0xb2, 0xb2, 0xb1, 0xae, 0xe4, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xa8, 0xa0, 0xa1, 0xa0,
0xa9, 0xf9, 0xff, 0xff, 0xff, 0xec, 0xab, 0xa0, 0xa0, 0xaa, 0xeb,
0xff, 0xff, 0xff, 0xfc, 0xba, 0xb1, 0xb2, 0xb1, 0xb6, 0xfd, 0xff,
0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xca,
0x9e, 0xa1, 0xa1, 0x9d, 0xdb, 0xff, 0xfe, 0xff, 0xff, 0xec, 0xab,
0xa0, 0xa0, 0xaa, 0xeb, 0xff, 0xff, 0xfe, 0xff, 0xe5, 0xaf, 0xb1,
0xb2, 0xaf, 0xd1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xea, 0xa5, 0xa0, 0xa1, 0x9e, 0xb9, 0xff, 0xff, 0xff,
0xff, 0xff, 0xec, 0xab, 0xa0, 0xa0, 0xaa, 0xeb, 0xff, 0xff, 0xff,
0xff, 0xff, 0xc8, 0xaf, 0xb2, 0xb2, 0xb5, 0xec, 0xff, 0xfe, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd5, 0xa0, 0xa0, 0xa0, 0xa0,
0xf1, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xec, 0xab, 0xa0, 0xa0, 0xaa,
0xeb, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xf5, 0xb3, 0xb1, 0xb1, 0xb0,
0xd9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff,
0xe8, 0xae, 0xa0, 0xcb, 0xfd, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xec,
0xab, 0xa0, 0xa0, 0xaa, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfd,
0xd7, 0xb1, 0xbc, 0xe9, 0xff, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xdc, 0xf2, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xec, 0xab, 0xa0, 0xa0, 0xaa, 0xeb, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xf5, 0xe2, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xec, 0xa9, 0x9e, 0x9e,
0xa8, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff,
0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xf3, 0xc5, 0xb8, 0xb8, 0xc3, 0xf2, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff
};
static const unsigned char twirl_60_data[] = {
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xea,
0x93, 0x7b, 0x7b, 0x8c, 0xe4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xff, 0xff, 0xe1, 0x6a, 0x54, 0x54, 0x61, 0xd8, 0xff, 0xff,
0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xc8,
0xe8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe1, 0x6d, 0x57, 0x57,
0x64, 0xd9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3, 0xa8, 0xf8,
0xff, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
0xff, 0xdc, 0x85, 0x72, 0xaa, 0xfb, 0xfe, 0xff, 0xff, 0xff, 0xff,
0xe1, 0x6d, 0x57, 0x57, 0x64, 0xd9, 0xff, 0xff, 0xff, 0xff, 0xfe,
0xfc, 0x96, 0x28, 0x3e, 0xb6, 0xff, 0xfe, 0xfe, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xc2, 0x71, 0x72, 0x72, 0x6e, 0xe5, 0xff,
0xfe, 0xff, 0xff, 0xff, 0xe1, 0x6d, 0x57, 0x57, 0x64, 0xd9, 0xff,
0xff, 0xff, 0xfe, 0xff, 0xe6, 0x30, 0x29, 0x2a, 0x27, 0x8b, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0x7c, 0x72,
0x73, 0x6f, 0x8e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe1, 0x6d, 0x57,
0x57, 0x64, 0xd9, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6e, 0x23, 0x2b,
0x2b, 0x32, 0xc8, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xfe, 0xff, 0xba, 0x6d, 0x73, 0x73, 0x6d, 0xc0, 0xff, 0xfe, 0xff,
0xff, 0xe1, 0x6d, 0x57, 0x57, 0x64, 0xd9, 0xff, 0xff, 0xfe, 0xff,
0xbd, 0x25, 0x2a, 0x2b, 0x25, 0x7c, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x85, 0x71, 0x73, 0x72,
0x7e, 0xf0, 0xff, 0xfe, 0xff, 0xe1, 0x6d, 0x57, 0x57, 0x64, 0xd9,
0xff, 0xff, 0xff, 0xf9, 0x43, 0x2a, 0x2b, 0x29, 0x33, 0xf9, 0xff,
0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xde, 0x6d, 0x72, 0x73, 0x73, 0xab, 0xff, 0xff, 0xff, 0xe1, 0x6d,
0x57, 0x57, 0x64, 0xd9, 0xff, 0xff, 0xff, 0x95, 0x2d, 0x2b, 0x2a,
0x22, 0xb4, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfe,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe,
0xff, 0xff, 0xff, 0xfe, 0xfc, 0xa4, 0x6f, 0x73, 0x72, 0x7e, 0xe0,
0xff, 0xff, 0xe1, 0x6d, 0x57, 0x57, 0x64, 0xd9, 0xff, 0xff, 0xdf,
0x46, 0x29, 0x2b, 0x25, 0x5e, 0xfa, 0xfe, 0xff, 0xff, 0xff, 0xfe,
0xff, 0xff, 0xff, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff,
0xd4, 0xe1, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x7e,
0x72, 0x73, 0x6f, 0xa5, 0xfc, 0xff, 0xe1, 0x6d, 0x57, 0x57, 0x64,
0xd9, 0xff, 0xfc, 0x8d, 0x26, 0x2a, 0x2a, 0x34, 0xc2, 0xff, 0xfe,
0xff, 0xff, 0xfe, 0xff, 0xff, 0xca, 0x76, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xeb, 0x9f, 0xa3, 0xbf, 0xf9, 0xff, 0xfe, 0xfe,
0xff, 0xff, 0xff, 0xaa, 0x73, 0x73, 0x72, 0x6d, 0xdf, 0xff, 0xe1,
0x6d, 0x57, 0x57, 0x64, 0xd9, 0xff, 0xe2, 0x2b, 0x2a, 0x2b, 0x2a,
0x6e, 0xfd, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x73, 0x0d, 0x00,
0xa1, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xb0, 0xa0, 0xa1, 0x9f,
0xa1, 0xd7, 0xfc, 0xff, 0xff, 0xfe, 0xff, 0xef, 0x7e, 0x72, 0x73,
0x70, 0x86, 0xff, 0xe1, 0x6d, 0x57, 0x57, 0x64, 0xd9, 0xff, 0x64,
0x25, 0x2b, 0x2a, 0x37, 0xd2, 0xff, 0xfe, 0xff, 0xff, 0xfa, 0xb5,
0x14, 0x00, 0x00, 0x00, 0x15, 0xf3, 0xff, 0xfe, 0xff, 0xff, 0xe2,
0xa0, 0xa0, 0xa1, 0xa1, 0xa0, 0x9d, 0xb3, 0xe0, 0xfc, 0xff, 0xfe,
0xff, 0xbf, 0x6e, 0x73, 0x73, 0x6d, 0xbc, 0xe6, 0x69, 0x52, 0x52,
0x60, 0xe0, 0xb8, 0x20, 0x2b, 0x2b, 0x24, 0x83, 0xff, 0xfe, 0xff,
0xff, 0xbe, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8c, 0xff,
0xff, 0xff, 0xff, 0xf5, 0xd5, 0xa7, 0x9c, 0xa0, 0xa1, 0xa0, 0x9e,
0xa3, 0xbb, 0xe6, 0xff, 0xff, 0xff, 0x8d, 0x6f, 0x73, 0x6f, 0x75,
0xd7, 0xa5, 0xa6, 0xa7, 0xa2, 0xda, 0x3a, 0x24, 0x2b, 0x28, 0x3f,
0xf8, 0xff, 0xff, 0xd6, 0x5b, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x74, 0xda, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfe, 0xf6, 0xc5,
0x9f, 0xa0, 0xa1, 0xa1, 0xa0, 0xa0, 0xa5, 0xc2, 0xf9, 0xff, 0xe4,
0x6e, 0x6c, 0x95, 0xe2, 0xfc, 0xfb, 0xfc, 0xfc, 0xfb, 0xfd, 0xde,
0x70, 0x22, 0x1d, 0xc1, 0xff, 0xfb, 0x7a, 0x11, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x41, 0xd9, 0xfa, 0xff, 0xfe, 0xfe, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xe7, 0xaf, 0xa2, 0xa0, 0xa0, 0xa1, 0xa0,
0x9e, 0xa6, 0xde, 0xf8, 0xad, 0xbf, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xff, 0xfe, 0xff, 0xff, 0xb4, 0x75, 0xf0, 0xc3, 0x24, 0x00,
0x00, 0x00, 0x00, 0x00, 0x02, 0x18, 0xa0, 0xff, 0xff, 0xfe, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xff, 0xff, 0xd5,
0xaf, 0x9f, 0xa0, 0xa1, 0xa1, 0xa0, 0x9b, 0xba, 0xfd, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x73, 0xf0, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xf4, 0xd1, 0xa3, 0x9d, 0xa1, 0xa1, 0x9c,
0xd2, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69,
0xd1, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xf6,
0xc0, 0x9c, 0x9e, 0xb4, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x5b, 0x00,
0x00, 0x34, 0xd2, 0xfb, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xe5, 0xaa, 0xe6, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xdd, 0x0e, 0x98, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0xe7, 0xe8, 0xe8,
0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xea, 0xe8,
0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfd, 0xe7, 0xff, 0xf8, 0xf7,
0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf9,
0xc6, 0xa4, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6,
0xa6, 0xa6, 0xa4, 0xc2, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
0xf0, 0xe1, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe1, 0xe1, 0xe2,
0xe1, 0xe1, 0xe1, 0xe8, 0xbe, 0x9e, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0,
0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0x9e, 0xc5, 0xfc, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xfe, 0xf0, 0xde, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf,
0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xe5, 0xbe, 0x9e, 0xa0,
0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0x9e,
0xc5, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xef, 0xde, 0xdf,
0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf,
0xe5, 0xcb, 0xac, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
0xae, 0xae, 0xae, 0xac, 0xc8, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xfe, 0xf0, 0xe3, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4,
0xe4, 0xe4, 0xe4, 0xe4, 0xea, 0xf6, 0xef, 0xf0, 0xf0, 0xf0, 0xf0,
0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf4, 0xea, 0xfe, 0xfe,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xfe, 0xfe, 0xf6, 0xfc, 0xfa, 0xfa, 0xfa, 0xfa,
0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfb, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xde, 0xa6, 0xe5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xd3, 0xe8,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xfd, 0xf1, 0xb8, 0x9b, 0x9f, 0xb1, 0xff, 0xff, 0xfe, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff,
0xff, 0xe1, 0xd0, 0xd0, 0xd7, 0xf4, 0xfe, 0xff, 0xff, 0xfe, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xf0, 0xcb, 0xa0, 0x9e, 0xa1, 0xa1, 0x9d,
0xcf, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xee, 0xcf, 0xd2, 0xd2, 0xd1, 0xd0, 0xe1,
0xf5, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0xce, 0xac, 0x9e, 0xa0,
0xa1, 0xa1, 0x9f, 0x9b, 0xbf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe6, 0xd0, 0xd0,
0xd2, 0xd2, 0xd1, 0xd0, 0xd5, 0xe3, 0xf9, 0xff, 0xff, 0xfe, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xe0, 0xab,
0xa2, 0xa0, 0xa0, 0xa1, 0xa0, 0x9e, 0xaa, 0xe5, 0xf9, 0xc5, 0xd1,
0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xe7,
0xd4, 0xfb, 0xf6, 0xdb, 0xd0, 0xd1, 0xd2, 0xd2, 0xd1, 0xd2, 0xd5,
0xea, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfd,
0xf3, 0xbd, 0x9e, 0xa0, 0xa1, 0xa1, 0xa0, 0xa0, 0xa6, 0xc9, 0xfc,
0xff, 0xea, 0x9c, 0x9c, 0xb4, 0xe7, 0xfe, 0xfc, 0xfd, 0xfd, 0xfc,
0xfe, 0xf3, 0xd2, 0xbe, 0xbc, 0xea, 0xff, 0xff, 0xeb, 0xd5, 0xd2,
0xd1, 0xd1, 0xd2, 0xd1, 0xd0, 0xda, 0xf6, 0xfd, 0xff, 0xfe, 0xff,
0xff, 0xff, 0xf3, 0xcf, 0xa2, 0x9d, 0xa0, 0xa1, 0xa0, 0x9e, 0xa5,
0xbf, 0xec, 0xff, 0xff, 0xfe, 0xaf, 0x9f, 0xa1, 0x9f, 0xa4, 0xe9,
0xd3, 0xd3, 0xd3, 0xd1, 0xef, 0xc7, 0xbf, 0xc1, 0xc0, 0xc4, 0xfc,
0xff, 0xff, 0xfa, 0xe4, 0xd6, 0xd0, 0xd1, 0xd2, 0xd2, 0xd1, 0xd0,
0xe3, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xe1, 0xa0, 0xa0, 0xa1, 0xa1,
0xa0, 0x9d, 0xb9, 0xe4, 0xfe, 0xff, 0xfe, 0xff, 0xcf, 0x9d, 0xa1,
0xa1, 0x9c, 0xd7, 0xf5, 0xba, 0xaf, 0xaf, 0xb6, 0xef, 0xed, 0xbd,
0xc1, 0xc1, 0xbf, 0xd7, 0xff, 0xfe, 0xff, 0xff, 0xf6, 0xe2, 0xd0,
0xd1, 0xd2, 0xd2, 0xd1, 0xd1, 0xea, 0xff, 0xff, 0xff, 0xff, 0xff,
0xb2, 0xa0, 0xa1, 0x9e, 0xa5, 0xdf, 0xfd, 0xff, 0xff, 0xfe, 0xff,
0xf1, 0xa7, 0xa0, 0xa1, 0x9f, 0xb2, 0xff, 0xf1, 0xbb, 0xb1, 0xb1,
0xb7, 0xed, 0xff, 0xd4, 0xbf, 0xc1, 0xc0, 0xc4, 0xef, 0xff, 0xfe,
0xff, 0xff, 0xfe, 0xf5, 0xd8, 0xd0, 0xd1, 0xd1, 0xd5, 0xfd, 0xff,
0xff, 0xff, 0xfe, 0xff, 0xed, 0xa0, 0xa4, 0xc7, 0xfc, 0xff, 0xfe,
0xff, 0xff, 0xff, 0xff, 0xc3, 0xa1, 0xa1, 0xa0, 0x9e, 0xed, 0xff,
0xf1, 0xbb, 0xb1, 0xb1, 0xb7, 0xed, 0xff, 0xf8, 0xc2, 0xc0, 0xc1,
0xc0, 0xd2, 0xfd, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xea, 0xd5,
0xd1, 0xef, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xd7, 0xe7,
0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xe8, 0xa7, 0xa0, 0xa0,
0x9e, 0xc6, 0xfd, 0xff, 0xf1, 0xbb, 0xb1, 0xb1, 0xb7, 0xed, 0xff,
0xfe, 0xdf, 0xbf, 0xc0, 0xc0, 0xc2, 0xeb, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xf8, 0xe9, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xfd,
0xbe, 0x9e, 0xa1, 0xa0, 0xaa, 0xed, 0xff, 0xff, 0xf1, 0xbb, 0xb1,
0xb1, 0xb7, 0xed, 0xff, 0xff, 0xf7, 0xca, 0xc0, 0xc1, 0xbf, 0xcd,
0xfd, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xff, 0xff, 0xfe, 0xfe,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xe5, 0x9d, 0xa0, 0xa1, 0xa1, 0xca, 0xff, 0xff,
0xff, 0xf1, 0xbb, 0xb1, 0xb1, 0xb7, 0xed, 0xff, 0xff, 0xff, 0xe2,
0xc2, 0xc1, 0xc0, 0xbe, 0xe6, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xaa, 0x9f, 0xa1, 0xa0,
0xa9, 0xf8, 0xff, 0xfe, 0xff, 0xf1, 0xbb, 0xb1, 0xb1, 0xb7, 0xed,
0xff, 0xff, 0xff, 0xff, 0xc9, 0xc0, 0xc1, 0xc0, 0xc2, 0xfc, 0xff,
0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcc,
0x9d, 0xa1, 0xa1, 0x9e, 0xda, 0xff, 0xfe, 0xff, 0xff, 0xf1, 0xbb,
0xb1, 0xb1, 0xb7, 0xed, 0xff, 0xff, 0xfe, 0xff, 0xee, 0xbf, 0xc0,
0xc1, 0xbf, 0xd7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xeb, 0xa6, 0xa0, 0xa1, 0x9e, 0xb7, 0xff, 0xff, 0xff,
0xff, 0xff, 0xf1, 0xbb, 0xb1, 0xb1, 0xb7, 0xed, 0xff, 0xff, 0xff,
0xfe, 0xff, 0xd7, 0xbe, 0xc1, 0xc1, 0xc2, 0xec, 0xff, 0xfe, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd7, 0xa0, 0xa0, 0xa0, 0xa0,
0xf0, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xf1, 0xbb, 0xb1, 0xb1, 0xb7,
0xed, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xf9, 0xc3, 0xc0, 0xc0, 0xc0,
0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff,
0xec, 0xb0, 0xa0, 0xca, 0xfd, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xf1,
0xbb, 0xb1, 0xb1, 0xb7, 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
0xe2, 0xc0, 0xc7, 0xec, 0xff, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xdd, 0xf2, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xf1, 0xbb, 0xb1, 0xb1, 0xb7, 0xed, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xf8, 0xe8, 0xfe, 0xff, 0xfe, 0xfe, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0xba, 0xb0, 0xb0,
0xb6, 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff,
0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xf6, 0xd0, 0xc6, 0xc5, 0xcd, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff
};
static const unsigned char * const twirl_data[3] = {
twirl_0_data,
twirl_30_data,
twirl_60_data
};
////////////////////////////////////////////////////////////////////
// Function: get_twirl_data
// Description: Fills the indicated data array with a string of
// twirl_width * twirl_height bytes, representing the
// grayscale pixel values of the twirl_width x
// twirl_height image at frame number step of
// twirl_num_steps frames. Returns true on success,
// false on failure.
//
// You must pass data_length = twirl_width *
// twirl_height; this value is passed as a sanity check
// on array size. You should pass step so that 0 <=
// step < twirl_num_steps.
////////////////////////////////////////////////////////////////////
bool
get_twirl_data(unsigned char data[], size_t data_length, int step) {
if (step < 0 || step >= twirl_num_steps) {
memset(data, 0, data_length);
return false;
}
if (data_length != twirl_width * twirl_height) {
memset(data, 0, data_length);
return false;
}
twirl_flip &flip = twirl_flip_table[step];
const unsigned char *in_data = twirl_data[flip._index];
for (int yi = 0; yi < twirl_height; ++yi) {
for (int xi = 0; xi < twirl_width; ++xi) {
int xo = xi;
int yo = yi;
if (flip._flip_x) {
xo = twirl_width - 1 - xo;
}
if (flip._flip_y) {
yo = twirl_width - 1 - yo;
}
if (flip._exchange) {
int t = xo;
xo = yo;
yo = t;
}
data[yo * twirl_width + xo] = in_data[yi * twirl_width + xi];
}
}
return true;
}

View File

@ -0,0 +1,25 @@
// Filename: get_twirl_data.h
// Created by: drose (24Aug11)
//
////////////////////////////////////////////////////////////////////
//
// PANDA 3D SOFTWARE
// Copyright (c) Carnegie Mellon University. All rights reserved.
//
// All use of this software is subject to the terms of the revised BSD
// license. You should have received a copy of this license along
// with this source code in a file named "LICENSE."
//
////////////////////////////////////////////////////////////////////
#ifndef GET_TWIRL_DATA_H
#define GET_TWIRL_DATA_H
static const int twirl_width = 48;
static const int twirl_height = 48;
static const int twirl_num_steps = 12;
bool get_twirl_data(unsigned char data[], size_t data_length, int step);
#endif

BIN
direct/src/plugin/twirl.xcf Executable file

Binary file not shown.

View File

@ -97,6 +97,9 @@ PPInstance(NPMIMEType pluginType, NPP instance, uint16_t mode,
_got_window = false;
_python_window_open = false;
#ifdef _WIN32
_hwnd = 0;
#endif // _WIN32
#ifdef __APPLE__
// Get the run loop in the browser thread. (CFRunLoopGetMain() is
@ -252,15 +255,25 @@ set_window(NPWindow *window) {
if (!_got_window) {
_orig_window_proc = NULL;
if (window->type == NPWindowTypeWindow) {
// Subclass the window to make it call our own window_proc instead
// of whatever window_proc it has already. This is just a dopey
// trick to allow us to poll events in the main thread.
HWND hwnd = (HWND)window->window;
_orig_window_proc = SetWindowLongPtr(hwnd, GWL_WNDPROC, (LONG_PTR)window_proc);
// Save the window handle.
_hwnd = (HWND)window->window;
// Also set a timer to go off every once in a while, just in
// case something slips through.
SetTimer(hwnd, 1, 1000, NULL);
// Now that we've got a window handle, we can go get the
// twirling icon images.
win_get_twirl_bitmaps();
// Subclass the window to make it call our own window_proc
// instead of whatever window_proc it has already. This is
// mainly just a dopey trick to allow us to poll events in the
// main thread, but we also rely on this to paint the twirling
// icon into the browser window.
SetWindowLongPtr(_hwnd, GWLP_USERDATA, (LONG_PTR)this);
_orig_window_proc = SetWindowLongPtr(_hwnd, GWL_WNDPROC, (LONG_PTR)st_window_proc);
// Also set a timer to go off every once in a while, to update
// the twirling icon, and also to catch events in case something
// slips through.
SetTimer(_hwnd, 1, 100, NULL);
}
}
#endif // _WIN32
@ -2043,7 +2056,7 @@ browser_sync_callback(void *) {
#ifdef _WIN32
////////////////////////////////////////////////////////////////////
// Function: PPInstance::window_proc
// Function: PPInstance::st_window_proc
// Access: Private, Static
// Description: We bind this function to the parent window we were
// given in set_window, so we can spin the request_loop
@ -2051,6 +2064,29 @@ browser_sync_callback(void *) {
// platforms rely on explicit windows events.
////////////////////////////////////////////////////////////////////
LONG PPInstance::
st_window_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) {
LONG_PTR self = GetWindowLongPtr(hwnd, GWLP_USERDATA);
if (self == NULL) {
// We haven't assigned the pointer yet (!?)
return DefWindowProc(hwnd, msg, wparam, lparam);
}
return ((PPInstance *)self)->window_proc(hwnd, msg, wparam, lparam);
}
#endif // _WIN32
#ifdef _WIN32
////////////////////////////////////////////////////////////////////
// Function: PPInstance::window_proc
// Access: Private
// Description: The non-static window_proc() function.
//
// We bind this function to the parent window we were
// given in set_window, so we can spin the request_loop
// when needed. This is only in the Windows case; other
// platforms rely on explicit windows events.
////////////////////////////////////////////////////////////////////
LONG PPInstance::
window_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) {
if (!has_plugin_thread_async_call) {
// Since we're here in the main thread, call handle_request_loop()
@ -2064,8 +2100,24 @@ window_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) {
// Eat the WM_ERASEBKGND message, so the browser's intervening
// window won't overdraw on top of our own window.
return true;
case WM_PAINT:
if (!_started) {
// If we haven't yet loaded the instance, we can paint a
// twirling icon in the window.
PAINTSTRUCT ps;
HDC dc = BeginPaint(hwnd, &ps);
win_paint_twirl(hwnd, dc);
EndPaint(hwnd, &ps);
}
return true;
case WM_TIMER:
if (!_started) {
InvalidateRect(_hwnd, NULL, FALSE);
}
break;
case WM_USER:
break;
}
@ -2074,6 +2126,111 @@ window_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) {
}
#endif // _WIN32
#ifdef _WIN32
////////////////////////////////////////////////////////////////////
// Function: PPInstance::win_get_twirl_bitmaps
// Access: Private
// Description: Fills _twirl_bitmaps with an array of bitmaps for
// drawing the twirling icon while we're waiting for the
// instance to load.
////////////////////////////////////////////////////////////////////
void PPInstance::
win_get_twirl_bitmaps() {
BITMAPINFOHEADER bmih;
bmih.biSize = sizeof(bmih);
bmih.biWidth = twirl_width;
bmih.biHeight = -twirl_height;
bmih.biPlanes = 1;
bmih.biBitCount = 32;
bmih.biCompression = BI_RGB;
bmih.biSizeImage = 0;
bmih.biXPelsPerMeter = 0;
bmih.biYPelsPerMeter = 0;
bmih.biClrUsed = 0;
bmih.biClrImportant = 0;
BITMAPINFO bmi;
memcpy(&bmi, &bmih, sizeof(bmih));
HDC dc = GetDC(_hwnd);
static const size_t twirl_size = twirl_width * twirl_height;
unsigned char twirl_data[twirl_size];
unsigned char new_data[twirl_size * 4];
for (int step = 0; step < twirl_num_steps; ++step) {
get_twirl_data(twirl_data, twirl_size, step);
// Replicate out the grayscale channels into RGBA.
for (int yi = 0; yi < twirl_height; ++yi) {
const unsigned char *sp = twirl_data + yi * twirl_width;
unsigned char *dp = new_data + yi * twirl_width * 4;
for (int xi = 0; xi < twirl_width; ++xi) {
dp[0] = sp[0];
dp[1] = sp[0];
dp[2] = sp[0];
dp[3] = (unsigned char)0xff;
sp += 1;
dp += 4;
}
}
// Now load the image.
_twirl_bitmaps[step] = CreateDIBitmap(dc, &bmih, CBM_INIT, (const char *)new_data, &bmi, 0);
}
ReleaseDC(_hwnd, dc);
}
#endif // _WIN32
#ifdef _WIN32
////////////////////////////////////////////////////////////////////
// Function: PPInstance::win_paint_twirl
// Access: Private
// Description: Paints the twirling icon into the browser window
// before the instance has started.
////////////////////////////////////////////////////////////////////
void PPInstance::
win_paint_twirl(HWND hwnd, HDC dc) {
RECT rect;
GetClientRect(_hwnd, &rect);
int width = rect.right - rect.left;
int height = rect.bottom - rect.top;
// Double-buffer with an offscreen bitmap first.
HDC bdc = CreateCompatibleDC(dc);
HBITMAP buffer = CreateCompatibleBitmap(dc, width, height);
SelectObject(bdc, buffer);
// Start by painting the background color.
FillRect(bdc, &rect, WHITE_BRUSH);
if (!_started && !_failed) {
// Which frame are we drawing?
DWORD now = GetTickCount();
int step = (now / 100) % twirl_num_steps;
HBITMAP twirl = _twirl_bitmaps[step];
int left = rect.left + (width - twirl_width) / 2;
int top = rect.top + (height - twirl_height) / 2;
HDC mem_dc = CreateCompatibleDC(bdc);
SelectObject(mem_dc, twirl);
BitBlt(bdc, left, top, twirl_width, twirl_height,
mem_dc, 0, 0, SRCCOPY);
SelectObject(mem_dc, NULL);
DeleteDC(mem_dc);
}
// Now blit the buffer to the window.
BitBlt(dc, 0, 0, width, height, bdc, 0, 0, SRCCOPY);
}
#endif // _WIN32
#ifdef MACOSX_HAS_EVENT_MODELS
////////////////////////////////////////////////////////////////////
// Function: PPInstance::copy_cocoa_event

View File

@ -19,6 +19,7 @@
#include "fileSpec.h"
#include "get_tinyxml.h"
#include "p3d_lock.h"
#include "get_twirl_data.h"
#include <vector>
@ -105,7 +106,10 @@ private:
#ifdef _WIN32
static LONG
window_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);
st_window_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);
LONG window_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);
void win_get_twirl_bitmaps();
void win_paint_twirl(HWND hwnd, HDC dc);
#endif // _WIN32
class EventAuxData {
@ -201,6 +205,8 @@ private:
NPWindow _window;
#ifdef _WIN32
LONG_PTR _orig_window_proc;
HWND _hwnd;
HBITMAP _twirl_bitmaps[twirl_num_steps];
#endif // _WIN32
#ifdef __APPLE__