(librunview) Init new RenderView/RunView
Base-level replacement of the Vision-derived text RunView― a couple important features supported by the replacee haven't been implemented yet, including: * Right-click menu * URL-highlighting/selection * Emote support
This commit is contained in:
parent
7f30571703
commit
e760818007
|
@ -1,116 +1,54 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2021, Jaidyn Levesque <jadedctrl@teknik.io>
|
||||||
|
* All rights reserved. Distributed under the terms of the MIT license.
|
||||||
|
*/
|
||||||
|
|
||||||
#include "RenderView.h"
|
#include "RenderView.h"
|
||||||
|
|
||||||
#include <librunview/RunView.h>
|
#include <InterfaceDefs.h>
|
||||||
#include <librunview/Theme.h>
|
|
||||||
|
|
||||||
#include "AppPreferences.h"
|
|
||||||
|
|
||||||
|
|
||||||
RenderView::RenderView(const char *name, const char* smileyConfig)
|
RenderView::RenderView(const char* name)
|
||||||
:
|
:
|
||||||
RunView(BRect(0, 0, 1, 1), name,
|
RunView(name)
|
||||||
fTheme = new Theme(name, COL_MAX_COLORS + 1, COL_MAX_COLORS + 1,
|
|
||||||
MAX_RENDERS + 1),
|
|
||||||
B_FOLLOW_ALL, B_WILL_DRAW)
|
|
||||||
{
|
{
|
||||||
if (smileyConfig)
|
|
||||||
Emoticor::Get()->LoadConfig(smileyConfig);
|
|
||||||
|
|
||||||
PrepareTheme(fTheme);
|
|
||||||
|
|
||||||
SetTimeStampFormat("[%H:%M]");
|
|
||||||
if ( IsHidden() )
|
|
||||||
Show();
|
|
||||||
ScrollToBottom();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
RenderView::AppendMessage(const char* nick, const char* message,
|
RenderView::AppendMessage(const char* nick, const char* message,
|
||||||
rgb_color nameColor, time_t time)
|
rgb_color nameColor, time_t time)
|
||||||
{
|
{
|
||||||
rgb_color bg = ui_color(B_PANEL_BACKGROUND_COLOR);
|
if (BString(message).IsEmpty() == true) return;
|
||||||
rgb_color fg = ui_color(B_PANEL_TEXT_COLOR);
|
|
||||||
|
|
||||||
Append("<", nameColor, bg, nameColor, time);
|
AppendTimestamp(time);
|
||||||
Append(nick, fg, bg, fg);
|
Append("<", nameColor);
|
||||||
Append("> ", nameColor, bg, nameColor);
|
Append(nick);
|
||||||
if (Emoticor::Get()->Config() == NULL)
|
Append("> ", nameColor);
|
||||||
Append(message, fg, bg, fg);
|
Append(message);
|
||||||
else
|
|
||||||
AddEmoticText(message, fg, bg);
|
if (BString(message).EndsWith("\n") == false) Append("\n");
|
||||||
Append("\n", fg, bg, fg);
|
|
||||||
ScrollToSelection();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
RenderView::AppendGenericMessage(const char* message)
|
RenderView::AppendGenericMessage(const char* message)
|
||||||
{
|
{
|
||||||
rgb_color bg = ui_color(B_PANEL_BACKGROUND_COLOR);
|
if (BString(message).IsEmpty() == true) return;
|
||||||
rgb_color fg = ui_color(B_PANEL_TEXT_COLOR);
|
AppendTimestamp(time(NULL));
|
||||||
|
Append(message, ui_color(B_PANEL_TEXT_COLOR), B_BOLD_FACE);
|
||||||
Append(message, fg, bg, fg, time(NULL));
|
if (BString(message).EndsWith("\n") == false) Append("\n");
|
||||||
ScrollToSelection();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
RenderView::AddEmoticText(const char * txt, rgb_color fore, rgb_color bg)
|
RenderView::AppendTimestamp(time_t time)
|
||||||
{
|
{
|
||||||
if (AppPreferences::Item()->IgnoreEmoticons)
|
if (time == 0) {
|
||||||
Append(txt, fore, bg, fore);
|
Append("[xx:xx] ", ui_color(B_LINK_HOVER_COLOR));
|
||||||
else
|
return;
|
||||||
Emoticor::Get()->AddText(this, txt, fore, fore, bg, fore);
|
}
|
||||||
|
char timestamp[9] = { '\0' };
|
||||||
|
strftime(timestamp, 8, "[%H:%M] ", localtime(&time));
|
||||||
|
Append(timestamp, ui_color(B_LINK_HOVER_COLOR));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
RenderView::PrepareTheme(Theme *fTheme)
|
|
||||||
{
|
|
||||||
Theme::TimestampFore = COL_TIMESTAMP_DUMMY;
|
|
||||||
Theme::TimestampBack = COL_TIMESTAMP_DUMMY;
|
|
||||||
Theme::TimespaceFore = COL_MAX_COLORS;
|
|
||||||
Theme::TimespaceBack = COL_MAX_COLORS;
|
|
||||||
Theme::TimespaceFont = MAX_RENDERS;
|
|
||||||
Theme::TimestampFont = R_TIMESTAMP_DUMMY;
|
|
||||||
Theme::NormalFore = COL_TEXT;
|
|
||||||
Theme::NormalBack = COL_TEXT;
|
|
||||||
Theme::NormalFont = R_TEXT;
|
|
||||||
Theme::SelectionBack = COL_SELECTION;
|
|
||||||
|
|
||||||
fTheme->WriteLock();
|
|
||||||
rgb_color bg = ui_color(B_PANEL_BACKGROUND_COLOR);
|
|
||||||
rgb_color fg = ui_color(B_PANEL_TEXT_COLOR);
|
|
||||||
|
|
||||||
fTheme->SetForeground(COL_URL, ui_color(B_LINK_TEXT_COLOR));
|
|
||||||
fTheme->SetBackground(COL_URL, bg);
|
|
||||||
|
|
||||||
fTheme->SetForeground(COL_TIMESTAMP, fg);
|
|
||||||
fTheme->SetBackground(COL_TIMESTAMP, bg);
|
|
||||||
|
|
||||||
fTheme->SetForeground(COL_TEXT, fg);
|
|
||||||
fTheme->SetBackground(COL_TEXT, bg);
|
|
||||||
|
|
||||||
fTheme->SetForeground(COL_ACTION, fg);
|
|
||||||
fTheme->SetBackground(COL_ACTION, bg);
|
|
||||||
|
|
||||||
fTheme->SetForeground(COL_SELECTION, ui_color(B_MENU_SELECTED_ITEM_TEXT_COLOR));
|
|
||||||
fTheme->SetBackground(COL_SELECTION, ui_color(B_MENU_SELECTED_BACKGROUND_COLOR));
|
|
||||||
|
|
||||||
fTheme->SetForeground(COL_OWNNICK, 0, 0, 255);
|
|
||||||
fTheme->SetBackground(COL_OWNNICK, bg);
|
|
||||||
|
|
||||||
fTheme->SetForeground(COL_OTHERNICK, 255, 0, 0);
|
|
||||||
fTheme->SetBackground(COL_OTHERNICK, bg);
|
|
||||||
|
|
||||||
if (Emoticor::Get()->Config() != NULL)
|
|
||||||
fTheme->SetTextRender(R_EMOTICON, &str);
|
|
||||||
|
|
||||||
fTheme->SetSoftLineIndent(5.0);
|
|
||||||
fTheme->SetTextMargin(5.0);
|
|
||||||
|
|
||||||
fTheme->WriteUnlock();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,54 +1,21 @@
|
||||||
#ifndef _RenderView_H
|
/*
|
||||||
#define _RenderView_H_
|
* Copyright 2021, Jaidyn Levesque <jadedctrl@teknik.io>
|
||||||
|
* All rights reserved. Distributed under the terms of the MIT license.
|
||||||
|
*/
|
||||||
|
#ifndef _RENDER_VIEW_H
|
||||||
|
#define _RENDER_VIEW_H
|
||||||
|
|
||||||
#include <librunview/RunView.h>
|
#include <librunview/RunView.h>
|
||||||
|
|
||||||
#include <librunview/SmileTextRender.h>
|
|
||||||
|
|
||||||
class RunView;
|
class RenderView : public RunView {
|
||||||
class Theme;
|
public:
|
||||||
|
RenderView(const char* name);
|
||||||
|
|
||||||
|
|
||||||
enum RenderViewColors {
|
|
||||||
COL_URL = 0,
|
|
||||||
COL_TIMESTAMP,
|
|
||||||
COL_TEXT,
|
|
||||||
COL_OWNNICK,
|
|
||||||
COL_OTHERNICK,
|
|
||||||
COL_ACTION,
|
|
||||||
COL_SELECTION,
|
|
||||||
COL_TIMESTAMP_DUMMY,
|
|
||||||
COL_MAX_COLORS
|
|
||||||
};
|
|
||||||
|
|
||||||
enum {
|
|
||||||
R_URL = 0,
|
|
||||||
R_TEXT,
|
|
||||||
R_TIMESTAMP,
|
|
||||||
R_ACTION,
|
|
||||||
R_EMOTICON,
|
|
||||||
R_TIMESTAMP_DUMMY,
|
|
||||||
MAX_RENDERS
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
class RenderView : public RunView
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
RenderView(const char* name, const char* smileyConfig = NULL);
|
|
||||||
|
|
||||||
void AppendMessage(const char* nick, const char* message,
|
void AppendMessage(const char* nick, const char* message,
|
||||||
rgb_color nameColor, time_t time = 0);
|
rgb_color nameColor, time_t time = 0);
|
||||||
void AppendGenericMessage(const char* message);
|
void AppendGenericMessage(const char* message);
|
||||||
void AddEmoticText(const char * txt, rgb_color fore, rgb_color bg);
|
void AppendTimestamp(time_t time = 0);
|
||||||
|
|
||||||
protected:
|
|
||||||
void PrepareTheme(Theme* theme);
|
|
||||||
|
|
||||||
private:
|
|
||||||
Theme* fTheme;
|
|
||||||
SmileTextRender str;
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif // _RENDER_VIEW_H
|
||||||
|
|
|
@ -7,7 +7,6 @@
|
||||||
#include <String.h>
|
#include <String.h>
|
||||||
#include <Path.h>
|
#include <Path.h>
|
||||||
#include <TranslationUtils.h>
|
#include <TranslationUtils.h>
|
||||||
#include "SmileTextRender.h"
|
|
||||||
|
|
||||||
//tmp
|
//tmp
|
||||||
BMessage* faces = NULL;
|
BMessage* faces = NULL;
|
||||||
|
|
|
@ -32,10 +32,7 @@ APP_MIME_SIG =
|
||||||
# same name (source.c or source.cpp) are included from different directories.
|
# same name (source.c or source.cpp) are included from different directories.
|
||||||
# Also note that spaces in folder names do not work well with this Makefile.
|
# Also note that spaces in folder names do not work well with this Makefile.
|
||||||
SRCS = \
|
SRCS = \
|
||||||
libs/librunview/Theme.cpp \
|
|
||||||
libs/librunview/RunView.cpp \
|
libs/librunview/RunView.cpp \
|
||||||
libs/librunview/Utilities.cpp \
|
|
||||||
libs/librunview/URLCrunch.cpp \
|
|
||||||
libs/librunview/Emoticor.cpp \
|
libs/librunview/Emoticor.cpp \
|
||||||
libs/librunview/Emoconfig.cpp
|
libs/librunview/Emoconfig.cpp
|
||||||
|
|
||||||
|
|
|
@ -1,46 +0,0 @@
|
||||||
#ifndef _NormalTextRender_H_
|
|
||||||
#define _NormalTextRender_H_
|
|
||||||
|
|
||||||
#include "TextRender.h"
|
|
||||||
#include <Font.h>
|
|
||||||
#include <View.h>
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
class NormalTextRender : public TextRender
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
NormalTextRender(BFont f): TextRender() {
|
|
||||||
font = f;
|
|
||||||
}
|
|
||||||
virtual ~NormalTextRender() {};
|
|
||||||
|
|
||||||
virtual void Render(BView* target, const char* txt, int num, BPoint pos) {
|
|
||||||
|
|
||||||
target->SetFont(&font);
|
|
||||||
target->DrawString(txt, num, pos);
|
|
||||||
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
virtual float Size() {
|
|
||||||
return font.Size();
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual void GetHeight(font_height* height) {
|
|
||||||
font.GetHeight(height);
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
virtual void
|
|
||||||
GetEscapements(const char charArray[], int32 numChars, float escapementArray[]) {
|
|
||||||
font.GetEscapements(charArray, numChars, escapementArray);
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
BFont font;
|
|
||||||
|
|
||||||
};
|
|
||||||
#endif
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,187 +1,24 @@
|
||||||
/*
|
/*
|
||||||
* The contents of this file are subject to the Mozilla Public
|
* Copyright 2021, Jaidyn Levesque <jadedctrl@teknik.io>
|
||||||
* License Version 1.1 (the "License"); you may not use this file
|
* All rights reserved. Distributed under the terms of the MIT license.
|
||||||
* except in compliance with the License. You may obtain a copy of
|
|
||||||
* the License at http://www.mozilla.org/MPL/
|
|
||||||
*
|
|
||||||
* Software distributed under the License is distributed on an "AS
|
|
||||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
|
||||||
* implied. See the License for the specific language governing
|
|
||||||
* rights and limitations under the License.
|
|
||||||
*
|
|
||||||
* The Original Code is Vision.
|
|
||||||
*
|
|
||||||
* The Initial Developer of the Original Code is The Vision Team.
|
|
||||||
* Portions created by The Vision Team are
|
|
||||||
* Copyright (C) 1999, 2000, 2001 The Vision Team. All Rights
|
|
||||||
* Reserved.
|
|
||||||
*
|
|
||||||
* Contributor(s): Rene Gollent
|
|
||||||
* Todd Lair
|
|
||||||
*/
|
*/
|
||||||
|
#ifndef _RUN_VIEW_H
|
||||||
|
#define _RUN_VIEW_H
|
||||||
|
|
||||||
#ifndef RUNVIEW_H_
|
#include <TextView.h>
|
||||||
#define RUNVIEW_H_
|
|
||||||
|
|
||||||
#define LINE_COUNT 1000
|
|
||||||
|
|
||||||
#include <View.h>
|
class RunView : public BTextView {
|
||||||
|
|
||||||
const uint32 M_LOOKUP_WEBSTER = 'rvlw';
|
|
||||||
const uint32 M_LOOKUP_GOOGLE = 'rvlg';
|
|
||||||
const uint32 M_LOOKUP_ACRONYM = 'rvla';
|
|
||||||
const uint32 M_CLEAR = 'rvcl';
|
|
||||||
|
|
||||||
const uint32 M_OFFVIEW_SELECTION = 'rvos';
|
|
||||||
const uint32 M_THEME_FOREGROUND_CHANGE = 'rvtf';
|
|
||||||
const uint32 M_THEME_BACKGROUND_CHANGE = 'rvtb';
|
|
||||||
const uint32 M_THEME_FONT_CHANGE = 'rvto';
|
|
||||||
|
|
||||||
#define C_URL 0
|
|
||||||
#define F_URL 0
|
|
||||||
|
|
||||||
struct Line;
|
|
||||||
class Theme;
|
|
||||||
class RunView;
|
|
||||||
class BScrollView;
|
|
||||||
class BCursor;
|
|
||||||
class BMessageRunner;
|
|
||||||
class BPopUpMenu;
|
|
||||||
|
|
||||||
class SelectPos
|
|
||||||
{
|
|
||||||
public:
|
public:
|
||||||
|
RunView(const char* name);
|
||||||
|
|
||||||
int fLine;
|
void Append(const char* text, rgb_color color,
|
||||||
int fOffset;
|
uint16 fontFace = B_REGULAR_FACE);
|
||||||
|
void Append(const char* text);
|
||||||
SelectPos (
|
|
||||||
int selLine = 0,
|
|
||||||
int selOffset = 0)
|
|
||||||
: fLine (selLine),
|
|
||||||
fOffset (selOffset)
|
|
||||||
{ }
|
|
||||||
|
|
||||||
SelectPos (const SelectPos& pos)
|
|
||||||
: fLine (pos.fLine),
|
|
||||||
fOffset (pos.fOffset)
|
|
||||||
{ }
|
|
||||||
|
|
||||||
~SelectPos (void)
|
|
||||||
{ }
|
|
||||||
|
|
||||||
SelectPos& operator = (const SelectPos& pos) {
|
|
||||||
fLine = pos.fLine;
|
|
||||||
fOffset = pos.fOffset;
|
|
||||||
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline int operator == (const SelectPos& rhs) const {
|
|
||||||
return ((fLine == rhs.fLine) && (fOffset == rhs.fOffset));
|
|
||||||
}
|
|
||||||
|
|
||||||
inline int operator != (const SelectPos& rhs) const {
|
|
||||||
return (!(*this == rhs));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool fLastStyled;
|
||||||
|
text_run_array fDefaultRun;
|
||||||
};
|
};
|
||||||
|
|
||||||
class RunView : public BView
|
#endif // _RUN_VIEW_H
|
||||||
{
|
|
||||||
BScrollView* fScroller;
|
|
||||||
BCursor* fURLCursor;
|
|
||||||
Theme* fTheme;
|
|
||||||
|
|
||||||
Line* fWorking;
|
|
||||||
Line* fLines[LINE_COUNT];
|
|
||||||
int16 fLine_count,
|
|
||||||
fClickCount;
|
|
||||||
|
|
||||||
char* fStamp_format;
|
|
||||||
char* fClipping_name;
|
|
||||||
|
|
||||||
SelectPos fSp_start, fSp_end;
|
|
||||||
|
|
||||||
int32 fTracking;
|
|
||||||
SelectPos fTrack_offset;
|
|
||||||
BMessageRunner* fOff_view_runner;
|
|
||||||
bigtime_t fOff_view_time;
|
|
||||||
|
|
||||||
bool fResizedirty;
|
|
||||||
bool fFontsdirty;
|
|
||||||
BPopUpMenu* fMyPopUp;
|
|
||||||
BPoint fLastClick;
|
|
||||||
bigtime_t fLastClickTime;
|
|
||||||
|
|
||||||
|
|
||||||
bool RecalcScrollBar (bool constrain);
|
|
||||||
void ResizeRecalc (void);
|
|
||||||
void FontChangeRecalc (void);
|
|
||||||
void ExtendTrackingSelect (BPoint);
|
|
||||||
void ShiftTrackingSelect (BPoint, bool, bigtime_t);
|
|
||||||
void CheckURLCursor (BPoint);
|
|
||||||
void BuildPopUp (void);
|
|
||||||
|
|
||||||
bool CheckClickBounds (const SelectPos&,
|
|
||||||
const BPoint&) const;
|
|
||||||
void LoadURL(const char* url);
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
RunView (
|
|
||||||
BRect,
|
|
||||||
const char*,
|
|
||||||
Theme*,
|
|
||||||
uint32 = B_FOLLOW_LEFT | B_FOLLOW_TOP,
|
|
||||||
uint32 = 0UL);
|
|
||||||
virtual ~RunView (void);
|
|
||||||
|
|
||||||
virtual void AttachedToWindow (void);
|
|
||||||
virtual void DetachedFromWindow (void);
|
|
||||||
virtual void FrameResized (float, float);
|
|
||||||
virtual void TargetedByScrollView (BScrollView*);
|
|
||||||
virtual void Show ();
|
|
||||||
virtual void Draw (BRect);
|
|
||||||
virtual void MessageReceived (BMessage*);
|
|
||||||
|
|
||||||
virtual void SetViewColor (rgb_color);
|
|
||||||
void SetViewColor (uchar red, uchar green, uchar blue, uchar alpha = 255) {
|
|
||||||
rgb_color color = {red, green, blue, alpha};
|
|
||||||
SetViewColor (color);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
virtual void MouseDown (BPoint);
|
|
||||||
virtual void MouseMoved (BPoint, uint32, const BMessage*);
|
|
||||||
virtual void MouseUp (BPoint);
|
|
||||||
|
|
||||||
|
|
||||||
void Append (const char*, int32, rgb_color, rgb_color, rgb_color, time_t = 0);
|
|
||||||
void Append (const char*, rgb_color, rgb_color, rgb_color, time_t = 0);
|
|
||||||
|
|
||||||
void Clear (void);
|
|
||||||
|
|
||||||
int16 LineCount (void) const;
|
|
||||||
const char* LineAt (int) const;
|
|
||||||
|
|
||||||
void SetTimeStampFormat (const char*);
|
|
||||||
void SetTheme (Theme*);
|
|
||||||
|
|
||||||
SelectPos PositionAt (BPoint) const;
|
|
||||||
BPoint PointAt (SelectPos) const;
|
|
||||||
|
|
||||||
BRect GetTextFrame (const SelectPos&, const SelectPos&) const;
|
|
||||||
bool IntersectSelection (const SelectPos&, const SelectPos&) const;
|
|
||||||
void GetSelectionText (BString&) const;
|
|
||||||
void Select (const SelectPos&, const SelectPos&);
|
|
||||||
void SelectAll (void);
|
|
||||||
void SetClippingName (const char*);
|
|
||||||
bool FindText(const char*);
|
|
||||||
|
|
||||||
void ScrollToBottom(void);
|
|
||||||
void ScrollToSelection(void);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
|
@ -1,54 +0,0 @@
|
||||||
#ifndef _SmileTextRender_H_
|
|
||||||
#define _SmileTextRender_H_
|
|
||||||
|
|
||||||
#include <Font.h>
|
|
||||||
#include <View.h>
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <TranslationUtils.h>
|
|
||||||
#include <Resources.h>
|
|
||||||
#include <String.h>
|
|
||||||
|
|
||||||
#include <librunview/TextRender.h>
|
|
||||||
#include <librunview/Emoticor.h>
|
|
||||||
|
|
||||||
|
|
||||||
class SmileTextRender : public TextRender
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
SmileTextRender(): TextRender() {};
|
|
||||||
|
|
||||||
virtual ~SmileTextRender() {};
|
|
||||||
|
|
||||||
virtual void Render(BView* target, const char* txt, int num, BPoint pos) {
|
|
||||||
|
|
||||||
BBitmap* pointer = NULL;
|
|
||||||
BString f(txt, num);
|
|
||||||
|
|
||||||
if (Emoticor::Get()->Config()->FindPointer(f.String(), (void**)&pointer) == B_OK) {
|
|
||||||
target->SetDrawingMode( B_OP_ALPHA );
|
|
||||||
target->DrawBitmapAsync( pointer, BPoint(pos.x, pos.y - (Emoticor::Get()->Config()->GetEmoticonSize() / 2)) );
|
|
||||||
target->SetDrawingMode( B_OP_OVER );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
virtual float Size() {
|
|
||||||
printf("GETTING EMOTICOR SIZE!!!!\n");
|
|
||||||
return Emoticor::Get()->Config()->GetEmoticonSize();
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual void GetHeight(font_height* h) {
|
|
||||||
h->descent = h->ascent = Emoticor::Get()->Config()->GetEmoticonSize() / 2;
|
|
||||||
h->leading = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
virtual void
|
|
||||||
GetEscapements(const char * /*charArray*/, int32 numChars, float escapementArray[]) {
|
|
||||||
//font.GetEscapements(charArray,numChars,escapementArray);
|
|
||||||
escapementArray[0] = 1;
|
|
||||||
for (int i = 1; i < numChars; i++) escapementArray[i] = 0;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
#endif
|
|
|
@ -1,19 +0,0 @@
|
||||||
#ifndef _TextRender_H_
|
|
||||||
#define _TextRender_H_
|
|
||||||
|
|
||||||
#include <Font.h>
|
|
||||||
|
|
||||||
class TextRender
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
TextRender() {};
|
|
||||||
virtual ~TextRender() {};
|
|
||||||
|
|
||||||
virtual void Render(BView* target, const char*, int num, BPoint pos) = 0;
|
|
||||||
virtual void GetHeight(font_height* height) = 0;
|
|
||||||
virtual void GetEscapements(const char charArray[], int32 numChars, float escapementArray[]) = 0;
|
|
||||||
virtual float Size() = 0;
|
|
||||||
//
|
|
||||||
|
|
||||||
};
|
|
||||||
#endif
|
|
|
@ -1,279 +0,0 @@
|
||||||
/*
|
|
||||||
* The contents of this file are subject to the Mozilla Public
|
|
||||||
* License Version 1.1 (the "License"); you may not use this file
|
|
||||||
* except in compliance with the License. You may obtain a copy of
|
|
||||||
* the License at http://www.mozilla.org/MPL/
|
|
||||||
*
|
|
||||||
* Software distributed under the License is distributed on an "AS
|
|
||||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
|
||||||
* implied. See the License for the specific language governing
|
|
||||||
* rights and limitations under the License.
|
|
||||||
*
|
|
||||||
* The Original Code is Vision.
|
|
||||||
*
|
|
||||||
* The Initial Developer of the Original Code is The Vision Team.
|
|
||||||
* Portions created by The Vision Team are
|
|
||||||
* Copyright (C) 1999, 2000, 2001 The Vision Team. All Rights
|
|
||||||
* Reserved.
|
|
||||||
*
|
|
||||||
* Contributor(s): Rene Gollent
|
|
||||||
* Todd Lair
|
|
||||||
* Andrea Anzani, andrea.anzani@gmail.com
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define NUMBER_THEME_READERS 1000
|
|
||||||
|
|
||||||
#include <Message.h>
|
|
||||||
#include <Messenger.h>
|
|
||||||
#include <View.h>
|
|
||||||
#include <malloc.h>
|
|
||||||
#include <stdio.h> //fix
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#include "Theme.h"
|
|
||||||
#include "NormalTextRender.h"
|
|
||||||
|
|
||||||
int Theme::TimestampFore = 0;
|
|
||||||
int Theme::TimestampBack = 0;
|
|
||||||
int Theme::TimestampFont = 0;
|
|
||||||
int Theme::TimespaceFore = 1;
|
|
||||||
int Theme::TimespaceBack = 1;
|
|
||||||
int Theme::TimespaceFont = 1;
|
|
||||||
int Theme::NormalFore = 2;
|
|
||||||
int Theme::NormalBack = 2;
|
|
||||||
int Theme::NormalFont = 2;
|
|
||||||
int Theme::SelectionBack = 3;
|
|
||||||
|
|
||||||
//at least we use a 'normal' text render
|
|
||||||
|
|
||||||
|
|
||||||
Theme::Theme(const char* n, int foreCount, int backCount, int renderCount)
|
|
||||||
:
|
|
||||||
name (NULL),
|
|
||||||
fores (NULL),
|
|
||||||
backs (NULL),
|
|
||||||
text_renders (NULL),
|
|
||||||
fore_count (max_c (foreCount, 4)),
|
|
||||||
back_count (max_c (backCount, 4)),
|
|
||||||
render_count (max_c (renderCount, 4))
|
|
||||||
{
|
|
||||||
|
|
||||||
fSoftLineIndent = (float)(MARGIN_WIDTH / 2.0);
|
|
||||||
fTextMargin = (float)(MARGIN_WIDTH / 2.0);
|
|
||||||
|
|
||||||
name = strcpy (new char [strlen (n) + 1], n);
|
|
||||||
|
|
||||||
fores = new rgb_color [fore_count];
|
|
||||||
backs = new rgb_color [back_count];
|
|
||||||
|
|
||||||
normal_textrender = new NormalTextRender(be_plain_font);
|
|
||||||
|
|
||||||
text_renders = (TextRender**)malloc(render_count * sizeof(TextRender*));
|
|
||||||
for ( int i = 0; i < render_count; i++ )
|
|
||||||
text_renders[i] = normal_textrender;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
sid = create_sem (NUMBER_THEME_READERS, name);
|
|
||||||
|
|
||||||
rgb_color def_timestamp_fore = {200, 150, 150, 255};
|
|
||||||
rgb_color def_timestamp_back = {255, 255, 255, 255};
|
|
||||||
rgb_color def_fore = {0, 0, 0, 255};
|
|
||||||
rgb_color def_back = {255, 255, 255, 255};
|
|
||||||
|
|
||||||
fores[0] = def_timestamp_fore;
|
|
||||||
|
|
||||||
int i;
|
|
||||||
for (i = 1; i < fore_count; ++i)
|
|
||||||
fores[i] = def_fore;
|
|
||||||
|
|
||||||
backs[0] = def_timestamp_back;
|
|
||||||
for (i = 1; i < back_count; ++i)
|
|
||||||
backs[i] = def_back;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Theme::~Theme (void)
|
|
||||||
{
|
|
||||||
delete_sem (sid);
|
|
||||||
|
|
||||||
//delete [] fonts;
|
|
||||||
for ( int i = 0; i < render_count; i++ )
|
|
||||||
if ( text_renders[i] )
|
|
||||||
text_renders[i] = NULL;
|
|
||||||
|
|
||||||
delete normal_textrender;
|
|
||||||
|
|
||||||
delete [] backs;
|
|
||||||
delete [] fores;
|
|
||||||
delete [] name;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int
|
|
||||||
Theme::CountForegrounds (void) const
|
|
||||||
{
|
|
||||||
return fore_count;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int
|
|
||||||
Theme::CountBackgrounds (void) const
|
|
||||||
{
|
|
||||||
return back_count;
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
int16
|
|
||||||
Theme::CountFonts (void) const
|
|
||||||
{
|
|
||||||
return font_count;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
int
|
|
||||||
Theme::CountTextRenders (void) const
|
|
||||||
{
|
|
||||||
return render_count;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
Theme::ReadLock (void)
|
|
||||||
{
|
|
||||||
acquire_sem (sid);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
Theme::ReadUnlock (void)
|
|
||||||
{
|
|
||||||
release_sem (sid);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
Theme::WriteLock (void)
|
|
||||||
{
|
|
||||||
acquire_sem_etc (sid, NUMBER_THEME_READERS, 0, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
Theme::WriteUnlock (void)
|
|
||||||
{
|
|
||||||
release_sem_etc (sid, NUMBER_THEME_READERS, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const rgb_color
|
|
||||||
Theme::ForegroundAt (int which) const
|
|
||||||
{
|
|
||||||
rgb_color color = {0, 0, 0, 255};
|
|
||||||
|
|
||||||
if (which >= fore_count || which < 0)
|
|
||||||
return color;
|
|
||||||
|
|
||||||
return fores[which];
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const rgb_color
|
|
||||||
Theme::BackgroundAt (int which) const
|
|
||||||
{
|
|
||||||
rgb_color color = {255, 255, 255, 255};
|
|
||||||
|
|
||||||
if (which >= back_count || which < 0)
|
|
||||||
return color;
|
|
||||||
|
|
||||||
return backs[which];
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
const BFont &
|
|
||||||
Theme::FontAt (int16 which) const
|
|
||||||
{
|
|
||||||
if (which >= font_count || which < 0)
|
|
||||||
return *be_plain_font;
|
|
||||||
|
|
||||||
return fonts[which];
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
TextRender*
|
|
||||||
Theme::TextRenderAt (int which)
|
|
||||||
{
|
|
||||||
if ( which < 0 ) {
|
|
||||||
//printf("Theme::TextRenderAt(): which < 0 (%d)\n", which);
|
|
||||||
return normal_textrender;
|
|
||||||
}
|
|
||||||
if ( which >= render_count ) {
|
|
||||||
//printf("Theme::TextRenderAt(): which >= render_count (%d, %d)\n", which, render_count);
|
|
||||||
return normal_textrender;
|
|
||||||
}
|
|
||||||
|
|
||||||
return text_renders[which];
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool
|
|
||||||
Theme::SetForeground (int which, const rgb_color color)
|
|
||||||
{
|
|
||||||
if (which >= fore_count || which < 0)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
fores[which] = color;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool
|
|
||||||
Theme::SetBackground (int which, const rgb_color color)
|
|
||||||
{
|
|
||||||
if (which >= back_count || which < 0)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
backs[which] = color;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool
|
|
||||||
Theme::SetTextRender(int which, TextRender* trender)
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
if (which >= render_count || which < 0 || !trender)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
text_renders[which] = trender;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
Theme::AddView (BView* view)
|
|
||||||
{
|
|
||||||
list.AddItem (view);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
Theme::RemoveView (BView* view)
|
|
||||||
{
|
|
||||||
list.RemoveItem (view);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
Theme::SetTextMargin(float margin)
|
|
||||||
{
|
|
||||||
fTextMargin = margin;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
Theme::SetSoftLineIndent(float indent)
|
|
||||||
{
|
|
||||||
fSoftLineIndent = indent;
|
|
||||||
}
|
|
|
@ -1,125 +0,0 @@
|
||||||
/*
|
|
||||||
* The contents of this file are subject to the Mozilla Public
|
|
||||||
* License Version 1.1 (the "License"); you may not use this file
|
|
||||||
* except in compliance with the License. You may obtain a copy of
|
|
||||||
* the License at http://www.mozilla.org/MPL/
|
|
||||||
*
|
|
||||||
* Software distributed under the License is distributed on an "AS
|
|
||||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
|
||||||
* implied. See the License for the specific language governing
|
|
||||||
* rights and limitations under the License.
|
|
||||||
*
|
|
||||||
* The Original Code is Vision.
|
|
||||||
*
|
|
||||||
* The Initial Developer of the Original Code is The Vision Team.
|
|
||||||
* Portions created by The Vision Team are
|
|
||||||
* Copyright (C) 1999, 2000, 2001 The Vision Team. All Rights
|
|
||||||
* Reserved.
|
|
||||||
*
|
|
||||||
* Contributor(s): Rene Gollent
|
|
||||||
* Todd Lair
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef THEME_H_
|
|
||||||
#define THEME_H_
|
|
||||||
|
|
||||||
#include <OS.h>
|
|
||||||
#include <GraphicsDefs.h>
|
|
||||||
#include <List.h>
|
|
||||||
|
|
||||||
#include <librunview/TextRender.h>
|
|
||||||
|
|
||||||
class BView;
|
|
||||||
class NormalTextRender;
|
|
||||||
|
|
||||||
#define MARGIN_WIDTH 10.0 //default value, double of fTextMargin
|
|
||||||
#define MARGIN_INDENT 10.0 //default value, double of fSoftLineIndent
|
|
||||||
|
|
||||||
class Theme
|
|
||||||
{
|
|
||||||
char* name;
|
|
||||||
rgb_color* fores;
|
|
||||||
rgb_color* backs;
|
|
||||||
TextRender** text_renders; //FIX!!
|
|
||||||
|
|
||||||
int fore_count;
|
|
||||||
int back_count;
|
|
||||||
int render_count;
|
|
||||||
|
|
||||||
BList list;
|
|
||||||
sem_id sid;
|
|
||||||
|
|
||||||
float fSoftLineIndent;
|
|
||||||
float fTextMargin;
|
|
||||||
NormalTextRender* normal_textrender;
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
static int TimestampFore;
|
|
||||||
static int TimestampBack;
|
|
||||||
static int TimestampFont;
|
|
||||||
static int TimespaceFore;
|
|
||||||
static int TimespaceBack;
|
|
||||||
static int TimespaceFont;
|
|
||||||
static int NormalFore;
|
|
||||||
static int NormalBack;
|
|
||||||
static int NormalFont;
|
|
||||||
static int SelectionBack;
|
|
||||||
|
|
||||||
Theme(const char*, int, int, int);
|
|
||||||
virtual ~Theme (void);
|
|
||||||
|
|
||||||
const char* Name (void) const {
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ReadLock (void);
|
|
||||||
void ReadUnlock (void);
|
|
||||||
void WriteLock (void);
|
|
||||||
void WriteUnlock (void);
|
|
||||||
|
|
||||||
int CountForegrounds (void) const;
|
|
||||||
int CountBackgrounds (void) const;
|
|
||||||
// int16 CountFonts (void) const;
|
|
||||||
int CountTextRenders (void) const;
|
|
||||||
|
|
||||||
const rgb_color ForegroundAt (int) const;
|
|
||||||
const rgb_color BackgroundAt (int) const;
|
|
||||||
|
|
||||||
//const BFont &FontAt (int16) const;
|
|
||||||
|
|
||||||
TextRender* TextRenderAt(int);
|
|
||||||
|
|
||||||
bool SetForeground (int, const rgb_color);
|
|
||||||
bool SetForeground (int w, uchar r, uchar g, uchar b, uchar a = 255) {
|
|
||||||
rgb_color color = {r, g, b, a};
|
|
||||||
return SetForeground (w, color);
|
|
||||||
}
|
|
||||||
bool SetBackground (int, const rgb_color);
|
|
||||||
bool SetBackground (int w, uchar r, uchar g, uchar b, uchar a = 255) {
|
|
||||||
rgb_color color = {r, g, b, a};
|
|
||||||
return SetBackground (w, color);
|
|
||||||
}
|
|
||||||
|
|
||||||
//bool SetFont (int16, const BFont &);
|
|
||||||
bool SetTextRender(int, TextRender*);
|
|
||||||
|
|
||||||
void SetSoftLineIndent(float indent);
|
|
||||||
void SetTextMargin(float margin);
|
|
||||||
|
|
||||||
float TextMargin() const {
|
|
||||||
return fTextMargin;
|
|
||||||
}
|
|
||||||
float SoftLineIndent() const {
|
|
||||||
return fSoftLineIndent;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void AddView (BView*);
|
|
||||||
void RemoveView (BView*);
|
|
||||||
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
Ŝarĝante…
Reference in New Issue