diff --git a/src/add-ons/kernel/drivers/midi/usb_midi/usb_midi.cpp b/src/add-ons/kernel/drivers/midi/usb_midi/usb_midi.cpp index 5656fec2c8..2fac0eec80 100644 --- a/src/add-ons/kernel/drivers/midi/usb_midi/usb_midi.cpp +++ b/src/add-ons/kernel/drivers/midi/usb_midi/usb_midi.cpp @@ -646,10 +646,19 @@ usb_midi_write(driver_cookie* cookie, off_t position, DPRINTF_DEBUG((MY_ID "MIDI write (%" B_PRIuSIZE " bytes at %" B_PRIdOFF ")\n", *num_bytes, position)); - if (*num_bytes > 3 && midicode != 0xF0) { - DPRINTF_ERR((MY_ID "Non-SysEx packet of %ld bytes" - " -- too big to handle\n", *num_bytes)); - return B_ERROR; + // Make sure we always write exactly one MIDI event at a time. + // SysEx can be of arbitrary sizes, for all others, we check that the + // complete event was passed in and do not use more than that. + // TODO add a loop to allow writing multiple events in a single write() + // call if desired. + if (midicode != 0xF0) { + if ((int)*num_bytes < CINbytes[cin]) { + DPRINTF_ERR((MY_ID "Expected %d bytes for MIDI command %" B_PRIu8 + " but got only %" B_PRIuSIZE ".\n", CINbytes[cin], cin, + *num_bytes)); + return B_BAD_DATA; + } + *num_bytes = CINbytes[cin]; } size_t bytes_left = *num_bytes; diff --git a/src/kits/interface/InterfaceDefs.cpp b/src/kits/interface/InterfaceDefs.cpp index 1e5c38c1bc..c57ea8893e 100644 --- a/src/kits/interface/InterfaceDefs.cpp +++ b/src/kits/interface/InterfaceDefs.cpp @@ -1109,7 +1109,7 @@ bool accept_first_click() { // Gets the accept first click status - bool acceptFirstClick = false; + bool acceptFirstClick = true; BPrivate::AppServerLink link; link.StartMessage(AS_GET_ACCEPT_FIRST_CLICK); diff --git a/src/kits/interface/ScrollBar.cpp b/src/kits/interface/ScrollBar.cpp index 963d7beffe..2ad9d659d8 100644 --- a/src/kits/interface/ScrollBar.cpp +++ b/src/kits/interface/ScrollBar.cpp @@ -411,20 +411,26 @@ BScrollBar::Draw(BRect updateRect) rect.left + rect.Height(), rect.bottom); be_control_look->DrawScrollBarButton(this, buttonFrame, updateRect, - base, flags, BControlLook::B_LEFT_ARROW, fOrientation, + base, flags | (fPrivateData->fButtonDown == ARROW1 + ? BControlLook::B_ACTIVATED : 0), + BControlLook::B_LEFT_ARROW, fOrientation, fPrivateData->fButtonDown == ARROW1); if (doubleArrows) { buttonFrame.OffsetBy(rect.Height() + 1, 0.0f); - be_control_look->DrawScrollBarButton(this, buttonFrame, - updateRect, base, flags, BControlLook::B_RIGHT_ARROW, - fOrientation, fPrivateData->fButtonDown == ARROW2); + be_control_look->DrawScrollBarButton(this, buttonFrame, updateRect, + base, flags | (fPrivateData->fButtonDown == ARROW2 + ? BControlLook::B_ACTIVATED : 0), + BControlLook::B_RIGHT_ARROW, fOrientation, + fPrivateData->fButtonDown == ARROW2); buttonFrame.OffsetTo(rect.right - ((rect.Height() * 2) + 1), rect.top); - be_control_look->DrawScrollBarButton(this, buttonFrame, - updateRect, base, flags, BControlLook::B_LEFT_ARROW, - fOrientation, fPrivateData->fButtonDown == ARROW3); + be_control_look->DrawScrollBarButton(this, buttonFrame, updateRect, + base, flags | (fPrivateData->fButtonDown == ARROW3 + ? BControlLook::B_ACTIVATED : 0), + BControlLook::B_LEFT_ARROW, fOrientation, + fPrivateData->fButtonDown == ARROW3); thumbBG.left += rect.Height() * 2 + 2; thumbBG.right -= rect.Height() * 2 + 2; @@ -435,27 +441,35 @@ BScrollBar::Draw(BRect updateRect) buttonFrame.OffsetTo(rect.right - rect.Height(), rect.top); be_control_look->DrawScrollBarButton(this, buttonFrame, updateRect, - base, flags, BControlLook::B_RIGHT_ARROW, fOrientation, + base, flags | (fPrivateData->fButtonDown == ARROW4 + ? BControlLook::B_ACTIVATED : 0), + BControlLook::B_RIGHT_ARROW, fOrientation, fPrivateData->fButtonDown == ARROW4); } else { BRect buttonFrame(rect.left, rect.top, rect.right, rect.top + rect.Width()); be_control_look->DrawScrollBarButton(this, buttonFrame, updateRect, - base, flags, BControlLook::B_UP_ARROW, fOrientation, + base, flags | (fPrivateData->fButtonDown == ARROW1 + ? BControlLook::B_ACTIVATED : 0), + BControlLook::B_UP_ARROW, fOrientation, fPrivateData->fButtonDown == ARROW1); if (doubleArrows) { buttonFrame.OffsetBy(0, rect.Width() + 1); be_control_look->DrawScrollBarButton(this, buttonFrame, - updateRect, base, flags, BControlLook::B_DOWN_ARROW, - fOrientation, fPrivateData->fButtonDown == ARROW2); + updateRect, base, flags | (fPrivateData->fButtonDown == ARROW2 + ? BControlLook::B_ACTIVATED : 0), + BControlLook::B_DOWN_ARROW, fOrientation, + fPrivateData->fButtonDown == ARROW2); buttonFrame.OffsetTo(rect.left, rect.bottom - ((rect.Width() * 2) + 1)); be_control_look->DrawScrollBarButton(this, buttonFrame, - updateRect, base, flags, BControlLook::B_UP_ARROW, - fOrientation, fPrivateData->fButtonDown == ARROW3); + updateRect, base, flags | (fPrivateData->fButtonDown == ARROW3 + ? BControlLook::B_ACTIVATED : 0), + BControlLook::B_UP_ARROW, fOrientation, + fPrivateData->fButtonDown == ARROW3); thumbBG.top += rect.Width() * 2 + 2; thumbBG.bottom -= rect.Width() * 2 + 2; @@ -466,7 +480,9 @@ BScrollBar::Draw(BRect updateRect) buttonFrame.OffsetTo(rect.left, rect.bottom - rect.Width()); be_control_look->DrawScrollBarButton(this, buttonFrame, updateRect, - base, flags, BControlLook::B_DOWN_ARROW, fOrientation, + base, flags | (fPrivateData->fButtonDown == ARROW4 + ? BControlLook::B_ACTIVATED : 0), + BControlLook::B_DOWN_ARROW, fOrientation, fPrivateData->fButtonDown == ARROW4); } diff --git a/src/preferences/appearance/FakeScrollBar.cpp b/src/preferences/appearance/FakeScrollBar.cpp index e8a792928e..6d218f96e8 100644 --- a/src/preferences/appearance/FakeScrollBar.cpp +++ b/src/preferences/appearance/FakeScrollBar.cpp @@ -48,99 +48,78 @@ FakeScrollBar::~FakeScrollBar(void) void FakeScrollBar::Draw(BRect updateRect) { - BRect bounds = Bounds(); + rgb_color base = ui_color(B_PANEL_BACKGROUND_COLOR); - rgb_color normal = ui_color(B_PANEL_BACKGROUND_COLOR); + uint32 flags = BControlLook::B_PARTIALLY_ACTIVATED; - if (IsFocus()) { - // draw the focus indicator - SetHighColor(ui_color(B_NAVIGATION_BASE_COLOR)); - StrokeRect(bounds); - bounds.InsetBy(1.0, 1.0); + if (Value() == B_CONTROL_ON) + SetHighColor(ui_color(B_CONTROL_MARK_COLOR)); + else + SetHighColor(base); - // Draw the selected border (1px) - if (Value() == B_CONTROL_ON) - SetHighColor(ui_color(B_CONTROL_MARK_COLOR)); - else - SetHighColor(normal); + BRect rect(Bounds()); - StrokeRect(bounds); - bounds.InsetBy(1.0, 1.0); - } else { - // Draw the selected border (2px) - if (Value() == B_CONTROL_ON) - SetHighColor(ui_color(B_CONTROL_MARK_COLOR)); - else - SetHighColor(normal); + // draw the selected border (2px) + StrokeRect(rect); + rect.InsetBy(1, 1); + StrokeRect(rect); + rect.InsetBy(1, 1); - StrokeRect(bounds); - bounds.InsetBy(1.0, 1.0); - StrokeRect(bounds); - bounds.InsetBy(1.0, 1.0); + // draw a 1px gap + SetHighColor(base); + StrokeRect(rect); + rect.InsetBy(1, 1); + + // draw a 1px border around the entire scroll bar + be_control_look->DrawScrollBarBorder(this, rect, updateRect, base, flags, + B_HORIZONTAL); + + // inset past border + rect.InsetBy(1, 1); + + // draw arrow buttons + if (fDrawArrows) { + BRect buttonFrame(rect.left, rect.top, rect.left + rect.Height(), + rect.bottom); + be_control_look->DrawScrollBarButton(this, buttonFrame, updateRect, + base, flags, BControlLook::B_LEFT_ARROW, B_HORIZONTAL); + if (fDoubleArrows) { + buttonFrame.OffsetBy(rect.Height() + 1, 0.0f); + be_control_look->DrawScrollBarButton(this, buttonFrame, + updateRect, base, flags, BControlLook::B_RIGHT_ARROW, + B_HORIZONTAL); + buttonFrame.OffsetTo(rect.right - ((rect.Height() * 2) + 1), + rect.top); + be_control_look->DrawScrollBarButton(this, buttonFrame, + updateRect, base, flags, BControlLook::B_LEFT_ARROW, + B_HORIZONTAL); + } + buttonFrame.OffsetTo(rect.right - rect.Height(), rect.top); + be_control_look->DrawScrollBarButton(this, buttonFrame, updateRect, + base, flags, BControlLook::B_RIGHT_ARROW, B_HORIZONTAL); } - // draw a gap (1px) - SetHighColor(normal); - StrokeRect(bounds); - bounds.InsetBy(1.0, 1.0); - - // draw a border around control (1px) - SetHighColor(tint_color(normal, B_DARKEN_1_TINT)); - StrokeRect(bounds); - bounds.InsetBy(1.0, 1.0); - - BRect thumbBG = bounds; - BRect bgRect = bounds; - + // inset rect to make room for arrows if (fDrawArrows) { - // draw arrows - SetDrawingMode(B_OP_OVER); + if (fDoubleArrows) + rect.InsetBy((rect.Height() + 1) * 2, 0.0f); + else + rect.InsetBy(rect.Height() + 1, 0.0f); + } - BRect buttonFrame(bounds.left, bounds.top, - bounds.left + bounds.Height(), bounds.bottom); - - _DrawArrowButton(ARROW_LEFT, buttonFrame, updateRect); - - if (fDoubleArrows) { - buttonFrame.OffsetBy(bounds.Height() + 1, 0.0); - _DrawArrowButton(ARROW_RIGHT, buttonFrame, - updateRect); - - buttonFrame.OffsetTo(bounds.right - ((bounds.Height() * 2) + 1), - bounds.top); - _DrawArrowButton(ARROW_LEFT, buttonFrame, - updateRect); - - thumbBG.left += bounds.Height() * 2 + 2; - thumbBG.right -= bounds.Height() * 2 + 2; - } else { - thumbBG.left += bounds.Height() + 1; - thumbBG.right -= bounds.Height() + 1; - } - - buttonFrame.OffsetTo(bounds.right - bounds.Height(), bounds.top); - _DrawArrowButton(ARROW_RIGHT, buttonFrame, updateRect); - - SetDrawingMode(B_OP_COPY); - - bgRect = bounds.InsetByCopy(48, 0); - } else - bgRect = bounds.InsetByCopy(16, 0); - - // fill background besides the thumb - BRect leftOfThumb(thumbBG.left, thumbBG.top, bgRect.left - 1, - thumbBG.bottom); - BRect rightOfThumb(bgRect.right + 1, thumbBG.top, thumbBG.right, - thumbBG.bottom); + // draw background and thumb + float less = floorf(rect.Width() / 3); + BRect thumbRect(rect.left + less, rect.top, rect.right - less, + rect.bottom); + BRect leftOfThumb(rect.left, thumbRect.top, thumbRect.left - 1, + thumbRect.bottom); + BRect rightOfThumb(thumbRect.right + 1, thumbRect.top, rect.right, + thumbRect.bottom); be_control_look->DrawScrollBarBackground(this, leftOfThumb, - rightOfThumb, updateRect, normal, 0, B_HORIZONTAL); - - // Draw scroll thumb - - // fill the clickable surface of the thumb - be_control_look->DrawButtonBackground(this, bgRect, updateRect, - normal, 0, BControlLook::B_ALL_BORDERS, B_HORIZONTAL); + rightOfThumb, updateRect, base, flags, B_HORIZONTAL); + be_control_look->DrawScrollBarThumb(this, thumbRect, updateRect, + ui_color(B_SCROLL_BAR_THUMB_COLOR), flags, B_HORIZONTAL, fKnobStyle); } diff --git a/src/preferences/input/InputMouse.cpp b/src/preferences/input/InputMouse.cpp index ac9583a7c5..6a015e8c21 100644 --- a/src/preferences/input/InputMouse.cpp +++ b/src/preferences/input/InputMouse.cpp @@ -40,7 +40,7 @@ static const bigtime_t kDefaultClickSpeed = 500000; static const int32 kDefaultMouseSpeed = 65536; static const int32 kDefaultMouseType = 3; // 3 button mouse static const int32 kDefaultAccelerationFactor = 65536; -static const bool kDefaultAcceptFirstClick = false; +static const bool kDefaultAcceptFirstClick = true; InputMouse::InputMouse(BInputDevice* dev)