Ticket #8555: 0001-Ticket-8555-Underline-links-on-mouse-over.-B_UNDERSC.patch

File 0001-Ticket-8555-Underline-links-on-mouse-over.-B_UNDERSC.patch, 4.3 KB (added by sambuddhabasu1, 9 years ago)

B_ITALIC_FACE has been used in place of B_UNDERSCORE_FACE

  • src/apps/aboutsystem/HyperTextView.cpp

    From 54bd905223bac1b9f94868e2fc14c9644b840d89 Mon Sep 17 00:00:00 2001
    From: Sambuddha Basu <sambuddhabasu1@gmail.com>
    Date: Tue, 3 Feb 2015 03:29:32 +0530
    Subject: [PATCH] Ticket 8555 - Underline links on mouse over.
     B_UNDERSCORE_FACE is not implemented so currently, B_ITALIC_FACE has been
     used
    
    ---
     src/apps/aboutsystem/HyperTextView.cpp | 52 ++++++++++++++++++++++++++++------
     src/apps/aboutsystem/HyperTextView.h   |  6 ++++
     2 files changed, 50 insertions(+), 8 deletions(-)
    
    diff --git a/src/apps/aboutsystem/HyperTextView.cpp b/src/apps/aboutsystem/HyperTextView.cpp
    index d1bc4e6..a9fd9ab 100644
    a b HyperTextAction::~HyperTextAction()  
    2727
    2828
    2929void
    30 HyperTextAction::MouseOver(HyperTextView* view, BPoint where, BMessage* message)
     30HyperTextAction::MouseOver(HyperTextView* view, BPoint where, int32 startOffset,
     31        int32 endOffset, BMessage* message)
    3132{
    3233    BCursor linkCursor(B_CURSOR_ID_FOLLOW_LINK);
    3334    view->SetViewCursor(&linkCursor);
     35
     36    BFont font;
     37    view->GetFont(&font);
     38    font.SetFace(B_ITALIC_FACE);
     39    view->SetFontAndColor(startOffset, endOffset, &font);
     40}
     41
     42
     43void
     44HyperTextAction::MouseAway(HyperTextView* view, BPoint where, int32 startOffset,
     45        int32 endOffset, BMessage* message)
     46{
     47    BFont font(be_plain_font);
     48    view->SetFontAndColor(startOffset, endOffset, &font);
    3449}
    3550
    3651
    HyperTextView::HyperTextView(const char* name, uint32 flags)  
    92107    BTextView(name, flags),
    93108    fActionInfos(new ActionInfoList(100, true))
    94109{
     110    this->fLastActionInfo = NULL;
    95111}
    96112
    97113
    HyperTextView::HyperTextView(BRect frame, const char* name, BRect textRect,  
    101117    BTextView(frame, name, textRect, resizeMask, flags),
    102118    fActionInfos(new ActionInfoList(100, true))
    103119{
     120    this->fLastActionInfo = NULL;
    104121}
    105122
    106123
    HyperTextView::MouseMoved(BPoint where, uint32 transit,  
    140157
    141158    uint32 buttons;
    142159    HyperTextAction* action;
     160    const ActionInfo* actionInfo;
     161    if ((actionInfo = this->fLastActionInfo) != NULL
     162        && (action = actionInfo->action) != NULL) {
     163        action->MouseAway(this, where, actionInfo->startOffset,
     164                actionInfo->endOffset, message);
     165        this->fLastActionInfo = NULL;
     166    }
     167
    143168    if (message->FindInt32("buttons", (int32*)&buttons) == B_OK
    144         && buttons == 0 && (action = _ActionAt(where)) != NULL) {
    145         action->MouseOver(this, where, message);
     169        && buttons == 0 && (action = _ActionAt(where)) != NULL
     170        && (actionInfo = _ActionInfoAt(where)) != NULL) {
     171        this->fLastActionInfo = actionInfo;
     172        action->MouseOver(this, where, actionInfo->startOffset,
     173                actionInfo->endOffset, message);
    146174        return;
    147175    }
    148176
    HyperTextView::InsertHyperText(const char* inText, int32 inLength,  
    193221HyperTextAction*
    194222HyperTextView::_ActionAt(const BPoint& where) const
    195223{
    196     int32 offset = OffsetAt(where);
    197 
    198     ActionInfo pointer(offset, offset + 1, NULL);
     224    const ActionInfo* action = _ActionInfoAt(where);
    199225
    200     const ActionInfo* action = fActionInfos->BinarySearch(pointer,
    201             ActionInfo::CompareEqualIfIntersecting);
    202226    if (action != NULL) {
    203227        // verify that the text region was hit
    204228        BRegion textRegion;
    HyperTextView::_ActionAt(const BPoint& where) const  
    210234    return NULL;
    211235}
    212236
     237
     238const HyperTextView::ActionInfo*
     239HyperTextView::_ActionInfoAt(const BPoint& where) const
     240{
     241    int32 offset = OffsetAt(where);
     242
     243    ActionInfo pointer(offset, offset + 1, NULL);
     244
     245    const ActionInfo* action = fActionInfos->BinarySearch(pointer,
     246            ActionInfo::CompareEqualIfIntersecting);
     247    return action;
     248}
  • src/apps/aboutsystem/HyperTextView.h

    diff --git a/src/apps/aboutsystem/HyperTextView.h b/src/apps/aboutsystem/HyperTextView.h
    index b9d6c2a..9724f11 100644
    a b public:  
    2121    virtual                     ~HyperTextAction();
    2222
    2323    virtual void                MouseOver(HyperTextView* view, BPoint where,
     24                                    int32 startOffset, int32 endOffset,
     25                                    BMessage* message);
     26    void                    MouseAway(HyperTextView* view, BPoint where,
     27                                    int32 startOffset, int32 endOffset,
    2428                                    BMessage* message);
    2529    virtual void                Clicked(HyperTextView* view, BPoint where,
    2630                                    BMessage* message);
    private:  
    5963            class ActionInfoList;
    6064
    6165            ActionInfoList*     fActionInfos;
     66            const ActionInfo*   _ActionInfoAt(const BPoint& where) const;
     67            const ActionInfo*   fLastActionInfo;
    6268};
    6369
    6470