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

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

Underline links on mouse over. B_UNDERSCORE_FACE is not implemented so B_ITALIC_FACE has been used on mouse over. Coding guidelines have been followed

  • src/apps/aboutsystem/HyperTextView.cpp

    From 86286ac373c9d3e1ec36638a973a16007e4d4479 Mon Sep 17 00:00:00 2001
    From: Sambuddha Basu <sambuddhabasu1@gmail.com>
    Date: Wed, 4 Feb 2015 15:11:24 +0530
    Subject: [PATCH] Ticket 8555 Underline links on mouse over. B_UNDERSCORE_FACE
     is not implemented so B_ITALIC_FACE has been used
    
    Made required changes according to the coding guidelines
    ---
     src/apps/aboutsystem/HyperTextView.cpp | 60 +++++++++++++++++++++++++++++-----
     src/apps/aboutsystem/HyperTextView.h   |  7 ++++
     2 files changed, 58 insertions(+), 9 deletions(-)
    
    diff --git a/src/apps/aboutsystem/HyperTextView.cpp b/src/apps/aboutsystem/HyperTextView.cpp
    index d1bc4e6..f7a0fc3 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, B_FONT_FACE);
     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, B_FONT_FACE);
    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;
    143     if (message->FindInt32("buttons", (int32*)&buttons) == B_OK
    144         && buttons == 0 && (action = _ActionAt(where)) != NULL) {
    145         action->MouseOver(this, where, message);
    146         return;
     160    const ActionInfo* actionInfo;
     161    actionInfo = this->fLastActionInfo;
     162    if (actionInfo != NULL) {
     163        action = actionInfo->action;
     164        if (action != NULL) {
     165            action->MouseAway(this, where, actionInfo->startOffset,
     166                    actionInfo->endOffset, message);
     167            this->fLastActionInfo = NULL;
     168        }
     169    }
     170
     171    actionInfo = _ActionInfoAt(where);
     172    if (actionInfo != NULL) {
     173        action = actionInfo->action;
     174        if (message->FindInt32("buttons", (int32*)&buttons) == B_OK
     175                && buttons == 0 && action != NULL) {
     176            this->fLastActionInfo = actionInfo;
     177            action->MouseOver(this, where, actionInfo->startOffset,
     178                    actionInfo->endOffset, message);
     179            return;
     180        }
    147181    }
    148182
    149183    BTextView::MouseMoved(where, transit, dragMessage);
    HyperTextView::InsertHyperText(const char* inText, int32 inLength,  
    190224}
    191225
    192226
    193 HyperTextAction*
    194 HyperTextView::_ActionAt(const BPoint& where) const
     227const HyperTextView::ActionInfo*
     228HyperTextView::_ActionInfoAt(const BPoint& where) const
    195229{
    196230    int32 offset = OffsetAt(where);
    197231
    198232    ActionInfo pointer(offset, offset + 1, NULL);
    199233
    200     const ActionInfo* action = fActionInfos->BinarySearch(pointer,
     234    const ActionInfo* action = fActionInfos->BinarySearch(pointer,
    201235            ActionInfo::CompareEqualIfIntersecting);
     236    return action;
     237}
     238
     239
     240HyperTextAction*
     241HyperTextView::_ActionAt(const BPoint& where) const
     242{
     243    const ActionInfo* action = _ActionInfoAt(where);
     244
    202245    if (action != NULL) {
    203246        // verify that the text region was hit
    204247        BRegion textRegion;
    HyperTextView::_ActionAt(const BPoint& where) const  
    209252
    210253    return NULL;
    211254}
    212 
  • src/apps/aboutsystem/HyperTextView.h

    diff --git a/src/apps/aboutsystem/HyperTextView.h b/src/apps/aboutsystem/HyperTextView.h
    index b9d6c2a..0d8e66d 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:  
    5862            struct ActionInfo;
    5963            class ActionInfoList;
    6064
     65            const ActionInfo*   _ActionInfoAt(const BPoint& where) const;
     66
    6167            ActionInfoList*     fActionInfos;
     68            const ActionInfo*   fLastActionInfo;
    6269};
    6370
    6471