Ticket #4220: 20090531_5.diff
File 20090531_5.diff, 95.3 KB (added by , 15 years ago) |
---|
-
src/preferences/mouse/SettingsView.h
10 10 // Authors: Jérôme Duval, 11 11 // Andrew McCall (mccall@digitalparadise.co.uk) 12 12 // Axel Dörfler (axeld@pinc-software.de) 13 // Brecht Machiels (brecht@mos6581.org) 13 14 // Description: Mouse Preferences 14 15 // Created: December 10, 2003 15 16 // … … 23 24 #include <Button.h> 24 25 #include <Slider.h> 25 26 #include <PopUpMenu.h> 27 #include <CheckBox.h> 26 28 29 #include "BitmapView.h" 27 30 31 28 32 class MouseSettings; 29 33 class MouseView; 30 34 31 35 32 36 class SettingsView : public BBox { 33 37 public: 34 SettingsView( BRect frame,MouseSettings &settings);38 SettingsView(MouseSettings &settings); 35 39 virtual ~SettingsView(); 36 40 37 41 virtual void AttachedToWindow(); 38 virtual void GetPreferredSize(float *_width, float *_height);39 virtual void Draw(BRect frame);40 42 41 43 void SetMouseType(int32 type); 42 44 void MouseMapUpdated(); 43 45 void UpdateFromSettings(); 44 46 45 47 private: 48 friend class MouseWindow; 49 46 50 typedef BBox inherited; 47 51 48 52 const MouseSettings &fSettings; 49 53 50 BPopUpMenu *fTypeMenu, *fFocusMenu; 54 BPopUpMenu *fTypeMenu, *fFocusMenu, *fFocusFollowsMouseMenu; 55 BCheckBox *fAcceptFirstClickBox; 51 56 MouseView *fMouseView; 52 57 BSlider *fClickSpeedSlider, *fMouseSpeedSlider, *fAccelerationSlider; 53 58 54 59 BBitmap *fDoubleClickBitmap, *fSpeedBitmap, *fAccelerationBitmap; 55 56 BRect fLeftArea, fRightArea; 57 BPoint fLeft, fRight; 58 BPoint fDoubleClickBmpPoint, fSpeedBmpPoint, fAccelerationBmpPoint; 60 BBitmapView *fDoubleClickView, *fSpeedView, *fAccelerationView; 59 61 }; 60 62 61 63 #endif /* SETTINGS_VIEW_H */ -
src/preferences/mouse/BitmapView.cpp
1 /* 2 * Copyright 2009, Haiku, Inc. All rights reserved. 3 * Distributed under the terms of the MIT License. 4 * 5 * Authors: 6 * Brecht Machiels, brecht@mos6581.org 7 * 8 * Description: Bitmap BView 9 * Created: March 13, 2009 10 * 11 */ 12 13 #include "BitmapView.h" 14 15 16 BBitmapView::BBitmapView(BBitmap &bitmap) 17 : BView(bitmap.Bounds(), "bitmap_view", B_FOLLOW_NONE, B_WILL_DRAW) 18 { 19 fBitmap = &bitmap; 20 21 this->SetExplicitMinSize(BSize(fBitmap->Bounds().Width(), 22 fBitmap->Bounds().Height())); 23 this->SetExplicitMaxSize(BSize(fBitmap->Bounds().Width(), 24 fBitmap->Bounds().Height())); 25 } 26 27 28 void 29 BBitmapView::AttachedToWindow() 30 { 31 this->SetViewBitmap(fBitmap, fBitmap->Bounds(), 32 this->Bounds(), B_FOLLOW_NONE, 0); 33 } -
src/preferences/mouse/MouseSettings.cpp
8 8 // 9 9 // File: MouseSettings.h 10 10 // Authors: Jérôme Duval, 11 // Andrew McCall (mccall@digitalparadise.co.uk) ,11 // Andrew McCall (mccall@digitalparadise.co.uk) 12 12 // Axel Dörfler (axeld@pinc-software.de) 13 // Brecht Machiels (brecht@mos6581.org) 13 14 // Description: Mouse Preferences 14 15 // Created: December 10, 2003 15 16 // 16 17 // ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 17 18 19 #include "MouseSettings.h" 20 21 #include <stdio.h> 22 18 23 #include <FindDirectory.h> 19 24 #include <File.h> 20 25 #include <Path.h> 21 26 #include <View.h> 22 27 23 #include <stdio.h>24 28 25 #include "MouseSettings.h"26 27 28 29 // The R5 settings file differs from that of OpenBeOS; 29 30 // the latter maps 16 different mouse buttons 30 31 #define R5_COMPATIBLE 1 … … 33 34 static const int32 kDefaultMouseSpeed = 65536; 34 35 static const int32 kDefaultMouseType = 3; // 3 button mouse 35 36 static const int32 kDefaultAccelerationFactor = 65536; 37 static const bool kDefaultAcceptFirstClick = false; 36 38 37 39 38 40 MouseSettings::MouseSettings() 39 : 40 fWindowPosition(-1, -1) 41 : fWindowPosition(-1, -1) 41 42 { 42 43 RetrieveSettings(); 43 44 44 45 fOriginalSettings = fSettings; 45 46 fOriginalMode = fMode; 47 fOriginalFocusFollowsMouseMode = fFocusFollowsMouseMode; 48 fOriginalAcceptFirstClick = fAcceptFirstClick; 46 49 } 47 50 48 51 … … 81 84 fprintf(stderr, "error when get_mouse_type\n"); 82 85 83 86 fMode = mouse_mode(); 87 fFocusFollowsMouseMode = focus_follows_mouse_mode(); 88 fAcceptFirstClick = accept_first_click(); 84 89 85 90 // also try to load the window position from disk 86 91 … … 143 148 MouseSettings::Dump() 144 149 { 145 150 printf("type:\t\t%ld button mouse\n", fSettings.type); 146 printf("map:\t\tleft = %lu : middle = %lu : right = %lu\n", fSettings.map.button[0], fSettings.map.button[2], fSettings.map.button[1]); 151 printf("map:\t\tleft = %lu : middle = %lu : right = %lu\n", fSettings.map.button[0], 152 fSettings.map.button[2], fSettings.map.button[1]); 147 153 printf("click speed:\t%Ld\n", fSettings.click_speed); 148 154 printf("accel:\t\t%s\n", fSettings.accel.enabled ? "enabled" : "disabled"); 149 155 printf("accel factor:\t%ld\n", fSettings.accel.accel_factor); … … 152 158 char *mode = "unknown"; 153 159 switch (fMode) { 154 160 case B_NORMAL_MOUSE: 155 mode = " normal";161 mode = "click to activate"; 156 162 break; 163 case B_CLICK_TO_FOCUS_MOUSE: 164 mode = "click to focus"; 165 break; 157 166 case B_FOCUS_FOLLOWS_MOUSE: 158 167 mode = "focus follows mouse"; 159 168 break; 160 case B_WARP_MOUSE: 161 mode = "warp mouse"; 169 } 170 printf("mouse mode:\t%s\n", mode); 171 172 char *focus_follows_mouse_mode = "unknown"; 173 switch (fMode) { 174 case B_NORMAL_FOCUS_FOLLOWS_MOUSE: 175 focus_follows_mouse_mode = "normal"; 162 176 break; 163 case B_ INSTANT_WARP_MOUSE:164 mode = "instant warp mouse";177 case B_WARP_FOCUS_FOLLOWS_MOUSE: 178 focus_follows_mouse_mode = "warp"; 165 179 break; 180 case B_INSTANT_WARP_FOCUS_FOLLOWS_MOUSE: 181 focus_follows_mouse_mode = "instant warp"; 182 break; 166 183 } 167 printf("mode:\t\t%s\n", mode); 184 printf("focus follows mouse mode:\t%s\n", focus_follows_mouse_mode); 185 printf("accept first click:\t%s\n", fAcceptFirstClick ? "enabled" : "disabled"); 168 186 } 169 187 #endif 170 188 … … 180 198 SetMouseType(kDefaultMouseType); 181 199 SetAccelerationFactor(kDefaultAccelerationFactor); 182 200 SetMouseMode(B_NORMAL_MOUSE); 201 SetFocusFollowsMouseMode(B_NORMAL_FOCUS_FOLLOWS_MOUSE); 202 SetAcceptFirstClick(kDefaultAcceptFirstClick); 183 203 184 204 mouse_map map; 185 205 if (get_mouse_map(&map) == B_OK) { … … 202 222 || fSettings.type != kDefaultMouseType 203 223 || fSettings.accel.accel_factor != kDefaultAccelerationFactor 204 224 || fMode != B_NORMAL_MOUSE 225 || fFocusFollowsMouseMode != B_NORMAL_FOCUS_FOLLOWS_MOUSE 226 || fAcceptFirstClick != kDefaultAcceptFirstClick 205 227 || fSettings.map.button[0] != B_PRIMARY_MOUSE_BUTTON 206 228 || fSettings.map.button[1] != B_SECONDARY_MOUSE_BUTTON 207 229 || fSettings.map.button[2] != B_TERTIARY_MOUSE_BUTTON; … … 219 241 SetMouseType(fOriginalSettings.type); 220 242 SetAccelerationFactor(fOriginalSettings.accel.accel_factor); 221 243 SetMouseMode(fOriginalMode); 244 SetFocusFollowsMouseMode(fOriginalFocusFollowsMouseMode); 245 SetAcceptFirstClick(fOriginalAcceptFirstClick); 246 222 247 SetMapping(fOriginalSettings.map); 223 248 } 224 249 … … 320 345 fMode = mode; 321 346 } 322 347 348 349 void 350 MouseSettings::SetFocusFollowsMouseMode(mode_focus_follows_mouse mode) 351 { 352 set_focus_follows_mouse_mode(mode); 353 fFocusFollowsMouseMode = mode; 354 } 355 356 357 void 358 MouseSettings::SetAcceptFirstClick(bool accept_first_click) 359 { 360 set_accept_first_click(accept_first_click); 361 fAcceptFirstClick = accept_first_click; 362 } 363 -
src/preferences/mouse/BitmapView.h
1 /* 2 * Copyright 2009, Haiku, Inc. All rights reserved. 3 * Distributed under the terms of the MIT License. 4 * 5 * Authors: 6 * Brecht Machiels, brecht@mos6581.org 7 * 8 * Description: Bitmap BView 9 * Created: March 13, 2009 10 * 11 */ 12 #ifndef BITMAP_VIEW_H 13 #define BITMAP_VIEW_H 14 15 16 #include <Bitmap.h> 17 #include <View.h> 18 19 20 class BBitmapView : public BView { 21 public: 22 BBitmapView(BBitmap &bitmap); 23 24 virtual void AttachedToWindow(); 25 26 private: 27 BBitmap *fBitmap; 28 }; 29 30 #endif /* BITMAP_VIEW_H */ -
src/preferences/mouse/MouseSettings.h
6 6 * Jérôme Duval 7 7 * Andrew McCall (mccall@digitalparadise.co.uk) 8 8 * Axel Dörfler (axeld@pinc-software.de) 9 * Brecht Machiels (brecht@mos6581.org) 9 10 */ 10 11 #ifndef MOUSE_SETTINGS_H 11 12 #define MOUSE_SETTINGS_H 12 13 13 14 15 #include <InterfaceDefs.h> 16 #include <Point.h> 17 #include <SupportDefs.h> 18 14 19 #include "kb_mouse_settings.h" 15 20 16 #include <SupportDefs.h>17 #include <InterfaceDefs.h>18 21 19 22 class BPath; 20 23 21 22 24 class MouseSettings { 23 25 public: 24 26 MouseSettings(); … … 52 54 mode_mouse MouseMode() const { return fMode; } 53 55 void SetMouseMode(mode_mouse mode); 54 56 57 mode_focus_follows_mouse FocusFollowsMouseMode() const { 58 return fFocusFollowsMouseMode; 59 } 60 void SetFocusFollowsMouseMode(mode_focus_follows_mouse mode); 61 62 bool AcceptFirstClick() const { return fAcceptFirstClick; } 63 void SetAcceptFirstClick(bool accept_first_click); 64 55 65 private: 56 66 static status_t GetSettingsPath(BPath &path); 57 67 void RetrieveSettings(); … … 59 69 60 70 mouse_settings fSettings, fOriginalSettings; 61 71 mode_mouse fMode, fOriginalMode; 72 mode_focus_follows_mouse fFocusFollowsMouseMode; 73 mode_focus_follows_mouse fOriginalFocusFollowsMouseMode; 74 bool fAcceptFirstClick, fOriginalAcceptFirstClick; 62 75 BPoint fWindowPosition; 63 76 }; 64 77 -
src/preferences/mouse/MouseWindow.cpp
10 10 // Authors: Jérôme Duval, 11 11 // Andrew McCall (mccall@digitalparadise.co.uk) 12 12 // Axel Dörfler (axeld@pinc-software.de) 13 // Brecht Machiels (brecht@mos6581.org) 13 14 // Description: Mouse Preferences 14 15 // Created: December 10, 2003 15 16 // 16 17 // ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 17 18 19 #include "MouseWindow.h" 20 21 #include <string.h> 22 18 23 #include <Alert.h> 19 24 #include <Application.h> 25 #include <GroupLayout.h> 26 #include <GroupLayoutBuilder.h> 27 #include <Button.h> 28 #include <CheckBox.h> 29 #include <Debug.h> 30 #include <Menu.h> 31 #include <MenuField.h> 32 #include <MenuItem.h> 20 33 #include <Message.h> 21 34 #include <Screen.h> 22 35 #include <Slider.h> 23 #include <Button.h>24 #include <Menu.h>25 #include <MenuItem.h>26 #include <MenuField.h>27 #include <Debug.h>28 #include <string.h>29 36 30 #include "MouseWindow.h"31 37 #include "MouseConstants.h" 32 38 #include "SettingsView.h" 33 39 34 40 35 41 MouseWindow::MouseWindow(BRect _rect) 36 42 : BWindow(_rect, "Mouse", B_TITLED_WINDOW, 37 B_NOT_RESIZABLE | B_NOT_ZOOMABLE | B_ASYNCHRONOUS_CONTROLS) 43 B_NOT_RESIZABLE | B_NOT_ZOOMABLE | B_ASYNCHRONOUS_CONTROLS | 44 B_AUTO_UPDATE_SIZE_LIMITS) 38 45 { 39 BView *view = new BView(Bounds(), "view", B_FOLLOW_ALL, 0);40 view->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));41 AddChild(view);42 43 46 // Add the main settings view 44 fSettingsView = new SettingsView( Bounds().InsetBySelf(kBorderSpace, kBorderSpace),45 fSettings);46 view->AddChild(fSettingsView);47 fSettingsView = new SettingsView(fSettings); 48 fSettingsBox = new BBox("main box"); 49 fSettingsBox->AddChild(fSettingsView); 47 50 48 51 // Add the "Default" button 49 BRect rect(kBorderSpace, fSettingsView->Frame().bottom + kItemSpace + 2, 50 kBorderSpace + 75, fSettingsView->Frame().bottom + 20); 51 fDefaultsButton = new BButton(rect, "defaults", "Defaults", new BMessage(kMsgDefaults)); 52 fDefaultsButton->ResizeToPreferred(); 52 fDefaultsButton = new BButton("Defaults", new BMessage(kMsgDefaults)); 53 53 fDefaultsButton->SetEnabled(fSettings.IsDefaultable()); 54 view->AddChild(fDefaultsButton);55 54 56 55 // Add the "Revert" button 57 rect.OffsetBy(fDefaultsButton->Bounds().Width() + kItemSpace, 0); 58 fRevertButton = new BButton(rect, "revert", "Revert", new BMessage(kMsgRevert)); 56 fRevertButton = new BButton("Revert", new BMessage(kMsgRevert)); 59 57 fRevertButton->SetEnabled(false); 60 fRevertButton->ResizeToPreferred();61 view->AddChild(fRevertButton);62 58 63 59 SetPulseRate(100000); 64 60 // we are using the pulse rate to scan pressed mouse 65 61 // buttons and draw the selected imagery 66 62 67 ResizeTo(fSettingsView->Frame().right + kBorderSpace,68 fRevertButton->Frame().bottom + kBorderSpace - 1);63 // Build the layout 64 SetLayout(new BGroupLayout(B_VERTICAL)); 69 65 66 AddChild(BGroupLayoutBuilder(B_VERTICAL, 10) 67 .Add(fSettingsBox) 68 .AddGroup(B_HORIZONTAL, 5) 69 .Add(fDefaultsButton) 70 .Add(fRevertButton) 71 .AddGlue() 72 .End() 73 .SetInsets(10, 10, 10, 10) 74 ); 75 70 76 // check if the window is on screen 71 72 rect = BScreen().Frame(); 77 BRect rect = BScreen().Frame(); 73 78 rect.InsetBySelf(20, 20); 74 79 75 80 BPoint position = fSettings.WindowPosition(); … … 140 145 fSettings.SetMouseMode((mode_mouse)mode); 141 146 fDefaultsButton->SetEnabled(fSettings.IsDefaultable()); 142 147 fRevertButton->SetEnabled(true); 148 fSettingsView->fFocusFollowsMouseMenu->SetEnabled(mode == B_FOCUS_FOLLOWS_MOUSE); 149 fSettingsView->fAcceptFirstClickBox->SetEnabled(mode != B_FOCUS_FOLLOWS_MOUSE); 143 150 } 144 151 break; 145 152 } 153 154 case kMsgFollowsMouseMode: 155 { 156 int32 mode; 157 if (message->FindInt32("mode_focus_follows_mouse", &mode) == B_OK) { 158 fSettings.SetFocusFollowsMouseMode((mode_focus_follows_mouse)mode); 159 fDefaultsButton->SetEnabled(fSettings.IsDefaultable()); 160 fRevertButton->SetEnabled(true); 161 } 162 break; 163 } 164 165 case kMsgAcceptFirstClick: 166 { 167 BHandler *handler; 168 if (message->FindPointer("source", reinterpret_cast<void**>(&handler)) == B_OK) { 169 bool accept_first_click = false; 170 BCheckBox *fAcceptFirstClickBox = dynamic_cast<BCheckBox*>(handler); 171 if (fAcceptFirstClickBox) 172 accept_first_click = fAcceptFirstClickBox->Value() == B_CONTROL_ON; 173 fSettings.SetAcceptFirstClick(accept_first_click); 174 fDefaultsButton->SetEnabled(fSettings.IsDefaultable()); 175 fRevertButton->SetEnabled(true); 176 } 177 break; 178 } 146 179 147 180 case kMsgDoubleClickSpeed: 148 181 { -
src/preferences/mouse/MouseView.cpp
28 28 #include "MouseSettings.h" 29 29 #include "MouseWindow.h" 30 30 31 32 31 static const int32 kOneButtonOffsets[4] = {0, 55}; 33 32 static const int32 kTwoButtonOffsets[4] = {0, 27, 55}; 34 33 static const int32 kThreeButtonOffsets[4] = {0, 18, 36, 55}; … … 76 75 // #pragma mark - 77 76 78 77 79 MouseView::MouseView( BRect rect,const MouseSettings &settings)80 : BView( rect, "mouse_view", B_FOLLOW_ALL, B_PULSE_NEEDED | B_WILL_DRAW),78 MouseView::MouseView(const MouseSettings &settings) 79 : BView("mouse_view", B_PULSE_NEEDED | B_WILL_DRAW), 81 80 fSettings(settings), 82 81 fType(-1), 83 82 fButtons(0), -
src/preferences/mouse/MouseWindow.h
10 10 // Authors: Jérôme Duval, 11 11 // Andrew McCall (mccall@digitalparadise.co.uk) 12 12 // Axel Dörfler (axeld@pinc-software.de) 13 // Brecht Machiels (brecht@mos6581.org) 13 14 // Description: Mouse Preferences 14 15 // Created: December 10, 2003 15 16 // … … 18 19 #define MOUSE_WINDOW_H 19 20 20 21 22 #include <Box.h> 23 #include <Button.h> 21 24 #include <Window.h> 22 #include <Button.h>23 25 24 26 #include "MouseSettings.h" 25 27 28 26 29 class SettingsView; 27 30 28 29 31 class MouseWindow : public BWindow { 30 32 public: 31 33 MouseWindow(BRect rect); … … 38 40 BButton *fDefaultsButton; 39 41 BButton *fRevertButton; 40 42 SettingsView *fSettingsView; 43 BBox *fSettingsBox; 41 44 }; 42 45 43 46 #endif /* MOUSE_WINDOW_H */ -
src/preferences/mouse/Jamfile
7 7 MouseSettings.cpp 8 8 MouseWindow.cpp 9 9 MouseView.cpp 10 BitmapView.cpp 10 11 SettingsView.cpp 11 12 : translation be 12 13 : Mouse.rdef -
src/preferences/mouse/Mouse.rdef
97 97 #endif // HAIKU_TARGET_PLATFORM_HAIKU 98 98 99 99 resource(601, "double_click_bmap") #'bits' array { 100 $"424D06070000000000003A000000280000000E0000001E000000010018000000" 101 $"0000CC060000130B0000130B00000000000000000000FFFFFFFFD8D8D8000000" 102 $"0000000000000000000000000000000000000000000000000000000000000000" 103 $"00D8D8D800000000008080808080808080808080808080808080808080808080" 104 $"808080808080808080808080800000000000000000B8B8B8FFFFFFB8B8B8B8B8" 105 $"B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B880808000000000000000" 106 $"00B8B8B8FFFFFFB8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8" 107 $"B8B88080800000000000000000B8B8B8FFFFFFB8B8B8B8B8B8B8B8B8B8B8B8B8" 108 $"B8B8B8B8B8B8B8B8B8B8B8B8B8B88080800000000000000000B8B8B8FFFFFFB8" 109 $"B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8808080000000" 110 $"0000000000B8B8B8FFFFFFB8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8" 111 $"B8B8B8B8B8B87F7F7F0000000000000000B8B8B8FFFFFFB8B8B8B8B8B8B8B8B8" 112 $"B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B88080800000000000000000B8B8B8" 113 $"FFFFFFB8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B88080" 114 $"800000000000000000B8B8B8FFFFFFB8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8" 115 $"B8B8B8B8B8B8B8B8B8B88080800000000000000000B8B8B8FFFFFFFFFFFFFFFF" 116 $"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80808000000000000000" 117 $"0080808080808080808080808080808080808080808080808080808080808080" 118 $"80808080800000000000000000B8B8B8FFFFFFB8B8B8B8B8B8C0C0C0808080FF" 119 $"FFFFC0C0C0B8B8B8B8B8B8B8B8B88080800000000000000000B8B8B8FFFFFFB8" 120 $"B8B8B8B8B8C0C0C0808080FFFFFFC0C0C0B8B8B8B8B8B8B8B8B8808080000000" 121 $"0000000000B8B8B8FFFFFFB8B8B8B8B8B8C0C0C0808080FFFFFFC0C0C0B8B8B8" 122 $"B8B8B8B8B8B88080800000000000000000B8B8B8FFFFFFFFFFFFFFFFFFFFFFFF" 123 $"808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8080800000000000000000B8B8B8" 124 $"B8B8B8B8B8B8B8B8B8B8B8B8808080B8B8B8B8B8B8B8B8B8B8B8B8B8B8B88080" 125 $"800000000000D8D8D80000000000000000000000000000005858580000000000" 126 $"00000000000000000000000000D8D8D80000D8D8D8D8D8D8D8D8D8D8D8D8D8D8" 127 $"D8000000000000000000D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D80000D8D8" 128 $"D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8000000D8D8D8D8D8D8D8D8D8D8D8D8D8" 129 $"D8D8D8D8D8D8D8D80000D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8000000D8" 130 $"D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D80000D8D8D8D8D8D8D8D8D8D8" 131 $"D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8" 132 $"0000D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8" 133 $"D8D8D8D8D8D8D8D8D8D8D8D80000D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8" 134 $"989898D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D80000D8D8D8D8D8D8" 135 $"D8D8D8D8D8D8D8D8D8989898989898989898D8D8D8D8D8D8D8D8D8D8D8D8D8D8" 136 $"D8D8D8D80000D8D8D8D8D8D8D8D8D8D8D8D89898989898989898989898989898" 137 $"98D8D8D8D8D8D8D8D8D8D8D8D8D8D8D80000D8D8D8D8D8D8D8D8D8D8D8D8D8D8" 138 $"D8D8D8D8989898D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D80000D8D8" 139 $"D8D8D8D8D8D8D8D8D8D8D8D8D8989898989898989898D8D8D8D8D8D8D8D8D8D8" 140 $"D8D8D8D8D8D8D8D80000D8D8D8D8D8D8D8D8D8D8D8D898989898989898989898" 141 $"9898989898D8D8D8D8D8D8D8D8D8D8D8D8D8D8D80000D8D8D8D8D8D8D8D8D898" 142 $"9898989898989898989898989898989898989898D8D8D8D8D8D8D8D8D8D8D8D8" 143 $"0000000000000000000000000000000000000000000000000000000000000000" 144 $"0000000000000000000000000000000000000000000000000000000000000000" 145 $"0000000000000000000000000000000000000000000000000000000000000000" 146 $"0000000000000000000000000000000000000000000000000000000000000000" 147 $"0000000000000000000000000000000000000000000000000000000000000000" 148 $"0000000000000000000000000000000000000000000000000000000000000000" 149 $"0000000000000000000000000000000000000000000000000000000000000000" 150 $"0000000000000000000000000000000000000000000000000000000000000000" 151 $"0000000000000000000000000000000000000000000000000000000000000000" 152 $"0000000000000000000000000000000000000000000000000000000000000000" 153 $"0000000000000000000000000000000000000000000000000000000000000000" 154 $"0000000000000000000000000000000000000000000000000000000000000000" 155 $"0000000000000000000000000000000000000000000000000000000000000000" 156 $"000000000000" 100 $"424d1e090000000000003600000028000000190000001e00000001001800" 101 $"00000000e8080000130b0000130b00000000000000000000d8d8d8d8d8d8" 102 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8000000000000000000000000000000" 103 $"000000000000000000000000000000000000000000d8d8d8d8d8d8d8d8d8" 104 $"d8d8d8d8d8d8d8d8d800d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d80000" 105 $"008080808080808080808080808080808080808080808080808080808080" 106 $"80808080808080000000d8d8d8d8d8d8d8d8d8d8d8d8d8d8d800d8d8d8d8" 107 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8000000b8b8b8ffffffb8b8b8b8b8b8b8" 108 $"b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8808080000000d8d8d8d8" 109 $"d8d8d8d8d8d8d8d8d8d8d800d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 110 $"000000b8b8b8ffffffb8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8" 111 $"b8b8b8b8b8b8808080000000d8d8d8d8d8d8d8d8d8d8d8d8d8d8d800d8d8" 112 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8000000b8b8b8ffffffb8b8b8b8b8" 113 $"b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8808080000000d8d8" 114 $"d8d8d8d8d8d8d8d8d8d8d8d8d800d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 115 $"d8d8000000b8b8b8ffffffb8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8" 116 $"b8b8b8b8b8b8b8b8808080000000d8d8d8d8d8d8d8d8d8d8d8d8d8d8d800" 117 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8000000b8b8b8ffffffb8b8b8" 118 $"b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b87f7f7f000000" 119 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d800d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 120 $"d8d8d8d8000000b8b8b8ffffffb8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8" 121 $"b8b8b8b8b8b8b8b8b8b8808080000000d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 122 $"d800d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8000000b8b8b8ffffffb8" 123 $"b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b880808000" 124 $"0000d8d8d8d8d8d8d8d8d8d8d8d8d8d8d800d8d8d8d8d8d8d8d8d8d8d8d8" 125 $"d8d8d8d8d8d8000000b8b8b8ffffffb8b8b8b8b8b8b8b8b8b8b8b8b8b8b8" 126 $"b8b8b8b8b8b8b8b8b8b8b8b8808080000000d8d8d8d8d8d8d8d8d8d8d8d8" 127 $"d8d8d800d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8000000b8b8b8ffff" 128 $"ffffffffffffffffffffffffffffffffffffffffffffffffffffffff8080" 129 $"80000000d8d8d8d8d8d8d8d8d8d8d8d8d8d8d800d8d8d8d8d8d8d8d8d8d8" 130 $"d8d8d8d8d8d8d8d800000080808080808080808080808080808080808080" 131 $"8080808080808080808080808080808080000000d8d8d8d8d8d8d8d8d8d8" 132 $"d8d8d8d8d800d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8000000b8b8b8" 133 $"ffffffb8b8b8b8b8b8c0c0c0808080ffffffc0c0c0b8b8b8b8b8b8b8b8b8" 134 $"808080000000d8d8d8d8d8d8d8d8d8d8d8d8d8d8d800d8d8d8d8d8d8d8d8" 135 $"d8d8d8d8d8d8d8d8d8d8000000b8b8b8ffffffb8b8b8b8b8b8c0c0c08080" 136 $"80ffffffc0c0c0b8b8b8b8b8b8b8b8b8808080000000d8d8d8d8d8d8d8d8" 137 $"d8d8d8d8d8d8d800d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8000000b8" 138 $"b8b8ffffffb8b8b8b8b8b8c0c0c0808080ffffffc0c0c0b8b8b8b8b8b8b8" 139 $"b8b8808080000000d8d8d8d8d8d8d8d8d8d8d8d8d8d8d800d8d8d8d8d8d8" 140 $"d8d8d8d8d8d8d8d8d8d8d8d8000000b8b8b8ffffffffffffffffffffffff" 141 $"808080ffffffffffffffffffffffffffffff808080000000d8d8d8d8d8d8" 142 $"d8d8d8d8d8d8d8d8d800d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d80000" 143 $"00b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8808080b8b8b8b8b8b8b8b8b8b8b8" 144 $"b8b8b8b8808080000000d8d8d8d8d8d8d8d8d8d8d8d8d8d8d800d8d8d8d8" 145 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d800000000000000000000000000" 146 $"0000585858000000000000000000000000000000000000d8d8d8d8d8d8d8" 147 $"d8d8d8d8d8d8d8d8d8d8d800d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 148 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8000000000000000000d8d8d8d8d8d8" 149 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d800d8d8" 150 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 151 $"d8d8d8d8000000d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 152 $"d8d8d8d8d8d8d8d8d8d8d8d8d800d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 153 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8000000d8d8d8d8d8d8d8" 154 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d800" 155 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 156 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 157 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d800d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 158 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 159 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 160 $"d800d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 161 $"d8d8d8d8d8d8d8d8989898d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 162 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d800d8d8d8d8d8d8d8d8d8d8d8d8" 163 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8989898989898989898" 164 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 165 $"d8d8d800d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 166 $"d8d8d8d8989898989898989898989898989898d8d8d8d8d8d8d8d8d8d8d8" 167 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d800d8d8d8d8d8d8d8d8d8d8" 168 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8989898d8" 169 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 170 $"d8d8d8d8d800d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 171 $"d8d8d8d8d8d8d8d8d8989898989898989898d8d8d8d8d8d8d8d8d8d8d8d8" 172 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d800d8d8d8d8d8d8d8d8" 173 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d89898989898989898" 174 $"98989898989898d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 175 $"d8d8d8d8d8d8d800d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 176 $"d8d8d8d8d8989898989898989898989898989898989898989898d8d8d8d8" 177 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d800" 178 157 179 }; 158 180 159 181 resource(602, "speed_bmap") #'bits' array { 160 $"424DE8080000000000003A000000280000001900000016000000010018000000" 161 $"0000AE080000130B0000130B00000000000000000000FFFFFFFFD8D8D8D8D8D8" 162 $"D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8" 163 $"D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8" 164 $"D8D8D8D8D800D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8" 165 $"D8D8D8D8D8D8D8D8D8D800000000000000000000000000000000000000000000" 166 $"0000000000000000000000000000D8D8D800D8D8D8D8D8D8D8D8D8D8D8D8D8D8" 167 $"D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D800000080808080808080808080" 168 $"808080808080808080808080808080808080808080808080808000000000D8D8" 169 $"D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D800" 170 $"0000B8B8B8FFFFFFB8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8" 171 $"B8B8B880808000000000D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8" 172 $"D8D8D8D8D8D8D8D8D8D8D8000000B8B8B8FFFFFFB8B8B8B8B8B8B8B8B8B8B8B8" 173 $"B8B8B8B8B8B8B8B8B8B8B8B8B8B8B880808000000000D8D8D8D8D8D8D8D8D8D8" 174 $"D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8000000B8B8B8FFFFFF" 175 $"B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B88080800000" 176 $"0000D8D8D8D8D8D8D8D8D8989898D8D8D8989898989898989898989898D8D8D8" 177 $"D8D8D8000000B8B8B8FFFFFFB8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8" 178 $"B8B8B8B8B8B8B880808000000000D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8" 179 $"D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8000000B8B8B8FFFFFFB8B8B8B8B8B8B8B8" 180 $"B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B880808000000000D8D8D8D8D8D8" 181 $"D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8000000B8B8" 182 $"B8FFFFFFB8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B880" 183 $"808000000000989898D8D8D89898989898989898989898989898989898989898" 184 $"98D8D8D8D8D8D8000000B8B8B8FFFFFFB8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8" 185 $"B8B8B8B8B8B8B8B8B8B8B87F7F7F00000000D8D8D8D8D8D8D8D8D8D8D8D8D8D8" 186 $"D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8000000B8B8B8FFFFFFB8B8B8B8" 187 $"B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B880808000000000D8D8" 188 $"D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D800" 189 $"0000B8B8B8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" 190 $"FFFFFF80808000000000D8D8D8D8D8D8D8D8D8989898D8D8D898989898989898" 191 $"9898989898D8D8D8D8D8D8000000808080808080808080808080808080808080" 192 $"80808080808080808080808080808080808000000000D8D8D8D8D8D8D8D8D8D8" 193 $"D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8000000B8B8B8FFFFFF" 194 $"B8B8B8B8B8B8C0C0C0808080FFFFFFC0C0C0B8B8B8B8B8B8B8B8B88080800000" 195 $"0000D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8" 196 $"D8D8D8000000B8B8B8FFFFFFB8B8B8B8B8B8C0C0C0808080FFFFFFC0C0C0B8B8" 197 $"B8B8B8B8B8B8B880808000000000D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8" 198 $"D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8000000B8B8B8FFFFFFB8B8B8B8B8B8C0C0" 199 $"C0808080FFFFFFC0C0C0B8B8B8B8B8B8B8B8B880808000000000D8D8D8D8D8D8" 200 $"D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8000000B8B8" 201 $"B8FFFFFFFFFFFFFFFFFFFFFFFF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80" 202 $"808000000000D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8" 203 $"D8D8D8D8D8D8D8000000B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8808080B8B8B8B8" 204 $"B8B8B8B8B8B8B8B8B8B8B880808000000000D8D8D8D8D8D8D8D8D8D8D8D8D8D8" 205 $"D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D800000000000000000000" 206 $"0000000000585858000000000000000000000000000000000000D8D8D800D8D8" 207 $"D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8" 208 $"D8D8D8D8D8D8D8D8D8D8D8D8D8D8000000000000000000D8D8D8D8D8D8D8D8D8" 209 $"D8D8D8D8D8D8D8D8D800D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8" 210 $"D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8000000" 211 $"D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D800D8D8D8D8D8D8D8D8D8D8" 212 $"D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8" 213 $"D8D8D8D8D8D8D8D8D8000000D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8" 214 $"D800000000000000000000000000000000000000000000000000000000000000" 215 $"0000000000000000000000000000000000000000000000000000000000000000" 216 $"0000000000000000000000000000000000000000000000000000000000000000" 217 $"0000000000000000000000000000000000000000000000000000000000000000" 218 $"0000000000000000000000000000000000000000000000000000000000000000" 219 $"0000000000000000000000000000000000000000000000000000000000000000" 220 $"0000000000000000000000000000000000000000000000000000000000000000" 221 $"0000000000000000000000000000000000000000000000000000000000000000" 222 $"0000000000000000000000000000000000000000000000000000000000000000" 223 $"0000000000000000000000000000000000000000000000000000000000000000" 224 $"0000000000000000000000000000000000000000000000000000000000000000" 225 $"0000000000000000000000000000000000000000000000000000000000000000" 226 $"0000000000000000000000000000000000000000000000000000000000000000" 227 $"0000000000000000000000000000000000000000000000000000000000000000" 228 $"0000000000000000000000000000000000000000000000000000000000000000" 229 $"0000000000000000000000000000000000000000000000000000000000000000" 230 $"0000000000000000000000000000000000000000000000000000000000000000" 231 $"0000000000000000" 182 $"424d1e090000000000003600000028000000190000001e00000001001800" 183 $"00000000e8080000130b0000130b00000000000000000000d8d8d8d8d8d8" 184 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 185 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 186 $"d8d8d8d8d8d8d8d8d800d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 187 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 188 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d800d8d8d8d8" 189 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 190 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 191 $"d8d8d8d8d8d8d8d8d8d8d800d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 192 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 193 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d800d8d8" 194 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 195 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 196 $"d8d8d8d8d8d8d8d8d8d8d8d8d800d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 197 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d800000000000000000000" 198 $"0000000000000000000000000000000000000000000000000000d8d8d800" 199 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 200 $"d8d8d8000000808080808080808080808080808080808080808080808080" 201 $"80808080808080808080808000000000d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 202 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8000000b8b8b8ffffffb8b8" 203 $"b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b88080800000" 204 $"0000d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 205 $"d8d8d8d8d8000000b8b8b8ffffffb8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8" 206 $"b8b8b8b8b8b8b8b8b8b8b880808000000000d8d8d8d8d8d8d8d8d8d8d8d8" 207 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8000000b8b8b8ffffff" 208 $"b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8808080" 209 $"00000000d8d8d8d8d8d8d8d8d8989898d8d8d89898989898989898989898" 210 $"98d8d8d8d8d8d8000000b8b8b8ffffffb8b8b8b8b8b8b8b8b8b8b8b8b8b8" 211 $"b8b8b8b8b8b8b8b8b8b8b8b8b880808000000000d8d8d8d8d8d8d8d8d8d8" 212 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8000000b8b8b8ff" 213 $"ffffb8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b880" 214 $"808000000000d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 215 $"d8d8d8d8d8d8d8d8d8000000b8b8b8ffffffb8b8b8b8b8b8b8b8b8b8b8b8" 216 $"b8b8b8b8b8b8b8b8b8b8b8b8b8b8b880808000000000989898d8d8d89898" 217 $"98989898989898989898989898989898989898d8d8d8d8d8d8000000b8b8" 218 $"b8ffffffb8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8" 219 $"b87f7f7f00000000d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 220 $"d8d8d8d8d8d8d8d8d8d8d8000000b8b8b8ffffffb8b8b8b8b8b8b8b8b8b8" 221 $"b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b880808000000000d8d8d8d8d8d8" 222 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8000000" 223 $"b8b8b8ffffffffffffffffffffffffffffffffffffffffffffffffffffff" 224 $"ffffff80808000000000d8d8d8d8d8d8d8d8d8989898d8d8d89898989898" 225 $"98989898989898d8d8d8d8d8d80000008080808080808080808080808080" 226 $"8080808080808080808080808080808080808080808000000000d8d8d8d8" 227 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d800" 228 $"0000b8b8b8ffffffb8b8b8b8b8b8c0c0c0808080ffffffc0c0c0b8b8b8b8" 229 $"b8b8b8b8b880808000000000d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 230 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8000000b8b8b8ffffffb8b8b8b8b8b8" 231 $"c0c0c0808080ffffffc0c0c0b8b8b8b8b8b8b8b8b880808000000000d8d8" 232 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 233 $"d8000000b8b8b8ffffffb8b8b8b8b8b8c0c0c0808080ffffffc0c0c0b8b8" 234 $"b8b8b8b8b8b8b880808000000000d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 235 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8000000b8b8b8ffffffffffffff" 236 $"ffffffffff808080ffffffffffffffffffffffffffffff80808000000000" 237 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 238 $"d8d8d8000000b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8808080b8b8b8b8b8b8" 239 $"b8b8b8b8b8b8b8b8b880808000000000d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 240 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d80000000000000000" 241 $"00000000000000585858000000000000000000000000000000000000d8d8" 242 $"d800d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 243 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8000000000000000000d8" 244 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d800d8d8d8d8d8d8d8d8d8d8d8d8" 245 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 246 $"d8d8d8d8d8d8d8d8d8000000d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 247 $"d8d8d800d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 248 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8000000d8d8" 249 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d800d8d8d8d8d8d8d8d8d8d8" 250 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 251 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 252 $"d8d8d8d8d800d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 253 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 254 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d800d8d8d8d8d8d8d8d8" 255 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 256 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 257 $"d8d8d8d8d8d8d800d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 258 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 259 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d800" 232 260 }; 233 261 234 262 resource(603, "acceleration_bmap") #'bits' array { 235 $"424D83080000000000003A000000280000001900000015000000010018000000" 236 $"000049080000130B0000130B00000000F8410000F841FFFFFFFFD8D8D8D8D8D8" 237 $"D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D80000" 238 $"0000000000000000000000000000000000000000000000000000000000000000" 239 $"0000D8D8D800D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8" 240 $"D8D8D8D8D8D8D800000080808080808080808080808080808080808080808080" 241 $"808080808080808080808080808000000000D8D8D8D8D8D8D8D8D8D8D8D8D8D8" 242 $"D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8000000B8B8B8FFFFFFB8B8B8B8" 243 $"B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B880808000000000D8D8" 244 $"D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D800" 245 $"0000B8B8B8FFFFFFB8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8" 246 $"B8B8B880808000000000D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8" 247 $"D8D8D8D8D8D8D8D8D8D8D8000000B8B8B8FFFFFFB8B8B8B8B8B8B8B8B8B8B8B8" 248 $"B8B8B8B8B8B8B8B8B8B8B8B8B8B8B880808000000000D8D8D8D8D8D8D8D8D898" 249 $"9898D8D8D8989898989898989898989898D8D8D8D8D8D8000000B8B8B8FFFFFF" 250 $"B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B88080800000" 251 $"0000D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8" 252 $"D8D8D8000000B8B8B8FFFFFFB8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8" 253 $"B8B8B8B8B8B8B880808000000000D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8" 254 $"D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8000000B8B8B8FFFFFFB8B8B8B8B8B8B8B8" 255 $"B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B87F7F7F00000000989898D8D8D8" 256 $"989898989898989898989898989898989898989898D8D8D8D8D8D8000000B8B8" 257 $"B8FFFFFFB8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B880" 258 $"808000000000D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8" 259 $"D8D8D8D8D8D8D8000000B8B8B8FFFFFFB8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8" 260 $"B8B8B8B8B8B8B8B8B8B8B87F7F7F00000000D8D8D8D8D8D8D8D8D8D8D8D8D8D8" 261 $"D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8000000B8B8B8FFFFFFFFFFFFFF" 262 $"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80808000000000D8D8" 263 $"D8D8D8D8D8D8D8989898D8D8D8989898989898989898989898D8D8D8D8D8D800" 264 $"0000808080808080808080808080808080808080808080808080808080808080" 265 $"80808080808000000000D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8" 266 $"D8D8D8D8D8D8D8D8D8D8D8000000B8B8B8FFFFFFB8B8B8B8B8B8C0C0C0808080" 267 $"FFFFFFC0C0C0B8B8B8B8B8B8B8B8B880808000000000D8D8D8D8D8D8D8D8D8D8" 268 $"D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8000000B8B8B8FFFFFF" 269 $"B8B8B8B8B8B8C0C0C0808080FFFFFFC0C0C0B8B8B8B8B8B8B8B8B88080800000" 270 $"0000D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8" 271 $"D8D8D8000000B8B8B8FFFFFFB8B8B8B8B8B8C0C0C0808080FFFFFFC0C0C0B8B8" 272 $"B8B8B8B8B8B8B880808000000000D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8" 273 $"D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8000000B8B8B8FFFFFFFFFFFFFFFFFFFFFF" 274 $"FF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80808000000000D8D8D8D8D8D8" 275 $"D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8000000B8B8" 276 $"B8B8B8B8B8B8B8B8B8B8B8B8B8808080B8B8B8B8B8B8B8B8B8B8B8B8B8B8B880" 277 $"808000000000D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8" 278 $"D8D8D8D8D8D8D8D8D8D800000000000000000000000000000058585800000000" 279 $"0000000000000000000000000000D8D8D800D8D8D8D8D8D8D8D8D8D8D8D8D8D8" 280 $"D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8" 281 $"D8D8000000000000000000D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D800D8D8" 282 $"D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8" 283 $"D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8000000D8D8D8D8D8D8D8D8D8D8D8D8" 284 $"D8D8D8D8D8D8D8D8D800D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8" 285 $"D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8000000" 286 $"D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D800000090413D3D3DFF0000" 287 $"80420000984100008042000008423D0000FF0000804200000C42000080420000" 288 $"4842003D00FF0000804200004C42000080420000844200003DFF000082420000" 289 $"004000008242000090413E3E3EFF000082420000984100008242000008423E00" 290 $"00FF0000824200000C420000824200004842003E00FF0000824200004C420000" 291 $"82420000844200003EFF000084420000004000008442000090413F3F3FFF0000" 292 $"84420000984100008442000008423F0000FF0000844200000C42000084420000" 293 $"4842003F00FF0000844200004C42000084420000844200003FFF000086420000" 294 $"00400000864200009041404040FF000086420000984100008642000008424000" 295 $"00FF0000864200000C420000864200004842004000FF0000864200004C420000" 296 $"864200008442000040FF00008842000000400000884200009041414141FF0000" 297 $"8842000098410000884200000842410000FF0000884200000C42000088420000" 298 $"4842004100FF0000884200004C420000884200008442000041FF00008A420000" 299 $"004000008A4200009041424242FF00008A420000984100008A42000008424200" 300 $"00FF00008A4200000C4200008A4200004842004200FF00008A4200004C420000" 301 $"8A4200008442000042FF00008C420000004000008C4200009041434343FF0000" 302 $"8C420000984100008C4200000842430000FF00008C4200000C4200008C420000" 303 $"484200" 263 $"424d1e090000000000003600000028000000190000001e00000001001800" 264 $"00000000e8080000130b0000130b00000000000000000000d8d8d8d8d8d8" 265 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 266 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 267 $"d8d8d8d8d8d8d8d8d800d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 268 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 269 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d800d8d8d8d8" 270 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 271 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 272 $"d8d8d8d8d8d8d8d8d8d8d800d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 273 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 274 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d800d8d8" 275 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 276 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 277 $"d8d8d8d8d8d8d8d8d8d8d8d8d800d8d8d800000000000000000000000000" 278 $"0000000000000000000000000000000000000000000000d8d8d8d8d8d8d8" 279 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d800" 280 $"000000808080808080808080808080808080808080808080808080808080" 281 $"808080808080808080000000d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 282 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d800000000b8b8b8ffffffb8b8b8b8b8" 283 $"b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8808080000000d8d8" 284 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 285 $"d800000000b8b8b8ffffffb8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8" 286 $"b8b8b8b8b8b8b8b8808080000000d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 287 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d800000000b8b8b8ffffffb8b8b8" 288 $"b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8808080000000" 289 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 290 $"d8d8d800000000b8b8b8ffffffb8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8" 291 $"b8b8b8b8b8b8b8b8b8b8808080000000d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 292 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d800000000b8b8b8ffffffb8" 293 $"b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b880808000" 294 $"0000d8d8d8d8d8d8989898d8d8d8d8d8d8d8d8d8989898d8d8d8d8d8d8d8" 295 $"d8d8d8d8d800000000b8b8b8ffffffb8b8b8b8b8b8b8b8b8b8b8b8b8b8b8" 296 $"b8b8b8b8b8b8b8b8b8b8b8b8808080000000d8d8d8d8d8d8989898989898" 297 $"d8d8d8d8d8d8989898989898d8d8d8d8d8d8d8d8d800000000b8b8b8ffff" 298 $"ffb8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b87f7f" 299 $"7f000000d8d8d8d8d8d8989898989898989898d8d8d89898989898989898" 300 $"98d8d8d8d8d8d800000000b8b8b8ffffffb8b8b8b8b8b8b8b8b8b8b8b8b8" 301 $"b8b8b8b8b8b8b8b8b8b8b8b8b8b8808080000000d8d8d8d8d8d898989898" 302 $"9898989898989898989898989898989898989898d8d8d800000000b8b8b8" 303 $"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" 304 $"808080000000d8d8d8d8d8d8989898989898989898d8d8d8989898989898" 305 $"989898d8d8d8d8d8d8000000008080808080808080808080808080808080" 306 $"80808080808080808080808080808080808080000000d8d8d8d8d8d89898" 307 $"98989898d8d8d8d8d8d8989898989898d8d8d8d8d8d8d8d8d800000000b8" 308 $"b8b8ffffffb8b8b8b8b8b8c0c0c0808080ffffffc0c0c0b8b8b8b8b8b8b8" 309 $"b8b8808080000000d8d8d8d8d8d8989898d8d8d8d8d8d8d8d8d8989898d8" 310 $"d8d8d8d8d8d8d8d8d8d8d800000000b8b8b8ffffffb8b8b8b8b8b8c0c0c0" 311 $"808080ffffffc0c0c0b8b8b8b8b8b8b8b8b8808080000000d8d8d8d8d8d8" 312 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8000000" 313 $"00b8b8b8ffffffb8b8b8b8b8b8c0c0c0808080ffffffc0c0c0b8b8b8b8b8" 314 $"b8b8b8b8808080000000d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 315 $"d8d8d8d8d8d8d8d8d8d8d8d8d800000000b8b8b8ffffffffffffffffffff" 316 $"ffff808080ffffffffffffffffffffffffffffff808080000000d8d8d8d8" 317 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d800" 318 $"000000b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8808080b8b8b8b8b8b8b8b8b8" 319 $"b8b8b8b8b8b8808080000000d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 320 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d800d8d8d80000000000000000000000" 321 $"00000000585858000000000000000000000000000000000000d8d8d8d8d8" 322 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 323 $"d800d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8000000000000000000d8d8d8d8" 324 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 325 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d800d8d8d8d8d8d8d8d8d8d8d8d8" 326 $"d8d8d8d8d8d8000000d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 327 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 328 $"d8d8d800d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8000000d8d8d8d8d8" 329 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 330 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d800d8d8d8d8d8d8d8d8d8d8" 331 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 332 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 333 $"d8d8d8d8d800d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 334 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 335 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d800d8d8d8d8d8d8d8d8" 336 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 337 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 338 $"d8d8d8d8d8d8d800d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 339 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8" 340 $"d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d800" 304 341 }; -
src/preferences/mouse/MouseView.h
18 18 #define MOUSE_VIEW_H 19 19 20 20 21 #include <View.h>22 21 #include <Bitmap.h> 23 22 #include <PopUpMenu.h> 23 #include <View.h> 24 24 25 25 26 26 class MouseSettings; 27 27 28 28 class MouseView : public BView { 29 29 public: 30 MouseView(BRect frame,const MouseSettings &settings);31 virtual 30 MouseView(const MouseSettings &settings); 31 virtual ~MouseView(); 32 32 33 virtual voidAttachedToWindow();34 virtual voidMouseDown(BPoint where);35 virtual voidMouseUp(BPoint where);36 virtual voidDraw(BRect frame);37 virtual voidGetPreferredSize(float *_width, float *_height);33 virtual void AttachedToWindow(); 34 virtual void MouseDown(BPoint where); 35 virtual void MouseUp(BPoint where); 36 virtual void Draw(BRect frame); 37 virtual void GetPreferredSize(float *_width, float *_height); 38 38 39 voidSetMouseType(int32 type);40 voidMouseMapUpdated();41 voidUpdateFromSettings();39 void SetMouseType(int32 type); 40 void MouseMapUpdated(); 41 void UpdateFromSettings(); 42 42 43 43 private: 44 int32ConvertFromVisualOrder(int32 button);44 int32 ConvertFromVisualOrder(int32 button); 45 45 46 typedefBView inherited;46 typedef BView inherited; 47 47 48 const MouseSettings&fSettings;49 BBitmap*fMouseBitmap, *fMouseDownBitmap;50 BRectfMouseDownBounds;48 const MouseSettings &fSettings; 49 BBitmap *fMouseBitmap, *fMouseDownBitmap; 50 BRect fMouseDownBounds; 51 51 52 int32fType;53 uint32fButtons;54 uint32fOldButtons;52 int32 fType; 53 uint32 fButtons; 54 uint32 fOldButtons; 55 55 }; 56 56 57 57 #endif /* MOUSE_VIEW_H */ -
src/preferences/mouse/MouseConstants.h
10 10 // Authors: Jérôme Duval, 11 11 // Andrew McCall (mccall@digitalparadise.co.uk) 12 12 // Axel Dörfler (axeld@pinc-software.de) 13 // Brecht Machiels (brecht@mos6581.org) 13 14 // Description: Mouse Preferences 14 15 // Created: December 10, 2003 15 16 // … … 18 19 #ifndef MOUSE_CONSTANTS_H 19 20 #define MOUSE_CONSTANTS_H 20 21 22 21 23 // interface messages 22 24 const uint32 kMsgDefaults = 'BTde'; 23 25 const uint32 kMsgRevert = 'BTre'; 24 26 25 27 const uint32 kMsgMouseType = 'PUmt'; 26 28 const uint32 kMsgMouseFocusMode = 'PUmf'; 29 const uint32 kMsgFollowsMouseMode = 'PUff'; 30 const uint32 kMsgAcceptFirstClick = 'PUaf'; 27 31 const uint32 kMsgMouseMap = 'PUmm'; 28 32 29 33 const uint32 kMsgDoubleClickSpeed = 'SLdc'; -
src/preferences/mouse/SettingsView.cpp
8 8 // 9 9 // File: SettingsView.cpp 10 10 // Authors: Jérôme Duval, 11 // Andrew McCall (mccall@digitalparadise.co.uk) 12 // Axel Dörfler (axeld@pinc-software.de) 11 // Andrew McCall (mccall@digitalparadise.co.uk), 12 // Axel Dörfler (axeld@pinc-software.de), 13 // Brecht Machiels (brecht@mos6581.org) 13 14 // Description: Mouse Preferences 14 15 // Created: December 10, 2003 15 16 // 16 17 // ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 17 18 18 #include <InterfaceDefs.h> 19 #include <Button.h> 20 #include <Box.h> 19 #include "SettingsView.h" 20 21 21 #include <Bitmap.h> 22 #include <TranslationUtils.h> 23 #include <TextControl.h> 24 #include <Slider.h> 25 #include <PopUpMenu.h> 22 #include <Box.h> 23 #include <Button.h> 24 #include <Debug.h> 25 #include <GroupLayout.h> 26 #include <GroupLayoutBuilder.h> 27 #include <InterfaceDefs.h> 26 28 #include <MenuField.h> 27 29 #include <MenuItem.h> 28 #include <Debug.h> 30 #include <PopUpMenu.h> 31 #include <Slider.h> 32 #include <TextControl.h> 33 #include <TranslationUtils.h> 29 34 #include <Window.h> 30 35 31 #include "SettingsView.h"32 36 #include "MouseConstants.h" 33 37 #include "MouseSettings.h" 34 38 #include "MouseView.h" … … 41 45 case B_NORMAL_MOUSE: 42 46 default: 43 47 return 0; 48 case B_CLICK_TO_FOCUS_MOUSE: 49 return 1; 44 50 case B_FOCUS_FOLLOWS_MOUSE: 51 return 2; 52 } 53 } 54 55 static int32 56 focus_follows_mouse_mode_to_index(mode_focus_follows_mouse mode) 57 { 58 switch (mode) { 59 case B_NORMAL_FOCUS_FOLLOWS_MOUSE: 60 default: 61 return 0; 62 case B_WARP_FOCUS_FOLLOWS_MOUSE: 45 63 return 1; 46 case B_ WARP_MOUSE:64 case B_INSTANT_WARP_FOCUS_FOLLOWS_MOUSE: 47 65 return 2; 48 case B_INSTANT_WARP_MOUSE:49 return 3;50 66 } 51 67 } 52 68 53 69 54 70 // #pragma mark - 55 71 56 57 SettingsView::SettingsView(BRect rect, MouseSettings &settings) 58 : BBox(rect, "main_view"), 72 SettingsView::SettingsView(MouseSettings &settings) 73 : BBox("main_view"), 59 74 fSettings(settings) 60 75 { 61 ResizeToPreferred();62 63 76 fDoubleClickBitmap = BTranslationUtils::GetBitmap("double_click_bmap"); 64 77 fSpeedBitmap = BTranslationUtils::GetBitmap("speed_bmap"); 65 78 fAccelerationBitmap = BTranslationUtils::GetBitmap("acceleration_bmap"); 66 79 80 fDoubleClickView = new BBitmapView(*fDoubleClickBitmap); 81 fSpeedView = new BBitmapView(*fSpeedBitmap); 82 fAccelerationView = new BBitmapView(*fAccelerationBitmap); 83 67 84 // Add the "Mouse Type" pop up menu 68 85 fTypeMenu = new BPopUpMenu("unknown"); 69 86 fTypeMenu->AddItem(new BMenuItem("1-Button", new BMessage(kMsgMouseType))); 70 87 fTypeMenu->AddItem(new BMenuItem("2-Button", new BMessage(kMsgMouseType))); 71 88 fTypeMenu->AddItem(new BMenuItem("3-Button", new BMessage(kMsgMouseType))); 72 89 73 BMenuField *field = new BMenuField(BRect(7, 8, 155, 190), "mouse_type", "Mouse type:", fTypeMenu); 74 field->SetDivider(field->StringWidth(field->Label()) + kItemSpace); 75 field->SetAlignment(B_ALIGN_RIGHT); 76 AddChild(field); 90 BMenuField *fTypeField = new BMenuField("Mouse type:", fTypeMenu, NULL); 91 fTypeField->SetAlignment(B_ALIGN_RIGHT); 77 92 78 BFont font = be_plain_font;79 float length = font.StringWidth("Mouse type: [3-Button]") + 20;80 fLeftArea.Set(8, 7, length + 8, 198);81 if (fLeftArea.Width() < 125)82 fLeftArea.right = fLeftArea.left + 125;83 84 fRightArea.Set(fLeftArea.right + 10, 11, 200, 7);85 86 93 // Create the "Double-click speed slider... 87 fClickSpeedSlider = new BSlider( fRightArea,"double_click_speed", "Double-click speed",88 new BMessage(kMsgDoubleClickSpeed), 0, 1000 );94 fClickSpeedSlider = new BSlider("double_click_speed", "Double-click speed", 95 new BMessage(kMsgDoubleClickSpeed), 0, 1000, B_HORIZONTAL); 89 96 fClickSpeedSlider->SetHashMarks(B_HASH_MARKS_BOTTOM); 90 97 fClickSpeedSlider->SetHashMarkCount(5); 91 98 fClickSpeedSlider->SetLimitLabels("Slow", "Fast"); 92 AddChild(fClickSpeedSlider);93 99 94 length = fClickSpeedSlider->Bounds().Height() + 6;95 fDoubleClickBmpPoint.y = fRightArea.top +96 (length - fDoubleClickBitmap->Bounds().Height()) / 2;97 fRightArea.top += length;98 99 100 // Create the "Mouse Speed" slider... 100 fMouseSpeedSlider = new BSlider( fRightArea,"mouse_speed", "Mouse Speed",101 new BMessage(kMsgMouseSpeed), 0, 1000 );101 fMouseSpeedSlider = new BSlider("mouse_speed", "Mouse Speed", 102 new BMessage(kMsgMouseSpeed), 0, 1000, B_HORIZONTAL); 102 103 fMouseSpeedSlider->SetHashMarks(B_HASH_MARKS_BOTTOM); 103 104 fMouseSpeedSlider->SetHashMarkCount(7); 104 105 fMouseSpeedSlider->SetLimitLabels("Slow", "Fast"); 105 AddChild(fMouseSpeedSlider);106 106 107 fSpeedBmpPoint.y = fRightArea.top +108 (length - fSpeedBitmap->Bounds().Height()) / 2;109 fRightArea.top += length;110 111 107 // Create the "Mouse Acceleration" slider... 112 fAccelerationSlider = new BSlider( fRightArea,"mouse_acceleration", "Mouse Acceleration",113 new BMessage(kMsgAccelerationFactor), 0, 1000 );108 fAccelerationSlider = new BSlider("mouse_acceleration", "Mouse Acceleration", 109 new BMessage(kMsgAccelerationFactor), 0, 1000, B_HORIZONTAL); 114 110 fAccelerationSlider->SetHashMarks(B_HASH_MARKS_BOTTOM); 115 111 fAccelerationSlider->SetHashMarkCount(5); 116 112 fAccelerationSlider->SetLimitLabels("Slow", "Fast"); 117 AddChild(fAccelerationSlider);118 113 119 fAccelerationBmpPoint.y = fRightArea.top + 120 (length - fAccelerationBitmap->Bounds().Height()) / 2; 121 fRightArea.top += length - 3; 114 // Mouse image... 115 fMouseView = new MouseView(fSettings); 116 117 // Create the "Double-click test area" text box... 118 BTextControl *fDoubleClick = new BTextControl(NULL, "Double-click test area", NULL); 119 fDoubleClick->SetAlignment(B_ALIGN_LEFT, B_ALIGN_CENTER); 120 121 // Add the "Mouse focus mode" pop up menu 122 fFocusMenu = new BPopUpMenu("Click to Activate"); 122 123 123 // Add the "Focus follows mouse" pop up menu 124 fFocusMenu = new BPopUpMenu("Disabled"); 125 126 const char *focusLabels[] = {"Disabled", "Enabled", "Warping", "Instant-Warping"}; 127 const mode_mouse focusModes[] = {B_NORMAL_MOUSE, B_FOCUS_FOLLOWS_MOUSE, 128 B_WARP_MOUSE, B_INSTANT_WARP_MOUSE}; 124 const char *focusLabels[] = {"Click to Activate", "Click to Focus", 125 "Focus Follows Mouse"}; 126 const mode_mouse focusModes[] = {B_NORMAL_MOUSE, B_CLICK_TO_FOCUS_MOUSE, 127 B_FOCUS_FOLLOWS_MOUSE}; 129 128 130 for (int i = 0; i < 4; i++) {129 for (int i = 0; i < 3; i++) { 131 130 BMessage *message = new BMessage(kMsgMouseFocusMode); 132 131 message->AddInt32("mode", focusModes[i]); 133 132 134 133 fFocusMenu->AddItem(new BMenuItem(focusLabels[i], message)); 135 134 } 136 135 137 BRect frame(fRightArea.left, fRightArea.top + 10, fRightArea.left + 138 font.StringWidth("Focus follows mouse:") + 139 font.StringWidth(focusLabels[0]) + 30, 200); 140 field = new BMenuField(frame, "ffm", "Focus follows mouse:", fFocusMenu, true); 141 field->SetDivider(field->StringWidth(field->Label()) + kItemSpace); 142 field->SetAlignment(B_ALIGN_RIGHT); 143 AddChild(field); 136 BMenuField *fFocusField = new BMenuField("Focus mode:", fFocusMenu, NULL); 137 fFocusField->SetAlignment(B_ALIGN_RIGHT); 138 139 // Add the "Focus follows mouse mode" pop up menu 140 fFocusFollowsMouseMenu = new BPopUpMenu("Normal"); 141 142 const char *focusFollowsMouseLabels[] = {"Normal", "Warp", "Instant Warp"}; 143 const mode_focus_follows_mouse focusFollowsMouseModes[] = 144 {B_NORMAL_FOCUS_FOLLOWS_MOUSE, B_WARP_FOCUS_FOLLOWS_MOUSE, 145 B_INSTANT_WARP_FOCUS_FOLLOWS_MOUSE}; 144 146 145 // Finalize the areas 146 fRightArea.bottom = fRightArea.top; 147 fRightArea.top = 11; 148 fRightArea.right = frame.right + 8; 149 if (fRightArea.Width() < 200) 150 fRightArea.right = fRightArea.left + 200; 151 fLeftArea.bottom = fRightArea.bottom; 147 for (int i = 0; i < 3; i++) { 148 BMessage *message = new BMessage(kMsgFollowsMouseMode); 149 message->AddInt32("mode_focus_follows_mouse", focusFollowsMouseModes[i]); 152 150 153 // Position mouse bitmaps 154 fDoubleClickBmpPoint.x = fRightArea.right - fDoubleClickBitmap->Bounds().right - 15; 155 fSpeedBmpPoint.x = fRightArea.right - fSpeedBitmap->Bounds().right - 15; 156 fAccelerationBmpPoint.x = fRightArea.right - fAccelerationBitmap->Bounds().right - 15; 151 fFocusFollowsMouseMenu->AddItem(new BMenuItem(focusFollowsMouseLabels[i], 152 message)); 153 } 157 154 158 // Resize sliders to equal size 159 length = fRightArea.left - 5; 160 fClickSpeedSlider->ResizeTo(fDoubleClickBmpPoint.x - length - 11, 161 fClickSpeedSlider->Bounds().Height()); 162 fMouseSpeedSlider->ResizeTo(fSpeedBmpPoint.x - length, 163 fMouseSpeedSlider->Bounds().Height()); 164 fAccelerationSlider->ResizeTo(fAccelerationBmpPoint.x - length, 165 fAccelerationSlider->Bounds().Height()); 155 BMenuField *fFocusFollowsMouseField = new BMenuField("Focus follows mouse mode:", 156 fFocusFollowsMouseMenu, NULL); 157 fFocusFollowsMouseField->SetAlignment(B_ALIGN_RIGHT); 166 158 167 // Mouse image... 168 frame.Set(0, 0, 148, 162); 169 fMouseView = new MouseView(frame, fSettings); 170 fMouseView->ResizeToPreferred(); 171 fMouseView->MoveBy((fLeftArea.right - fMouseView->Bounds().Width()) / 2, 172 (fLeftArea.bottom - fMouseView->Bounds().Height()) / 2); 173 AddChild(fMouseView); 159 // Add the "Click-through" check box 160 fAcceptFirstClickBox = new BCheckBox("Accept first click", 161 new BMessage(kMsgAcceptFirstClick)); 174 162 175 // Create the "Double-click test area" text box... 176 frame.Set(fLeftArea.left, fLeftArea.bottom + 10, fLeftArea.right, 0); 177 BTextControl *textControl = new BTextControl(frame, "double_click_test_area", NULL, 178 "Double-click test area", NULL); 179 textControl->SetAlignment(B_ALIGN_LEFT, B_ALIGN_CENTER); 180 AddChild(textControl); 163 // dividers 164 BBox* hdivider = new BBox( 165 BRect(0, 0, 1, 1), B_EMPTY_STRING, B_FOLLOW_ALL_SIDES, 166 B_WILL_DRAW | B_FRAME_EVENTS, B_FANCY_BORDER); 167 hdivider->SetExplicitMaxSize(BSize(1, B_SIZE_UNLIMITED)); 168 169 BBox* vdivider = new BBox( 170 BRect(0, 0, 1, 1), B_EMPTY_STRING, B_FOLLOW_ALL_SIDES, 171 B_WILL_DRAW | B_FRAME_EVENTS, B_FANCY_BORDER); 172 vdivider->SetExplicitMaxSize(BSize(B_SIZE_UNLIMITED, 1)); 181 173 182 ResizeTo(fRightArea.right + 5, fLeftArea.bottom + 60); 174 // Build the layout 175 SetLayout(new BGroupLayout(B_HORIZONTAL)); 176 177 AddChild(BGroupLayoutBuilder(B_VERTICAL, 10) 178 .AddGroup(B_HORIZONTAL, 10) 179 .AddGroup(B_VERTICAL, 10, 1) 180 .AddGroup(B_HORIZONTAL, 10) 181 .AddGlue() 182 .Add(fTypeField) 183 .AddGlue() 184 .End() 185 .AddGlue() 186 .Add(BGroupLayoutBuilder(B_HORIZONTAL, 10) 187 .AddGlue() 188 .Add(fMouseView) 189 .AddGlue() 190 ) 191 .AddGlue() 192 .Add(fDoubleClick) 193 .End() 194 .Add(hdivider) 195 .AddGroup(B_VERTICAL, 5, 3) 196 .Add(BGroupLayoutBuilder(B_HORIZONTAL, 0) 197 .Add(fClickSpeedSlider) 198 .Add(fDoubleClickView) 199 ) 200 .Add(BGroupLayoutBuilder(B_HORIZONTAL, 0) 201 .Add(fMouseSpeedSlider) 202 .Add(fSpeedView) 203 ) 204 .Add(BGroupLayoutBuilder(B_HORIZONTAL, 0) 205 .Add(fAccelerationSlider) 206 .Add(fAccelerationView) 207 ) 208 .End() 209 .End() 210 .Add(vdivider) 211 .AddGroup(B_HORIZONTAL, 10) 212 .Add(fFocusField) 213 .AddGlue() 214 .AddGroup(B_VERTICAL, 0) 215 .Add(fAcceptFirstClickBox) 216 .Add(fFocusFollowsMouseField) 217 .End() 218 .End() 219 .SetInsets(5, 5, 5, 5) 220 ); 183 221 } 184 222 185 223 … … 199 237 200 238 201 239 void 202 SettingsView::GetPreferredSize(float *_width, float *_height)203 {204 if (_width)205 *_width = fRightArea.right + 5;206 if (_height)207 *_height = fLeftArea.bottom + 60;208 }209 210 211 void212 SettingsView::Draw(BRect updateFrame)213 {214 inherited::Draw(updateFrame);215 216 SetHighColor(120, 120, 120);217 SetLowColor(255, 255, 255);218 219 // Line above the test area220 fLeft = fLeftArea.LeftBottom();221 fRight = fLeftArea.RightBottom();222 StrokeLine(fLeft, fRight, B_SOLID_HIGH);223 fLeft.y++; fRight.y++;224 StrokeLine(fLeft, fRight, B_SOLID_LOW);225 226 // Line above focus follows mouse227 fLeft = fRightArea.LeftBottom();228 fRight = fRightArea.RightBottom();229 StrokeLine(fLeft, fRight, B_SOLID_HIGH);230 fLeft.y++; fRight.y++;231 StrokeLine(fLeft, fRight, B_SOLID_LOW);232 233 // Line in the middle234 fLeft = fLeftArea.RightTop();235 fRight = fLeftArea.RightBottom();236 fLeft.x += 5;237 fRight.x += 5;238 StrokeLine(fLeft, fRight, B_SOLID_HIGH);239 fLeft.x++; fRight.x++;240 StrokeLine(fLeft, fRight, B_SOLID_LOW);241 242 SetDrawingMode(B_OP_OVER);243 244 // Draw the icons245 if (fDoubleClickBitmap != NULL246 && updateFrame.Intersects(BRect(fDoubleClickBmpPoint,247 fDoubleClickBmpPoint + fDoubleClickBitmap->Bounds().RightBottom())))248 DrawBitmapAsync(fDoubleClickBitmap, fDoubleClickBmpPoint);249 250 if (fSpeedBitmap != NULL251 && updateFrame.Intersects(BRect(fSpeedBmpPoint,252 fSpeedBmpPoint + fSpeedBitmap->Bounds().RightBottom())))253 DrawBitmapAsync(fSpeedBitmap, fSpeedBmpPoint);254 255 if (fAccelerationBitmap != NULL256 && updateFrame.Intersects(BRect(fAccelerationBmpPoint,257 fAccelerationBmpPoint + fAccelerationBitmap->Bounds().RightBottom())))258 DrawBitmapAsync(fAccelerationBitmap, fAccelerationBmpPoint);259 260 261 SetDrawingMode(B_OP_COPY);262 }263 264 265 void266 240 SettingsView::SetMouseType(int32 type) 267 241 { 268 242 fMouseView->SetMouseType(type); … … 300 274 item = fFocusMenu->ItemAt(mouse_mode_to_index(fSettings.MouseMode())); 301 275 if (item != NULL) 302 276 item->SetMarked(true); 277 278 item = fFocusFollowsMouseMenu->ItemAt(focus_follows_mouse_mode_to_index(fSettings.FocusFollowsMouseMode())); 279 if (item != NULL) 280 item->SetMarked(true); 281 282 fFocusFollowsMouseMenu->SetEnabled(fSettings.MouseMode() == B_FOCUS_FOLLOWS_MOUSE); 283 284 fAcceptFirstClickBox->SetValue(fSettings.AcceptFirstClick() ? B_CONTROL_ON : B_CONTROL_OFF); 303 285 } 304 286 -
src/apps/deskbar/BarWindow.cpp
75 75 : BWindow(BRect(-1000.0f, -1000.0f, -1000.0f, -1000.0f), "Deskbar", 76 76 B_BORDERED_WINDOW, 77 77 B_WILL_ACCEPT_FIRST_CLICK | B_NOT_ZOOMABLE | B_NOT_CLOSABLE 78 | B_NOT_MOVABLE | B_AVOID_FRONT | B_ASYNCHRONOUS_CONTROLS, 78 | B_NOT_MOVABLE | B_ASYNCHRONOUS_CONTROLS 79 | B_AVOID_FOCUS, 79 80 B_ALL_WORKSPACES) 80 81 { 81 82 desk_settings *settings = ((TBarApp *)be_app)->Settings(); -
src/servers/app/DesktopSettings.h
44 44 void GetMenuInfo(menu_info& info) const; 45 45 46 46 mode_mouse MouseMode() const; 47 mode_focus_follows_mouse FocusFollowsMouseMode() const; 47 48 bool FocusFollowsMouse() const; 49 bool AcceptFirstClick() const; 48 50 49 51 bool ShowAllDraggers() const; 50 52 … … 75 77 void SetMenuInfo(const menu_info& info); 76 78 77 79 void SetMouseMode(mode_mouse mode); 80 void SetFocusFollowsMouseMode(const mode_focus_follows_mouse mode); 81 void SetAcceptFirstClick(bool accept_first_click); 78 82 79 83 void SetShowAllDraggers(bool show); 80 84 -
src/servers/app/ServerApp.cpp
18 18 \brief Counterpart to BApplication within the app_server 19 19 */ 20 20 21 #include "ServerApp.h" 22 23 #include <new> 24 #include <stdio.h> 25 #include <string.h> 26 #include <syslog.h> 27 28 #include <AppDefs.h> 29 #include <Autolock.h> 30 #include <Debug.h> 31 #include <List.h> 32 #include <ScrollBar.h> 33 #include <Shape.h> 34 #include <String.h> 35 36 #include <FontPrivate.h> 37 #include <MessengerPrivate.h> 38 #include <RosterPrivate.h> 39 #include <ServerProtocol.h> 40 #include <WindowPrivate.h> 41 21 42 #include "AppServer.h" 22 43 #include "BitmapManager.h" 23 44 #include "CursorManager.h" … … 31 52 #include "InputManager.h" 32 53 #include "OffscreenServerWindow.h" 33 54 #include "Screen.h" 34 #include "ServerApp.h"35 55 #include "ServerBitmap.h" 36 56 #include "ServerConfig.h" 37 57 #include "ServerCursor.h" … … 41 61 #include "SystemPalette.h" 42 62 #include "Window.h" 43 63 44 #include <FontPrivate.h>45 #include <MessengerPrivate.h>46 #include <RosterPrivate.h>47 #include <ServerProtocol.h>48 #include <WindowPrivate.h>49 64 50 #include <AppDefs.h>51 #include <Autolock.h>52 #include <Debug.h>53 #include <List.h>54 #include <ScrollBar.h>55 #include <Shape.h>56 #include <String.h>57 58 #include <new>59 #include <stdio.h>60 #include <string.h>61 #include <syslog.h>62 63 64 65 //#define DEBUG_SERVERAPP 65 66 #ifdef DEBUG_SERVERAPP 66 67 # define STRACE(x) debug_printf x … … 1050 1051 1051 1052 case AS_SET_MOUSE_MODE: 1052 1053 { 1053 STRACE(("ServerApp %s: Set Focus Follows Mousemode\n", Signature()));1054 STRACE(("ServerApp %s: Set Mouse Focus mode\n", Signature())); 1054 1055 // Attached Data: 1055 // 1) enum mode_mouse FFM mousemode1056 // 1) enum mode_mouse mouse focus mode 1056 1057 mode_mouse mouseMode; 1057 1058 if (link.Read<mode_mouse>(&mouseMode) == B_OK) { 1058 1059 LockedDesktopSettings settings(fDesktop); … … 1062 1063 } 1063 1064 case AS_GET_MOUSE_MODE: 1064 1065 { 1065 STRACE(("ServerApp %s: Get Focus Follows Mousemode\n", Signature()));1066 STRACE(("ServerApp %s: Get Mouse Focus mode\n", Signature())); 1066 1067 1067 1068 if (fDesktop->LockSingleWindow()) { 1068 1069 DesktopSettings settings(fDesktop); … … 1077 1078 fLink.Flush(); 1078 1079 break; 1079 1080 } 1081 case AS_SET_FOCUS_FOLLOWS_MOUSE_MODE: 1082 { 1083 STRACE(("ServerApp %s: Set Focus Follows Mouse mode\n", Signature())); 1084 // Attached Data: 1085 // 1) enum mode_focus_follows_mouse FFM mouse mode 1086 mode_focus_follows_mouse focusFollowsMousMode; 1087 if (link.Read<mode_focus_follows_mouse>(&focusFollowsMousMode) == B_OK) { 1088 LockedDesktopSettings settings(fDesktop); 1089 settings.SetFocusFollowsMouseMode(focusFollowsMousMode); 1090 } 1091 break; 1092 } 1093 case AS_GET_FOCUS_FOLLOWS_MOUSE_MODE: 1094 { 1095 STRACE(("ServerApp %s: Get Focus Follows Mouse mode\n", Signature())); 1080 1096 1097 if (fDesktop->LockSingleWindow()) { 1098 DesktopSettings settings(fDesktop); 1099 1100 fLink.StartMessage(B_OK); 1101 fLink.Attach<mode_focus_follows_mouse>(settings.FocusFollowsMouseMode()); 1102 1103 fDesktop->UnlockSingleWindow(); 1104 } else 1105 fLink.StartMessage(B_ERROR); 1106 1107 fLink.Flush(); 1108 break; 1109 } 1110 case AS_SET_ACCEPT_FIRST_CLICK: 1111 { 1112 STRACE(("ServerApp %s: Set Accept First Click\n", Signature())); 1113 // Attached Data: 1114 // 1) bool accept_first_click 1115 bool acceptFirstClick; 1116 if (link.Read<bool>(&acceptFirstClick) == B_OK) { 1117 LockedDesktopSettings settings(fDesktop); 1118 settings.SetAcceptFirstClick(acceptFirstClick); 1119 } 1120 break; 1121 } 1122 case AS_GET_ACCEPT_FIRST_CLICK: 1123 { 1124 STRACE(("ServerApp %s: Get Accept First Click\n", Signature())); 1125 1126 if (fDesktop->LockSingleWindow()) { 1127 DesktopSettings settings(fDesktop); 1128 1129 fLink.StartMessage(B_OK); 1130 fLink.Attach<bool>(settings.AcceptFirstClick()); 1131 1132 fDesktop->UnlockSingleWindow(); 1133 } else 1134 fLink.StartMessage(B_ERROR); 1135 1136 fLink.Flush(); 1137 break; 1138 } 1139 1081 1140 case AS_GET_SHOW_ALL_DRAGGERS: 1082 1141 { 1083 1142 STRACE(("ServerApp %s: Get Show All Draggers\n", Signature())); -
src/servers/app/Window.h
6 6 * DarkWyrm <bpmagic@columbus.rr.com> 7 7 * Adi Oanca <adioanca@gmail.com> 8 8 * Stephan Aßmus <superstippi@gmx.de> 9 * Axel Dörfler, axeld@pinc-software.de 9 * Axel Dörfler <axeld@pinc-software.de> 10 * Brecht Machiels <brecht@mos6581.org> 10 11 */ 11 12 #ifndef WINDOW_H 12 13 #define WINDOW_H -
src/servers/app/Desktop.h
5 5 * Authors: 6 6 * Adrian Oanca <adioanca@cotty.iren.ro> 7 7 * Stephan Aßmus <superstippi@gmx.de> 8 * Axel Dörfler , axeld@pinc-software.de8 * Axel Dörfler <axeld@pinc-software.de> 9 9 * Andrej Spielmann, <andrej.spielmann@seh.ox.ac.uk> 10 * Brecht Machiels <brecht@mos6581.org> 10 11 */ 11 12 #ifndef DESKTOP_H 12 13 #define DESKTOP_H … … 116 117 117 118 // Window methods 118 119 120 void SelectWindow(Window* window); 119 121 void ActivateWindow(Window* window); 120 122 void SendWindowBehind(Window* window, 121 123 Window* behindOf = NULL); -
src/servers/app/DesktopSettings.cpp
11 11 12 12 #include "DesktopSettings.h" 13 13 #include "DesktopSettingsPrivate.h" 14 15 #include <Directory.h> 16 #include <File.h> 17 #include <FindDirectory.h> 18 #include <Path.h> 19 20 #include <DefaultColors.h> 21 #include <ServerReadOnlyMemory.h> 22 14 23 #include "Desktop.h" 15 24 #include "FontCache.h" 16 25 #include "FontCacheEntry.h" … … 18 27 #include "GlobalSubpixelSettings.h" 19 28 #include "ServerConfig.h" 20 29 21 #include <DefaultColors.h>22 #include <ServerReadOnlyMemory.h>23 30 24 #include <Directory.h>25 #include <File.h>26 #include <FindDirectory.h>27 #include <Path.h>28 29 30 31 DesktopSettingsPrivate::DesktopSettingsPrivate(server_read_only_memory* shared) 31 32 : 32 33 fShared(*shared) … … 50 51 fFixedFont = *gFontManager->DefaultFixedFont(); 51 52 52 53 fMouseMode = B_NORMAL_MOUSE; 54 fFocusFollowsMouseMode = B_NORMAL_FOCUS_FOLLOWS_MOUSE; 55 fAcceptFirstClick = false; 53 56 fShowAllDraggers = true; 54 57 55 58 // init scrollbar info … … 186 189 status = settings.Unflatten(&file); 187 190 if (status == B_OK) { 188 191 int32 mode; 189 if (settings.FindInt32("mode", &mode) == B_OK) {192 if (settings.FindInt32("mode", &mode) == B_OK) 190 193 fMouseMode = (mode_mouse)mode; 194 int32 focus_follows_mouse_mode; 195 if (settings.FindInt32("focus follows mouse mode", 196 &focus_follows_mouse_mode) == B_OK) { 197 fFocusFollowsMouseMode = 198 (mode_focus_follows_mouse)focus_follows_mouse_mode; 191 199 } 200 bool accept_first_click; 201 if (settings.FindBool("accept first click", &accept_first_click) == B_OK) 202 fAcceptFirstClick = accept_first_click; 192 203 } 193 204 } 194 205 … … 337 348 if (path.Append("mouse") == B_OK) { 338 349 BMessage settings('asms'); 339 350 settings.AddInt32("mode", (int32)fMouseMode); 351 settings.AddInt32("focus follows mouse mode", (int32)fFocusFollowsMouseMode); 352 settings.AddBool("accept first click", fAcceptFirstClick); 340 353 341 354 BFile file; 342 355 status = file.SetTo(path.Path(), B_CREATE_FILE | B_ERASE_FILE … … 485 498 } 486 499 487 500 501 void 502 DesktopSettingsPrivate::SetFocusFollowsMouseMode(const mode_focus_follows_mouse mode) 503 { 504 fFocusFollowsMouseMode = mode; 505 Save(kMouseSettings); 506 } 507 508 488 509 mode_mouse 489 510 DesktopSettingsPrivate::MouseMode() const 490 511 { … … 492 513 } 493 514 494 515 516 mode_focus_follows_mouse 517 DesktopSettingsPrivate::FocusFollowsMouseMode() const 518 { 519 return fFocusFollowsMouseMode; 520 } 521 522 523 void 524 DesktopSettingsPrivate::SetAcceptFirstClick(const bool accept_first_click) 525 { 526 fAcceptFirstClick = accept_first_click; 527 Save(kMouseSettings); 528 } 529 530 495 531 bool 532 DesktopSettingsPrivate::AcceptFirstClick() const 533 { 534 return fAcceptFirstClick; 535 } 536 537 538 bool 496 539 DesktopSettingsPrivate::FocusFollowsMouse() const 497 540 { 498 return MouseMode() != B_NORMAL_MOUSE;541 return MouseMode() == B_FOCUS_FOLLOWS_MOUSE; 499 542 } 500 543 501 544 … … 697 740 } 698 741 699 742 743 mode_focus_follows_mouse 744 DesktopSettings::FocusFollowsMouseMode() const 745 { 746 return fSettings->FocusFollowsMouseMode(); 747 } 748 749 700 750 bool 701 751 DesktopSettings::FocusFollowsMouse() const 702 752 { … … 705 755 706 756 707 757 bool 758 DesktopSettings::AcceptFirstClick() const 759 { 760 return fSettings->AcceptFirstClick(); 761 } 762 763 764 bool 708 765 DesktopSettings::ShowAllDraggers() const 709 766 { 710 767 return fSettings->ShowAllDraggers(); … … 826 883 827 884 828 885 void 886 LockedDesktopSettings::SetFocusFollowsMouseMode(const mode_focus_follows_mouse mode) 887 { 888 fSettings->SetFocusFollowsMouseMode(mode); 889 } 890 891 892 void 893 LockedDesktopSettings::SetAcceptFirstClick(const bool accept_first_click) 894 { 895 fSettings->SetAcceptFirstClick(accept_first_click); 896 } 897 898 899 void 829 900 LockedDesktopSettings::SetShowAllDraggers(bool show) 830 901 { 831 902 fSettings->SetShowAllDraggers(show); -
src/servers/app/DefaultDecorator.h
10 10 #define DEFAULT_DECORATOR_H 11 11 12 12 13 #include "Decorator.h"14 13 #include <Region.h> 15 14 15 #include "Decorator.h" 16 17 16 18 class Desktop; 17 19 class ServerBitmap; 18 20 -
src/servers/app/ServerWindow.cpp
6 6 * DarkWyrm <bpmagic@columbus.rr.com> 7 7 * Adrian Oanca <adioanca@gmail.com> 8 8 * Stephan Aßmus <superstippi@gmx.de> 9 * Stefano Ceccherini (burton666@libero.it)10 * Axel Dörfler , axeld@pinc-software.de9 * Stefano Ceccherini <burton666@libero.it> 10 * Axel Dörfler <axeld@pinc-software.de> 11 11 * Artur Wyszynski <harakash@gmail.com> 12 * Philippe Saint-Pierre, stpere@gmail.com 12 * Philippe Saint-Pierre <stpere@gmail.com> 13 * Brecht Machiels <brecht@mos6581.org> 13 14 */ 14 15 15 16 /*! … … 699 700 fDesktop->UnlockSingleWindow(); 700 701 701 702 if (activate) 702 fDesktop-> ActivateWindow(fWindow);703 fDesktop->SelectWindow(fWindow); 703 704 else 704 705 fDesktop->SendWindowBehind(fWindow, NULL); 705 706 -
src/servers/app/ProfileMessageSupport.cpp
169 169 case AS_IDLE_TIME: string = "AS_IDLE_TIME"; break; 170 170 case AS_SET_MOUSE_MODE: string = "AS_SET_MOUSE_MODE"; break; 171 171 case AS_GET_MOUSE_MODE: string = "AS_GET_MOUSE_MODE"; break; 172 case AS_SET_FOCUS_FOLLOWS_MOUSE_MODE: 173 string = "AS_SET_FOCUS_FOLLOWS_MOUSE_MODE"; break; 174 case AS_GET_FOCUS_FOLLOWS_MOUSE_MODE: 175 string = "AS_GET_FOCUS_FOLLOWS_MOUSE_MODE"; break; 176 case AS_SET_ACCEPT_FIRST_CLICK: string = "AS_SET_ACCEPT_FIRST_CLICK"; break; 177 case AS_GET_ACCEPT_FIRST_CLICK: string = "AS_GET_ACCEPT_FIRST_CLICK"; break; 172 178 case AS_GET_MOUSE: string = "AS_GET_MOUSE"; break; 173 179 case AS_SET_DECORATOR_SETTINGS: string = "AS_SET_DECORATOR_SETTINGS"; break; 174 180 case AS_GET_DECORATOR_SETTINGS: string = "AS_GET_DECORATOR_SETTINGS"; break; -
src/servers/app/Window.cpp
6 6 * DarkWyrm <bpmagic@columbus.rr.com> 7 7 * Adi Oanca <adioanca@gmail.com> 8 8 * Stephan Aßmus <superstippi@gmx.de> 9 * Axel Dörfler, axeld@pinc-software.de 9 * Axel Dörfler <axeld@pinc-software.de> 10 * Brecht Machiels <brecht@mos6581.org> 10 11 */ 11 12 12 13 … … 757 758 void 758 759 Window::MouseDown(BMessage* message, BPoint where, int32* _viewToken) 759 760 { 761 DesktopSettings desktopSettings(fDesktop); 762 760 763 // TODO: move into Decorator 761 764 if (!fBorderRegionValid) 762 765 GetBorderRegion(&fBorderRegion); … … 770 773 if (fDecorator) 771 774 action = _ActionFor(message); 772 775 773 // ignore clicks on decorator buttons if the 774 // non-floating window doesn't have focus 775 if (!IsFocus() && !IsFloating() && action != DEC_MOVETOBACK 776 && action != DEC_RESIZE && action != DEC_SLIDETAB) 777 action = DEC_DRAG; 776 if (!desktopSettings.AcceptFirstClick()) { 777 // ignore clicks on decorator buttons if the 778 // non-floating window doesn't have focus 779 if (!IsFocus() && !IsFloating() && action != DEC_MOVETOBACK 780 && action != DEC_RESIZE && action != DEC_SLIDETAB) 781 action = DEC_DRAG; 782 } 778 783 779 784 // set decorator internals 780 785 switch (action) { … … 838 843 839 844 // based on what the Decorator returned, properly place this window. 840 845 if (action == DEC_MOVETOBACK) { 841 fDesktop->SendWindowBehind(this); 846 if (desktopSettings.MouseMode() == B_CLICK_TO_FOCUS_MOUSE) { 847 bool covered = true; 848 BRegion fullRegion; 849 GetFullRegion(&fullRegion); 850 if (fullRegion == VisibleRegion()) { 851 // window is overlapped. 852 covered = false; 853 } 854 if (this != fDesktop->FrontWindow() && covered) 855 fDesktop->ActivateWindow(this); 856 else 857 fDesktop->SendWindowBehind(this); 858 } else 859 fDesktop->SendWindowBehind(this); 842 860 } else { 843 861 fDesktop->SetMouseEventWindow(this); 844 862 845 // activate window if not in FFM mode 846 DesktopSettings desktopSettings(fDesktop); 847 if (!desktopSettings.FocusFollowsMouse()) { 863 // activate window if in click to activate mode, else only focus it 864 if (desktopSettings.MouseMode() == B_NORMAL_MOUSE) 848 865 fDesktop->ActivateWindow(this); 849 } else { 850 // actually, the window should already be 851 // focused since the mouse would have to 852 // be over it, but just for completeness... 866 else { 853 867 fDesktop->SetFocusWindow(this); 854 if (action == DEC_DRAG) { 868 if (desktopSettings.MouseMode() == B_FOCUS_FOLLOWS_MOUSE 869 && action == DEC_DRAG) { 855 870 fActivateOnMouseUp = true; 856 871 fLastMoveTime = system_time(); 857 872 } … … 865 880 866 881 // clicking a simple View 867 882 if (!IsFocus()) { 868 DesktopSettings desktopSettings(fDesktop); 883 bool acceptFirstClick = desktopSettings.AcceptFirstClick() 884 || ((Flags() & B_WILL_ACCEPT_FIRST_CLICK) != 0); 885 bool avoidFocus = (Flags() & B_AVOID_FOCUS) != 0; 869 886 870 // Activate window in case it doesn't accept first click, and871 // we're not in FFMmode872 if ( (Flags() & B_WILL_ACCEPT_FIRST_CLICK) == 0873 && ! desktopSettings.FocusFollowsMouse())887 // Activate or focus the window in case it doesn't accept first click, 888 // depending on the mouse mode 889 if (desktopSettings.MouseMode() == B_NORMAL_MOUSE 890 && !acceptFirstClick) 874 891 fDesktop->ActivateWindow(this); 892 else if (!avoidFocus) 893 fDesktop->SetFocusWindow(this); 875 894 876 895 // Eat the click if we don't accept first click 877 896 // (B_AVOID_FOCUS never gets the focus, so they always accept … … 879 898 // TODO: the latter is unlike BeOS - if we really wanted to 880 899 // imitate this behaviour, we would need to check if we're 881 900 // the front window instead of the focus window 882 if ((Flags() & (B_WILL_ACCEPT_FIRST_CLICK 883 | B_AVOID_FOCUS)) == 0) 901 if (!acceptFirstClick && !avoidFocus) 884 902 return; 885 903 } 886 904 … … 936 954 engine->UnlockParallelAccess(); 937 955 938 956 fRegionPool.Recycle(visibleBorder); 957 958 int32 buttons; 959 if (message->FindInt32("buttons", &buttons) != B_OK) 960 buttons = 0; 961 962 // if the primary mouse button is released, stop dragging/resizing/sliding 963 if ((buttons & B_PRIMARY_MOUSE_BUTTON) == 0) { 964 fIsDragging = false; 965 fIsResizing = false; 966 fIsSlidingTab = false; 967 } 939 968 } 940 969 941 970 // in FFM mode, activate the window and bring it … … 949 978 fDesktop->ActivateWindow(this); 950 979 } 951 980 952 fIsDragging = false;953 fIsResizing = false;954 fIsSlidingTab = false;955 956 981 if (View* view = ViewAt(where)) { 957 982 if (HasModal()) 958 983 return; -
src/servers/app/Desktop.cpp
5 5 * Authors: 6 6 * Adrian Oanca <adioanca@cotty.iren.ro> 7 7 * Stephan Aßmus <superstippi@gmx.de> 8 * Axel Dörfler , axeld@pinc-software.de8 * Axel Dörfler <axeld@pinc-software.de> 9 9 * Andrej Spielmann, <andrej.spielmann@seh.ox.ac.uk> 10 * Brecht Machiels <brecht@mos6581.org> 10 11 */ 11 12 12 13 /*! Class used to encapsulate desktop management */ … … 14 15 15 16 #include "Desktop.h" 16 17 18 #include <stdio.h> 19 #include <string.h> 20 #include <syslog.h> 21 22 #include <Debug.h> 23 #include <DirectWindow.h> 24 #include <Entry.h> 25 #include <Message.h> 26 #include <MessageFilter.h> 27 #include <Region.h> 28 #include <Roster.h> 29 30 #include <ViewPrivate.h> 31 #include <WindowInfo.h> 32 #include <ServerProtocol.h> 33 17 34 #include "AppServer.h" 18 35 #include "DesktopSettingsPrivate.h" 19 36 #include "DrawingEngine.h" … … 30 47 #include "Workspace.h" 31 48 #include "WorkspacesView.h" 32 49 33 #include <ViewPrivate.h>34 #include <WindowInfo.h>35 #include <ServerProtocol.h>36 50 37 #include <Debug.h>38 #include <DirectWindow.h>39 #include <Entry.h>40 #include <Message.h>41 #include <MessageFilter.h>42 #include <Region.h>43 #include <Roster.h>44 45 #include <stdio.h>46 #include <string.h>47 #include <syslog.h>48 49 51 #if TEST_MODE 50 52 # include "EventStream.h" 51 53 #endif … … 233 235 234 236 case B_MOUSE_UP: 235 237 window->MouseUp(message, where, &viewToken); 236 fDesktop->SetMouseEventWindow(NULL); 238 if (buttons == 0) 239 fDesktop->SetMouseEventWindow(NULL); 237 240 break; 238 241 239 242 case B_MOUSE_MOVED: … … 1458 1461 1459 1462 uint32 list = fCurrentWorkspace; 1460 1463 1461 if (fSettings-> FocusFollowsMouse())1464 if (fSettings->MouseMode() != B_NORMAL_MOUSE) 1462 1465 list = kFocusList; 1463 1466 1464 1467 if (focus == NULL || hasModal) { 1465 if ( !fSettings->FocusFollowsMouse()) {1468 if (fSettings->MouseMode() == B_NORMAL_MOUSE) { 1466 1469 focus = FrontWindow(); 1467 1470 if (focus == NULL) { 1468 1471 // there might be no front window in case of only a single … … 1608 1611 } 1609 1612 1610 1613 1614 /*! 1615 \brief Activates or focusses the window, based on the mouse mode. 1616 */ 1617 void 1618 Desktop::SelectWindow(Window* window) 1619 { 1620 if (fSettings->MouseMode() != B_NORMAL_MOUSE) { 1621 // Only bring the window to front when it is not the window under the 1622 // mouse pointer. This should result in sensible behaviour. 1623 if (window != fWindowUnderMouse 1624 || (window == fWindowUnderMouse && window != FocusWindow())) 1625 ActivateWindow(window); 1626 else 1627 SetFocusWindow(window); 1628 } else 1629 ActivateWindow(window); 1630 } 1631 1632 1611 1633 /*! \brief Tries to move the specified window to the front of the screen, 1612 1634 and make it the focus window. 1613 1635 … … 1715 1737 for (Window* modal = frontmost; modal != NULL; modal = nextModal) { 1716 1738 // get the next modal window 1717 1739 nextModal = modal->NextWindow(fCurrentWorkspace); 1718 while (nextModal != NULL && !nextModal->IsModal()) {1740 while (nextModal != NULL && !nextModal->IsModal()) 1719 1741 nextModal = nextModal->NextWindow(fCurrentWorkspace); 1720 }1742 1721 1743 if (nextModal != NULL && !nextModal->HasInSubset(window)) 1722 1744 nextModal = NULL; 1723 1745 … … 1768 1790 MarkDirty(dirty); 1769 1791 1770 1792 _UpdateFronts(); 1771 SetFocusWindow(fSettings->FocusFollowsMouse() ? 1772 WindowAt(fLastMousePosition) : NULL); 1793 if (fSettings->MouseMode() == B_FOCUS_FOLLOWS_MOUSE) 1794 SetFocusWindow(WindowAt(fLastMousePosition)); 1795 else 1796 SetFocusWindow(NULL); 1773 1797 1774 1798 bool sendFakeMouseMoved = false; 1775 1799 if (FocusWindow() != window) -
src/servers/app/DefaultDecorator.cpp
13 13 14 14 #include "DefaultDecorator.h" 15 15 16 #include <new> 17 #include <stdio.h> 18 19 #include <Autolock.h> 20 #include <GradientLinear.h> 21 #include <Rect.h> 22 #include <View.h> 23 24 #include <WindowPrivate.h> 25 16 26 #include "BitmapDrawingEngine.h" 17 27 #include "DesktopSettings.h" 18 28 #include "DrawingEngine.h" … … 21 31 #include "PatternHandler.h" 22 32 #include "ServerBitmap.h" 23 33 24 #include <WindowPrivate.h>25 34 26 #include <Autolock.h>27 #include <GradientLinear.h>28 #include <Rect.h>29 #include <View.h>30 31 #include <new>32 #include <stdio.h>33 34 35 //#define DEBUG_DECORATOR 35 36 #ifdef DEBUG_DECORATOR 36 37 # define STRACE(x) printf x … … 574 575 // NOTE: On R5, windows are not moved to back if clicked inside the 575 576 // resize area with the second mouse button. So we check this after 576 577 // the check above 577 if ( buttons == B_SECONDARY_MOUSE_BUTTON)578 if ((buttons & B_SECONDARY_MOUSE_BUTTON) != 0) 578 579 return DEC_MOVETOBACK; 579 580 580 581 if (fWasDoubleClick && !(fFlags & B_NOT_MINIMIZABLE)) -
src/servers/app/DesktopSettingsPrivate.h
11 11 12 12 13 13 #include "DesktopSettings.h" 14 #include "ServerFont.h"15 14 16 15 #include <Locker.h> 17 16 17 #include "ServerFont.h" 18 19 18 20 struct server_read_only_memory; 19 21 20 22 … … 43 45 44 46 void SetMouseMode(mode_mouse mode); 45 47 mode_mouse MouseMode() const; 48 void SetFocusFollowsMouseMode(mode_focus_follows_mouse mode); 49 mode_focus_follows_mouse FocusFollowsMouseMode() const; 46 50 bool FocusFollowsMouse() const; 51 void SetAcceptFirstClick(bool accept_first_click); 52 bool AcceptFirstClick() const; 47 53 48 54 void SetShowAllDraggers(bool show); 49 55 bool ShowAllDraggers() const; … … 81 87 scroll_bar_info fScrollBarInfo; 82 88 menu_info fMenuInfo; 83 89 mode_mouse fMouseMode; 90 mode_focus_follows_mouse fFocusFollowsMouseMode; 91 bool fAcceptFirstClick; 84 92 bool fShowAllDraggers; 85 93 int32 fWorkspacesCount; 86 94 BMessage fWorkspaceMessages[kMaxWorkspaces]; -
src/servers/input/MouseSettings.cpp
15 15 // 16 16 // ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 17 17 18 19 #include "MouseSettings.h" 20 21 #include <stdio.h> 22 18 23 #include <FindDirectory.h> 19 24 #include <File.h> 20 25 #include <Path.h> 21 26 #include <View.h> 22 27 23 #include <stdio.h>24 28 25 #include "MouseSettings.h"26 27 29 static const bigtime_t kDefaultClickSpeed = 500000; 28 30 static const int32 kDefaultMouseSpeed = 65536; 29 31 static const int32 kDefaultMouseType = 3; // 3 button mouse 30 32 static const int32 kDefaultAccelerationFactor = 65536; 33 static const bool kDefaultAcceptFirstClick = false; 31 34 32 35 36 33 37 MouseSettings::MouseSettings() 34 38 { 35 39 Defaults(); … … 41 45 42 46 fOriginalSettings = fSettings; 43 47 fOriginalMode = fMode; 48 fOriginalFocusFollowsMouseMode = fFocusFollowsMouseMode; 49 fOriginalAcceptFirstClick = fAcceptFirstClick; 44 50 } 45 51 46 52 … … 68 74 // retrieve current values 69 75 70 76 fMode = mouse_mode(); 77 fAcceptFirstClick = accept_first_click(); 71 78 Defaults(); 72 79 73 80 // also try to load the window position from disk … … 128 135 file.Write(&fSettings, sizeof(fSettings)); 129 136 #endif 130 137 131 // who is responsible for saving the mouse mode ?138 // who is responsible for saving the mouse mode and accept_first_click? 132 139 133 140 return B_OK; 134 141 } … … 148 155 char *mode = "unknown"; 149 156 switch (fMode) { 150 157 case B_NORMAL_MOUSE: 151 mode = " normal";158 mode = "activate"; 152 159 break; 160 case B_CLICK_TO_FOCUS_MOUSE: 161 mode = "focus"; 162 break; 153 163 case B_FOCUS_FOLLOWS_MOUSE: 154 mode = " focus follows mouse";164 mode = "auto-focus"; 155 165 break; 156 case B_WARP_MOUSE: 157 mode = "warp mouse"; 166 } 167 printf("mouse mode:\t%s\n", mode); 168 169 char *focus_follows_mouse_mode = "unknown"; 170 switch (fMode) { 171 case B_NORMAL_FOCUS_FOLLOWS_MOUSE: 172 focus_follows_mouse_mode = "normal"; 158 173 break; 159 case B_ INSTANT_WARP_MOUSE:160 mode = "instant warp mouse";174 case B_WARP_FOCUS_FOLLOWS_MOUSE: 175 focus_follows_mouse_mode = "warp"; 161 176 break; 177 case B_INSTANT_WARP_FOCUS_FOLLOWS_MOUSE: 178 focus_follows_mouse_mode = "instant warp"; 179 break; 162 180 } 163 printf("mode:\t\t%s\n", mode); 181 printf("focus follows mouse mode:\t%s\n", focus_follows_mouse_mode); 182 printf("accept first click:\t%s\n", fAcceptFirstClick ? "enabled" : "disabled"); 164 183 } 165 184 #endif 166 185 … … 176 195 SetMouseType(kDefaultMouseType); 177 196 SetAccelerationFactor(kDefaultAccelerationFactor); 178 197 SetMouseMode(B_NORMAL_MOUSE); 198 SetFocusFollowsMouseMode(B_NORMAL_FOCUS_FOLLOWS_MOUSE); 199 SetAcceptFirstClick(kDefaultAcceptFirstClick); 179 200 180 201 fSettings.map.button[0] = B_PRIMARY_MOUSE_BUTTON; 181 202 fSettings.map.button[1] = B_SECONDARY_MOUSE_BUTTON; … … 253 274 fMode = mode; 254 275 } 255 276 277 278 void 279 MouseSettings::SetFocusFollowsMouseMode(mode_focus_follows_mouse mode) 280 { 281 fFocusFollowsMouseMode = mode; 282 } 283 284 285 void 286 MouseSettings::SetAcceptFirstClick(bool accept_first_click) 287 { 288 fAcceptFirstClick = accept_first_click; 289 } 290 291 -
src/servers/input/MouseSettings.h
18 18 #ifndef MOUSE_SETTINGS_H_ 19 19 #define MOUSE_SETTINGS_H_ 20 20 21 #include <SupportDefs.h>22 21 #include <InterfaceDefs.h> 23 22 #include <kb_mouse_settings.h> 23 #include <Path.h> 24 #include <SupportDefs.h> 24 25 25 26 26 27 class MouseSettings { … … 51 52 mode_mouse MouseMode() const { return fMode; } 52 53 void SetMouseMode(mode_mouse mode); 53 54 55 mode_focus_follows_mouse FocusFollowsMouseMode() const { return fFocusFollowsMouseMode; } 56 void SetFocusFollowsMouseMode(mode_focus_follows_mouse mode); 57 58 bool AcceptFirstClick() const { return fAcceptFirstClick; } 59 void SetAcceptFirstClick(bool accept_first_click); 60 54 61 status_t SaveSettings(); 55 62 56 63 private: … … 59 66 60 67 mouse_settings fSettings, fOriginalSettings; 61 68 mode_mouse fMode, fOriginalMode; 69 mode_focus_follows_mouse fFocusFollowsMouseMode, fOriginalFocusFollowsMouseMode; 70 bool fAcceptFirstClick, fOriginalAcceptFirstClick; 62 71 }; 63 72 64 73 #endif -
src/kits/app/Application.cpp
1420 1420 void 1421 1421 BApplication::_ArgvReceived(BMessage *message) 1422 1422 { 1423 ASSERT( message != NULL);1423 ASSERT((const char*)message != NULL); 1424 1424 1425 1425 // build the argv vector 1426 1426 status_t error = B_OK; -
src/kits/interface/InterfaceDefs.cpp
10 10 11 11 /*! Global functions and variables for the Interface Kit */ 12 12 13 #include <InterfaceDefs.h> 13 14 #include <InterfacePrivate.h> 14 15 15 16 #include <stdio.h> … … 18 19 19 20 #include <ControlLook.h> 20 21 #include <Font.h> 21 #include <InterfaceDefs.h>22 22 #include <Menu.h> 23 23 #include <Roster.h> 24 24 #include <ScrollBar.h> … … 817 817 set_focus_follows_mouse(bool follow) 818 818 { 819 819 // obviously deprecated API 820 set_mouse_mode(B_ WARP_MOUSE);820 set_mouse_mode(B_FOCUS_FOLLOWS_MOUSE); 821 821 } 822 822 823 823 824 824 bool 825 825 focus_follows_mouse() 826 826 { 827 return mouse_mode() != B_NORMAL_MOUSE;827 return mouse_mode() == B_FOCUS_FOLLOWS_MOUSE; 828 828 } 829 829 830 830 … … 841 841 mode_mouse 842 842 mouse_mode() 843 843 { 844 // Gets the focus-follows-mouse style, such as normal, B_WARP_MOUSE, etc.844 // Gets the mouse focus style, such as activate to click, focus to click, ... 845 845 mode_mouse mode = B_NORMAL_MOUSE; 846 846 847 847 BPrivate::AppServerLink link; … … 855 855 } 856 856 857 857 858 void 859 set_focus_follows_mouse_mode(mode_focus_follows_mouse mode) 860 { 861 BPrivate::AppServerLink link; 862 link.StartMessage(AS_SET_FOCUS_FOLLOWS_MOUSE_MODE); 863 link.Attach<mode_focus_follows_mouse>(mode); 864 link.Flush(); 865 } 866 867 868 mode_focus_follows_mouse 869 focus_follows_mouse_mode() 870 { 871 mode_focus_follows_mouse mode = B_NORMAL_FOCUS_FOLLOWS_MOUSE; 872 873 BPrivate::AppServerLink link; 874 link.StartMessage(AS_GET_FOCUS_FOLLOWS_MOUSE_MODE); 875 876 int32 code; 877 if (link.FlushWithReply(code) == B_OK && code == B_OK) 878 link.Read<mode_focus_follows_mouse>(&mode); 879 880 return mode; 881 } 882 883 884 void 885 set_accept_first_click(bool accept_first_click) 886 { 887 BPrivate::AppServerLink link; 888 link.StartMessage(AS_SET_ACCEPT_FIRST_CLICK); 889 link.Attach<bool>(accept_first_click); 890 link.Flush(); 891 } 892 893 894 bool 895 accept_first_click() 896 { 897 // Gets the accept first click status 898 bool accept_first_click = false; 899 900 BPrivate::AppServerLink link; 901 link.StartMessage(AS_GET_ACCEPT_FIRST_CLICK); 902 903 int32 code; 904 if (link.FlushWithReply(code) == B_OK && code == B_OK) 905 link.Read<bool>(&accept_first_click); 906 907 return accept_first_click; 908 } 909 858 910 rgb_color 859 911 ui_color(color_which which) 860 912 { -
src/kits/interface/Region.cpp
121 121 \return \ctrue if the two regions are the same, \cfalse otherwise. 122 122 */ 123 123 bool 124 BRegion::operator==(const BRegion &other) const124 BRegion::operator==(const BRegion &other) const 125 125 { 126 126 if (&other == this) 127 127 return true; -
src/kits/interface/MenuBar.cpp
23 23 #include <binary_compatibility/Interface.h> 24 24 #include <MenuPrivate.h> 25 25 #include <TokenSpace.h> 26 #include <InterfaceDefs.h> 26 27 27 28 #include "BMCPrivate.h" 28 29 … … 225 226 if (fTracking) 226 227 return; 227 228 229 uint32 buttons; 230 GetMouse(&where, &buttons); 231 228 232 BWindow *window = Window(); 229 233 if (!window->IsActive() || !window->IsFront()) { 230 window->Activate(); 231 window->UpdateIfNeeded(); 234 if ((mouse_mode() == B_FOCUS_FOLLOWS_MOUSE) 235 || ((mouse_mode() == B_CLICK_TO_FOCUS_MOUSE) 236 && ((buttons & B_SECONDARY_MOUSE_BUTTON) != 0))) { 237 window->Activate(); 238 window->UpdateIfNeeded(); 239 } 232 240 } 233 241 234 242 StartMenuBar(-1, false, false); -
headers/build/os/interface/InterfaceDefs.h
315 315 316 316 enum mode_mouse { 317 317 B_NORMAL_MOUSE = 0, 318 B_FOCUS_FOLLOWS_MOUSE = 1, 319 B_WARP_MOUSE = 3, 320 B_INSTANT_WARP_MOUSE = 7 318 B_CLICK_TO_FOCUS_MOUSE = -1, 319 B_FOCUS_FOLLOWS_MOUSE = 1 321 320 }; 322 321 323 _IMPEXP_BE void set_mouse_mode(mode_mouse mode); 324 _IMPEXP_BE mode_mouse mouse_mode(); 322 enum mode_focus_follows_mouse { 323 B_NORMAL_FOCUS_FOLLOWS_MOUSE = 0, 324 B_WARP_FOCUS_FOLLOWS_MOUSE = 1, 325 B_INSTANT_WARP_FOCUS_FOLLOWS_MOUSE = 2 326 }; 325 327 328 _IMPEXP_BE void set_mouse_mode(mode_mouse mode); 329 _IMPEXP_BE mode_mouse mouse_mode(); 330 331 _IMPEXP_BE void set_focus_follows_mouse_mode(mode_focus_follows_mouse mode); 332 _IMPEXP_BE mode_focus_follows_mouse focus_follows_mouse_mode(); 333 334 _IMPEXP_BE void set_accept_first_click(bool accept_first_click); 335 _IMPEXP_BE bool accept_first_click(); 336 326 337 enum color_which { 327 338 B_PANEL_BACKGROUND_COLOR = 1, 328 339 B_PANEL_TEXT_COLOR = 10, -
headers/build/os/interface/Region.h
31 31 BRegion(const BRect rect); 32 32 virtual ~BRegion(); 33 33 34 BRegion &operator=(const BRegion &from); 34 BRegion &operator=(const BRegion &from); 35 bool operator==(const BRegion& other) const; 35 36 36 37 void Set(BRect newBounds); 37 38 void Set(clipping_rect newBounds); -
headers/build/private/app/ServerProtocol.h
192 192 AS_RUN_BE_ABOUT, 193 193 AS_SET_MOUSE_MODE, 194 194 AS_GET_MOUSE_MODE, 195 AS_SET_FOCUS_FOLLOWS_MOUSE_MODE, 196 AS_GET_FOCUS_FOLLOWS_MOUSE_MODE, 197 AS_SET_ACCEPT_FIRST_CLICK, 198 AS_GET_ACCEPT_FIRST_CLICK, 195 199 196 200 // Hook function messages 197 201 AS_WORKSPACE_ACTIVATED, -
headers/os/interface/InterfaceDefs.h
164 164 165 165 enum mode_mouse { 166 166 B_NORMAL_MOUSE = 0, 167 B_FOCUS_FOLLOWS_MOUSE = 1, 168 B_WARP_MOUSE = 3, 169 B_INSTANT_WARP_MOUSE = 7 167 B_CLICK_TO_FOCUS_MOUSE = -1, 168 B_FOCUS_FOLLOWS_MOUSE = 1 170 169 }; 171 170 171 enum mode_focus_follows_mouse { 172 B_NORMAL_FOCUS_FOLLOWS_MOUSE = 0, 173 B_WARP_FOCUS_FOLLOWS_MOUSE = 1, 174 B_INSTANT_WARP_FOCUS_FOLLOWS_MOUSE = 2 175 }; 172 176 177 173 178 // View orientation/alignment/style 174 179 175 180 enum border_style { … … 376 381 void set_mouse_mode(mode_mouse mode); 377 382 mode_mouse mouse_mode(); 378 383 384 void set_focus_follows_mouse_mode(mode_focus_follows_mouse mode); 385 mode_focus_follows_mouse focus_follows_mouse_mode(); 386 387 void set_accept_first_click(bool accept_first_click); 388 bool accept_first_click(); 389 379 390 rgb_color ui_color(color_which which); 380 391 void set_ui_color(const color_which& which, const rgb_color& color); 381 392 rgb_color tint_color(rgb_color color, float tint); -
headers/private/app/ServerProtocol.h
186 186 AS_IDLE_TIME, 187 187 AS_SET_MOUSE_MODE, 188 188 AS_GET_MOUSE_MODE, 189 AS_SET_FOCUS_FOLLOWS_MOUSE_MODE, 190 AS_GET_FOCUS_FOLLOWS_MOUSE_MODE, 191 AS_SET_ACCEPT_FIRST_CLICK, 192 AS_GET_ACCEPT_FIRST_CLICK, 189 193 AS_GET_MOUSE, 190 194 AS_SET_DECORATOR_SETTINGS, 191 195 AS_GET_DECORATOR_SETTINGS,