diff options
Diffstat (limited to 'indra/llui/llviewborder.cpp')
-rw-r--r-- | indra/llui/llviewborder.cpp | 251 |
1 files changed, 98 insertions, 153 deletions
diff --git a/indra/llui/llviewborder.cpp b/indra/llui/llviewborder.cpp index d3559baec6..89cd34c37c 100644 --- a/indra/llui/llviewborder.cpp +++ b/indra/llui/llviewborder.cpp @@ -1,56 +1,80 @@ /** * @file llviewborder.cpp * - * $LicenseInfo:firstyear=2001&license=viewergpl$ - * - * Copyright (c) 2001-2007, Linden Research, Inc. - * + * $LicenseInfo:firstyear=2001&license=viewerlgpl$ * 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://secondlife.com/developers/opensource/gplv2 + * Copyright (C) 2010, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. * - * 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://secondlife.com/developers/opensource/flossexception + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. * - * 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. + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * - * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO - * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, - * COMPLETENESS OR PERFORMANCE. + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ #include "linden_common.h" #include "llviewborder.h" -#include "llglimmediate.h" +#include "llrender.h" #include "llfocusmgr.h" +#include "lluictrlfactory.h" -static LLRegisterWidget<LLViewBorder> r("view_border"); - -LLViewBorder::LLViewBorder( const LLString& name, const LLRect& rect, EBevel bevel, EStyle style, S32 width ) - : - LLView( name, rect, FALSE ), - mBevel( bevel ), - mStyle( style ), - mHighlightLight( LLUI::sColorsGroup->getColor( "DefaultHighlightLight" ) ), - mHighlightDark( LLUI::sColorsGroup->getColor( "DefaultHighlightDark" ) ), - mShadowLight( LLUI::sColorsGroup->getColor( "DefaultShadowLight" ) ), - mShadowDark( LLUI::sColorsGroup->getColor( "DefaultShadowDark" ) ), - mBorderWidth( width ), - mTexture( NULL ), - mHasKeyboardFocus( FALSE ) +static LLDefaultChildRegistry::Register<LLViewBorder> r("view_border"); + +void LLViewBorder::BevelValues::declareValues() +{ + declare("in", LLViewBorder::BEVEL_IN); + declare("out", LLViewBorder::BEVEL_OUT); + declare("bright", LLViewBorder::BEVEL_BRIGHT); + declare("none", LLViewBorder::BEVEL_NONE); +} + +void LLViewBorder::StyleValues::declareValues() +{ + declare("line", LLViewBorder::STYLE_LINE); + declare("texture", LLViewBorder::STYLE_TEXTURE); +} + +LLViewBorder::Params::Params() +: bevel_style("bevel_style", BEVEL_OUT), + render_style("border_style", STYLE_LINE), + border_thickness("border_thickness"), + highlight_light_color("highlight_light_color"), + highlight_dark_color("highlight_dark_color"), + shadow_light_color("shadow_light_color"), + shadow_dark_color("shadow_dark_color") { - setFollowsAll(); + addSynonym(border_thickness, "thickness"); + addSynonym(render_style, "style"); + name = "view_border"; + mouse_opaque = false; + follows.flags = FOLLOWS_ALL; } + +LLViewBorder::LLViewBorder(const LLViewBorder::Params& p) +: LLView(p), + mTexture( NULL ), + mHasKeyboardFocus( FALSE ), + mBorderWidth(p.border_thickness), + mHighlightLight(p.highlight_light_color()), + mHighlightDark(p.highlight_dark_color()), + mShadowLight(p.shadow_light_color()), + mShadowDark(p.shadow_dark_color()), + mBevel(p.bevel_style), + mStyle(p.render_style) +{} + void LLViewBorder::setColors( const LLColor4& shadow_dark, const LLColor4& highlight_light ) { mShadowDark = shadow_dark; @@ -68,7 +92,7 @@ void LLViewBorder::setColorsExtended( const LLColor4& shadow_light, const LLColo void LLViewBorder::setTexture( const LLUUID &image_id ) { - mTexture = LLUI::sImageProvider->getUIImageByID(image_id); + mTexture = LLUI::getUIImageByID(image_id); } @@ -95,35 +119,25 @@ void LLViewBorder::draw() llassert( FALSE ); // not implemented } } - else - if( STYLE_TEXTURE == mStyle ) - { - if( mTexture ) - { - drawTextures(); - } - } - // draw the children LLView::draw(); - } void LLViewBorder::drawOnePixelLines() { - LLGLSNoTexture uiNoTexture; + gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); - LLColor4 top_color = mHighlightLight; - LLColor4 bottom_color = mHighlightLight; + LLColor4 top_color = mHighlightLight.get(); + LLColor4 bottom_color = mHighlightLight.get(); switch( mBevel ) { case BEVEL_OUT: - top_color = mHighlightLight; - bottom_color = mShadowDark; + top_color = mHighlightLight.get(); + bottom_color = mShadowDark.get(); break; case BEVEL_IN: - top_color = mShadowDark; - bottom_color = mHighlightLight; + top_color = mShadowDark.get(); + bottom_color = mHighlightLight.get(); break; case BEVEL_NONE: // use defaults @@ -158,35 +172,40 @@ void LLViewBorder::drawOnePixelLines() void LLViewBorder::drawTwoPixelLines() { - LLGLSNoTexture no_texture; + gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); LLColor4 focus_color = gFocusMgr.getFocusColor(); - F32* top_in_color = mShadowDark.mV; - F32* top_out_color = mShadowDark.mV; - F32* bottom_in_color = mShadowDark.mV; - F32* bottom_out_color = mShadowDark.mV; + LLColor4 top_in_color; + LLColor4 top_out_color; + LLColor4 bottom_in_color; + LLColor4 bottom_out_color; + switch( mBevel ) { case BEVEL_OUT: - top_in_color = mHighlightLight.mV; - top_out_color = mHighlightDark.mV; - bottom_in_color = mShadowLight.mV; - bottom_out_color = mShadowDark.mV; + top_in_color = mHighlightLight.get(); + top_out_color = mHighlightDark.get(); + bottom_in_color = mShadowLight.get(); + bottom_out_color = mShadowDark.get(); break; case BEVEL_IN: - top_in_color = mShadowDark.mV; - top_out_color = mShadowLight.mV; - bottom_in_color = mHighlightDark.mV; - bottom_out_color = mHighlightLight.mV; + top_in_color = mShadowDark.get(); + top_out_color = mShadowLight.get(); + bottom_in_color = mHighlightDark.get(); + bottom_out_color = mHighlightLight.get(); break; case BEVEL_BRIGHT: - top_in_color = mHighlightLight.mV; - top_out_color = mHighlightLight.mV; - bottom_in_color = mHighlightLight.mV; - bottom_out_color = mHighlightLight.mV; + top_in_color = mHighlightLight.get(); + top_out_color = mHighlightLight.get(); + bottom_in_color = mHighlightLight.get(); + bottom_out_color = mHighlightLight.get(); break; case BEVEL_NONE: + top_in_color = mShadowDark.get(); + top_out_color = mShadowDark.get(); + bottom_in_color = mShadowDark.get(); + bottom_out_color = mShadowDark.get(); // use defaults break; default: @@ -195,8 +214,8 @@ void LLViewBorder::drawTwoPixelLines() if( mHasKeyboardFocus ) { - top_out_color = focus_color.mV; - bottom_out_color = focus_color.mV; + top_out_color = focus_color; + bottom_out_color = focus_color; } S32 left = 0; @@ -205,81 +224,30 @@ void LLViewBorder::drawTwoPixelLines() S32 bottom = 0; // draw borders - gGL.color3fv( top_out_color ); + gGL.color3fv( top_out_color.mV ); gl_line_2d(left, bottom, left, top-1); gl_line_2d(left, top-1, right, top-1); - gGL.color3fv( top_in_color ); + gGL.color3fv( top_in_color.mV ); gl_line_2d(left+1, bottom+1, left+1, top-2); gl_line_2d(left+1, top-2, right-1, top-2); - gGL.color3fv( bottom_out_color ); + gGL.color3fv( bottom_out_color.mV ); gl_line_2d(right-1, top-1, right-1, bottom); gl_line_2d(left, bottom, right, bottom); - gGL.color3fv( bottom_in_color ); + gGL.color3fv( bottom_in_color.mV ); gl_line_2d(right-2, top-2, right-2, bottom+1); gl_line_2d(left+1, bottom+1, right-1, bottom+1); } -void LLViewBorder::drawTextures() -{ - //LLGLSUIDefault gls_ui; - - //llassert( FALSE ); // TODO: finish implementing - - //gGL.color4fv(UI_VERTEX_COLOR.mV); - - //mTexture->bind(); - //glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT ); - //glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT ); - - //drawTextureTrapezoid( 0.f, mBorderWidth, getRect().getWidth(), 0, 0 ); - //drawTextureTrapezoid( 90.f, mBorderWidth, getRect().getHeight(), (F32)getRect().getWidth(),0 ); - //drawTextureTrapezoid( 180.f, mBorderWidth, getRect().getWidth(), (F32)getRect().getWidth(),(F32)getRect().getHeight() ); - //drawTextureTrapezoid( 270.f, mBorderWidth, getRect().getHeight(), 0, (F32)getRect().getHeight() ); -} - - -void LLViewBorder::drawTextureTrapezoid( F32 degrees, S32 width, S32 length, F32 start_x, F32 start_y ) -{ - gGL.pushMatrix(); - { - gGL.translatef(start_x, start_y, 0.f); - glRotatef( degrees, 0, 0, 1 ); - - gGL.begin(LLVertexBuffer::QUADS); - { - // width, width /---------\ length-width, width // - // / \ // - // / \ // - // /---------------\ // - // 0,0 length, 0 // - - gGL.texCoord2f( 0, 0 ); - gGL.vertex2i( 0, 0 ); - - gGL.texCoord2f( (GLfloat)length, 0 ); - gGL.vertex2i( length, 0 ); - - gGL.texCoord2f( (GLfloat)(length - width), (GLfloat)width ); - gGL.vertex2i( length - width, width ); - - gGL.texCoord2f( (GLfloat)width, (GLfloat)width ); - gGL.vertex2i( width, width ); - } - gGL.end(); - } - gGL.popMatrix(); -} - BOOL LLViewBorder::getBevelFromAttribute(LLXMLNodePtr node, LLViewBorder::EBevel& bevel_style) { if (node->hasAttribute("bevel_style")) { - LLString bevel_string; + std::string bevel_string; node->getAttributeString("bevel_style", bevel_string); - LLString::toLower(bevel_string); + LLStringUtil::toLower(bevel_string); if (bevel_string == "none") { @@ -302,26 +270,3 @@ BOOL LLViewBorder::getBevelFromAttribute(LLXMLNodePtr node, LLViewBorder::EBevel return FALSE; } - -// static -LLView* LLViewBorder::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory) -{ - LLString name("view_border"); - node->getAttributeString("name", name); - - LLViewBorder::EBevel bevel_style = LLViewBorder::BEVEL_IN; - getBevelFromAttribute(node, bevel_style); - - S32 border_thickness = 1; - node->getAttributeS32("border_thickness", border_thickness); - - LLViewBorder* border = new LLViewBorder(name, - LLRect(), - bevel_style, - LLViewBorder::STYLE_LINE, - border_thickness); - - border->initFromXML(node, parent); - - return border; -} |