Beta version

Improvements are still possible


git-svn-id: file:///srv/svn/repos/haiku/trunk/current@5650 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Jérôme Duval 2003-12-11 08:44:26 +00:00
parent bf757e6cca
commit 357ef4edac
12 changed files with 1069 additions and 292 deletions

View File

@ -2,6 +2,10 @@ SubDir OBOS_TOP src prefs mouse ;
AddResources Mouse : Mouse.rsrc ;
Preference Mouse : Mouse.cpp MouseSettings.cpp MouseView.cpp MouseWindow.cpp ;
Preference Mouse :
Mouse.cpp
MouseSettings.cpp
MouseView.cpp
MouseWindow.cpp ;
LinkSharedOSLibs Mouse : translation be root ;

View File

@ -1,18 +1,26 @@
/*
* Mouse.cpp
* Mouse mccall@digitalparadise.co.uk
*
*/
// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
//
// Copyright (c) 2003, OpenBeOS
//
// This software is part of the OpenBeOS distribution and is covered
// by the OpenBeOS license.
//
//
// File: Mouse.cpp
// Author: Jérôme Duval, Andrew McCall (mccall@digitalparadise.co.uk)
// Description: Media Preferences
// Created :
// Modified : December 10, 2003
//
// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
#include <Alert.h>
#include <Screen.h>
#include "Mouse.h"
#include "MouseWindow.h"
#include "MouseSettings.h"
#include "MouseMessages.h"
const char MouseApplication::kMouseApplicationSig[] = "application/x-vnd.OpenBeOS-MOUS";
const char kMouseApplicationSig[] = "application/x-vnd.OpenBeOS-MOUS";
int main(int, char**)
{
@ -26,63 +34,16 @@ int main(int, char**)
MouseApplication::MouseApplication()
:BApplication(kMouseApplicationSig)
{
BRect rect(0, 0, 397, 293);
MouseWindow *window = new MouseWindow(rect);
window->MoveTo(window->fSettings.WindowCorner());
MouseWindow *window;
fSettings = new MouseSettings();
window = new MouseWindow();
window->Show();
}
void
MouseApplication::MessageReceived(BMessage *message)
{
switch(message->what) {
case ERROR_DETECTED:
{
BAlert *errorAlert = new BAlert("Error", "Something has gone wrong!","OK",NULL,NULL,B_WIDTH_AS_USUAL, B_OFFSET_SPACING, B_WARNING_ALERT);
errorAlert->Go();
be_app->PostMessage(B_QUIT_REQUESTED);
}
break;
default:
BApplication::MessageReceived(message);
break;
}
}
void
MouseApplication::SetWindowCorner(BPoint corner)
{
fSettings->SetWindowCorner(corner);
}
void
MouseApplication::SetMouseType(mouse_type type)
{
fSettings->SetMouseType(type);
}
void
MouseApplication::SetClickSpeed(bigtime_t click_speed)
{
fSettings->SetClickSpeed(click_speed);
}
void
MouseApplication::SetMouseSpeed(int32 speed)
{
fSettings->SetMouseSpeed(speed);
}
void
MouseApplication::AboutRequested(void)
{
(new BAlert("about", "...by Andrew Edward McCall", "Dig Deal"))->Go();
}
MouseApplication::~MouseApplication()
{
delete fSettings;
}

View File

@ -1,35 +1,31 @@
// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
//
// Copyright (c) 2003, OpenBeOS
//
// This software is part of the OpenBeOS distribution and is covered
// by the OpenBeOS license.
//
//
// File: Mouse.h
// Author: Jérôme Duval, Andrew McCall (mccall@digitalparadise.co.uk)
// Description: Media Preferences
// Created :
// Modified : December 10, 2003
//
// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
#ifndef MOUSE_H
#define MOUSE_H
#include <Application.h>
#include "MouseWindow.h"
#include "MouseSettings.h"
class MouseApplication : public BApplication
{
public:
MouseApplication();
virtual ~MouseApplication();
void MessageReceived(BMessage *message);
BPoint WindowCorner() const {return fSettings->WindowCorner(); }
void SetWindowCorner(BPoint corner);
int32 MouseType() const {return fSettings->MouseType(); }
void SetMouseType(mouse_type type);
bigtime_t ClickSpeed() const {return fSettings->ClickSpeed(); }
void SetClickSpeed(bigtime_t click_speed);
int32 MouseSpeed() const {return fSettings->MouseSpeed(); }
void SetMouseSpeed(int32 speed);
void AboutRequested(void);
private:
static const char kMouseApplicationSig[];
MouseSettings *fSettings;
};
#endif

Binary file not shown.

View File

@ -0,0 +1,441 @@
// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
//
// Copyright (c) 2003, OpenBeOS
//
// This software is part of the OpenBeOS distribution and is covered
// by the OpenBeOS license.
//
//
// File: MouseBitmap.h
// Author: Jérôme Duval, Andrew McCall (mccall@digitalparadise.co.uk)
// Description: Media Preferences
// Created : December 10, 2003
//
// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
const int32 kMouseWidth = 57;
const int32 kMouseHeight = 86;
const color_space kMouseColorSpace = B_CMAP8;
const unsigned char kMouseBits [] = {
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x0f,0x1b,0x1b,0x0b,0x17,0x17,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x0f,0x1b,0x1b,0x0b,0x17,0x17,0x1b,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x0f,
0x0f,0x0f,0x0f,0x0f,0x0f,0x0b,0x17,0x17,0x17,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
0x1b,0x3f,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x0f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x0b,0x17,0x17,0x17,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,0x3f,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x0f,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x0b,
0x0b,0x17,0x17,0x17,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
0x0f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x0b,0x17,0x17,
0x17,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x0f,
0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,
0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,
0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
0x1b,0x3f,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x1b,0x0f,0x0f,0x19,0x19,0x19,0x19,0x19,
0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,
0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,
0x19,0x19,0x19,0x19,0x0b,0x0b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,0x3f,
0x1b,0x1b,0x1b,0x0f,0x0f,0x19,0x19,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,
0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1e,
0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1e,0x1e,0x1c,0x1e,
0x1c,0x1c,0x0b,0x0b,0x17,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,0x3f,0x1b,0x1b,0x0f,0x19,
0x19,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,
0x1e,0x1e,0x1e,0x1e,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1e,0x1e,0x1e,0x1e,
0x1e,0x1d,0x1e,0x1e,0x1e,0x1c,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1a,0x1a,
0x0b,0x17,0x17,0x1b,0x1b,0x3f,0x3f,0x3f,0x1b,0x1b,0x0f,0x19,0x1d,0x1e,0x1e,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x1b,0x1a,0x19,0x17,0x0b,0x17,0x17,
0x1b,0x3f,0x3f,0x3f,0x1b,0x0f,0x19,0x1d,0x1e,0x1e,0x3f,0x1e,0x1e,0x1d,0x1e,0x1e,
0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1e,0x1e,0x1e,0x1d,
0x1e,0x1e,0x1e,0x1d,0x1c,0x1e,0x1e,0x1e,0x1d,0x1c,0x1e,0x1c,0x1c,0x1c,0x1c,0x1b,
0x1c,0x1b,0x1b,0x1a,0x1a,0x19,0x19,0x17,0x18,0x0b,0x17,0x17,0x1b,0x3f,0x3f,0x3f,
0x1b,0x0f,0x19,0x1e,0x1d,0x3f,0x1d,0x1e,0x1e,0x1e,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,
0x1d,0x1e,0x1e,0x1e,0x1e,0x1d,0x1e,0x1e,0x1e,0x1d,0x1e,0x1e,0x1e,0x1d,0x1c,0x1e,
0x1c,0x1e,0x1e,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1a,0x1a,0x1a,
0x1a,0x19,0x17,0x17,0x16,0x15,0x0b,0x17,0x17,0x3f,0x3f,0x3f,0x0f,0x19,0x1d,0x1e,
0x1e,0x3f,0x1d,0x1e,0x1e,0x1e,0x1d,0x1e,0x1e,0x1e,0x1d,0x1e,0x1e,0x1e,0x1d,0x1e,
0x1e,0x1e,0x1d,0x1e,0x1e,0x1c,0x1e,0x1d,0x1e,0x1e,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,
0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1a,0x1b,0x1a,0x1a,0x1a,0x19,0x19,0x17,0x15,
0x16,0x15,0x0b,0x17,0x17,0x3f,0x3f,0x3f,0x0f,0x19,0x1d,0x1e,0x1e,0x3f,0x1d,0x1c,
0x1e,0x1e,0x1e,0x1c,0x1d,0x1e,0x1e,0x1e,0x1d,0x1c,0x1e,0x1e,0x1e,0x1d,0x1e,0x1c,
0x1e,0x1c,0x1e,0x1d,0x1c,0x1c,0x1e,0x1c,0x1b,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1c,
0x1b,0x1b,0x1b,0x1b,0x1b,0x19,0x19,0x19,0x19,0x17,0x18,0x17,0x15,0x13,0x0b,0x17,
0x17,0x3f,0x3f,0x3f,0x0f,0x19,0x1e,0x1e,0x1d,0x3f,0x1d,0x1e,0x1e,0x1e,0x1c,0x1d,
0x1e,0x1e,0x1c,0x1c,0x1c,0x1c,0x1e,0x1d,0x1e,0x1c,0x1c,0x1e,0x1e,0x1d,0x1e,0x1c,
0x1c,0x1c,0x1c,0x1b,0x1c,0x1c,0x1c,0x1b,0x1b,0x1c,0x1b,0x1a,0x1b,0x1b,0x1a,0x1a,
0x1a,0x19,0x19,0x19,0x17,0x18,0x15,0x15,0x15,0x13,0x0b,0x17,0x17,0x3f,0x3f,0x3f,
0x0f,0x19,0x1d,0x1e,0x1e,0x3f,0x1c,0x1c,0x1c,0x1c,0x1d,0x1e,0x1e,0x1e,0x1c,0x1c,
0x1c,0x1c,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1c,
0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1b,0x1a,0x1a,0x19,0x19,0x19,0x18,0x17,
0x17,0x17,0x17,0x16,0x13,0x12,0x0b,0x17,0x17,0x3f,0x3f,0x3f,0x0f,0x19,0x1e,0x1d,
0x1e,0x3f,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1c,0x1e,0x1c,0x1c,0x1c,0x1c,0x1e,
0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,
0x1b,0x1a,0x1a,0x1b,0x1a,0x1a,0x19,0x19,0x19,0x19,0x17,0x18,0x17,0x17,0x15,0x15,
0x15,0x13,0x0b,0x17,0x17,0x3f,0x3f,0x3f,0x0f,0x19,0x1d,0x1e,0x1e,0x3f,0x1c,0x1c,
0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,
0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,
0x19,0x1a,0x19,0x19,0x19,0x17,0x17,0x18,0x17,0x15,0x15,0x15,0x13,0x11,0x0b,0x17,
0x17,0x3f,0x3f,0x3f,0x0f,0x19,0x1e,0x1d,0x1e,0x3f,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,
0x1c,0x1c,0x1c,0x1c,0x1b,0x1c,0x1c,0x1c,0x1b,0x1b,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x19,0x1a,0x19,0x19,
0x19,0x17,0x17,0x17,0x17,0x16,0x15,0x13,0x15,0x12,0x0b,0x17,0x17,0x3f,0x3f,0x3f,
0x0f,0x19,0x1e,0x1e,0x1d,0x3f,0x1c,0x1c,0x1c,0x1c,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,
0x1b,0x1c,0x1c,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1b,
0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x1a,0x19,0x19,0x19,0x17,0x17,0x18,0x17,
0x17,0x15,0x15,0x13,0x12,0x11,0x0b,0x17,0x17,0x3f,0x3f,0x3f,0x0f,0x19,0x1d,0x1e,
0x1e,0x3f,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1b,0x1c,
0x1c,0x1b,0x1c,0x1b,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1b,0x1a,0x1a,
0x19,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x17,0x17,0x18,0x17,0x17,0x15,0x15,0x15,0x13,
0x13,0x12,0x0b,0x17,0x17,0x3f,0x3f,0x3f,0x0f,0x19,0x1d,0x1e,0x1e,0x3f,0x1c,0x1c,
0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1b,0x1c,0x1c,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1a,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19,
0x19,0x19,0x17,0x17,0x18,0x17,0x17,0x15,0x15,0x15,0x15,0x13,0x12,0x11,0x0b,0x17,
0x17,0x3f,0x3f,0x3f,0x0f,0x19,0x1d,0x1e,0x1c,0x3f,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1b,
0x1b,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x1a,0x19,0x19,0x19,0x19,0x19,0x17,0x17,0x17,
0x18,0x17,0x17,0x17,0x15,0x15,0x15,0x12,0x13,0x11,0x0b,0x17,0x17,0x3f,0x3f,0x3f,
0x0f,0x19,0x1d,0x1e,0x1e,0x1e,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1b,0x1a,0x1a,0x1a,0x1b,0x1a,0x1a,0x1a,
0x19,0x1a,0x1a,0x1a,0x19,0x19,0x17,0x17,0x18,0x17,0x17,0x18,0x17,0x17,0x15,0x16,
0x15,0x15,0x15,0x13,0x12,0x10,0x0b,0x17,0x17,0x3f,0x3f,0x3f,0x0f,0x19,0x1d,0x1e,
0x1e,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1b,0x1a,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,
0x19,0x19,0x19,0x17,0x18,0x17,0x17,0x17,0x17,0x17,0x16,0x15,0x15,0x13,0x13,0x13,
0x12,0x11,0x0b,0x17,0x17,0x3f,0x3f,0x3f,0x0f,0x19,0x1d,0x1e,0x1e,0x1c,0x1c,0x1c,
0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1b,0x1b,0x1a,0x1b,0x1b,0x1a,0x1b,0x1b,0x1b,0x1a,
0x1a,0x1a,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19,0x19,0x17,0x19,0x19,
0x18,0x17,0x17,0x17,0x17,0x16,0x15,0x15,0x15,0x13,0x13,0x13,0x11,0x11,0x0b,0x17,
0x17,0x3f,0x3f,0x3f,0x0f,0x19,0x1d,0x1e,0x1e,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1a,
0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
0x1a,0x1a,0x19,0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x17,0x18,0x17,0x17,0x17,0x17,
0x17,0x16,0x15,0x15,0x15,0x13,0x13,0x12,0x12,0x11,0x0b,0x17,0x17,0x3f,0x3f,0x3f,
0x0f,0x19,0x1d,0x1e,0x1e,0x1c,0x1c,0x1c,0x1b,0x1a,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,
0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x1a,0x19,
0x19,0x19,0x19,0x17,0x18,0x17,0x17,0x18,0x17,0x17,0x17,0x17,0x15,0x16,0x15,0x15,
0x15,0x13,0x13,0x13,0x11,0x10,0x0b,0x17,0x17,0x3f,0x3f,0x3f,0x0f,0x19,0x1e,0x1d,
0x1c,0x1c,0x1b,0x1b,0x1c,0x1b,0x1a,0x1b,0x19,0x1a,0x1a,0x19,0x1a,0x19,0x1a,0x19,
0x1a,0x1a,0x1a,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x19,
0x18,0x17,0x17,0x18,0x17,0x17,0x17,0x17,0x17,0x15,0x15,0x15,0x15,0x14,0x12,0x12,
0x11,0x11,0x0b,0x17,0x17,0x3f,0x3f,0x3f,0x0f,0x19,0x1d,0x1e,0x1e,0x1c,0x1c,0x1b,
0x1b,0x1a,0x1b,0x1a,0x1a,0x19,0x19,0x1a,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,
0x1a,0x1a,0x1a,0x19,0x19,0x1a,0x19,0x19,0x19,0x19,0x19,0x17,0x18,0x17,0x17,0x17,
0x17,0x17,0x17,0x17,0x16,0x15,0x15,0x15,0x15,0x13,0x13,0x12,0x11,0x11,0x0b,0x17,
0x17,0x3f,0x3f,0x3f,0x0f,0x19,0x1d,0x1e,0x1c,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x15,0x16,0x15,0x15,0x15,0x16,0x15,0x15,0x15,
0x15,0x15,0x15,0x15,0x15,0x15,0x12,0x11,0x11,0x11,0x0b,0x17,0x17,0x3f,0x3f,0x3f,
0x0f,0x19,0x1d,0x17,0x17,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,
0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,
0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,
0x0b,0x0b,0x10,0x10,0x11,0x10,0x0b,0x17,0x17,0x3f,0x3f,0x3f,0x0f,0x19,0x17,0x0b,
0x0b,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,
0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,
0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x0b,0x0b,
0x10,0x10,0x0b,0x17,0x17,0x3f,0x3f,0x3f,0x0f,0x0b,0x0b,0x1e,0x1e,0x1d,0x1c,0x1b,
0x1b,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x17,
0x19,0x19,0x19,0x19,0x19,0x19,0x17,0x18,0x17,0x18,0x17,0x17,0x17,0x17,0x17,0x16,
0x17,0x17,0x17,0x15,0x15,0x15,0x15,0x13,0x13,0x18,0x17,0x17,0x0b,0x0b,0x0b,0x17,
0x17,0x3f,0x3f,0x3f,0x0f,0x19,0x3f,0x1d,0x1c,0x1c,0x1b,0x1b,0x1a,0x1b,0x1a,0x1a,
0x1a,0x19,0x1a,0x19,0x19,0x18,0x17,0x17,0x19,0x19,0x19,0x18,0x19,0x17,0x19,0x18,
0x17,0x19,0x17,0x18,0x19,0x17,0x17,0x18,0x17,0x17,0x17,0x17,0x15,0x16,0x15,0x15,
0x15,0x15,0x15,0x15,0x14,0x12,0x11,0x12,0x17,0x17,0x0b,0x17,0x17,0x3f,0x3f,0x3f,
0x0f,0x19,0x1d,0x1e,0x1e,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1a,0x19,0x1a,0x19,0x19,
0x17,0x18,0x19,0x19,0x17,0x19,0x17,0x18,0x17,0x19,0x19,0x17,0x19,0x19,0x18,0x17,
0x18,0x17,0x17,0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x15,0x16,0x15,0x15,0x15,0x13,
0x13,0x12,0x12,0x11,0x11,0x10,0x0b,0x17,0x17,0x3f,0x3f,0x3f,0x0f,0x19,0x1d,0x1e,
0x1e,0x1b,0x1b,0x1c,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19,0x17,0x18,0x19,
0x17,0x17,0x18,0x19,0x17,0x17,0x18,0x17,0x19,0x18,0x19,0x17,0x17,0x18,0x17,0x17,
0x17,0x17,0x17,0x17,0x17,0x16,0x15,0x15,0x15,0x15,0x15,0x13,0x12,0x12,0x11,0x11,
0x11,0x10,0x0b,0x17,0x17,0x3f,0x3f,0x3f,0x0f,0x19,0x1d,0x1e,0x1c,0x1c,0x1c,0x1b,
0x1a,0x1a,0x1b,0x1a,0x19,0x19,0x19,0x19,0x17,0x18,0x17,0x18,0x17,0x17,0x18,0x17,
0x17,0x18,0x17,0x18,0x17,0x17,0x18,0x17,0x17,0x17,0x18,0x17,0x17,0x17,0x15,0x16,
0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x12,0x13,0x13,0x12,0x11,0x11,0x10,0x0b,0x17,
0x17,0x3f,0x3f,0x3f,0x0f,0x19,0x1d,0x1e,0x1c,0x1c,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,
0x19,0x19,0x19,0x19,0x17,0x18,0x17,0x18,0x17,0x17,0x18,0x17,0x17,0x17,0x18,0x17,
0x18,0x17,0x17,0x17,0x17,0x18,0x17,0x17,0x17,0x15,0x17,0x15,0x15,0x16,0x15,0x15,
0x15,0x13,0x13,0x13,0x12,0x12,0x11,0x10,0x11,0x10,0x0b,0x17,0x17,0x3f,0x3f,0x3f,
0x0f,0x19,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1a,0x1a,0x1a,0x19,0x1a,0x19,0x19,0x19,
0x17,0x17,0x18,0x17,0x17,0x17,0x18,0x17,0x17,0x18,0x17,0x17,0x17,0x17,0x18,0x17,
0x17,0x17,0x17,0x17,0x17,0x17,0x15,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x13,0x13,
0x13,0x12,0x12,0x11,0x10,0x10,0x0b,0x17,0x17,0x3f,0x3f,0x3f,0x0f,0x19,0x1d,0x1e,
0x1c,0x1c,0x1b,0x1b,0x1a,0x1b,0x1a,0x19,0x19,0x19,0x19,0x17,0x18,0x17,0x18,0x17,
0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
0x17,0x17,0x17,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x13,0x13,0x12,0x12,0x12,0x10,
0x11,0x10,0x0b,0x17,0x17,0x3f,0x3f,0x3f,0x0f,0x19,0x1d,0x1c,0x1c,0x1c,0x1b,0x1b,
0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x18,0x17,0x17,0x18,0x17,0x17,0x17,0x17,0x17,0x17,
0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x17,0x17,0x17,0x17,0x17,0x15,0x15,
0x16,0x15,0x15,0x15,0x15,0x13,0x13,0x12,0x12,0x12,0x12,0x11,0x10,0x10,0x0b,0x17,
0x17,0x3f,0x3f,0x3f,0x0f,0x19,0x1d,0x1e,0x1c,0x1c,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,
0x19,0x17,0x19,0x19,0x18,0x17,0x17,0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x15,0x17,0x15,0x16,0x15,0x15,0x15,0x15,
0x13,0x15,0x13,0x12,0x12,0x12,0x11,0x11,0x11,0x10,0x0b,0x17,0x17,0x3f,0x3f,0x3f,
0x0f,0x19,0x1d,0x1c,0x1c,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x18,0x17,
0x17,0x18,0x17,0x17,0x17,0x17,0x15,0x17,0x17,0x15,0x17,0x16,0x17,0x17,0x17,0x17,
0x17,0x15,0x17,0x15,0x15,0x17,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x13,0x12,0x12,
0x12,0x12,0x11,0x11,0x10,0x0f,0x0b,0x17,0x17,0x3f,0x3f,0x3f,0x0f,0x19,0x1d,0x1e,
0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x19,0x17,0x18,0x17,0x19,0x18,0x17,0x17,0x17,
0x17,0x17,0x15,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x15,0x17,
0x17,0x16,0x15,0x15,0x15,0x15,0x15,0x14,0x15,0x13,0x13,0x13,0x12,0x12,0x11,0x10,
0x10,0x10,0x0b,0x17,0x17,0x3f,0x3f,0x3f,0x0f,0x19,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,
0x1a,0x19,0x19,0x19,0x19,0x19,0x17,0x17,0x17,0x18,0x17,0x17,0x17,0x17,0x15,0x15,
0x15,0x17,0x16,0x15,0x15,0x15,0x16,0x15,0x17,0x15,0x15,0x16,0x15,0x15,0x15,0x15,
0x15,0x15,0x15,0x15,0x14,0x12,0x12,0x12,0x13,0x12,0x12,0x11,0x10,0x0f,0x0b,0x17,
0x17,0x3f,0x3f,0x3f,0x0f,0x19,0x1d,0x1e,0x1b,0x1b,0x1a,0x1b,0x1a,0x1a,0x19,0x19,
0x17,0x18,0x17,0x18,0x17,0x17,0x17,0x17,0x15,0x17,0x17,0x15,0x16,0x15,0x15,0x15,
0x16,0x17,0x15,0x17,0x15,0x15,0x16,0x15,0x15,0x15,0x16,0x15,0x15,0x15,0x13,0x15,
0x13,0x13,0x12,0x12,0x12,0x12,0x11,0x11,0x10,0x10,0x0b,0x17,0x17,0x3f,0x3f,0x3f,
0x0f,0x19,0x1c,0x1d,0x1c,0x1b,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19,0x18,0x17,0x17,
0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x15,0x15,0x15,0x16,0x15,0x15,0x15,0x16,0x15,
0x15,0x15,0x16,0x15,0x15,0x15,0x16,0x15,0x15,0x15,0x15,0x15,0x13,0x13,0x12,0x12,
0x12,0x11,0x11,0x10,0x10,0x10,0x0b,0x17,0x17,0x3f,0x3f,0x3f,0x0f,0x19,0x1d,0x1c,
0x1c,0x1b,0x1b,0x1a,0x1a,0x1a,0x19,0x19,0x18,0x17,0x17,0x18,0x17,0x17,0x15,0x17,
0x17,0x15,0x16,0x15,0x15,0x15,0x16,0x15,0x15,0x15,0x16,0x15,0x15,0x15,0x15,0x15,
0x15,0x15,0x15,0x16,0x15,0x15,0x15,0x13,0x13,0x13,0x12,0x12,0x11,0x11,0x11,0x10,
0x10,0x10,0x0b,0x17,0x17,0x3f,0x3f,0x3f,0x0f,0x19,0x1c,0x1c,0x1c,0x1b,0x1a,0x1a,
0x19,0x19,0x19,0x19,0x17,0x17,0x18,0x17,0x17,0x17,0x17,0x15,0x16,0x15,0x15,0x15,
0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x15,0x15,0x15,0x15,0x16,0x15,
0x15,0x15,0x15,0x15,0x13,0x13,0x12,0x12,0x12,0x12,0x11,0x11,0x10,0x10,0x0b,0x17,
0x17,0x3f,0x3f,0x3f,0x0f,0x19,0x1d,0x1c,0x1b,0x1b,0x1a,0x1a,0x1a,0x19,0x19,0x18,
0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x15,0x15,0x15,0x16,0x15,0x15,0x15,0x15,
0x15,0x15,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x16,0x15,0x15,0x13,0x13,0x13,
0x13,0x13,0x13,0x12,0x12,0x11,0x10,0x10,0x10,0x0f,0x0b,0x17,0x17,0x3f,0x3f,0x3f,
0x0f,0x19,0x1c,0x1c,0x1c,0x1b,0x1b,0x1a,0x19,0x19,0x19,0x17,0x17,0x18,0x17,0x17,
0x17,0x17,0x17,0x15,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,
0x15,0x15,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x13,0x13,0x12,0x12,
0x12,0x11,0x11,0x10,0x10,0x0f,0x0b,0x17,0x17,0x3f,0x3f,0x3f,0x0f,0x19,0x1c,0x1c,
0x1b,0x1b,0x1a,0x1a,0x19,0x19,0x17,0x17,0x18,0x17,0x17,0x17,0x17,0x15,0x17,0x16,
0x15,0x15,0x15,0x15,0x15,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,
0x15,0x15,0x15,0x15,0x15,0x15,0x13,0x13,0x13,0x13,0x12,0x12,0x11,0x12,0x11,0x10,
0x10,0x10,0x0b,0x17,0x17,0x3f,0x3f,0x3f,0x0f,0x19,0x1c,0x1c,0x1b,0x1b,0x1a,0x1a,
0x19,0x19,0x19,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x15,0x15,0x16,0x15,0x15,0x15,
0x15,0x15,0x15,0x15,0x13,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,
0x13,0x13,0x13,0x15,0x12,0x12,0x12,0x11,0x12,0x11,0x11,0x10,0x10,0x10,0x0b,0x17,
0x17,0x3f,0x3f,0x3f,0x0f,0x19,0x1d,0x1c,0x1b,0x1a,0x1a,0x19,0x19,0x19,0x18,0x17,
0x17,0x17,0x17,0x17,0x17,0x17,0x15,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x13,0x15,
0x13,0x15,0x13,0x13,0x15,0x15,0x15,0x13,0x15,0x15,0x15,0x15,0x15,0x14,0x13,0x13,
0x13,0x12,0x12,0x12,0x11,0x11,0x10,0x10,0x11,0x0f,0x0b,0x17,0x17,0x3f,0x3f,0x3f,
0x0f,0x19,0x1c,0x1c,0x1b,0x1a,0x1a,0x19,0x19,0x17,0x19,0x17,0x18,0x17,0x17,0x17,
0x15,0x15,0x15,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x13,0x13,0x15,0x14,0x13,0x13,
0x15,0x13,0x13,0x13,0x13,0x13,0x14,0x15,0x13,0x15,0x13,0x13,0x13,0x12,0x12,0x11,
0x11,0x11,0x11,0x10,0x10,0x10,0x0b,0x17,0x17,0x3f,0x3f,0x3f,0x0f,0x19,0x1d,0x1c,
0x1b,0x1a,0x19,0x1a,0x19,0x18,0x17,0x17,0x17,0x17,0x17,0x16,0x15,0x15,0x15,0x15,
0x15,0x15,0x15,0x15,0x13,0x15,0x13,0x14,0x13,0x13,0x13,0x13,0x15,0x13,0x13,0x15,
0x15,0x13,0x14,0x13,0x13,0x13,0x13,0x12,0x13,0x13,0x12,0x11,0x12,0x11,0x11,0x10,
0x10,0x0f,0x0b,0x17,0x17,0x3f,0x3f,0x3f,0x0f,0x19,0x1c,0x1c,0x1b,0x1a,0x1a,0x19,
0x19,0x17,0x17,0x17,0x18,0x17,0x17,0x15,0x15,0x15,0x16,0x15,0x15,0x15,0x15,0x15,
0x13,0x15,0x15,0x13,0x13,0x13,0x12,0x13,0x13,0x14,0x13,0x13,0x13,0x13,0x13,0x13,
0x13,0x14,0x13,0x13,0x12,0x12,0x11,0x11,0x12,0x12,0x10,0x10,0x10,0x10,0x0b,0x17,
0x17,0x3f,0x3f,0x3f,0x0f,0x19,0x1d,0x1b,0x1b,0x1a,0x19,0x19,0x18,0x17,0x17,0x17,
0x17,0x15,0x16,0x17,0x15,0x15,0x15,0x15,0x15,0x13,0x15,0x15,0x14,0x13,0x13,0x13,
0x13,0x13,0x12,0x13,0x13,0x14,0x13,0x13,0x13,0x12,0x13,0x13,0x13,0x13,0x14,0x13,
0x13,0x12,0x12,0x12,0x11,0x11,0x11,0x10,0x10,0x10,0x0b,0x17,0x17,0x3f,0x3f,0x3f,
0x0f,0x19,0x1b,0x1c,0x1b,0x1a,0x19,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x15,
0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x13,0x15,0x14,0x13,0x13,0x13,0x13,0x13,0x12,
0x12,0x13,0x13,0x14,0x13,0x12,0x12,0x13,0x13,0x12,0x13,0x13,0x12,0x13,0x12,0x11,
0x11,0x11,0x11,0x10,0x10,0x0f,0x0b,0x17,0x17,0x3f,0x3f,0x3f,0x0f,0x19,0x1c,0x1b,
0x1a,0x19,0x19,0x19,0x17,0x17,0x17,0x17,0x15,0x15,0x16,0x15,0x15,0x15,0x15,0x15,
0x15,0x15,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x14,0x13,0x13,0x13,0x13,0x12,0x12,
0x13,0x12,0x12,0x13,0x13,0x12,0x12,0x14,0x12,0x12,0x11,0x12,0x11,0x11,0x10,0x10,
0x10,0x10,0x0b,0x17,0x17,0x3f,0x3f,0x3f,0x0f,0x19,0x1b,0x1c,0x1a,0x19,0x19,0x17,
0x17,0x17,0x17,0x17,0x17,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x13,0x15,
0x12,0x12,0x13,0x12,0x13,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
0x13,0x12,0x12,0x12,0x13,0x12,0x12,0x12,0x11,0x10,0x11,0x10,0x10,0x0f,0x0b,0x17,
0x17,0x3f,0x3f,0x3f,0x0f,0x19,0x1c,0x1a,0x19,0x19,0x17,0x17,0x17,0x17,0x17,0x17,
0x16,0x15,0x15,0x15,0x15,0x15,0x13,0x15,0x15,0x15,0x14,0x13,0x13,0x12,0x13,0x12,
0x12,0x13,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
0x12,0x12,0x12,0x12,0x11,0x11,0x10,0x10,0x10,0x10,0x0b,0x17,0x17,0x3f,0x3f,0x3f,
0x0f,0x19,0x1b,0x1b,0x1a,0x19,0x17,0x17,0x17,0x16,0x17,0x15,0x15,0x15,0x15,0x16,
0x15,0x13,0x15,0x15,0x13,0x13,0x13,0x13,0x12,0x13,0x12,0x13,0x12,0x12,0x12,0x12,
0x12,0x12,0x12,0x12,0x11,0x11,0x12,0x12,0x12,0x12,0x11,0x11,0x12,0x12,0x11,0x12,
0x11,0x11,0x11,0x10,0x10,0x10,0x0b,0x17,0x17,0x3f,0x3f,0x3f,0x0f,0x19,0x1c,0x1a,
0x19,0x19,0x17,0x17,0x17,0x17,0x16,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x13,0x14,
0x13,0x13,0x12,0x13,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
0x12,0x11,0x11,0x12,0x11,0x12,0x11,0x11,0x12,0x12,0x12,0x11,0x12,0x11,0x11,0x10,
0x10,0x10,0x0b,0x17,0x17,0x3f,0x3f,0x3f,0x0f,0x19,0x1b,0x1a,0x19,0x19,0x17,0x17,
0x15,0x17,0x15,0x16,0x15,0x15,0x15,0x15,0x15,0x13,0x15,0x13,0x13,0x13,0x12,0x14,
0x12,0x12,0x12,0x12,0x12,0x12,0x11,0x12,0x11,0x12,0x11,0x11,0x12,0x11,0x12,0x12,
0x11,0x12,0x12,0x12,0x11,0x11,0x11,0x11,0x11,0x10,0x11,0x10,0x10,0x0f,0x0b,0x17,
0x17,0x3f,0x3f,0x3f,0x0f,0x19,0x1b,0x1a,0x19,0x17,0x17,0x17,0x15,0x15,0x16,0x15,
0x15,0x15,0x13,0x15,0x13,0x13,0x13,0x12,0x12,0x12,0x14,0x12,0x12,0x12,0x12,0x12,
0x11,0x12,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x12,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x10,0x10,0x0f,0x0f,0x10,0x0b,0x17,0x17,0x3f,0x3f,0x3f,
0x0f,0x19,0x1a,0x1a,0x19,0x19,0x17,0x15,0x17,0x15,0x15,0x15,0x15,0x15,0x15,0x13,
0x13,0x13,0x14,0x13,0x12,0x12,0x12,0x11,0x12,0x12,0x12,0x12,0x11,0x11,0x11,0x12,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x10,0x11,0x11,0x11,0x11,0x11,0x10,
0x11,0x11,0x10,0x10,0x0f,0x0f,0x0b,0x17,0x17,0x3f,0x3f,0x3f,0x0f,0x19,0x1a,0x19,
0x17,0x17,0x17,0x15,0x15,0x16,0x15,0x15,0x15,0x13,0x13,0x13,0x13,0x13,0x12,0x12,
0x12,0x12,0x12,0x12,0x11,0x12,0x11,0x11,0x11,0x12,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x10,0x11,0x11,0x10,0x11,0x11,0x11,0x11,0x10,0x11,0x11,0x10,0x10,
0x0f,0x0f,0x0b,0x17,0x17,0x3f,0x3f,0x3f,0x0f,0x19,0x19,0x1a,0x17,0x17,0x17,0x16,
0x15,0x15,0x15,0x13,0x15,0x15,0x13,0x13,0x13,0x12,0x13,0x12,0x12,0x11,0x12,0x12,
0x11,0x12,0x11,0x11,0x11,0x11,0x10,0x11,0x10,0x10,0x11,0x11,0x11,0x10,0x11,0x11,
0x10,0x10,0x10,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x10,0x10,0x10,0x10,0x0b,0x17,
0x17,0x3f,0x3f,0x3f,0x0f,0x19,0x1a,0x19,0x17,0x15,0x15,0x15,0x15,0x15,0x15,0x13,
0x12,0x14,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x11,0x10,
0x11,0x11,0x11,0x10,0x11,0x11,0x10,0x10,0x0f,0x0f,0x0b,0x17,0x17,0x3f,0x3f,0x3f,
0x0f,0x19,0x19,0x17,0x17,0x16,0x15,0x15,0x15,0x13,0x13,0x12,0x13,0x12,0x12,0x11,
0x12,0x12,0x12,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x10,0x11,0x10,
0x10,0x10,0x11,0x11,0x10,0x10,0x10,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x10,0x10,
0x10,0x10,0x10,0x10,0x10,0x0f,0x0b,0x17,0x17,0x3f,0x3f,0x3f,0x1e,0x0f,0x19,0x17,
0x17,0x15,0x15,0x15,0x15,0x13,0x13,0x14,0x12,0x12,0x12,0x12,0x12,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x10,0x10,0x11,0x10,0x11,0x10,0x10,0x10,
0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x0f,
0x10,0x0b,0x17,0x17,0x1b,0x3f,0x3f,0x3f,0x1b,0x0f,0x17,0x17,0x16,0x15,0x15,0x13,
0x13,0x12,0x13,0x12,0x12,0x11,0x11,0x12,0x11,0x11,0x11,0x11,0x10,0x10,0x10,0x11,
0x10,0x11,0x10,0x11,0x10,0x10,0x10,0x10,0x0f,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
0x10,0x10,0x10,0x10,0x0f,0x10,0x10,0x0f,0x10,0x10,0x10,0x10,0x10,0x0b,0x17,0x17,
0x1b,0x3f,0x3f,0x3f,0x1b,0x1b,0x0f,0x17,0x15,0x13,0x13,0x13,0x12,0x12,0x12,0x12,
0x11,0x11,0x12,0x11,0x11,0x11,0x10,0x11,0x10,0x11,0x11,0x10,0x10,0x10,0x10,0x10,
0x10,0x10,0x10,0x10,0x10,0x0f,0x10,0x0f,0x10,0x10,0x10,0x10,0x10,0x0f,0x0f,0x0f,
0x10,0x0f,0x10,0x10,0x0f,0x0f,0x0f,0x10,0x0b,0x17,0x17,0x1b,0x1b,0x3f,0x3f,0x3f,
0x1b,0x1b,0x0f,0x17,0x15,0x15,0x12,0x12,0x12,0x11,0x11,0x11,0x11,0x10,0x10,0x11,
0x10,0x11,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
0x10,0x0f,0x0f,0x0f,0x0f,0x0f,0x10,0x0f,0x0f,0x0f,0x0f,0x10,0x0f,0x0f,0x0f,0x0f,
0x0f,0x10,0x0f,0x0f,0x0b,0x17,0x17,0x1b,0x1b,0x3f,0x3f,0x3f,0x1b,0x1b,0x1b,0x0b,
0x0b,0x12,0x11,0x12,0x11,0x11,0x10,0x11,0x10,0x10,0x10,0x10,0x10,0x0f,0x10,0x10,
0x0f,0x0f,0x10,0x10,0x0f,0x0f,0x10,0x10,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x10,
0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x10,0x0f,0x0f,0x0f,0x0f,0x0b,0x0b,
0x17,0x17,0x1b,0x1b,0x1b,0x3f,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x1b,0x0b,0x10,0x10,
0x11,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x0f,0x0f,0x10,0x0f,0x0f,0x0f,
0x0f,0x0f,0x10,0x0f,0x0f,0x0f,0x10,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,
0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0b,0x0b,0x17,0x17,0x17,0x1b,0x1b,0x1b,
0x1b,0x3f,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,
0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,
0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,
0x0b,0x0b,0x0b,0x0b,0x17,0x17,0x17,0x17,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,0x3f,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
0x17,0x17,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,0x3f,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x3f,0x3f
};
const int32 kMouseDownWidth = 55;
const int32 kMouseDownHeight = 29;
const color_space kMouseDownColorSpace = B_CMAP8;
const unsigned char kMouseDownBits [] = {
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x08,0x09,0x08,0x09,0x08,0x09,0x08,0x09,0x08,
0x09,0x08,0x09,0x08,0x09,0x08,0x09,0x08,0x09,0x08,0x09,0x08,0x09,0x08,0x09,0x08,
0x09,0x08,0x09,0x08,0x09,0x08,0x09,0x08,0x09,0x08,0x09,0x08,0x09,0x08,0x09,0x08,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,0x1b,0x1b,0x1b,0x1b,0x1b,0x08,0x09,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x06,0x06,0x1b,0x1b,0x1b,0x1b,0x1b,0x3f,
0x1b,0x1b,0x1b,0x08,0x09,0x11,0x11,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x13,
0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,
0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x14,0x13,0x13,0x13,0x13,0x11,0x13,
0x11,0x11,0x06,0x06,0x18,0x1b,0x1b,0x3f,0x1b,0x1b,0x08,0x11,0x11,0x13,0x13,0x15,
0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,
0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,
0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x11,0x11,0x11,0x07,0x17,0x17,0x3f,
0x1b,0x1b,0x08,0x11,0x13,0x13,0x15,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x0f,0x07,0x17,0x3f,0x1b,0x08,0x11,0x13,0x13,0x15,0x13,0x13,
0x13,0x13,0x14,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x11,0x13,0x13,0x13,0x13,0x11,0x13,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x0f,0x0f,0x07,0x17,0x3f,
0x1b,0x08,0x11,0x13,0x15,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
0x13,0x14,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x11,0x13,
0x11,0x13,0x13,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x0f,0x0f,0x0d,0x0d,0x06,0x3f,0x08,0x11,0x13,0x13,0x15,0x13,0x13,0x13,
0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
0x13,0x11,0x13,0x13,0x13,0x13,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x0f,0x0d,0x0d,0x0d,0x06,0x3f,
0x08,0x11,0x13,0x13,0x15,0x13,0x13,0x11,0x13,0x13,0x13,0x11,0x13,0x13,0x13,0x13,
0x13,0x11,0x13,0x13,0x13,0x13,0x13,0x11,0x13,0x11,0x13,0x13,0x11,0x11,0x13,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x0f,0x0f,0x0f,0x0d,0x0c,0x06,0x3f,0x08,0x11,0x13,0x13,0x15,0x13,0x13,0x13,
0x13,0x13,0x11,0x13,0x13,0x13,0x11,0x11,0x11,0x11,0x13,0x13,0x13,0x11,0x11,0x13,
0x13,0x13,0x13,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x0f,0x0f,0x0d,0x0d,0x0d,0x0c,0x07,0x3f,
0x08,0x11,0x13,0x13,0x15,0x13,0x11,0x11,0x11,0x11,0x13,0x13,0x13,0x13,0x11,0x11,
0x11,0x11,0x13,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x0f,0x0f,
0x0f,0x0f,0x0f,0x0d,0x0c,0x0b,0x06,0x3f,0x08,0x11,0x13,0x13,0x15,0x13,0x11,0x11,
0x11,0x11,0x11,0x11,0x13,0x11,0x13,0x11,0x11,0x11,0x11,0x13,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x0f,0x0f,0x0f,0x0f,0x0d,0x0d,0x0d,0x0c,0x06,0x3f,
0x08,0x11,0x13,0x13,0x15,0x13,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x0f,0x0f,0x0f,
0x0f,0x0d,0x0d,0x0d,0x0c,0x0b,0x06,0x3f,0x08,0x11,0x13,0x13,0x15,0x13,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x0f,0x0f,0x0f,0x0f,0x0d,0x0d,0x0c,0x0d,0x0b,0x06,0x3f,
0x08,0x11,0x13,0x13,0x15,0x13,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x0f,0x0f,0x0f,0x0f,
0x0f,0x0d,0x0d,0x0c,0x0b,0x0b,0x06,0x3f,0x08,0x11,0x13,0x13,0x15,0x13,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x0f,0x0f,0x0f,0x0f,0x0f,0x0d,0x0d,0x0d,0x0c,0x0c,0x0b,0x06,0x3f,
0x08,0x11,0x13,0x13,0x15,0x13,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x0f,0x0f,0x0f,0x0f,0x0f,0x0d,
0x0d,0x0d,0x0d,0x0c,0x0b,0x0a,0x07,0x3f,0x08,0x11,0x13,0x13,0x15,0x13,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0d,0x0d,0x0d,0x0b,0x0c,0x0a,0x07,0x3f,
0x08,0x11,0x13,0x13,0x13,0x13,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0d,0x0d,
0x0d,0x0d,0x0d,0x0c,0x0b,0x0b,0x06,0x3f,0x08,0x11,0x13,0x13,0x13,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x0f,
0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0d,0x0d,0x0d,0x0c,0x0c,0x0c,0x0b,0x0a,0x07,0x3f,
0x08,0x11,0x13,0x13,0x13,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x0f,0x11,0x11,0x0f,0x0f,0x0f,0x0f,0x0f,0x0d,0x0d,0x0d,
0x0d,0x0c,0x0c,0x0c,0x0a,0x0b,0x06,0x3f,0x08,0x11,0x13,0x13,0x13,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x0f,0x0f,
0x0f,0x0f,0x0f,0x0f,0x0f,0x0d,0x0d,0x0d,0x0d,0x0c,0x0c,0x0b,0x0b,0x0a,0x07,0x3f,
0x08,0x11,0x13,0x13,0x13,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0d,0x0d,0x0d,0x0d,
0x0d,0x0c,0x0c,0x0c,0x0a,0x0b,0x06,0x3f,0x08,0x11,0x13,0x13,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x0f,0x0f,0x0f,0x0f,
0x0f,0x0f,0x0f,0x0f,0x0f,0x0d,0x0d,0x0d,0x0d,0x0c,0x0b,0x0b,0x0a,0x0b,0x06,0x3f,
0x08,0x11,0x13,0x13,0x13,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0e,0x0d,0x0d,0x0d,0x0d,
0x0d,0x0c,0x0c,0x0b,0x0b,0x0b,0x06,0x3f,0x08,0x11,0x13,0x13,0x11,0x0f,0x0f,0x0f,
0x0f,0x0e,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0e,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,
0x0f,0x0e,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0e,0x0f,0x0d,0x0d,0x0d,0x0d,0x0d,
0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0b,0x0b,0x0b,0x0a,0x07,0x3f,
0x08,0x11,0x13,0x0f,0x0f,0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x07,0x06,
0x06,0x07,0x06,0x06,0x07,0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x07,0x06,
0x06,0x07,0x06,0x06,0x07,0x06,0x07,0x06,0x06,0x07,0x06,0x06,0x07,0x06,0x07,0x06,
0x06,0x07,0x0a,0x0b,0x0b,0x0a,0x07,0x3f,0x08,0x11,0x0f,0x06,0x07,0x1e,0x1e,0x1e,
0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,
0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,
0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x06,0x06,0x0b,0x0b,0x06,0x3f,
0x08,0x06,0x07,0x1e,0x1e,0x1e,0x1c,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19,
0x17,0x19,0x19,0x19,0x19,0x19,0x19,0x17,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x17,
0x17,0x18,0x17,0x18,0x17,0x17,0x17,0x15,0x17,0x17,0x17,0x15,0x15,0x15,0x15,0x13,
0x14,0x17,0x17,0x18,0x06,0x06,0x07,0x3f
};

View File

@ -1,8 +1,17 @@
/*
MouseMessages.h
*/
// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
//
// Copyright (c) 2003, OpenBeOS
//
// This software is part of the OpenBeOS distribution and is covered
// by the OpenBeOS license.
//
//
// File: MouseMessages.h
// Author: Jérôme Duval, Andrew McCall (mccall@digitalparadise.co.uk)
// Description: Media Preferences
// Created : December 10, 2003
//
// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
#ifndef MOUSE_MESSAGES_H
#define MOUSE_MESSAGES_H
@ -11,11 +20,14 @@ const uint32 BUTTON_DEFAULTS = 'BTde';
const uint32 BUTTON_REVERT = 'BTre';
const uint32 POPUP_MOUSE_TYPE = 'PUmt';
const uint32 POPUP_MOUSE_FOCUS = 'PUmf';
const uint32 POPUP_MOUSE_MAP = 'PUmm';
const uint32 DOUBLE_CLICK_TEST_AREA = 'TCte';
const uint32 SLIDER_DOUBLE_CLICK_SPEED = 'SLdc';
const uint32 SLIDER_MOUSE_SPEED = 'SLms';
const uint32 SLIDER_MOUSE_ACC = 'SLma';
const uint32 ERROR_DETECTED = 'ERor';

View File

@ -1,8 +1,17 @@
/*
* MouseSettings.cpp
* Mouse mccall@digitalparadise.co.uk
*
*/
// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
//
// Copyright (c) 2003, OpenBeOS
//
// This software is part of the OpenBeOS distribution and is covered
// by the OpenBeOS license.
//
//
// File: MouseSettings.h
// Author: Jérôme Duval, Andrew McCall (mccall@digitalparadise.co.uk)
// Description: Media Preferences
// Created : December 10, 2003
//
// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
#include <Application.h>
#include <FindDirectory.h>
@ -14,10 +23,11 @@
#include "MouseSettings.h"
#include "MouseMessages.h"
const char MouseSettings::kMouseSettingsFile[] = "Mouse_settings";
const char kMouseSettingsFile[] = "Mouse_settings";
MouseSettings::MouseSettings()
{
fInitCheck = B_OK;
BPath path;
if (find_directory(B_USER_SETTINGS_DIRECTORY,&path) == B_OK) {
@ -25,39 +35,39 @@ MouseSettings::MouseSettings()
BFile file(path.Path(), B_READ_ONLY);
if (file.InitCheck() == B_OK) {
// Now read in the data
if (file.Read(&fSettings, sizeof(mouse_settings)) != sizeof(mouse_settings)) {
// we have to do this because mouse_map counts 16 buttons in OBOS
if ((file.Read(&fSettings.type, sizeof(fSettings.type)) != sizeof(fSettings.type))
||(file.Read(&fSettings.map, (3*sizeof(int32))) != (3*sizeof(int32)))
|| (file.Read(&fSettings.accel, sizeof(fSettings.accel)) != sizeof(fSettings.accel))
|| (file.Read(&fSettings.click_speed, sizeof(fSettings.click_speed)) != sizeof(fSettings.click_speed))) {
if (get_mouse_type((int32*)&fSettings.type) != B_OK)
be_app->PostMessage(ERROR_DETECTED);
fInitCheck = B_ERROR;
if (get_mouse_map(&fSettings.map) != B_OK)
be_app->PostMessage(ERROR_DETECTED);
if (get_mouse_speed((int32 *)&fSettings.accel.speed) != B_OK)
be_app->PostMessage(ERROR_DETECTED);
fInitCheck = B_ERROR;
if (get_mouse_speed(&fSettings.accel.speed) != B_OK)
fInitCheck = B_ERROR;
if (get_click_speed(&fSettings.click_speed) != B_OK)
be_app->PostMessage(ERROR_DETECTED);
fInitCheck = B_ERROR;
}
if (file.Read(&fCorner, sizeof(BPoint)) != sizeof(BPoint)) {
fCorner.x=50;
fCorner.y=50;
}
}
else {
} else {
if (get_mouse_type((int32*)&fSettings.type) != B_OK)
be_app->PostMessage(ERROR_DETECTED);
fInitCheck = B_ERROR;
if (get_mouse_map(&fSettings.map) != B_OK)
be_app->PostMessage(ERROR_DETECTED);
fInitCheck = B_ERROR;
if (get_mouse_speed(&fSettings.accel.speed) != B_OK)
fInitCheck = B_ERROR;
if (get_click_speed(&fSettings.click_speed) != B_OK)
be_app->PostMessage(ERROR_DETECTED);
fInitCheck = B_ERROR;
fCorner.x=50;
fCorner.y=50;
}
}
else
be_app->PostMessage(ERROR_DETECTED);
printf("Size is : %ld\n",sizeof(mouse_settings)+sizeof(BPoint));
} else
fInitCheck = B_ERROR;
}
MouseSettings::~MouseSettings()
@ -69,31 +79,46 @@ MouseSettings::~MouseSettings()
path.Append(kMouseSettingsFile);
BFile file(path.Path(), B_WRITE_ONLY | B_CREATE_FILE);
BFile file(path.Path(), B_READ_WRITE | B_CREATE_FILE | B_ERASE_FILE);
if (file.InitCheck() == B_OK) {
file.Write(&fSettings, sizeof(mouse_settings));
// we have to do this because mouse_map counts 16 buttons in OBOS
file.Write(&fSettings.type, sizeof(fSettings.type));
file.Write(&fSettings.map, 3*sizeof(int32));
file.Write(&fSettings.accel, sizeof(fSettings.accel));
file.Write(&fSettings.click_speed, sizeof(fSettings.click_speed));
file.Write(&fCorner, sizeof(BPoint));
}
}
status_t
MouseSettings::InitCheck()
{
return fInitCheck;
}
void
MouseSettings::SetWindowCorner(BPoint corner)
{
fCorner = corner;
}
void
MouseSettings::SetMouseType(mouse_type type)
MouseSettings::SetMouseType(int32 type)
{
fSettings.type = type;
}
void
MouseSettings::SetClickSpeed(bigtime_t click_speed)
{
fSettings.click_speed = -(click_speed-1000000);
}
void
MouseSettings::SetMouseSpeed(int32 accel)
{

View File

@ -1,16 +1,24 @@
// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
//
// Copyright (c) 2003, OpenBeOS
//
// This software is part of the OpenBeOS distribution and is covered
// by the OpenBeOS license.
//
//
// File: MouseSettings.h
// Author: Jérôme Duval, Andrew McCall (mccall@digitalparadise.co.uk)
// Description: Media Preferences
// Created : December 10, 2003
//
// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
#ifndef MOUSE_SETTINGS_H_
#define MOUSE_SETTINGS_H_
#include <SupportDefs.h>
#include <InterfaceDefs.h>
typedef enum {
MOUSE_1_BUTTON = 1,
MOUSE_2_BUTTON,
MOUSE_3_BUTTON
} mouse_type;
typedef struct {
bool enabled; // Acceleration on / off
int32 accel_factor; // accel factor: 256 = step by 1, 128 = step by 1/2
@ -18,7 +26,7 @@ typedef struct {
} mouse_accel;
typedef struct {
mouse_type type;
int32 type;
mouse_map map;
mouse_accel accel;
bigtime_t click_speed;
@ -28,18 +36,19 @@ class MouseSettings{
public :
MouseSettings();
~MouseSettings();
status_t InitCheck();
BPoint WindowCorner() const { return fCorner; }
void SetWindowCorner(BPoint corner);
mouse_type MouseType() const { return fSettings.type; }
void SetMouseType(mouse_type type);
int32 MouseType() const { return fSettings.type; }
void SetMouseType(int32 type);
bigtime_t ClickSpeed() const { return -(fSettings.click_speed-1000000); } // -1000000 to correct the Sliders 0-100000 scale
void SetClickSpeed(bigtime_t click_speed);
int32 MouseSpeed() const { return fSettings.accel.speed; }
void SetMouseSpeed(int32 speed);
private:
static const char kMouseSettingsFile[];
status_t fInitCheck;
BPoint fCorner;
mouse_settings fSettings;
};

View File

@ -1,8 +1,18 @@
/*
// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
//
// Copyright (c) 2003, OpenBeOS
//
// This software is part of the OpenBeOS distribution and is covered
// by the OpenBeOS license.
//
//
// File: MouseView.cpp
// Author: Jérôme Duval, Andrew McCall (mccall@digitalparadise.co.uk)
// Description: Media Preferences
// Created : December 10, 2003
//
// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
MouseView.cpp
*/
#include <InterfaceDefs.h>
#include <Button.h>
#include <Box.h>
@ -13,21 +23,68 @@
#include <PopUpMenu.h>
#include <MenuField.h>
#include <MenuItem.h>
#include <Debug.h>
#include <Window.h>
#include "MouseView.h"
#include "MouseMessages.h"
#include "MouseBitmap.h"
BoxView::BoxView(BRect rect, MouseView *mouseView)
: BBox(rect, "mouse_box",
B_FOLLOW_LEFT, B_WILL_DRAW,B_FANCY_BORDER),
fMouseView(mouseView)
{
}
void
BoxView::MouseDown(BPoint where)
{
int32 index = fMouseView->mouseTypeMenu->IndexOf(fMouseView->mouseTypeMenu->FindMarked());
fMouseView->fCurrentButton = -1;
if ((index == 0) && BRect(50,41,105,73).Contains(where))
fMouseView->fCurrentButton = 0;
else if (index == 1) {
if(BRect(50,41,77,73).Contains(where))
fMouseView->fCurrentButton = 0;
else if (BRect(77,41,105,73).Contains(where))
fMouseView->fCurrentButton = 1;
} else {
if(BRect(50,41,68,73).Contains(where))
fMouseView->fCurrentButton = 0;
else if (BRect(86,41,105,73).Contains(where))
fMouseView->fCurrentButton = 1;
else if (BRect(68,41,86,73).Contains(where))
fMouseView->fCurrentButton = 2;
}
if (fMouseView->fCurrentButton >= 0) {
int32 number = 0;
switch (fMouseView->fCurrentMouseMap.button[fMouseView->fCurrentButton]) {
case B_PRIMARY_MOUSE_BUTTON: number = 0; break;
case B_SECONDARY_MOUSE_BUTTON: number = 1; break;
case B_TERTIARY_MOUSE_BUTTON: number = 2; break;
}
fMouseView->mouseMapMenu->ItemAt(number)->SetMarked(true);
ConvertToScreen(&where);
fMouseView->mouseMapMenu->Go(where, true);
}
}
MouseView::MouseView(BRect rect)
: BBox(rect, "mouse_view",
B_FOLLOW_ALL, B_WILL_DRAW | B_FRAME_EVENTS | B_NAVIGABLE_JUMP,
B_PLAIN_BORDER)
B_FOLLOW_ALL, B_WILL_DRAW | B_FRAME_EVENTS | B_NAVIGABLE_JUMP | B_PULSE_NEEDED,
B_PLAIN_BORDER),
fCurrentButton(-1),
fButtons(0),
fOldButtons(0)
{
BRect frame;
BButton *button;
BTextControl *textcontrol;
BSlider *slider;
BPopUpMenu *popupmenu;
BMenuField *menufield;
SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
@ -36,16 +93,25 @@ MouseView::MouseView(BRect rect)
fSpeedBitmap = BTranslationUtils::GetBitmap("speed_bmap");
fAccelerationBitmap = BTranslationUtils::GetBitmap("acceleration_bmap");
// i don't really understand this bitmap SetBits : i have to substract 4 lines and add 15 pixels
BRect mouseRect(0,0,kMouseWidth-1,kMouseHeight-5);
fMouseBitmap = new BBitmap(mouseRect, B_CMAP8);
fMouseBitmap->SetBits(kMouseBits, kMouseWidth*kMouseHeight + 15, 0, kMouseColorSpace);
BRect mouseDownRect(0,0,kMouseDownWidth-1,kMouseDownHeight-1);
fMouseDownBitmap = new BBitmap(mouseDownRect, B_CMAP8);
fMouseDownBitmap->SetBits(kMouseDownBits, kMouseDownWidth*kMouseDownHeight + 30, 0, kMouseDownColorSpace);
// Add the "Default" button..
frame.Set(10,259,85,279);
button = new BButton(frame,"mouse_defaults","Defaults", new BMessage(BUTTON_DEFAULTS));
AddChild(button);
defaultButton = new BButton(frame,"mouse_defaults","Defaults", new BMessage(BUTTON_DEFAULTS));
AddChild(defaultButton);
// Add the "Revert" button...
frame.Set(92,259,167,279);
button = new BButton(frame,"mouse_revert","Revert", new BMessage(BUTTON_REVERT));
button->SetEnabled(false);
AddChild(button);
revertButton = new BButton(frame,"mouse_revert","Revert", new BMessage(BUTTON_REVERT));
revertButton->SetEnabled(false);
AddChild(revertButton);
// Create the main box for the controls...
frame=Bounds();
@ -53,58 +119,61 @@ MouseView::MouseView(BRect rect)
frame.top=frame.top+11;
frame.right=frame.right-11;
frame.bottom=frame.bottom-44;
fBox = new BBox(frame,"mouse_box",B_FOLLOW_LEFT,B_WILL_DRAW,B_FANCY_BORDER);
fBox = new BoxView(frame, this);
// Add the "Mouse Type" pop up menu
popupmenu = new BPopUpMenu("Mouse Type Menu");
popupmenu->AddItem(new BMenuItem("1-Button",new BMessage(POPUP_MOUSE_TYPE)));
popupmenu->AddItem(new BMenuItem("2-Button",new BMessage(POPUP_MOUSE_TYPE)));
popupmenu->AddItem(new BMenuItem("3-Button",new BMessage(POPUP_MOUSE_TYPE)));
mouseTypeMenu = new BPopUpMenu("Mouse Type Menu");
mouseTypeMenu->AddItem(new BMenuItem("1-Button",new BMessage(POPUP_MOUSE_TYPE)));
mouseTypeMenu->AddItem(new BMenuItem("2-Button",new BMessage(POPUP_MOUSE_TYPE)));
mouseTypeMenu->AddItem(new BMenuItem("3-Button",new BMessage(POPUP_MOUSE_TYPE)));
frame.Set(18,10,208,20);
menufield = new BMenuField(frame, "mouse_type", "Mouse Type", popupmenu);
menufield->SetDivider(menufield->Divider() - 30);
frame.Set(17,8,208,20);
menufield = new BMenuField(frame, "mouse_type", "Mouse type", mouseTypeMenu);
menufield->SetDivider(menufield->Divider() - 34);
fBox->AddChild(menufield);
// Add the "Mouse Type" pop up menu
popupmenu = new BPopUpMenu("Focus Follows Mouse Menu");
popupmenu->AddItem(new BMenuItem("Disabled",new BMessage(BUTTON_REVERT)));
popupmenu->AddItem(new BMenuItem("Enabled",new BMessage(BUTTON_REVERT)));
popupmenu->AddItem(new BMenuItem("Warping",new BMessage(BUTTON_REVERT)));
popupmenu->AddItem(new BMenuItem("Instant-Warping",new BMessage(BUTTON_REVERT)));
// Add the "Focus follows mouse" pop up menu
focusMenu = new BPopUpMenu("Focus Follows Mouse Menu");
focusMenu->AddItem(new BMenuItem("Disabled",new BMessage(POPUP_MOUSE_FOCUS)));
focusMenu->AddItem(new BMenuItem("Enabled",new BMessage(POPUP_MOUSE_FOCUS)));
focusMenu->AddItem(new BMenuItem("Warping",new BMessage(POPUP_MOUSE_FOCUS)));
focusMenu->AddItem(new BMenuItem("Instant-Warping",new BMessage(POPUP_MOUSE_FOCUS)));
frame.Set(168,207,440,200);
menufield = new BMenuField(frame, "Focus follows mouse", "Focus follows mouse:", popupmenu);
menufield->SetDivider(menufield->Divider() - 30);
frame.Set(165,208,440,200);
menufield = new BMenuField(frame, "Focus follows mouse", "Focus follows mouse:", focusMenu);
menufield->SetDivider(menufield->Divider() - 32);
fBox->AddChild(menufield);
// Create the "Double-click speed slider...
frame.Set(168,10,328,50);
slider = new BSlider(frame,"double_click_speed","Double-click speed", new BMessage(SLIDER_DOUBLE_CLICK_SPEED),0,1000000,B_BLOCK_THUMB,B_FOLLOW_LEFT,B_WILL_DRAW);
slider->SetHashMarks(B_HASH_MARKS_BOTTOM);
slider->SetHashMarkCount(5);
slider->SetLimitLabels("Slow","Fast");
fBox->AddChild(slider);
frame.Set(166,11,328,50);
dcSpeedSlider = new BSlider(frame,"double_click_speed","Double-click speed",
new BMessage(SLIDER_DOUBLE_CLICK_SPEED),0,1000,B_BLOCK_THUMB,B_FOLLOW_LEFT,B_WILL_DRAW);
dcSpeedSlider->SetHashMarks(B_HASH_MARKS_BOTTOM);
dcSpeedSlider->SetHashMarkCount(5);
dcSpeedSlider->SetLimitLabels("Slow","Fast");
fBox->AddChild(dcSpeedSlider);
// Create the "Mouse Speed" slider...
frame.Set(168,75,328,125);
slider = new BSlider(frame,"mouse_speed","Mouse Speed", new BMessage(SLIDER_MOUSE_SPEED),8192,524287,B_BLOCK_THUMB,B_FOLLOW_LEFT,B_WILL_DRAW);
slider->SetHashMarks(B_HASH_MARKS_BOTTOM);
slider->SetHashMarkCount(7);
slider->SetLimitLabels("Slow","Fast");
fBox->AddChild(slider);
frame.Set(166,76,328,125);
mouseSpeedSlider = new BSlider(frame,"mouse_speed","Mouse Speed",
new BMessage(SLIDER_MOUSE_SPEED),0,1000,B_BLOCK_THUMB,B_FOLLOW_LEFT,B_WILL_DRAW);
mouseSpeedSlider->SetHashMarks(B_HASH_MARKS_BOTTOM);
mouseSpeedSlider->SetHashMarkCount(7);
mouseSpeedSlider->SetLimitLabels("Slow","Fast");
fBox->AddChild(mouseSpeedSlider);
// Create the "Mouse Acceleration" slider...
frame.Set(168,140,328,190);
slider = new BSlider(frame,"mouse_acceleration","Mouse Acceleration", new BMessage(SLIDER_MOUSE_SPEED),250000,1000000,B_BLOCK_THUMB,B_FOLLOW_LEFT,B_WILL_DRAW);
slider->SetHashMarks(B_HASH_MARKS_BOTTOM);
slider->SetHashMarkCount(5);
slider->SetLimitLabels("Slow","Fast");
fBox->AddChild(slider);
frame.Set(166,141,328,190);
mouseAccSlider = new BSlider(frame,"mouse_acceleration","Mouse Acceleration",
new BMessage(SLIDER_MOUSE_ACC),0,1000,B_BLOCK_THUMB,B_FOLLOW_LEFT,B_WILL_DRAW);
mouseAccSlider->SetHashMarks(B_HASH_MARKS_BOTTOM);
mouseAccSlider->SetHashMarkCount(5);
mouseAccSlider->SetLimitLabels("Slow","Fast");
fBox->AddChild(mouseAccSlider);
// Create the "Double-click test area" text box...
frame=fBox->Bounds();
frame.left=frame.left+10;
frame.left=frame.left+9;
frame.right=frame.right-230;
frame.top=frame.bottom-30;
textcontrol = new BTextControl(frame,"double_click_test_area",NULL,"Double-click test area", new BMessage(DOUBLE_CLICK_TEST_AREA),B_FOLLOW_LEFT,B_WILL_DRAW);
@ -113,25 +182,198 @@ MouseView::MouseView(BRect rect)
AddChild(fBox);
mouseMapMenu = new BPopUpMenu("Mouse Map Menu", true, true);
mouseMapMenu->AddItem(new BMenuItem("1",new BMessage(POPUP_MOUSE_MAP)));
mouseMapMenu->AddItem(new BMenuItem("2",new BMessage(POPUP_MOUSE_MAP)));
mouseMapMenu->AddItem(new BMenuItem("3",new BMessage(POPUP_MOUSE_MAP)));
}
void MouseView::Draw(BRect updateFrame)
void
MouseView::AttachedToWindow()
{
get_click_speed(&fClickSpeed);
get_mouse_speed(&fMouseSpeed);
get_mouse_acceleration(&fMouseAcc);
get_mouse_type(&fMouseType);
fMouseMode = mouse_mode();
get_mouse_map(&fMouseMap);
get_mouse_map(&fCurrentMouseMap);
Init();
mouseMapMenu->SetTargetForItems( this->Window() );
}
void
MouseView::Pulse()
{
BPoint point;
GetMouse(&point, &fButtons, true);
if (fOldButtons != fButtons) {
Invalidate();
fOldButtons = fButtons;
}
}
void
MouseView::Draw(BRect updateFrame)
{
inherited::Draw(updateFrame);
fBox->SetHighColor(120,120,120);
fBox->SetLowColor(255,255,255);
// Line above the test area
fBox->StrokeLine(BPoint(10,199),BPoint(150,199),B_SOLID_HIGH);
fBox->StrokeLine(BPoint(11,200),BPoint(150,200),B_SOLID_LOW);
fBox->StrokeLine(BPoint(8,198),BPoint(149,198),B_SOLID_HIGH);
fBox->StrokeLine(BPoint(8,199),BPoint(149,199),B_SOLID_LOW);
// Line above focus follows mouse
fBox->StrokeLine(BPoint(170,199),BPoint(362,199),B_SOLID_HIGH);
fBox->StrokeLine(BPoint(171,200),BPoint(362,200),B_SOLID_LOW);
fBox->StrokeLine(BPoint(164,198),BPoint(367,198),B_SOLID_HIGH);
fBox->StrokeLine(BPoint(164,199),BPoint(367,199),B_SOLID_LOW);
// Line in the middle
fBox->StrokeLine(BPoint(160,10),BPoint(160,230),B_SOLID_HIGH);
fBox->StrokeLine(BPoint(161,11),BPoint(161,230),B_SOLID_LOW);
fBox->StrokeLine(BPoint(156,10),BPoint(156,230),B_SOLID_HIGH);
fBox->StrokeLine(BPoint(157,11),BPoint(157,230),B_SOLID_LOW);
// Draw the icons
fBox->DrawBitmap(fDoubleClickBitmap,BPoint(341,20));
fBox->DrawBitmap(fSpeedBitmap,BPoint(331,90));
fBox->DrawBitmap(fAccelerationBitmap,BPoint(331,155));
fBox->DrawBitmap(fDoubleClickBitmap,BPoint(344,16));
fBox->DrawBitmap(fSpeedBitmap,BPoint(333,90));
fBox->DrawBitmap(fAccelerationBitmap,BPoint(333,155));
fBox->SetDrawingMode(B_OP_OVER);
// Draw the mouse top
fBox->DrawBitmap(fMouseBitmap,BPoint(50, 41));
int32 index = mouseTypeMenu->IndexOf(mouseTypeMenu->FindMarked());
if (index == 0) { // 1 button
if (fButtons & fCurrentMouseMap.button[0]) {
fBox->DrawBitmap(fMouseDownBitmap,BPoint(50, 47));
fBox->SetHighColor(64,64,64);
}
} else if (index == 1) { // 2 button
if ( fButtons & fCurrentMouseMap.button[0]) {
fBox->DrawBitmap(fMouseDownBitmap, BRect(0,0,27,28), BRect(50,47,77,75));
fBox->SetHighColor(120,120,120);
} else
fBox->SetHighColor(184,184,184);
fBox->StrokeLine(BPoint(76,49),BPoint(76,71),B_SOLID_HIGH);
if (fButtons & fCurrentMouseMap.button[1]) {
fBox->SetHighColor(120,120,120);
fBox->DrawBitmap(fMouseDownBitmap, BRect(27,0,54,28), BRect(77,47,104,75));
} else
fBox->SetHighColor(255,255,255);
fBox->StrokeLine(BPoint(78,49),BPoint(78,71),B_SOLID_HIGH);
if ((fButtons & fCurrentMouseMap.button[0]) || (fButtons & fCurrentMouseMap.button[1]))
fBox->SetHighColor(48,48,48);
else
fBox->SetHighColor(88,88,88);
fBox->StrokeLine(BPoint(77,48),BPoint(77,72),B_SOLID_HIGH);
} else { // 3 button
if ( fButtons & fCurrentMouseMap.button[0]) {
fBox->DrawBitmap(fMouseDownBitmap, BRect(0,0,18,28), BRect(50,47,68,75));
fBox->SetHighColor(120,120,120);
} else
fBox->SetHighColor(184,184,184);
fBox->StrokeLine(BPoint(67,49),BPoint(67,71),B_SOLID_HIGH);
if (fButtons & fCurrentMouseMap.button[2]) {
fBox->DrawBitmap(fMouseDownBitmap, BRect(18,0,36,28), BRect(68,47,86,75));
fBox->SetHighColor(120,120,120);
} else
fBox->SetHighColor(184,184,184);
fBox->StrokeLine(BPoint(85,49),BPoint(85,71),B_SOLID_HIGH);
if (fButtons & fCurrentMouseMap.button[2])
fBox->SetHighColor(120,120,120);
else
fBox->SetHighColor(255,255,255);
fBox->StrokeLine(BPoint(69,49),BPoint(69,71),B_SOLID_HIGH);
if (fButtons & fCurrentMouseMap.button[1]) {
fBox->DrawBitmap(fMouseDownBitmap, BRect(36,0,54,28), BRect(86,47,104,75));
fBox->SetHighColor(120,120,120);
} else
fBox->SetHighColor(255,255,255);
fBox->StrokeLine(BPoint(87,49),BPoint(87,71),B_SOLID_HIGH);
if ((fButtons & fCurrentMouseMap.button[0]) || (fButtons & fCurrentMouseMap.button[2]))
fBox->SetHighColor(48,48,48);
else
fBox->SetHighColor(88,88,88);
fBox->StrokeLine(BPoint(68,48),BPoint(68,72),B_SOLID_HIGH);
if ((fButtons & fCurrentMouseMap.button[2]) || (fButtons & fCurrentMouseMap.button[1]))
fBox->SetHighColor(48,48,48);
else
fBox->SetHighColor(88,88,88);
fBox->StrokeLine(BPoint(86,48),BPoint(86,72),B_SOLID_HIGH);
}
fBox->SetHighColor(32,32,32);
fBox->SetFont(be_plain_font);
for(int32 i=0; i<index+1; i++) {
char number[2] = "1";
switch (fCurrentMouseMap.button[i]) {
case B_PRIMARY_MOUSE_BUTTON: *number = '1'; break;
case B_SECONDARY_MOUSE_BUTTON: *number = '2'; break;
case B_TERTIARY_MOUSE_BUTTON: *number = '3'; break;
}
int32 offsets[][3] = { {75},
{61, 88},
{57, 92, 74} };
fBox->MovePenTo(offsets[index][i], 65);
fBox->DrawString(number);
}
fBox->SetDrawingMode(B_OP_COPY);
}
void
MouseView::Init()
{
int32 value;
// slow = 1000000, fast = 0
value = (int32) ((1000000 - fClickSpeed) / 1000);
if (value > 1000) value = 1000;
if (value < 0) value = 0;
dcSpeedSlider->SetValue(value);
// slow = 8192, fast = 524287
value = (int32) (( log(fMouseSpeed / 8192) / log(2)) * 1000 / 6);
if (value > 1000) value = 1000;
if (value < 0) value = 0;
mouseSpeedSlider->SetValue(value);
// slow = 0, fast = 262144
value = (int32) (sqrt(fMouseAcc / 16384) * 1000 / 4);
if (value > 1000) value = 1000;
if (value < 0) value = 0;
mouseAccSlider->SetValue(value);
if (fMouseType < 1)
fMouseType = 1;
if (fMouseType > 3)
fMouseType = 3;
BMenuItem *item = mouseTypeMenu->ItemAt(fMouseType - 1);
if (item)
item->SetMarked(true);
int32 mode;
switch(fMouseMode) {
case B_NORMAL_MOUSE: mode = 0; break;
case B_FOCUS_FOLLOWS_MOUSE: mode = 1; break;
case B_WARP_MOUSE: mode = 2; break;
case B_INSTANT_WARP_MOUSE: mode = 3; break;
default : mode = 0; break;
}
item = focusMenu->ItemAt(mode);
if (item)
item->SetMarked(true);
printf("click_speed : %lli, mouse_speed : %li, mouse_acc : %li, mouse_type : %li\n",
fClickSpeed, fMouseSpeed, fMouseAcc, fMouseType);
}

View File

@ -1,14 +1,25 @@
/*
MouseView.h
*/
// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
//
// Copyright (c) 2003, OpenBeOS
//
// This software is part of the OpenBeOS distribution and is covered
// by the OpenBeOS license.
//
//
// File: MouseView.h
// Author: Jérôme Duval, Andrew McCall (mccall@digitalparadise.co.uk)
// Description: Media Preferences
// Created : December 10, 2003
//
// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
#ifndef MOUSE_VIEW_H
#define MOUSE_VIEW_H
#include <Box.h>
#include <Bitmap.h>
#include <Button.h>
#include <Slider.h>
#include <PopUpMenu.h>
class MouseView : public BBox
{
@ -16,14 +27,41 @@ public:
typedef BBox inherited;
MouseView(BRect frame);
void AttachedToWindow();
virtual void Draw(BRect frame);
virtual void Pulse();
void Init();
BButton *defaultButton, *revertButton;
BSlider *dcSpeedSlider, *mouseSpeedSlider, *mouseAccSlider;
BPopUpMenu *mouseTypeMenu, *focusMenu, *mouseMapMenu;
bigtime_t fClickSpeed;
int32 fMouseSpeed;
int32 fMouseAcc;
int32 fMouseType;
mode_mouse fMouseMode;
mouse_map fMouseMap, fCurrentMouseMap;
int32 fCurrentButton;
uint32 fButtons;
uint32 fOldButtons;
private:
BBox *fBox;
BBitmap *fDoubleClickBitmap;
BBitmap *fSpeedBitmap;
BBitmap *fAccelerationBitmap;
BBitmap *fDoubleClickBitmap, *fSpeedBitmap, *fAccelerationBitmap;
BBitmap *fMouseBitmap, *fMouseDownBitmap;
};
class BoxView : public BBox
{
public:
BoxView(BRect frame, MouseView *mouseView);
void MouseDown(BPoint where);
private:
MouseView *fMouseView;
};
#endif

View File

@ -1,9 +1,18 @@
/*
* MouseWindow.cpp
* Mouse mccall@digitalparadise.co.uk
*
*/
// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
//
// Copyright (c) 2003, OpenBeOS
//
// This software is part of the OpenBeOS distribution and is covered
// by the OpenBeOS license.
//
//
// File: MouseWindow.cpp
// Author: Jérôme Duval, Andrew McCall (mccall@digitalparadise.co.uk)
// Description: Media Preferences
// Created : December 10, 2003
//
// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
#include <Alert.h>
#include <Application.h>
#include <Message.h>
#include <Screen.h>
@ -12,73 +21,27 @@
#include <Menu.h>
#include <MenuItem.h>
#include <MenuField.h>
#include <Beep.h>
#include <Debug.h>
#include <string.h>
#include "MouseMessages.h"
#include "MouseWindow.h"
#include "MouseView.h"
#include "Mouse.h"
#define MOUSE_WINDOW_RIGHT 397
#define MOUSE_WINDOW_BOTTTOM 293
MouseWindow::MouseWindow()
: BWindow(BRect(0,0,MOUSE_WINDOW_RIGHT,MOUSE_WINDOW_BOTTTOM), "Mouse", B_TITLED_WINDOW, B_NOT_RESIZABLE | B_NOT_ZOOMABLE )
MouseWindow::MouseWindow(BRect rect)
: BWindow(rect, "Mouse", B_TITLED_WINDOW, B_NOT_RESIZABLE | B_NOT_ZOOMABLE )
{
BScreen screen;
BSlider *slider=NULL;
BMenuField *menufield=NULL;
MoveTo(dynamic_cast<MouseApplication *>(be_app)->WindowCorner());
// Code to make sure that the window doesn't get drawn off screen...
if (!(screen.Frame().right >= Frame().right && screen.Frame().bottom >= Frame().bottom))
MoveTo((screen.Frame().right-Bounds().right)*.5,(screen.Frame().bottom-Bounds().bottom)*.5);
BuildView();
AddChild(fView);
menufield = (BMenuField *)FindView("mouse_type");
if (menufield !=NULL)
menufield->Menu()->ItemAt((dynamic_cast<MouseApplication *>(be_app)->MouseType())-1)->SetMarked(true);
slider = (BSlider *)FindView("double_click_speed");
if (slider !=NULL) slider->SetValue((dynamic_cast<MouseApplication *>(be_app)->ClickSpeed()));
slider = (BSlider *)FindView("mouse_speed");
if (slider !=NULL) slider->SetValue((dynamic_cast<MouseApplication *>(be_app)->MouseSpeed()));
Show();
AddChild(fView = new MouseView(Bounds()));
if(fSettings.InitCheck() != B_OK)
PostMessage(ERROR_DETECTED);
SetPulseRate(100000);
}
void
MouseWindow::BuildView()
{
fView = new MouseView(Bounds());
}
bool
MouseWindow::QuitRequested()
{
BSlider *slider=NULL;
BMenuField *menufield=NULL;
dynamic_cast<MouseApplication *>(be_app)->SetWindowCorner(BPoint(Frame().left,Frame().top));
slider = (BSlider *)FindView("double_click_speed");
if (slider !=NULL)
dynamic_cast<MouseApplication *>(be_app)->SetClickSpeed(slider->Value());
menufield = (BMenuField *)FindView("mouse_type");
if (menufield !=NULL) {
BMenu *menu;
menu = menufield->Menu();
dynamic_cast<MouseApplication *>(be_app)->SetMouseType((mouse_type)(menu->IndexOf(menu->FindMarked())+1));
}
fSettings.SetWindowCorner(Frame().LeftTop());
be_app->PostMessage(B_QUIT_REQUESTED);
return(true);
@ -87,30 +50,109 @@ MouseWindow::QuitRequested()
void
MouseWindow::MessageReceived(BMessage *message)
{
BSlider *slider=NULL;
BButton *button=NULL;
BMenuField *menufield=NULL;
switch(message->what) {
case BUTTON_DEFAULTS: {
if (set_click_speed(500000)!=B_OK)
be_app->PostMessage(ERROR_DETECTED);
slider = (BSlider *)FindView("double_click_speed");
if (slider !=NULL) slider->SetValue(500000);
fView->dcSpeedSlider->SetValue(500);
fView->dcSpeedSlider->Invoke();
fView->mouseSpeedSlider->SetValue(500);
fView->mouseSpeedSlider->Invoke();
fView->mouseAccSlider->SetValue(500);
fView->mouseAccSlider->Invoke();
fView->focusMenu->ItemAt(0)->SetMarked(true);
set_mouse_type(3);
fView->mouseTypeMenu->ItemAt(2)->SetMarked(true);
set_mouse_mode(B_NORMAL_MOUSE);
fView->fCurrentMouseMap.button[0] = B_PRIMARY_MOUSE_BUTTON;
fView->fCurrentMouseMap.button[1] = B_SECONDARY_MOUSE_BUTTON;
fView->fCurrentMouseMap.button[2] = B_TERTIARY_MOUSE_BUTTON;
set_mouse_map(&fView->fCurrentMouseMap);
button = (BButton *)FindView("mouse_revert");
if (button !=NULL) button->SetEnabled(true);
fView->revertButton->SetEnabled(true);
}
break;
case BUTTON_REVERT: {
fView->Init();
set_mouse_type(fView->fMouseType);
set_mouse_mode(fView->fMouseMode);
set_click_speed(fView->fClickSpeed);
set_mouse_speed(fView->fMouseSpeed);
set_mouse_acceleration(fView->fMouseAcc);
set_mouse_map(&fView->fMouseMap);
get_mouse_map(&fView->fCurrentMouseMap);
fView->revertButton->SetEnabled(false);
}
break;
case POPUP_MOUSE_TYPE: {
beep();
menufield = (BMenuField *)FindView("mouse_type");
if (menufield !=NULL) {
BMenu *menu;
menu = menufield->Menu();
if (set_mouse_type(menu->IndexOf(menu->FindMarked())+1) !=B_OK)
be_app->PostMessage(ERROR_DETECTED);
status_t err = set_mouse_type(fView->mouseTypeMenu->IndexOf(fView->mouseTypeMenu->FindMarked())+1);
if(err < B_OK)
printf("error while setting mouse type : %s\n", strerror(err));
fView->revertButton->SetEnabled(true);
}
break;
case POPUP_MOUSE_FOCUS: {
mode_mouse mouse_mode = B_NORMAL_MOUSE;
switch (fView->focusMenu->IndexOf(fView->focusMenu->FindMarked())) {
case 0: mouse_mode = B_NORMAL_MOUSE; break;
case 1: mouse_mode = B_FOCUS_FOLLOWS_MOUSE; break;
case 2: mouse_mode = B_WARP_MOUSE; break;
case 3: mouse_mode = B_INSTANT_WARP_MOUSE; break;
}
set_mouse_mode(mouse_mode);
fView->revertButton->SetEnabled(true);
}
break;
case SLIDER_DOUBLE_CLICK_SPEED: {
int32 value = fView->dcSpeedSlider->Value();
int32 click_speed; // slow = 1000000, fast = 0
click_speed = (int32) (1000000 - value * 1000);
status_t err = set_click_speed(click_speed);
if(err < B_OK)
printf("error while setting click speed : %s\n", strerror(err));
fView->revertButton->SetEnabled(true);
}
break;
case SLIDER_MOUSE_SPEED: {
int32 value = fView->mouseSpeedSlider->Value();
int32 mouse_speed; // slow = 8192, fast = 524287
mouse_speed = (int32) pow(2, value * 6 / 1000) * 8192;
status_t err = set_mouse_speed(mouse_speed);
if(err < B_OK)
printf("error while setting mouse speed : %s\n", strerror(err));
fView->revertButton->SetEnabled(true);
}
break;
case SLIDER_MOUSE_ACC: {
int32 value = fView->mouseAccSlider->Value();
int32 mouse_acc; // slow = 0, fast = 262144
mouse_acc = (int32) pow(value * 4 / 1000, 2) * 16384;
status_t err = set_mouse_acceleration(mouse_acc);
if(err < B_OK)
printf("error while setting mouse acceleration : %s\n", strerror(err));
fView->revertButton->SetEnabled(true);
}
break;
case POPUP_MOUSE_MAP: {
int32 index = fView->mouseMapMenu->IndexOf(fView->mouseMapMenu->FindMarked());
int32 number = B_PRIMARY_MOUSE_BUTTON;
switch (index) {
case 0: number = B_PRIMARY_MOUSE_BUTTON; break;
case 1: number = B_SECONDARY_MOUSE_BUTTON; break;
case 2: number = B_TERTIARY_MOUSE_BUTTON; break;
}
fView->fCurrentMouseMap.button[fView->fCurrentButton] = number;
status_t err = set_mouse_map(&fView->fCurrentMouseMap);
fView->fCurrentButton = -1;
if(err < B_OK)
printf("error while setting mouse map : %s\n", strerror(err));
fView->revertButton->SetEnabled(true);
}
break;
case ERROR_DETECTED: {
(new BAlert("Error", "Something has gone wrong!","OK",NULL,NULL,
B_WIDTH_AS_USUAL, B_OFFSET_SPACING, B_WARNING_ALERT))->Go();
be_app->PostMessage(B_QUIT_REQUESTED);
}
break;
default:
@ -119,8 +161,3 @@ MouseWindow::MessageReceived(BMessage *message)
}
}
MouseWindow::~MouseWindow()
{
}

View File

@ -1,3 +1,17 @@
// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
//
// Copyright (c) 2003, OpenBeOS
//
// This software is part of the OpenBeOS distribution and is covered
// by the OpenBeOS license.
//
//
// File: MouseWindow.h
// Author: Jérôme Duval, Andrew McCall (mccall@digitalparadise.co.uk)
// Description: Media Preferences
// Created : December 10, 2003
//
// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
#ifndef MOUSE_WINDOW_H
#define MOUSE_WINDOW_H
@ -9,16 +23,14 @@
class MouseWindow : public BWindow
{
public:
MouseWindow();
~MouseWindow();
MouseWindow(BRect rect);
bool QuitRequested();
void MessageReceived(BMessage *message);
void BuildView();
MouseSettings fSettings;
private:
MouseView *fView;
};
#endif