00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00034 #include "../SO3SceneGraph/SO3Scene.h"
00035 #include "SO3Widget.h"
00036 #include "SO3WidgetManager.h"
00037 #include <OgreBitwise.h>
00038
00039 namespace SO3
00040 {
00041
00042 SWidget::SWidget() : SData(""), isOverlayed(false), is2DRect(false)
00043 {
00044
00045 }
00046
00047 SWidget::SWidget(SScene* targetScene, std::string widgetName, int xPos, int yPos, unsigned short widgetWidth, unsigned short widgetHeight, SViewPort* targetViewport, unsigned int widgetZOrder, std::string widgetType) : SData(widgetName), isOverlayed(true), is2DRect(false)
00048 {
00049 StandardConstructor(targetScene, xPos, yPos, widgetWidth, widgetHeight, widgetZOrder, targetViewport, widgetType);
00050 CreateTexture();
00051 CreateMaterial();
00052 CreateOverlay();
00053 }
00054
00055 SWidget::SWidget(SScene* targetScene, std::string widgetName, int xPos, int yPos, unsigned short widgetWidth, unsigned short widgetHeight, SViewPort* targetViewport, std::string widgetType) : SData(widgetName), isOverlayed(false), is2DRect(true)
00056 {
00057 StandardConstructor(targetScene, xPos, yPos, widgetWidth, widgetHeight, 0, targetViewport, widgetType);
00058 CreateTexture();
00059 CreateMaterial();
00060 Create2D();
00061 }
00062
00063 SWidget::SWidget(SScene* targetScene, std::string widgetName, unsigned short widgetWidth, unsigned short widgetHeight, SMaterial* targetMaterial, unsigned short targetTechnique, unsigned short targetPass, unsigned short targetTextureUnit, std::string widgetType) : SData(widgetName), isOverlayed(false), is2DRect(false)
00064 {
00065 StandardConstructor(targetScene, 0, 0, widgetWidth, widgetHeight, 0, 0, widgetType);
00066
00067
00068
00069 originalMaterial = targetMaterial;
00070
00071 targetMaterial->SetAssociatedWidget(this);
00072
00073
00074 Ogre::MaterialPtr ogreOriginalMaterial = targetMaterial->getOgreMaterialPointer();
00075 originalMaterialPass = ogreOriginalMaterial->getTechnique(targetTechnique)->getPass(targetPass);
00076 originalTextureUnit = originalMaterialPass->getTextureUnitState(targetTextureUnit);
00077 originalTextureUnitMinFiltering = originalTextureUnit->getTextureFiltering(Ogre::FT_MIN);
00078 originalTextureUnitMagFiltering = originalTextureUnit->getTextureFiltering(Ogre::FT_MAG);
00079 originalTextureUnitMipFiltering = originalTextureUnit->getTextureFiltering(Ogre::FT_MIP);
00080 originalTextureUnitBlendMode = originalTextureUnit->getAlphaBlendMode();
00081
00082
00083
00084 originalTextureName = originalTextureUnit->getTextureName();
00085
00086 originalSceneBlendFactorSource = originalMaterialPass->getSourceBlendFactor();
00087 originalSceneBlendFactorDest = originalMaterialPass->getDestBlendFactor();
00088 originalMaterialDepthCheck = originalMaterialPass->getDepthCheckEnabled();
00089 originalMaterialDepthWrite = originalMaterialPass->getDepthWriteEnabled();
00090
00091
00092 CreateTexture();
00093 }
00094
00095 void SWidget::StandardConstructor(SScene* targetScene, int xPos, int yPos, unsigned short widgetWidth, unsigned short widgetHeight, unsigned int widgetZOrder, SViewPort* targetViewport, std::string widgetType)
00096 {
00097
00098 type = widgetType;
00099 leftPos = xPos;
00100 topPos = yPos;
00101 width = widgetWidth;
00102 height = widgetHeight;
00103 scene = targetScene;
00104 viewport = targetViewport;
00105 renderingTexture.setNull();
00106 renderingTextureUnit = 0;
00107 textureWidth = 0;
00108 textureHeight = 0;
00109 baseResourceName = std::string(SO3_INTERNAL_RESOURCE_GROUP)+"/Widgets/"+widgetType;
00110 compensateNPOT = false;
00111 originalTextureUnit = 0;
00112 originalTextureName = "";
00113 originalMaterialPass = 0;
00114 topOnFocus = false;
00115 isPriorized = false;
00116 originalMaterial = 0;
00117 mouseIsOver = false;
00118 opacity = 1.0f;
00119 isTransparent = false;
00120 mouseEnable = true;
00121 keyboardEnable = true;
00122 forceRenderingUpdate = false;
00123 transparentIgnorePixels = isOverlayed;
00124 transparentTresholdColor = (transparentIgnorePixels) ? 0.04f : 0.0f;
00125
00126
00127 ogre2dRect = 0;
00128 ogre2dNode = 0;
00129
00130
00131 zOrder = widgetZOrder;
00132 ogreOverlay = 0;
00133 ogreOverlayPanel = 0;
00134 ogreOverlayMaterial.setNull();
00135 }
00136
00137 SWidget::~SWidget()
00138 {
00139
00140 if (isOverlayed)
00141 {
00142 DestroyOverlay();
00143 DestroyMaterial();
00144 }
00145 else if (is2DRect)
00146 {
00147 Destroy2D();
00148 DestroyMaterial();
00149 }
00150 else
00151 {
00152
00153 if(originalTextureUnit != 0)
00154 {
00155 originalMaterialPass->setSceneBlending(originalSceneBlendFactorSource, originalSceneBlendFactorDest);
00156 originalMaterialPass->setDepthCheckEnabled(originalMaterialDepthCheck);
00157 originalMaterialPass->setDepthWriteEnabled(originalMaterialDepthWrite);
00158 originalTextureUnit->setTextureFiltering(originalTextureUnitMinFiltering, originalTextureUnitMagFiltering, originalTextureUnitMipFiltering);
00159 originalTextureUnit->setAlphaOperation(originalTextureUnitBlendMode.operation, originalTextureUnitBlendMode.source1, originalTextureUnitBlendMode.source2, originalTextureUnitBlendMode.alphaArg1, originalTextureUnitBlendMode.alphaArg2, originalTextureUnitBlendMode.factor);
00160 originalTextureUnit->setTextureName(originalTextureName);
00161 }
00162 }
00163
00164
00165 DestroyTexture();
00166
00167 if (isOverlayed)
00168 SWidgetManager::getSingleton().UpdateWidgetsZOrder();
00169 else if (!is2DRect)
00170 originalMaterial->SetAssociatedWidget(0);
00171 }
00172
00173 SScene* SWidget::GetParentScene()
00174 {
00175 return scene;
00176 }
00177
00178 std::string SWidget::GetType()
00179 {
00180 return type;
00181 }
00182
00183 bool SWidget::IsCompensateNPOT() const
00184 {
00185 return compensateNPOT;
00186 }
00187
00188 unsigned short SWidget::GetWidth()
00189 {
00190 return width;
00191 }
00192
00193 unsigned short SWidget::GetHeight()
00194 {
00195 return height;
00196 }
00197
00198 SPoint<unsigned short> SWidget::GetSize()
00199 {
00200 return SPoint<unsigned short>(width, height);
00201 }
00202
00203 void SWidget::SetSize(unsigned short newWidth, unsigned short newHeight)
00204 {
00205 SetSize(SPoint<unsigned short>(newWidth, newHeight));
00206 }
00207
00208 void SWidget::SetSize(SPoint<unsigned short> newSize)
00209 {
00210 width = newSize.x;
00211 height = newSize.y;
00212 SetSizeImpl(width, height);
00213 CreateTexture();
00214
00215 if(ogreOverlay != 0)
00216 ogreOverlayPanel->setDimensions(width, height);
00217
00218 if(ogre2dRect != 0)
00219 {
00220 Ogre::Real wcoef = 2.0f / ((viewport->GetWidthPixels() <= 0) ? 1.0f : viewport->GetWidthPixels());
00221 Ogre::Real hcoef = 2.0f / ((viewport->GetHeightPixels() <= 0) ? 1.0f : viewport->GetHeightPixels());
00222 Ogre::Real w = wcoef * width;
00223 Ogre::Real h = hcoef * height;
00224 Ogre::Real l = (wcoef * leftPos) - 1.0f;
00225 Ogre::Real t = 1.0f - (hcoef * topPos);
00226 Ogre::Real r = ((wcoef * leftPos) + w) - 1.0f;
00227 Ogre::Real b = 1.0f - ((hcoef * topPos) + h);
00228 ogre2dRect->setCorners(l, t, r, b);
00229 };
00230 }
00231
00232 SPoint<int> SWidget::GetPosition()
00233 {
00234 if((ogreOverlay != 0) || (ogre2dRect != 0))
00235 return SPoint<int>(leftPos, topPos);
00236 else
00237 return SPoint<int>(0, 0);
00238 }
00239
00240 void SWidget::SetPosition(int xPos, int yPos)
00241 {
00242 SetPosition(SPoint<int>(xPos, yPos));
00243 }
00244
00245 void SWidget::SetPosition(const SPoint<int>& newPosition)
00246 {
00247 if(ogreOverlay != 0)
00248 {
00249 leftPos = newPosition.x;
00250 topPos = newPosition.y;
00251 ogreOverlayPanel->setPosition(static_cast<Ogre::Real> (leftPos), static_cast<Ogre::Real> (topPos));
00252 }
00253
00254 if(ogre2dRect != 0)
00255 {
00256 leftPos = newPosition.x;
00257 topPos = newPosition.y;
00258 Ogre::Real wcoef = 2.0f / ((viewport->GetWidthPixels() <= 0) ? 1.0f : viewport->GetWidthPixels());
00259 Ogre::Real hcoef = 2.0f / ((viewport->GetHeightPixels() <= 0) ? 1.0f : viewport->GetHeightPixels());
00260 Ogre::Real w = wcoef * width;
00261 Ogre::Real h = hcoef * height;
00262 Ogre::Real l = (wcoef * leftPos) - 1.0f;
00263 Ogre::Real t = 1.0f - (hcoef * topPos);
00264 Ogre::Real r = ((wcoef * leftPos) + w) - 1.0f;
00265 Ogre::Real b = 1.0f - ((hcoef * topPos) + h);
00266 ogre2dRect->setCorners(l, t, r, b);
00267 }
00268 }
00269
00270 void SWidget::Move(const SPoint<int>& relativeMove)
00271 {
00272
00273 SetPosition(SPoint<int>(leftPos + relativeMove.x, topPos + relativeMove.y));
00274 }
00275
00276 void SWidget::SetZOrder(unsigned short newWidgetOrder)
00277 {
00278 zOrder = newWidgetOrder;
00279
00280
00281 if(isOverlayed)
00282 SWidgetManager::getSingleton().UpdateWidgetsZOrder();
00283 }
00284
00285 unsigned short SWidget::GetZOrder()
00286 {
00287 return zOrder;
00288 }
00289
00290 void SWidget::CreateTexture()
00291 {
00292
00293 assert((width!=0)&&(height!=0));
00294
00295
00296 DestroyTexture();
00297
00298
00299 if(!Ogre::Bitwise::isPO2(width) || !Ogre::Bitwise::isPO2(height))
00300 {
00301 Ogre::RenderSystem* ogreRenderSystem = Ogre::Root::getSingleton().getRenderSystem();
00302 if((!ogreRenderSystem->getCapabilities()->hasCapability(Ogre::RSC_NON_POWER_OF_2_TEXTURES)) || (ogreRenderSystem->getCapabilities()->getNonPOW2TexturesLimited()))
00303 compensateNPOT = true;
00304 }
00305
00306 if(compensateNPOT)
00307 {
00308 textureWidth = Ogre::Bitwise::firstPO2From(width);
00309 textureHeight = Ogre::Bitwise::firstPO2From(height);
00310 }
00311 else
00312 {
00313 textureWidth = width;
00314 textureHeight = height;
00315 }
00316
00317
00318 try
00319 {
00320 renderingTexture = Ogre::TextureManager::getSingleton().createManual(baseResourceName+"/Texture/"+name, baseResourceName, Ogre::TEX_TYPE_2D, textureWidth, textureHeight, 0, Ogre::PF_BYTE_BGRA, Ogre::TU_DYNAMIC_WRITE_ONLY_DISCARDABLE, this);
00321 }
00322 catch (Ogre::Exception &e)
00323 {
00324 Ogre::LogManager::getSingleton().getDefaultLog()->logMessage("An exception has occurred: "+ e.getDescription());
00325 renderingTexture.setNull();
00326 }
00327
00328
00329 Ogre::HardwarePixelBufferSharedPtr pixelBuffer = renderingTexture->getBuffer();
00330 pixelBuffer->lock(Ogre::HardwareBuffer::HBL_DISCARD);
00331 const Ogre::PixelBox& pixelBox = pixelBuffer->getCurrentLock();
00332 unsigned int textureDepth = Ogre::PixelUtil::getNumElemBytes(pixelBox.format);
00333 unsigned int texturePitch = (pixelBox.rowPitch*textureDepth);
00334 Ogre::uint8* pDest = static_cast<Ogre::uint8*>(pixelBox.data);
00335 memset(pDest, 0, textureHeight*texturePitch);
00336 pixelBuffer->unlock();
00337
00338
00339 if (originalTextureUnit != 0)
00340 {
00341 originalTextureUnit->setTextureName(baseResourceName+"/Texture/"+SWidget::name);
00342 renderingTextureUnit = originalTextureUnit;
00343 }
00344 else
00345 {
00346 if(!ogreOverlayMaterial.isNull())
00347 ogreOverlayMaterial->getTechnique(0)->getPass(0)->getTextureUnitState(0)->setTextureName(renderingTexture->getName());
00348 }
00349 }
00350
00351 void SWidget::DestroyTexture()
00352 {
00353
00354 if (!renderingTexture.isNull())
00355 {
00356
00357 Ogre::TextureManager::getSingleton().remove(renderingTexture->getHandle());
00358 renderingTexture.setNull();
00359 }
00360 }
00361
00362 void SWidget::CreateOverlay()
00363 {
00364 assert(!ogreOverlayMaterial.isNull());
00365
00366
00367 DestroyOverlay();
00368
00369
00370 ogreOverlayPanel = static_cast<Ogre::PanelOverlayElement*>(Ogre::OverlayManager::getSingleton().createOverlayElement("Panel", baseResourceName +"/Overlays/Panels/"+ name));
00371 ogreOverlayPanel->setMetricsMode(Ogre::GMM_PIXELS);
00372 ogreOverlayPanel->setMaterialName(ogreOverlayMaterial->getName());
00373 ogreOverlayPanel->setDimensions(width, height);
00374
00375 ogreOverlay = Ogre::OverlayManager::getSingleton().create(baseResourceName +"/Overlays/"+ name);
00376 ogreOverlay->add2D(ogreOverlayPanel);
00377
00378
00379
00380
00381
00382 SetPosition(SPoint<int>(leftPos, topPos));
00383 ogreOverlay->show();
00384 }
00385
00386 void SWidget::DestroyOverlay()
00387 {
00388 if(ogreOverlayPanel != 0)
00389 {
00390 Ogre::OverlayManager::getSingleton().destroyOverlayElement(ogreOverlayPanel);
00391 ogreOverlayPanel = 0;
00392 }
00393
00394 if(ogreOverlay != 0)
00395 {
00396 Ogre::OverlayManager::getSingleton().destroy(ogreOverlay);
00397 ogreOverlay = 0;
00398 }
00399 }
00400
00401 void SWidget::Create2D()
00402 {
00403 assert(!ogreOverlayMaterial.isNull());
00404
00405
00406 Destroy2D();
00407
00408
00409 ogre2dRect = new Ogre::Rectangle2D(true);
00410 SetPosition(SPoint<int>(leftPos, topPos));
00411 ogre2dRect->setMaterial(ogreOverlayMaterial->getName());
00412
00413
00414 ogre2dRect->setRenderQueueGroup(Ogre::RENDER_QUEUE_BACKGROUND);
00415
00416
00417 Ogre::AxisAlignedBox aabInf;
00418 aabInf.setInfinite();
00419 ogre2dRect->setBoundingBox(aabInf);
00420
00421
00422
00423
00424
00425
00426
00427 ogre2dNode = scene->GetOgreScenePointer()->getRootSceneNode()->createChildSceneNode(baseResourceName +"/Background/"+ name);
00428 ogre2dNode->attachObject(ogre2dRect);
00429 }
00430
00431 void SWidget::Destroy2D()
00432 {
00433 if(ogre2dRect != 0)
00434 {
00435 ogre2dRect->detachFromParent();
00436 scene->GetOgreScenePointer()->getRootSceneNode()->removeChild(ogre2dNode);
00437 scene->GetOgreScenePointer()->destroySceneNode(ogre2dNode);
00438 delete(ogre2dRect);
00439 ogre2dRect = 0;
00440 ogre2dNode = 0;
00441 }
00442 }
00443
00444 void SWidget::CreateMaterial()
00445 {
00446 assert((isOverlayed == true) || (is2DRect == true));
00447
00448
00449 DestroyMaterial();
00450
00451
00452 ogreOverlayMaterial = Ogre::MaterialManager::getSingleton().create(baseResourceName +"/Overlays/Panels/Materials/"+ name, baseResourceName);
00453 Ogre::Pass* matPass = ogreOverlayMaterial->getTechnique(0)->getPass(0);
00454 renderingTextureUnit = matPass->createTextureUnitState(renderingTexture->getName());
00455
00456 if (is2DRect)
00457 {
00458 matPass->setDepthCheckEnabled(false);
00459 matPass->setDepthWriteEnabled(false);
00460 matPass->setLightingEnabled(false);
00461 }
00462
00463 ApplyMaterialParameters(matPass, renderingTextureUnit);
00464 }
00465
00466 void SWidget::DestroyMaterial()
00467 {
00468 if (!ogreOverlayMaterial.isNull())
00469 {
00470
00471 Ogre::MaterialManager::getSingleton().remove(ogreOverlayMaterial->getHandle());
00472 ogreOverlayMaterial.setNull();
00473 renderingTextureUnit = 0;
00474 }
00475 }
00476
00477 void SWidget::ApplyMaterialParameters(Ogre::Pass* materialPassToModify, Ogre::TextureUnitState* materialTextureUnitToModify)
00478 {
00479 assert((materialPassToModify != 0) && (materialTextureUnitToModify != 0));
00480 if ((isTransparent || (opacity != 1.0f)) && ((materialPassToModify->getTextureUnitStateIndex(materialTextureUnitToModify) == 0) || (isOverlayed) || (is2DRect)))
00481 {
00482 materialPassToModify->setSceneBlending(Ogre::SBF_SOURCE_ALPHA, Ogre::SBF_ONE_MINUS_SOURCE_ALPHA);
00483 materialPassToModify->setDepthWriteEnabled(false);
00484 }
00485 else
00486 {
00487 materialPassToModify->setSceneBlending((isTransparent || (opacity != 1.0f)) ? Ogre::SBT_TRANSPARENT_ALPHA : Ogre::SBT_REPLACE);
00488
00489 if (!isTransparent && (opacity == 1.0f) && (!is2DRect))
00490 if (materialPassToModify->getTextureUnitStateIndex(materialTextureUnitToModify) == 0)
00491 materialPassToModify->setDepthWriteEnabled(true);
00492 }
00493
00494 if (!isOverlayed)
00495 materialTextureUnitToModify->setTextureFiltering(Ogre::FO_LINEAR , Ogre::FO_LINEAR , Ogre::FO_LINEAR);
00496 else
00497 materialTextureUnitToModify->setTextureFiltering(Ogre::FO_NONE, Ogre::FO_NONE, Ogre::FO_NONE);
00498
00499 if(opacity != 1.0f)
00500 renderingTextureUnit->setAlphaOperation(Ogre::LBX_MODULATE, Ogre::LBS_TEXTURE, Ogre::LBS_MANUAL, 1, opacity);
00501 else
00502 renderingTextureUnit->setAlphaOperation(Ogre::LBX_MODULATE, Ogre::LBS_TEXTURE, Ogre::LBS_CURRENT);
00503 }
00504
00505 void SWidget::loadResource(Ogre::Resource* resource)
00506 {
00507 Ogre::Texture* tex = static_cast<Ogre::Texture*>(resource);
00508 tex->setTextureType(Ogre::TEX_TYPE_2D);
00509 tex->setWidth(textureWidth);
00510 tex->setHeight(textureHeight);
00511 tex->setNumMipmaps(0);
00512 tex->setFormat(Ogre::PF_BYTE_BGRA);
00513 tex->setUsage(Ogre::TU_DYNAMIC_WRITE_ONLY_DISCARDABLE);
00514 tex->createInternalResources();
00515
00516 forceRenderingUpdate = true;
00517 }
00518
00519 void SWidget::_SetOgreOverlayZOrder(unsigned short overlayZOrder)
00520 {
00521 assert(ogreOverlay != 0);
00522 ogreOverlay->setZOrder(overlayZOrder);
00523 }
00524
00525 void SWidget::SetTopOnFocus(bool enableWidgetTopOnFocus)
00526 {
00527 topOnFocus = enableWidgetTopOnFocus;
00528 }
00529
00530 bool SWidget::GetTopOnFocus()
00531 {
00532 return topOnFocus;
00533 }
00534
00535 void SWidget::SetForeground(bool enableWidgetForeground)
00536 {
00537 isPriorized = enableWidgetForeground;
00538 SWidgetManager::getSingleton().UpdateWidgetsZOrder();
00539 }
00540
00541 bool SWidget::GetForeground()
00542 {
00543 return isPriorized;
00544 }
00545
00546 void SWidget::TakeFocus()
00547 {
00548 SWidgetManager::getSingleton().UpdateFocusedWidget(this);
00549 }
00550
00551 bool SWidget::HasFocus()
00552 {
00553 if(SWidgetManager::getSingleton().GetFocusedWidget() == this)
00554 return true;
00555 else
00556 return false;
00557 }
00558
00559 bool SWidget::GetMouseOver()
00560 {
00561 return mouseIsOver;
00562 }
00563
00564 void SWidget::SetOpacity(float widgetOpacity)
00565 {
00566
00567 if(widgetOpacity > 1)
00568 widgetOpacity = 1;
00569 else if(widgetOpacity < 0)
00570 widgetOpacity = 0;
00571
00572
00573 opacity = widgetOpacity;
00574
00575 if((isOverlayed) || (is2DRect))
00576 ApplyMaterialParameters(ogreOverlayMaterial->getTechnique(0)->getPass(0), renderingTextureUnit);
00577 else
00578 ApplyMaterialParameters(originalMaterialPass, renderingTextureUnit);
00579 }
00580
00581 float SWidget::GetOpacity()
00582 {
00583 return opacity;
00584 }
00585
00586 void SWidget::Show(bool fade, unsigned short fadeDurationMS)
00587 {
00588 if(ogreOverlay != 0)
00589 ogreOverlay->show();
00590
00591 if(ogre2dRect != 0)
00592 ogre2dRect->setVisible(true);
00593 }
00594
00595 void SWidget::Hide(bool fade, unsigned short fadeDurationMS)
00596 {
00597 if(ogreOverlay != 0)
00598 ogreOverlay->hide();
00599
00600 if(ogre2dRect != 0)
00601 ogre2dRect->setVisible(false);
00602
00603 }
00604
00605 bool SWidget::GetVisible()
00606 {
00607 if(ogreOverlay != 0)
00608 return ogreOverlay->isVisible();
00609 else if(ogre2dRect != 0)
00610 return ogre2dRect->isVisible();
00611 else
00612 return true;
00613 }
00614
00615 void SWidget::SetTransparency(bool enableTransparency)
00616 {
00617 if(enableTransparency != isTransparent)
00618 {
00619 isTransparent = enableTransparency;
00620 SetTransparencyImpl(isTransparent);
00621
00622 if((isOverlayed) || (is2DRect))
00623 ApplyMaterialParameters(ogreOverlayMaterial->getTechnique(0)->getPass(0), renderingTextureUnit);
00624 else
00625 ApplyMaterialParameters(originalMaterialPass, renderingTextureUnit);
00626 }
00627 }
00628
00629 bool SWidget::GetTransparency()
00630 {
00631 return isTransparent;
00632 }
00633
00634 void SWidget::SetKeyboardEnable(bool enableKeyboardOnWidget)
00635 {
00636 keyboardEnable = enableKeyboardOnWidget;
00637 SetKeyboardEnableImpl(enableKeyboardOnWidget);
00638 }
00639
00640 bool SWidget::GetKeyboardEnable()
00641 {
00642 return keyboardEnable;
00643 }
00644
00645 void SWidget::SetMouseEnable(bool enableMouseOnWidget)
00646 {
00647 mouseEnable = enableMouseOnWidget;
00648 SetMouseEnableImpl(enableMouseOnWidget);
00649 }
00650
00651 bool SWidget::GetMouseEnable()
00652 {
00653 return mouseEnable;
00654 }
00655
00656 std::string SWidget::CheckUrl(const std::string& url)
00657 {
00658 std::string httpPrefix = "http://";
00659 std::string httpsPrefix = "https://";
00660 std::string ftpPrefix = "ftp://";
00661 std::string filePrefix = "file://";
00662
00663 std::string urlString = url;
00664 boost::to_lower(urlString);
00665
00666
00667 if((urlString.substr(0, httpPrefix.length()) != httpPrefix)
00668 &&(urlString.substr(0, httpsPrefix.length()) != httpsPrefix)
00669 &&(urlString.substr(0, ftpPrefix.length()) != ftpPrefix)
00670 &&(urlString.substr(0, filePrefix.length()) != filePrefix))
00671 {
00672 urlString = httpPrefix + url;
00673 }
00674 else
00675 {
00676 urlString = url;
00677 }
00678
00679 return urlString;
00680 }
00681
00682 void SWidget::SetIgnoreTransparentPixels(bool widgetIgnoreTransparentPixels, float tresholdColor)
00683 {
00684 transparentIgnorePixels = widgetIgnoreTransparentPixels;
00685 transparentTresholdColor = tresholdColor;
00686 }
00687
00688 bool SWidget::GetIgnoreTransparentPixels()
00689 {
00690 return transparentIgnorePixels;
00691 }
00692
00693 float SWidget::GetIgnoreTransparentPixelsTreshold()
00694 {
00695 return transparentTresholdColor;
00696 }
00697
00698 }