MyGUI
3.0.3
|
00001 00007 /* 00008 This file is part of MyGUI. 00009 00010 MyGUI is free software: you can redistribute it and/or modify 00011 it under the terms of the GNU Lesser General Public License as published by 00012 the Free Software Foundation, either version 3 of the License, or 00013 (at your option) any later version. 00014 00015 MyGUI is distributed in the hope that it will be useful, 00016 but WITHOUT ANY WARRANTY; without even the implied warranty of 00017 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00018 GNU Lesser General Public License for more details. 00019 00020 You should have received a copy of the GNU Lesser General Public License 00021 along with MyGUI. If not, see <http://www.gnu.org/licenses/>. 00022 */ 00023 #include "MyGUI_Precompiled.h" 00024 #include "MyGUI_RawRect.h" 00025 #include "MyGUI_RenderItem.h" 00026 #include "MyGUI_RenderManager.h" 00027 #include "MyGUI_SkinManager.h" 00028 #include "MyGUI_LanguageManager.h" 00029 #include "MyGUI_CommonStateInfo.h" 00030 00031 namespace MyGUI 00032 { 00033 00034 MYGUI_FORCEINLINE void ConvertColour(uint32& _colour, VertexColourType _format) 00035 { 00036 if (_format == VertexColourType::ColourABGR) 00037 _colour = ((_colour & 0x00FF0000) >> 16) | ((_colour & 0x000000FF) << 16) | (_colour & 0xFF00FF00); 00038 } 00039 00040 RawRect::RawRect() : 00041 SubSkin(), 00042 mRectTextureLT(FloatPoint(0, 0)), 00043 mRectTextureRT(FloatPoint(1, 0)), 00044 mRectTextureLB(FloatPoint(0, 1)), 00045 mRectTextureRB(FloatPoint(1, 1)), 00046 mColourLT(Colour::White), 00047 mColourRT(Colour::White), 00048 mColourLB(Colour::White), 00049 mColourRB(Colour::White), 00050 mRenderColourLT(0xFFFFFFFF), 00051 mRenderColourRT(0xFFFFFFFF), 00052 mRenderColourLB(0xFFFFFFFF), 00053 mRenderColourRB(0xFFFFFFFF) 00054 { 00055 mVertexFormat = RenderManager::getInstance().getVertexFormat(); 00056 } 00057 00058 RawRect::~RawRect() 00059 { 00060 } 00061 00062 void RawRect::setAlpha(float _alpha) 00063 { 00064 mCurrentColour = ((uint8)(_alpha*255) << 24); 00065 00066 mRenderColourLT = mCurrentColour | (mRenderColourLT & 0x00FFFFFF); 00067 mRenderColourRT = mCurrentColour | (mRenderColourRT & 0x00FFFFFF); 00068 mRenderColourLB = mCurrentColour | (mRenderColourLB & 0x00FFFFFF); 00069 mRenderColourRB = mCurrentColour | (mRenderColourRB & 0x00FFFFFF); 00070 00071 if (nullptr != mNode) mNode->outOfDate(mRenderItem); 00072 } 00073 00074 void RawRect::setRectColour(const Colour& _colourLT, const Colour& _colourRT, const Colour& _colourLB, const Colour& _colourRB) 00075 { 00076 mColourLT = _colourLT; 00077 mRenderColourLT = texture_utility::toColourARGB(mColourLT); 00078 ConvertColour(mRenderColourLT, mVertexFormat); 00079 mRenderColourLT = mCurrentColour | (mRenderColourLT & 0x00FFFFFF); 00080 00081 mColourRT = _colourRT; 00082 mRenderColourRT = texture_utility::toColourARGB(mColourRT); 00083 ConvertColour(mRenderColourRT, mVertexFormat); 00084 mRenderColourRT = mCurrentColour | (mRenderColourRT & 0x00FFFFFF); 00085 00086 mColourLB = _colourLB; 00087 mRenderColourLB = texture_utility::toColourARGB(mColourLB); 00088 ConvertColour(mRenderColourLB, mVertexFormat); 00089 mRenderColourLB = mCurrentColour | (mRenderColourLB & 0x00FFFFFF); 00090 00091 mColourRB = _colourRB; 00092 mRenderColourRB = texture_utility::toColourARGB(mColourRB); 00093 ConvertColour(mRenderColourRB, mVertexFormat); 00094 mRenderColourRB = mCurrentColour | (mRenderColourRB & 0x00FFFFFF); 00095 00096 if (nullptr != mNode) mNode->outOfDate(mRenderItem); 00097 } 00098 00099 void RawRect::setRectTexture(const FloatPoint& _pointLT, const FloatPoint& _pointRT, const FloatPoint& _pointLB, const FloatPoint& _pointRB) 00100 { 00101 mRectTextureLT = _pointLT; 00102 mRectTextureRT = _pointRT; 00103 mRectTextureLB = _pointLB; 00104 mRectTextureRB = _pointRB; 00105 } 00106 00107 void RawRect::doRender() 00108 { 00109 if (!mVisible || mEmptyView) return; 00110 00111 Vertex* _vertex = mRenderItem->getCurrentVertextBuffer(); 00112 00113 const RenderTargetInfo& info = mRenderItem->getRenderTarget()->getInfo(); 00114 00115 float vertex_z = info.maximumDepth; 00116 00117 float vertex_left = ((info.pixScaleX * (float)(mCurrentCoord.left + mCroppedParent->getAbsoluteLeft() - info.leftOffset) + info.hOffset) * 2) - 1; 00118 float vertex_right = vertex_left + (info.pixScaleX * (float)mCurrentCoord.width * 2); 00119 float vertex_top = -(((info.pixScaleY * (float)(mCurrentCoord.top + mCroppedParent->getAbsoluteTop() - info.topOffset) + info.vOffset) * 2) - 1); 00120 float vertex_bottom = vertex_top - (info.pixScaleY * (float)mCurrentCoord.height * 2); 00121 00122 // first triangle - left top 00123 _vertex[0].x = vertex_left; 00124 _vertex[0].y = vertex_top; 00125 _vertex[0].z = vertex_z; 00126 _vertex[0].colour = mRenderColourLT; 00127 _vertex[0].u = mRectTextureLT.left; 00128 _vertex[0].v = mRectTextureLT.top; 00129 00130 // first triangle - left bottom 00131 _vertex[1].x = vertex_left; 00132 _vertex[1].y = vertex_bottom; 00133 _vertex[1].z = vertex_z; 00134 _vertex[1].colour = mRenderColourLB; 00135 _vertex[1].u = mRectTextureLB.left; 00136 _vertex[1].v = mRectTextureLB.top; 00137 00138 // first triangle - right top 00139 _vertex[2].x = vertex_right; 00140 _vertex[2].y = vertex_top; 00141 _vertex[2].z = vertex_z; 00142 _vertex[2].colour = mRenderColourRT; 00143 _vertex[2].u = mRectTextureRT.left; 00144 _vertex[2].v = mRectTextureRT.top; 00145 00146 // second triangle - right top 00147 _vertex[3].x = vertex_right; 00148 _vertex[3].y = vertex_top; 00149 _vertex[3].z = vertex_z; 00150 _vertex[3].colour = mRenderColourRT; 00151 _vertex[3].u = mRectTextureRT.left; 00152 _vertex[3].v = mRectTextureRT.top; 00153 00154 // second triangle = left bottom 00155 _vertex[4].x = vertex_left; 00156 _vertex[4].y = vertex_bottom; 00157 _vertex[4].z = vertex_z; 00158 _vertex[4].colour = mRenderColourLB; 00159 _vertex[4].u = mRectTextureLB.left; 00160 _vertex[4].v = mRectTextureLB.top; 00161 00162 // second triangle - right botton 00163 _vertex[5].x = vertex_right; 00164 _vertex[5].y = vertex_bottom; 00165 _vertex[5].z = vertex_z; 00166 _vertex[5].colour = mRenderColourRB; 00167 _vertex[5].u = mRectTextureRB.left; 00168 _vertex[5].v = mRectTextureRB.top; 00169 00170 mRenderItem->setLastVertexCount(VertexQuad::VertexCount); 00171 } 00172 00173 void RawRect::setStateData(IStateInfo * _data) 00174 { 00175 SubSkinStateInfo* data = _data->castType<SubSkinStateInfo>(); 00176 const FloatRect& rect = data->getRect(); 00177 mRectTextureLT.set(rect.left, rect.top); 00178 mRectTextureRT.set(rect.right, rect.top); 00179 mRectTextureLB.set(rect.left, rect.bottom); 00180 mRectTextureRB.set(rect.right, rect.bottom); 00181 } 00182 00183 } // namespace MyGUI