llconsole.h
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:5k
- /**
- * @file llconsole.h
- * @brief a simple console-style output device
- *
- * $LicenseInfo:firstyear=2001&license=viewergpl$
- *
- * Copyright (c) 2001-2010, Linden Research, Inc.
- *
- * Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
- *
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/programs/open_source/licensing/flossexception
- *
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- *
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- * $/LicenseInfo$
- */
- #ifndef LL_LLCONSOLE_H
- #define LL_LLCONSOLE_H
- #include "llfixedbuffer.h"
- #include "lluictrl.h"
- #include "v4color.h"
- #include <deque>
- class LLSD;
- class LLConsole : public LLFixedBuffer, public LLUICtrl, public LLInstanceTracker<LLConsole>
- {
- public:
- typedef enum e_font_size
- {
- MONOSPACE = -1,
- SMALL = 0,
- BIG = 1
- } EFontSize;
- struct Params : public LLInitParam::Block<Params, LLUICtrl::Params>
- {
- Optional<U32> max_lines;
- Optional<F32> persist_time;
- Optional<S32> font_size_index;
- Params()
- : max_lines("max_lines", LLUI::sSettingGroups["config"]->getS32("ConsoleMaxLines")),
- persist_time("persist_time", 0.f), // forever
- font_size_index("font_size_index")
- {
- mouse_opaque(false);
- }
- };
- protected:
- LLConsole(const Params&);
- friend class LLUICtrlFactory;
- public:
- // call once per frame to pull data out of LLFixedBuffer
- static void updateClass();
- //A paragraph color segment defines the color of text in a line
- //of text that was received for console display. It has no
- //notion of line wraps, screen position, or the text it contains.
- //It is only the number of characters that are a color and the
- //color.
- struct ParagraphColorSegment
- {
- S32 mNumChars;
- LLColor4 mColor;
- };
-
- //A line color segment is a chunk of text, the color associated
- //with it, and the X Position it was calculated to begin at
- //on the screen. X Positions are re-calculated if the
- //screen changes size.
- class LineColorSegment
- {
- public:
- LineColorSegment(LLWString text, LLColor4 color, F32 xpos) : mText(text), mColor(color), mXPosition(xpos) {}
- public:
- LLWString mText;
- LLColor4 mColor;
- F32 mXPosition;
- };
-
- typedef std::list<LineColorSegment> line_color_segments_t;
-
- //A line is composed of one or more color segments.
- class Line
- {
- public:
- line_color_segments_t mLineColorSegments;
- };
-
- typedef std::list<Line> lines_t;
- typedef std::list<ParagraphColorSegment> paragraph_color_segments_t;
-
- //A paragraph is a processed element containing the entire text of the
- //message (used for recalculating positions on screen resize)
- //The time this message was added to the console output
- //The visual screen width of the longest line in this block
- //And a list of one or more lines which are used to display this message.
- class Paragraph
- {
- public:
- Paragraph (LLWString str, const LLColor4 &color, F32 add_time, const LLFontGL* font, F32 screen_width);
- void makeParagraphColorSegments ( const LLColor4 &color);
- void updateLines ( F32 screen_width, const LLFontGL* font, bool force_resize=false );
- public:
- LLWString mParagraphText; //The entire text of the paragraph
- paragraph_color_segments_t mParagraphColorSegments;
- F32 mAddTime; //Time this paragraph was added to the display.
- F32 mMaxWidth; //Width of the widest line of text in this paragraph.
- lines_t mLines;
-
- };
-
- //The console contains a deque of paragraphs which represent the individual messages.
- typedef std::deque<Paragraph> paragraph_t;
- paragraph_t mParagraphs;
- ~LLConsole(){};
- // each line lasts this long after being added
- void setLinePersistTime(F32 seconds);
- void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
- // -1 = monospace, 0 means small, font size = 1 means big
- void setFontSize(S32 size_index);
-
- // Overrides
- /*virtual*/ void draw();
- private:
- void update();
- F32 mLinePersistTime; // Age at which to stop drawing.
- F32 mFadeTime; // Age at which to start fading
- const LLFontGL* mFont;
- S32 mConsoleWidth;
- S32 mConsoleHeight;
- };
- extern LLConsole* gConsole;
- #endif