diff --git a/application/views/CayaRenderView.cpp b/application/views/CayaRenderView.cpp index 27a44b4..8f106d8 100644 --- a/application/views/CayaRenderView.cpp +++ b/application/views/CayaRenderView.cpp @@ -15,11 +15,6 @@ CayaRenderView::CayaRenderView(const char *name, const char* smileyConfig) PrepareTheme(fTheme); - SetViewColor(245, 245, 245, 0); - SetLowColor(245, 245, 245, 0); - SetHighColor(0, 0, 0, 0); - - SetTimeStampFormat(NULL); if ( IsHidden() ) Show(); @@ -28,22 +23,17 @@ CayaRenderView::CayaRenderView(const char *name, const char* smileyConfig) void -CayaRenderView::AppendOtherMessage(const char* otherNick, const char* message) +CayaRenderView::AppendMessage(const char* nick, const char* message, + rgb_color nameColor) { - Append(otherNick, COL_OTHERNICK, COL_OTHERNICK, R_TEXT); - Append(": ", COL_OTHERNICK, COL_OTHERNICK, R_TEXT); - AddEmoticText(message, COL_TEXT, R_TEXT, COL_TEXT,R_EMOTICON); - Append("\n", COL_TEXT, COL_TEXT, R_TEXT); - ScrollToSelection(); -} + rgb_color bg = ui_color(B_PANEL_BACKGROUND_COLOR); + rgb_color fg = ui_color(B_PANEL_TEXT_COLOR); - -void -CayaRenderView::AppendOwnMessage(const char* message) -{ - Append("You: ", COL_OWNNICK, COL_OWNNICK, R_TEXT); - AddEmoticText(message, COL_TEXT, R_TEXT,COL_TEXT,R_EMOTICON); - Append("\n", COL_TEXT, COL_TEXT, R_TEXT); + Append(nick, nameColor, bg, nameColor); + Append(": ", nameColor, bg, nameColor); +// AddEmoticText(message, fg, bg); + Append(message, fg, bg, fg); + Append("\n", fg, bg, fg); ScrollToSelection(); } @@ -51,18 +41,21 @@ CayaRenderView::AppendOwnMessage(const char* message) void CayaRenderView::AppendGenericMessage(const char* message) { - Append(message, COL_TEXT, COL_TEXT, R_TEXT); + rgb_color bg = ui_color(B_PANEL_BACKGROUND_COLOR); + rgb_color fg = ui_color(B_PANEL_TEXT_COLOR); + + Append(message, fg, bg, fg); ScrollToSelection(); } void -CayaRenderView::AddEmoticText(const char * txt, int16 cols , int16 font , int16 cols2 , int16 font2) +CayaRenderView::AddEmoticText(const char * txt, rgb_color fore, rgb_color bg) { if (CayaPreferences::Item()->IgnoreEmoticons) - Append(txt,cols,cols,font); + Append(txt, fore, bg, fore); else - Emoticor::Get()->AddText(this, txt, cols, font, cols2, font2); + Emoticor::Get()->AddText(this, txt, fore, fore, bg, fore); } diff --git a/application/views/CayaRenderView.h b/application/views/CayaRenderView.h index b902da4..c5850d6 100644 --- a/application/views/CayaRenderView.h +++ b/application/views/CayaRenderView.h @@ -37,10 +37,9 @@ class CayaRenderView : public RunView public: CayaRenderView(const char* name, const char* smileyConfig = NULL); - void AppendOtherMessage(const char* otherNick, const char* message); - void AppendOwnMessage(const char* message); + void AppendMessage(const char* nick, const char* message, rgb_color nameColor); void AppendGenericMessage(const char* message); - void AddEmoticText(const char * txt, int16 cols , int16 font , int16 cols2 , int16 font2); + void AddEmoticText(const char * txt, rgb_color fore, rgb_color bg); protected: void PrepareTheme(Theme* theme); diff --git a/application/views/ConversationView.cpp b/application/views/ConversationView.cpp index d3e48ea..62d731a 100644 --- a/application/views/ConversationView.cpp +++ b/application/views/ConversationView.cpp @@ -306,18 +306,21 @@ ConversationView::_AppendMessage(BMessage* msg) for (int i = bodies.CountStrings(); i >= 0; i--) { User* sender = fConversation->UserById(users.StringAt(i)); - BString sender_name; + BString sender_name = users.StringAt(i); BString body = bodies.StringAt(i); + rgb_color userColor = ui_color(B_PANEL_TEXT_COLOR); - if (sender != NULL) + if (sender != NULL) { sender_name = sender->GetName(); + userColor = sender->fItemColor; + } if (sender_name.IsEmpty() == true) { fReceiveView->AppendGenericMessage(body.String()); continue; } - fReceiveView->AppendOtherMessage(sender_name.String(), body.String()); + fReceiveView->AppendMessage(sender_name.String(), body.String(), userColor); } } diff --git a/libs/librunview/Emoticor.cpp b/libs/librunview/Emoticor.cpp index 65c8ac0..0759cf1 100644 --- a/libs/librunview/Emoticor.cpp +++ b/libs/librunview/Emoticor.cpp @@ -4,6 +4,7 @@ #include #include "string.h" + static Emoticor* fInstance = NULL; @@ -16,38 +17,44 @@ Emoticor::Get() return fInstance; } + Emoticor::Emoticor() { fInstance = NULL; fConfig = NULL; } + Emoticor::~Emoticor() { if (fConfig) delete fConfig; } + Emoconfig* Emoticor::Config() { return fConfig; } + void Emoticor::LoadConfig(const char* txt) { fConfig = new Emoconfig(txt); } + void -Emoticor::_findTokens(RunView* fTextView, BString text, int tokenstart, int16 cols , int16 font , int16 cols2 , int16 font2) +Emoticor::_findTokens(RunView* fTextView, BString text, int tokenstart, + rgb_color cols, rgb_color font, rgb_color cols2, + rgb_color font2) { //****************************************** // "Iteration is human, recursion is divine" //****************************************** - int32 newindex = 0; BString cur; int i = tokenstart; @@ -82,7 +89,8 @@ Emoticor::_findTokens(RunView* fTextView, BString text, int tokenstart, int16 co //printf("remaning [%s] printed [%s]\n",text.String(),cur->original.String()); - fTextView->Append(cur.String(), cols2, cols2, font2); +// fTextView->Append(cur.String(), cols2, cols2, font2); +// TODO if (text.Length() == 0) return; //useless stack } else @@ -92,12 +100,14 @@ Emoticor::_findTokens(RunView* fTextView, BString text, int tokenstart, int16 co } } - fTextView->Append(text.String(), cols, cols, font); - +// fTextView->Append(text.String(), cols, cols, font); +// TODO } + void -Emoticor::AddText(RunView* fTextView, const char* txt, int16 cols , int16 font , int16 cols2 , int16 font2 ) +Emoticor::AddText(RunView* fTextView, const char* txt, rgb_color cols, + rgb_color font, rgb_color cols2, rgb_color font2) { BString left(txt); @@ -111,3 +121,4 @@ Emoticor::AddText(RunView* fTextView, const char* txt, int16 cols , int16 font } + diff --git a/libs/librunview/Emoticor.h b/libs/librunview/Emoticor.h index 796ebfb..d5cacfc 100644 --- a/libs/librunview/Emoticor.h +++ b/libs/librunview/Emoticor.h @@ -13,7 +13,8 @@ public: static Emoticor* Get(); //singleton - void AddText(RunView* fTextView, const char* text, int16 cols , int16 font , int16 cols2 , int16 font2 ); + void AddText(RunView* fTextView, const char* text, rgb_color cols, + rgb_color font, rgb_color cols2, rgb_color font2); void LoadConfig(const char*); Emoconfig* Config(); @@ -23,7 +24,9 @@ public: private: Emoticor(); Emoconfig* fConfig; - void _findTokens(RunView* fTextView, BString text, int tokenstart, int16 cols , int16 font , int16 cols2 , int16 font2); + void _findTokens(RunView* fTextView, BString text, int tokenstart, + rgb_color cols, rgb_color font, rgb_color cols2, + rgb_color font2); }; diff --git a/libs/librunview/RunView.cpp b/libs/librunview/RunView.cpp index f6763c4..7f383a6 100644 --- a/libs/librunview/RunView.cpp +++ b/libs/librunview/RunView.cpp @@ -106,6 +106,7 @@ struct FontColor { int fOffset; int fWhich; int fIndex; + rgb_color fColor; }; @@ -128,16 +129,18 @@ struct Line { int fSoftie_used; Line(const char* buffer, int fLength, float top, float width, Theme* fTheme, - const char* fStamp_format, int fore, int back, int font); + const char* fStamp_format, rgb_color fore, rgb_color back, rgb_color font); ~Line (); void Append(const char* buffer, int len, float width, - Theme* fTheme, int fore, int back, int font); + Theme* fTheme, rgb_color fore, rgb_color back, + rgb_color font); void FigureSpaces(); - void FigureFontColors(int pos, int fore, int back, int font); + void FigureFontColors(int pos, rgb_color fore, rgb_color back, + rgb_color font); void FigureEdges(Theme* fTheme, float width); void SoftBreaks(Theme* fTheme, float width); void AddSoftBreak(SoftBreakEnd, float&, int&, int16&, float&, @@ -267,18 +270,18 @@ RunView::Draw(BRect frame) Window()->BeginViewTransaction(); rgb_color low_color, hi_color, view_color, sel_color, sel_fText; - float height (frame.bottom); - BRect bounds (Bounds()); + float height(frame.bottom); + BRect bounds(Bounds()); BRegion clipper; - bool drawSelection (false); - bool checkSelection (fSp_start != fSp_end); + bool drawSelection(false); + bool checkSelection(fSp_start != fSp_end); clipper.Set (frame); ConstrainClippingRegion (&clipper); fTheme->ReadLock(); - view_color = fTheme->BackgroundAt (Theme::NormalBack); - sel_color = fTheme->BackgroundAt (Theme::SelectionBack); + view_color = fTheme->BackgroundAt(Theme::NormalBack); + sel_color = fTheme->BackgroundAt(Theme::SelectionBack); if (((sel_color.red + sel_color.blue + sel_color.green) / 3) >= 127) { sel_fText.red = sel_fText.green = sel_fText.blue = 0; @@ -301,7 +304,7 @@ RunView::Draw(BRect frame) } for (int i = fLine_count - 1; i >= 0; --i) { - Line* line (fLines[i]); + Line* line(fLines[i]); if (line->fBottom < frame.top) break; @@ -346,7 +349,7 @@ RunView::Draw(BRect frame) if (line->fFcs[fore].fOffset > place) break; - hi_color = fTheme->ForegroundAt(line->fFcs[fore].fIndex); + hi_color = line->fFcs[fore].fColor; } ++fore; @@ -358,8 +361,7 @@ RunView::Draw(BRect frame) if (line->fFcs[back].fOffset > place) break; - low_color = fTheme->BackgroundAt( - line->fFcs[back].fIndex); + low_color = line->fFcs[back].fColor; } ++back; @@ -1234,26 +1236,22 @@ RunView::RecalcScrollBar(bool constrain) void -RunView::Append(const char* buffer, int fore, int back, int font) +RunView::Append(const char* buffer, rgb_color fore, rgb_color back, + rgb_color font) { Append(buffer, strlen(buffer), fore, back, font); } void -RunView::Append(const char* buffer, int32 len, int fore, int back, int font) +RunView::Append(const char* buffer, int32 len, rgb_color fore, rgb_color back, + rgb_color font) { if (buffer == NULL) return; float width(Bounds().Width() - 10); int32 place(0); - assert(back != Theme::TimestampBack); - assert(font != Theme::TimestampFont); - assert(back != Theme::TimespaceBack); - assert(font != Theme::TimespaceFont); - assert(back != Theme::SelectionBack); - fTheme->ReadLock(); while (place < len) { @@ -1276,15 +1274,15 @@ RunView::Append(const char* buffer, int32 len, int fore, int back, int font) width, fTheme, fore, back, font); fWorking->Append(temp.String(), temp.Length(), width, fTheme, - C_URL, back, F_URL); + ui_color(B_LINK_TEXT_COLOR), back, fore); place += (url_offset - last_offset) + temp.Length(); last_offset = url_offset + temp.Length(); } if (place < end) - fWorking->Append(buffer + place, end - place, width, - fTheme, fore, back, font); + fWorking->Append(buffer + place, end - place, width, fTheme, + fore, back, font); } else { float top(0.0); @@ -1304,8 +1302,8 @@ RunView::Append(const char* buffer, int32 len, int fore, int back, int font) while ((url_offset = crunch.Crunch(&temp)) != B_ERROR) { fWorking->Append(buffer + place, (url_offset - last_offset), width, fTheme, fore, back, font); - fWorking->Append(temp.String(), temp.Length(), - width, fTheme, C_URL, back, F_URL); + fWorking->Append(temp.String(), temp.Length(), width, fTheme, + ui_color(B_LINK_TEXT_COLOR), back, fore); place += (url_offset - last_offset) + temp.Length(); last_offset = url_offset + temp.Length(); @@ -1747,27 +1745,27 @@ void RunView::ScrollToSelection() Line::Line(const char* buffer, int len, float top, float width, Theme* theme, - const char* stamp_format, int fore, int back, int font) + const char* stamp_format, rgb_color fore, rgb_color back, rgb_color font) : - fText (NULL), - fStamp (time(NULL)), - fUrls (NULL), - fSpaces (NULL), - fEdges (NULL), - fFcs (NULL), - fSofties (NULL), - fTop (top), - fBottom (0.0), - fLength (len), - fSpace_count (0), - fEdge_count (0), - fFc_count (0), - fSoftie_size (0), - fSoftie_used (0) + fText(NULL), + fStamp(time(NULL)), + fUrls(NULL), + fSpaces(NULL), + fEdges(NULL), + fFcs(NULL), + fSofties(NULL), + fTop(top), + fBottom(0.0), + fLength(len), + fSpace_count(0), + fEdge_count(0), + fFc_count(0), + fSoftie_size(0), + fSoftie_used(0) { // Very important to call SetStamp before Append, It would look real funny otherwise! SetStamp(stamp_format, false ); - Append(buffer, len, width, theme, fore, back, font ); + Append(buffer, len, width, theme, fore, back, font); } @@ -1789,7 +1787,7 @@ Line::~Line() void Line::Append(const char* buffer, int len, float width, Theme* theme, - int fore, int back, int font) + rgb_color fore, rgb_color back, rgb_color font) { int save (fLength); char* new_fText; @@ -1816,9 +1814,9 @@ Line::Append(const char* buffer, int len, float width, Theme* theme, fText = new_fText; - FigureFontColors (save, fore, back, font); + FigureFontColors(save, fore, back, font); - if (fore == C_URL) { + if (fore == ui_color(B_LINK_TEXT_COLOR)) { if (!fUrls) fUrls = new urllist; fUrls->AddItem (new URL (buffer, save, len)); @@ -1857,7 +1855,7 @@ Line::FigureSpaces() void -Line::FigureFontColors(int pos, int fore, int back, int font) +Line::FigureFontColors(int pos, rgb_color fore, rgb_color back, rgb_color font) { if (fFc_count) { int last_fore = -1; @@ -1867,56 +1865,51 @@ Line::FigureFontColors(int pos, int fore, int back, int font) // we have fFcs, so we backtrack for last of each fWhich for (i = fFc_count - 1; i >= 0; --i) { - if (last_fore < 0 - && fFcs[i].fWhich == FORE_WHICH) + if (last_fore < 0 && fFcs[i].fWhich == FORE_WHICH) last_fore = i; - else if (last_back < 0 - && fFcs[i].fWhich == BACK_WHICH) + else if (last_back < 0 && fFcs[i].fWhich == BACK_WHICH) last_back = i; - else if (last_font < 0 - && fFcs[i].fWhich == FONT_WHICH) + else if (last_font < 0 && fFcs[i].fWhich == FONT_WHICH) last_font = i; - if (last_fore >= 0 - && last_back >= 0 - && last_font >= 0) + if (last_fore >= 0 && last_back >= 0 && last_font >= 0) break; } // now figure out how many more we need int16 count = 0; - if (fFcs[last_fore].fIndex != fore) + if (fFcs[last_fore].fColor != fore) ++count; - if (fFcs[last_back].fIndex != back) + if (fFcs[last_back].fColor != back) ++count; - if (fFcs[last_font].fIndex != font) + if (fFcs[last_font].fColor != font) ++count; if (count) { FontColor* new_fFcs; - new_fFcs = new FontColor [fFc_count + count]; + new_fFcs = new FontColor[fFc_count + count]; memcpy (new_fFcs, fFcs, fFc_count * sizeof (FontColor)); delete [] fFcs; fFcs = new_fFcs; - if (fFcs[last_fore].fIndex != fore) { + if (fFcs[last_fore].fColor != fore) { fFcs[fFc_count].fWhich = FORE_WHICH; fFcs[fFc_count].fOffset = pos; - fFcs[fFc_count].fIndex = fore; + fFcs[fFc_count].fColor = fore; ++fFc_count; } - if (fFcs[last_back].fIndex != back) { + if (fFcs[last_back].fColor != back) { fFcs[fFc_count].fWhich = BACK_WHICH; fFcs[fFc_count].fOffset = pos; - fFcs[fFc_count].fIndex = back; + fFcs[fFc_count].fColor = back; ++fFc_count; } - if (fFcs[last_font].fIndex != font) { + if (fFcs[last_font].fColor != font) { fFcs[fFc_count].fWhich = FONT_WHICH; fFcs[fFc_count].fOffset = pos; - fFcs[fFc_count].fIndex = font; + fFcs[fFc_count].fColor = font; ++fFc_count; } } @@ -1924,13 +1917,13 @@ Line::FigureFontColors(int pos, int fore, int back, int font) fFcs = new FontColor [fFc_count = 3]; fFcs[0].fWhich = FORE_WHICH; fFcs[0].fOffset = 0; - fFcs[0].fIndex = fore; + fFcs[0].fColor = fore; fFcs[1].fWhich = BACK_WHICH; fFcs[1].fOffset = 0; - fFcs[1].fIndex = back; + fFcs[1].fColor = back; fFcs[2].fWhich = FONT_WHICH; fFcs[2].fOffset = 0; - fFcs[2].fIndex = font; + fFcs[2].fColor = font; } } @@ -1988,7 +1981,7 @@ Line::FigureEdges(Theme* theme, float width) seglen = fFcs[next_fFcs].fOffset - fFcs[cur_fFcs].fOffset; } - // const BFont &f (theme->FontAt (fFcs[cur_font].fIndex)); + // const BFont &f (theme->FontAt (fFcs[cur_font].fIndex)) TextRender* tr = theme->TextRenderAt (fFcs[cur_font].fIndex); #ifdef __INTEL__ diff --git a/libs/librunview/RunView.h b/libs/librunview/RunView.h index ed2b169..0c6baf6 100644 --- a/libs/librunview/RunView.h +++ b/libs/librunview/RunView.h @@ -158,8 +158,8 @@ public: virtual void MouseUp (BPoint); - void Append (const char*, int32, int, int, int); - void Append (const char*, int, int, int); + void Append (const char*, int32, rgb_color, rgb_color, rgb_color); + void Append (const char*, rgb_color, rgb_color, rgb_color); void Clear (void);