// ----------------------------------------------------------------------------- // Static function to check if an archive has sufficient texture related // entries, and if not, prompts the user to either create or import them. // Returns true if the entries exist, false otherwise // ----------------------------------------------------------------------------- bool TextureXEditor::setupTextureEntries(Archive* archive) { using Format = TextureXList::Format; // Check any archive was given if (!archive) return false; // Search archive for any ZDoom TEXTURES entries Archive::SearchOptions options; options.match_type = EntryType::fromId("zdtextures"); auto entry_tx = archive->findFirst(options); // Find any TEXTURES entry // If it's found, we're done if (entry_tx) return true; // Search archive for any texture-related entries options.match_type = EntryType::fromId("texturex"); entry_tx = archive->findFirst(options); // Find any TEXTUREx entry options.match_type = EntryType::fromId("pnames"); auto entry_pnames = archive->findFirst(options); // Find any PNAMES entry // If both exist, we're done if (entry_tx && entry_pnames) return true; // Todo: accept entry_tx without pnames if the textures are in Jaguar mode // If no TEXTUREx entry exists if (!entry_tx) { // No TEXTUREx entries found, so ask if the user wishes to create one wxMessageDialog dlg( nullptr, "The archive does not contain any texture definitions (TEXTURE1/2 or TEXTURES). " "Do you wish to create or import a texture definition list?", "No Texture Definitions Found", wxYES_NO); if (dlg.ShowModal() == wxID_YES) { CreateTextureXDialog ctxd(nullptr); while (true) { // Check if cancelled if (ctxd.ShowModal() == wxID_CANCEL) return false; if (ctxd.createNewSelected()) { // User selected to create a new TEXTUREx list ArchiveEntry* texturex = nullptr; // Doom or Strife TEXTUREx if (ctxd.getSelectedFormat() == Format::Normal || ctxd.getSelectedFormat() == Format::Strife11) { // Create texture list TextureXList txlist; txlist.setFormat(ctxd.getSelectedFormat()); // Create patch table PatchTable ptt; // Create dummy patch auto dpatch = App::archiveManager().programResourceArchive()->entryAtPath("s3dummy.lmp"); archive->addEntry(dpatch, "patches", true); ptt.addPatch("S3DUMMY"); // Create dummy texture auto dummytex = std::make_unique<CTexture>(); dummytex->setName("S3DUMMY"); dummytex->addPatch("S3DUMMY", 0, 0); dummytex->setWidth(128); dummytex->setHeight(128); dummytex->setScale({ 0., 0. }); // Add dummy texture to list // (this serves two purposes - supplies the special 'invalid' texture by default, // and allows the texturex format to be detected) txlist.addTexture(std::move(dummytex)); // Add empty PNAMES entry to archive entry_pnames = archive->addNewEntry("PNAMES"); ptt.writePNAMES(entry_pnames); entry_pnames->setType(EntryType::fromId("pnames")); entry_pnames->setExtensionByType(); // Add empty TEXTURE1 entry to archive texturex = archive->addNewEntry("TEXTURE1"); txlist.writeTEXTUREXData(texturex, ptt); texturex->setType(EntryType::fromId("texturex")); texturex->setExtensionByType(); } else if (ctxd.getSelectedFormat() == Format::Textures) { // Create texture list TextureXList txlist; txlist.setFormat(Format::Textures); // Add empty TEXTURES entry to archive texturex = archive->addNewEntry("TEXTURES"); texturex->setType(EntryType::fromId("zdtextures")); texturex->setExtensionByType(); return false; } if (!texturex) return false; } else { // User selected to import texture definitions from the base resource archive auto bra = App::archiveManager().baseResourceArchive(); if (!bra) { wxMessageBox( "No Base Resource Archive is opened, please select/open one", "Error", wxICON_ERROR); continue; } // Find all relevant entries in the base resource archive Archive::SearchOptions opt; opt.match_type = EntryType::fromId("texturex"); auto import_tx = bra->findAll(opt); // Find all TEXTUREx entries opt.match_type = EntryType::fromId("pnames"); auto import_pnames = bra->findLast(opt); // Find last PNAMES entry // Check enough entries exist if (import_tx.empty() || !import_pnames) { wxMessageBox( "The selected Base Resource Archive does not contain " "sufficient texture definition entries", "Error", wxICON_ERROR); continue; } // Copy TEXTUREx entries over to current archive for (auto& a : import_tx) { auto texturex = archive->addEntry(a, "global", true); texturex->setType(EntryType::fromId("texturex")); texturex->setExtensionByType(); } // Copy PNAMES entry over to current archive entry_pnames = archive->addEntry(import_pnames, "global", true); entry_pnames->setType(EntryType::fromId("pnames")); entry_pnames->setExtensionByType(); } break; } return true; } // 'No' clicked return false; } else // TEXTUREx entry exists { // TODO: Probably a better idea here to get the user to select an archive to import the patch table from // If no PNAMES entry was found, search resource archives if (!entry_pnames) { Archive::SearchOptions opt; opt.match_type = EntryType::fromId("pnames"); entry_pnames = App::archiveManager().findResourceEntry(opt, archive); } // If no PNAMES entry is found at all, show an error and abort // TODO: ask user to select appropriate base resource archive if (!entry_pnames) { wxMessageBox("PNAMES entry not found!", wxMessageBoxCaptionStr, wxICON_ERROR); return false; } return true; } return false; }
void Block::switchWidthAndHeight(void) { int temp = getWidth(); setWidth(getHeight()); setHeight(temp); }
void VideoPlayer::parse(QVariantMap qMap) { setWidth(qMap["width"].toInt()); setEmbedCode(qMap["embed_code"].toString()); }
WidgetToggle::WidgetToggle(std::string name, bool initState) : Widget(),state(initState), name(name), listener(NULL) { setListenToMouse(true); setWidth(1); setHeight(1); }
void Button::adjustSize() { setWidth(getFont()->getWidth(mCaption) + 2*mSpacing); setHeight(getFont()->getHeight() + 2*mSpacing); }
void Movie::init() { if (_initialized) return; State::init(); setFullscreen(true); setModal(true); Game::getInstance()->mouse()->pushState(Input::Mouse::Cursor::NONE); auto renderer = Game::getInstance()->renderer(); setPosition((renderer->size() - Point(640, 320)) / 2); auto lst = ResourceManager::getInstance()->lstFileType("data/movies.lst"); std::string movie = "art/cuts/" + lst->strings()->at(_id); auto cfglst = ResourceManager::getInstance()->lstFileType("data/moviecfgs.lst"); std::string moviecfgfile = "art/cuts/" + cfglst->strings()->at(_id); _effects.push_back({0,1, 0, 0, 0, 1}); if (cfglst->strings()->at(_id)!="reserved.cfg") { auto moviecfg = ResourceManager::getInstance()->datFileItem(moviecfgfile); //parse ini moviecfg->setPosition(0); std::istream str(moviecfg); auto inifile = new Ini::Parser(str); auto ini = inifile->parse(); int total_effects = ini->section("info")->propertyInt("total_effects",0); auto effect_frames = ini->section("info")->propertyArray("effect_frames"); for (int i =0;i<total_effects;i++) { unsigned int effect_frame = effect_frames.at(i).intValue(); std::string effect_section = effect_frames.at(i).value(); int dir = (ini->section(effect_section)->propertyString("fade_type","in") == "in" ? -1 : 1); int steps = ini->section(effect_section)->propertyInt("fade_steps",0); auto colors = ini->section(effect_section)->propertyArray("fade_color"); int r = colors[0].intValue()*4; int g = colors[1].intValue()*4; int b = colors[2].intValue()*4; _effects.push_back({effect_frame, dir, r, g, b, steps/15*1000}); } } else { _effects.push_back({1,-1, 0, 0, 0, 1}); } auto sublst = ResourceManager::getInstance()->lstFileType("data/subtitles.lst"); std::string subfile = "text/english/cuts/" + sublst->strings()->at(_id); if (sublst->strings()->at(_id)!="reserved.sve") { _subs = ResourceManager::getInstance()->sveFileType(subfile); if (_subs) _hasSubs = true; } addUI("movie", new UI::MvePlayer(ResourceManager::getInstance()->mveFileType(movie))); auto font0_ffffffff = ResourceManager::getInstance()->font("font1.aaf"); auto subLabel = new UI::TextArea("", 0, 320+35); subLabel->setFont(font0_ffffffff, {0xFF, 0xFF, 0xFF, 0xFF}); subLabel->setWidth(640); subLabel->setHorizontalAlign(UI::TextArea::HorizontalAlign::CENTER); addUI("subs",subLabel); if (_hasSubs) _nextSubLine = _subs->getSubLine(0); else _nextSubLine = std::pair<int,std::string>(999999,""); }
QSize TextDocumentAdapter::GetPageSize (int) const { auto size = Doc_->pageSize (); size.setWidth (std::ceil (size.width ())); return size.toSize (); }
void BrowserBox::addRow(const std::string &row) { std::string tmp = row; std::string newRow; BROWSER_LINK bLink; std::string::size_type idx1, idx2, idx3; gcn::Font *font = getFont(); // Use links and user defined colors if (mUseLinksAndUserColors) { // Check for links in format "@@link|Caption@@" idx1 = tmp.find("@@"); while (idx1 != std::string::npos) { idx2 = tmp.find("|", idx1); idx3 = tmp.find("@@", idx2); if (idx2 == std::string::npos || idx3 == std::string::npos) break; bLink.link = tmp.substr(idx1 + 2, idx2 - (idx1 + 2)); bLink.caption = tmp.substr(idx2 + 1, idx3 - (idx2 + 1)); bLink.y1 = mTextRows.size() * font->getHeight(); bLink.y2 = bLink.y1 + font->getHeight(); newRow += tmp.substr(0, idx1); std::string tmp2 = newRow; idx1 = tmp2.find("##"); while (idx1 != std::string::npos) { tmp2.erase(idx1, 3); idx1 = tmp2.find("##"); } bLink.x1 = font->getWidth(tmp2) - 1; bLink.x2 = bLink.x1 + font->getWidth(bLink.caption) + 1; mLinks.push_back(bLink); newRow += "##<" + bLink.caption; tmp.erase(0, idx3 + 2); if (!tmp.empty()) { newRow += "##>"; } idx1 = tmp.find("@@"); } newRow += tmp; } // Don't use links and user defined colors else { newRow = row; } mTextRows.push_back(newRow); //discard older rows when a row limit has been set if (mMaxRows > 0) { while (mTextRows.size() > mMaxRows) { mTextRows.pop_front(); for (unsigned int i = 0; i < mLinks.size(); i++) { mLinks[i].y1 -= font->getHeight(); mLinks[i].y2 -= font->getHeight(); if (mLinks[i].y1 < 0) mLinks.erase(mLinks.begin() + i); } } } // Auto size mode if (mMode == AUTO_SIZE) { std::string plain = newRow; for (idx1 = plain.find("##"); idx1 != std::string::npos; idx1 = plain.find("##")) plain.erase(idx1, 3); // Adjust the BrowserBox size int w = font->getWidth(plain); if (w > getWidth()) setWidth(w); } if (mMode == AUTO_WRAP) { unsigned int y = 0; unsigned int nextChar; const char *hyphen = "~"; int hyphenWidth = font->getWidth(hyphen); int x = 0; for (TextRowIterator i = mTextRows.begin(); i != mTextRows.end(); i++) { std::string row = *i; for (unsigned int j = 0; j < row.size(); j++) { std::string character = row.substr(j, 1); x += font->getWidth(character); nextChar = j + 1; // Wraping between words (at blank spaces) if ((nextChar < row.size()) && (row.at(nextChar) == ' ')) { int nextSpacePos = row.find(" ", (nextChar + 1)); if (nextSpacePos <= 0) { nextSpacePos = row.size() - 1; } int nextWordWidth = font->getWidth( row.substr(nextChar, (nextSpacePos - nextChar))); if ((x + nextWordWidth + 10) > getWidth()) { x = 15; // Ident in new line y += 1; j++; } } // Wrapping looong lines (brutal force) else if ((x + 2 * hyphenWidth) > getWidth()) { x = 15; // Ident in new line y += 1; } } } setHeight(font->getHeight() * (mTextRows.size() + y)); } else { setHeight(font->getHeight() * mTextRows.size()); } }
/*! Sets the size of the rectangle to size. Changes x2 and y2 only. */ void QwtDoubleRect::setSize(const QwtDoubleSize &size) { setWidth(size.width()); setHeight(size.height()); }
void Image::setSize(Size size) { setWidth(size.getWidth()); setHeight(size.getHeight()); }
Shape::Shape(int width, int height){ setWidth(width); setHeight(height); }
void FFContainer::setDimension(const gcn::Rectangle &dimension) { setPosition(dimension.x, dimension.y); setWidth(dimension.width); setHeight(dimension.height); }
void SpriteSheet::updateSizeInfo() { m_frameWidth = m_pixMap->width() / m_frames; setWidth(m_frameWidth); setHeight(m_pixMap->height()); }
void ExploreLiveView::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget * widget) { if(!isReady) return; prePaint(painter); postPaint(painter); auto glwidget = (Viewer*)widget; if (glwidget && meshes.size()) { QRectF parentRect = parentItem()->sceneBoundingRect(); if (isCacheImage && cachedImage.isNull()) { QOpenGLContext context; context.setShareContext(glwidget->context()); context.setFormat(glwidget->format()); context.create(); QOffscreenSurface m_offscreenSurface; m_offscreenSurface.setFormat(context.format()); m_offscreenSurface.create(); context.makeCurrent(&m_offscreenSurface); QOpenGLFramebufferObjectFormat fboformat; fboformat.setAttachment(QOpenGLFramebufferObject::CombinedDepthStencil); QOpenGLFramebufferObject renderFbo(cacheImageSize*1.5, cacheImageSize, fboformat); renderFbo.bind(); glwidget->glEnable(GL_DEPTH_TEST); glwidget->glEnable(GL_BLEND); glwidget->glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glwidget->glCullFace(GL_BACK); glwidget->glClearColor(0,0,0,0); glwidget->glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glwidget->glViewport(0, 0, cacheImageSize*1.5, cacheImageSize); // XXX Fix // glwidget->glPointSize(10); // Draw aux meshes for (auto mesh : meshes) { if (mesh.isPoints) glwidget->drawOrientedPoints(mesh.points, mesh.normals, mesh.color, glwidget->pvm); else glwidget->drawTriangles(mesh.color, mesh.points, mesh.normals, glwidget->pvm); } glwidget->glDisable(GL_DEPTH_TEST); glwidget->glFlush(); renderFbo.release(); cachedImage = renderFbo.toImage(); isReady = true; // Thanks for sharing! glwidget->makeCurrent(); } // Draw as image if(isCacheImage) { int w = shapeRect.width(); painter->drawImage(w * -0.5, w * -0.5, cachedImage.scaledToWidth(w)); } if(!isCacheImage) { auto r = shapeRect; // scale view double s = 1.5; r.setWidth(r.width() * s); r.setHeight(r.height() * s); r.moveCenter(this->mapToScene(boundingRect().center())); painter->beginNativePainting(); auto v = scene()->views().first(); QPoint viewDelta = v->mapFromScene(r.topLeft()); if (viewDelta.manhattanLength() > 5) r.moveTopLeft(viewDelta); auto camera = ExploreProcess::defaultCamera(document->extent().length()); glwidget->eyePos = camera.first; glwidget->pvm = camera.second; glwidget->glViewport(r.left(), v->height() - r.height() - r.top(), r.width(), r.height()); // Clipping OpenGL glwidget->glEnable(GL_SCISSOR_TEST); glwidget->glScissor(parentRect.x(), v->height() - parentRect.height() - parentRect.top(), parentRect.width(), parentRect.height()); glwidget->glClear(GL_DEPTH_BUFFER_BIT); // FIX XXX // glwidget->glPointSize(2); // Draw aux meshes for (auto mesh : meshes) { if (mesh.isPoints) glwidget->drawOrientedPoints(mesh.points, mesh.normals, mesh.color, glwidget->pvm); else glwidget->drawTriangles(mesh.color, mesh.points, mesh.normals, glwidget->pvm); } glwidget->glDisable(GL_SCISSOR_TEST); painter->endNativePainting(); } } }
bool EFX::loadXML(const QDomElement* root) { QString str; QDomNode node; QDomElement tag; Q_ASSERT(root != NULL); if (root->tagName() != KXMLQLCFunction) { qWarning() << "Function node not found!"; return false; } if (root->attribute(KXMLQLCFunctionType) != typeToString(Function::EFX)) { qWarning("Function is not an EFX!"); return false; } /* Load EFX contents */ node = root->firstChild(); while (node.isNull() == false) { tag = node.toElement(); if (tag.tagName() == KXMLQLCBus) { /* Bus */ str = tag.attribute(KXMLQLCBusRole); setBus(tag.text().toUInt()); } else if (tag.tagName() == KXMLQLCEFXFixture) { EFXFixture* ef = new EFXFixture(this); ef->loadXML(&tag); if (ef->fixture() != Fixture::invalidId()) { if (addFixture(ef) == false) delete ef; } } else if (tag.tagName() == KXMLQLCEFXPropagationMode) { /* Propagation mode */ setPropagationMode(stringToPropagationMode(tag.text())); } else if (tag.tagName() == KXMLQLCEFXAlgorithm) { /* Algorithm */ setAlgorithm(stringToAlgorithm(tag.text())); } else if (tag.tagName() == KXMLQLCFunctionDirection) { /* Direction */ setDirection(Function::stringToDirection(tag.text())); } else if (tag.tagName() == KXMLQLCFunctionRunOrder) { /* Run Order */ setRunOrder(Function::stringToRunOrder(tag.text())); } else if (tag.tagName() == KXMLQLCEFXWidth) { /* Width */ setWidth(tag.text().toInt()); } else if (tag.tagName() == KXMLQLCEFXHeight) { /* Height */ setHeight(tag.text().toInt()); } else if (tag.tagName() == KXMLQLCEFXRotation) { /* Rotation */ setRotation(tag.text().toInt()); } else if (tag.tagName() == KXMLQLCEFXAxis) { /* Axes */ loadXMLAxis(&tag); } else { qWarning() << "Unknown EFX tag:" << tag.tagName(); } node = node.nextSibling(); } return true; }
void TextAreaOverlayElement::updatePositionGeometry() { float *pVert; if (mpFont.isNull()) { // not initialised yet, probably due to the order of creation in a template return; } size_t charlen = mCaption.size(); checkMemoryAllocation( charlen ); mRenderOp.vertexData->vertexCount = charlen * 6; // Get position / texcoord buffer const HardwareVertexBufferSharedPtr& vbuf = mRenderOp.vertexData->vertexBufferBinding->getBuffer(POS_TEX_BINDING); pVert = static_cast<float*>( vbuf->lock(HardwareBuffer::HBL_DISCARD) ); float largestWidth = 0; float left = _getDerivedLeft() * 2.0f - 1.0f; float top = -( (_getDerivedTop() * 2.0f ) - 1.0f ); // Derive space with from a number 0 if (mSpaceWidth == 0) { mSpaceWidth = mpFont->getGlyphAspectRatio(UNICODE_ZERO) * mCharHeight * 2.0f * mViewportAspectCoef; } // Use iterator DisplayString::iterator i, iend; iend = mCaption.end(); bool newLine = true; for( i = mCaption.begin(); i != iend; ++i ) { if( newLine ) { Real len = 0.0f; for( DisplayString::iterator j = i; j != iend; j++ ) { Font::CodePoint character = OGRE_DEREF_DISPLAYSTRING_ITERATOR(j); if (character == UNICODE_CR || character == UNICODE_NEL || character == UNICODE_LF) { break; } else if (character == UNICODE_SPACE) // space { len += mSpaceWidth; } else { len += mpFont->getGlyphAspectRatio(character) * mCharHeight * 2.0f * mViewportAspectCoef; } } if( mAlignment == Right ) left -= len; else if( mAlignment == Center ) left -= len * 0.5f; newLine = false; } Font::CodePoint character = OGRE_DEREF_DISPLAYSTRING_ITERATOR(i); if (character == UNICODE_CR || character == UNICODE_NEL || character == UNICODE_LF) { left = _getDerivedLeft() * 2.0f - 1.0f; top -= mCharHeight * 2.0f; newLine = true; // Also reduce tri count mRenderOp.vertexData->vertexCount -= 6; // consume CR/LF in one if (character == UNICODE_CR) { DisplayString::iterator peeki = i; peeki++; if (peeki != iend && OGRE_DEREF_DISPLAYSTRING_ITERATOR(peeki) == UNICODE_LF) { i = peeki; // skip both as one newline // Also reduce tri count mRenderOp.vertexData->vertexCount -= 6; } } continue; } else if (character == UNICODE_SPACE) // space { // Just leave a gap, no tris left += mSpaceWidth; // Also reduce tri count mRenderOp.vertexData->vertexCount -= 6; continue; } Real horiz_height = mpFont->getGlyphAspectRatio(character) * mViewportAspectCoef ; const Font::UVRect& uvRect = mpFont->getGlyphTexCoords(character); // each vert is (x, y, z, u, v) //------------------------------------------------------------------------------------- // First tri // // Upper left *pVert++ = left; *pVert++ = top; *pVert++ = -1.0; *pVert++ = uvRect.left; *pVert++ = uvRect.top; top -= mCharHeight * 2.0f; // Bottom left *pVert++ = left; *pVert++ = top; *pVert++ = -1.0; *pVert++ = uvRect.left; *pVert++ = uvRect.bottom; top += mCharHeight * 2.0f; left += horiz_height * mCharHeight * 2.0f; // Top right *pVert++ = left; *pVert++ = top; *pVert++ = -1.0; *pVert++ = uvRect.right; *pVert++ = uvRect.top; //------------------------------------------------------------------------------------- //------------------------------------------------------------------------------------- // Second tri // // Top right (again) *pVert++ = left; *pVert++ = top; *pVert++ = -1.0; *pVert++ = uvRect.right; *pVert++ = uvRect.top; top -= mCharHeight * 2.0f; left -= horiz_height * mCharHeight * 2.0f; // Bottom left (again) *pVert++ = left; *pVert++ = top; *pVert++ = -1.0; *pVert++ = uvRect.left; *pVert++ = uvRect.bottom; left += horiz_height * mCharHeight * 2.0f; // Bottom right *pVert++ = left; *pVert++ = top; *pVert++ = -1.0; *pVert++ = uvRect.right; *pVert++ = uvRect.bottom; //------------------------------------------------------------------------------------- // Go back up with top top += mCharHeight * 2.0f; float currentWidth = (left + 1)/2 - _getDerivedLeft(); if (currentWidth > largestWidth) { largestWidth = currentWidth; } } // Unlock vertex buffer vbuf->unlock(); if (mMetricsMode == GMM_PIXELS) { // Derive parametric version of dimensions Real vpWidth; vpWidth = (Real) (OverlayManager::getSingleton().getViewportWidth()); largestWidth *= vpWidth; }; if (getWidth() < largestWidth) setWidth(largestWidth); }
void Camera::setSize(int width_arg, int height_arg) { setWidth(width_arg); setHeight(height_arg); }
void RectangleBounds::setDimensions( float w, float h ) { setWidth( w ); setHeight( h ); }
// on "init" you need to initialize your instance bool Scene102::init() { ////////////////////////////// // 1. super init first if (!Layer::init()) { return false; } Size visibleSize = Director::getInstance()->getVisibleSize(); Vec2 origin = Director::getInstance()->getVisibleOrigin(); Size size; SpriteFrameCache::getInstance()->addSpriteFramesWithFile("Scene101/scene101.plist"); SpriteFrameCache::getInstance()->addSpriteFramesWithFile("Scene101/scene101bg.plist"); //以 Sprite 作為背景 Sprite *bkimage = Sprite::createWithSpriteFrameName("s101bgimg.png"); // 使用 create 函式,給予檔名即可 bkimage->setPosition(Vec2(visibleSize.width / 2 + origin.x, visibleSize.height / 2 + origin.y)); // 位置通常放置在螢幕正中間 this->addChild(bkimage, 0); // 自行增加 sprite 將 bean01.png 到螢幕正中間 // create and initialize a label, add a label shows "Scene 101" auto label = Label::createWithTTF("Scene 101", "fonts/Marker Felt.ttf", 32); label->setAlignment(cocos2d::TextHAlignment::CENTER); // 預設靠左對齊 label->setWidth(100); // 設定每行文字的顯示寬度 size = label->getContentSize(); label->setPosition(Vec2(origin.x + visibleSize.width - size.width / 2 - 10, origin.y + visibleSize.height - size.height / 2 - 10)); this->addChild(label, 1); this->_sceneno = 102; strcpy(this->_cSceneNo, "Scene 102"); //一般(非中文字)文字的顯示方式 _label1 = Label::createWithBMFont("fonts/couriernew32.fnt", "Scene 101"); size = _label1->getContentSize(); _label1->setColor(Color3B::WHITE); _label1->setPosition(Vec2(origin.x + visibleSize.width / 2, origin.y + visibleSize.height - size.height)); this->addChild(_label1, 1); // 中文字的顯示方式 auto strings = FileUtils::getInstance()->getValueMapFromFile("scene101/strings.xml"); std::string str1 = strings["chinese1"].asString(); std::string str2 = strings["chinese2"].asString(); auto label2 = Label::createWithBMFont("fonts/hansans48.fnt", str1); auto label3 = Label::createWithBMFont("fonts/hansans48.fnt", str2); size = label2->getContentSize(); label2->setColor(Color3B(255, 238, 217)); label2->setPosition(Vec2(origin.x + visibleSize.width / 2, origin.y + visibleSize.height - 80 - size.height)); this->addChild(label2, 1); label3->setColor(Color3B(250, 251, 170)); size = label3->getContentSize(); label3->setPosition(Vec2(origin.x + visibleSize.width / 2, origin.y + visibleSize.height - 140 - size.height)); this->addChild(label3, 1); // add Return Button this->returnbtn = Sprite::createWithSpriteFrameName("returnbtn.png"); size = returnbtn->getContentSize(); this->returnbtn->setPosition(Vec2(origin.x + size.width / 2 + 5, origin.y + visibleSize.height - size.height / 2 - 5)); Point pos = returnbtn->getPosition(); this->rectReturn = Rect(pos.x - size.width / 2, pos.y - size.height / 2, size.width, size.height); this->addChild(returnbtn, 1); // add Replay Button this->replaybtn = Sprite::createWithSpriteFrameName("replaybtn.png"); size = replaybtn->getContentSize(); this->replaybtn->setPosition(Vec2(origin.x + size.width / 2 + 90, origin.y + visibleSize.height - size.height / 2 - 5)); pos = replaybtn->getPosition(); this->rectReplay = Rect(pos.x - size.width / 2, pos.y - size.height / 2, size.width, size.height); this->addChild(replaybtn, 1); // add Cuber Button this->cuberbtn = Sprite::createWithSpriteFrameName("cuberbtn1.png"); size = cuberbtn->getContentSize(); this->cuberbtn->setPosition(Vec2(origin.x + visibleSize.width - size.width / 2, origin.y + visibleSize.height - size.height / 2 - 60)); pos = cuberbtn->getPosition(); this->rectCuber = Rect(pos.x - size.width / 2, pos.y - size.height / 2, size.width, size.height); this->addChild(cuberbtn, 1); _listener1 = EventListenerTouchOneByOne::create(); //創建一個一對一的事件聆聽器 _listener1->onTouchBegan = CC_CALLBACK_2(Scene102::onTouchBegan, this); //加入觸碰開始事件 _listener1->onTouchMoved = CC_CALLBACK_2(Scene102::onTouchMoved, this); //加入觸碰移動事件 _listener1->onTouchEnded = CC_CALLBACK_2(Scene102::onTouchEnded, this); //加入觸碰離開事件 this->_eventDispatcher->addEventListenerWithSceneGraphPriority(_listener1, this); //加入剛創建的事件聆聽器 this->schedule(CC_SCHEDULE_SELECTOR(Scene102::doStep)); return true; }
void Inventory::init() { if (_initialized) return; State::init(); setModal(true); setFullscreen(false); auto game = Game::getInstance(); auto panelHeight = Game::getInstance()->locationState()->playerPanelState()->height(); setX((game->renderer()->width() - 499)/2); // 499x377 = art/intrface/invbox.frm setY((game->renderer()->height() - 377 - panelHeight)/2); addUI("background", new Image("art/intrface/invbox.frm")); getActiveUI("background")->addEventHandler("mouserightclick", [this](Event* event){ this->backgroundRightClick(dynamic_cast<MouseEvent*>(event)); }); addUI("button_up", new ImageButton(ImageButton::TYPE_INVENTORY_UP_ARROW, 128, 40)); addUI("button_down", new ImageButton(ImageButton::TYPE_INVENTORY_DOWN_ARROW, 128, 65)); addUI("button_done", new ImageButton(ImageButton::TYPE_SMALL_RED_CIRCLE, 438, 328)); getActiveUI("button_done")->addEventHandler("mouseleftclick", [this](Event* event){ this->onDoneButtonClick(dynamic_cast<MouseEvent*>(event)); }); // screen auto screenX = 300; auto screenY = 47; auto player = Game::getInstance()->player(); addUI("player_name", new TextArea(player->name(), screenX, screenY)); auto line1 = new Image(142, 1); line1->setX(screenX); line1->setY(screenY+16); line1->texture()->fill(0x3ff800ff); // default green color std::string statsLabels; for (unsigned int i = 0; i != 7; ++i) statsLabels += _t(MSG_INVENTORY, i) + "\n"; addUI("label_stats", new TextArea(statsLabels, screenX, screenY + 10*2)); std::string statsValues; for (unsigned int i = 0; i != 7; ++i) statsValues += std::to_string(player->stat(i)) + "\n"; addUI("label_stats_values", new TextArea(statsValues, screenX + 22, screenY + 20)); std::stringstream ss; for (unsigned int i=7; i<14; i++) { ss << _t(MSG_INVENTORY, i) << "\n"; } auto textLabel = new TextArea(ss.str(), screenX+40, screenY+20); // label: hit points ss.str(""); ss << player->hitPoints(); ss << "/"; ss << player->hitPointsMax(); auto hitPointsLabel = new TextArea(ss.str(), screenX+94, screenY+20); hitPointsLabel->setWidth(46)->setHorizontalAlign(TextArea::HORIZONTAL_ALIGN_RIGHT); // label: armor class ss.str(""); ss << player->armorClass(); auto armorClassLabel = new TextArea(ss.str(), screenX+94, screenY+30); armorClassLabel->setWidth(46)->setHorizontalAlign(TextArea::HORIZONTAL_ALIGN_RIGHT); // armorSlot, leftHand, rightHand Game::GameArmorItemObject* armorSlot = player->armorSlot(); Game::GameItemObject* leftHand = player->leftHandSlot(); Game::GameItemObject* rightHand = player->rightHandSlot(); // label: damage treshold levels ss.str(""); if (armorSlot) { ss << player->damageThreshold(Game::GameCritterObject::DAMAGE_NORMAL) + armorSlot->damageThreshold(Game::GameArmorItemObject::DAMAGE_NORMAL) <<"/\n"; ss << player->damageThreshold(Game::GameCritterObject::DAMAGE_LASER) + armorSlot->damageThreshold(Game::GameArmorItemObject::DAMAGE_LASER) <<"/\n"; ss << player->damageThreshold(Game::GameCritterObject::DAMAGE_FIRE) + armorSlot->damageThreshold(Game::GameArmorItemObject::DAMAGE_FIRE) <<"/\n"; ss << player->damageThreshold(Game::GameCritterObject::DAMAGE_PLASMA) + armorSlot->damageThreshold(Game::GameArmorItemObject::DAMAGE_PLASMA) <<"/\n"; ss << player->damageThreshold(Game::GameCritterObject::DAMAGE_EXPLOSION) + armorSlot->damageThreshold(Game::GameArmorItemObject::DAMAGE_NORMAL) <<"/"; } else { ss << player->damageThreshold(Game::GameCritterObject::DAMAGE_NORMAL) <<"/\n"; ss << player->damageThreshold(Game::GameCritterObject::DAMAGE_LASER) <<"/\n"; ss << player->damageThreshold(Game::GameCritterObject::DAMAGE_FIRE) <<"/\n"; ss << player->damageThreshold(Game::GameCritterObject::DAMAGE_PLASMA) <<"/\n"; ss << player->damageThreshold(Game::GameCritterObject::DAMAGE_EXPLOSION) <<"/"; } auto damageThresholdLabel = new TextArea(ss.str(), screenX+94, screenY+40); damageThresholdLabel->setWidth(26)->setHorizontalAlign(TextArea::HORIZONTAL_ALIGN_RIGHT); // label: damage resistance levels ss.str(""); if (armorSlot) { ss << player->damageResist(Game::GameCritterObject::DAMAGE_NORMAL) + armorSlot->damageResist(Game::GameArmorItemObject::DAMAGE_NORMAL) <<"%\n"; ss << player->damageResist(Game::GameCritterObject::DAMAGE_LASER) + armorSlot->damageResist(Game::GameArmorItemObject::DAMAGE_LASER) <<"%\n"; ss << player->damageResist(Game::GameCritterObject::DAMAGE_FIRE) + armorSlot->damageResist(Game::GameArmorItemObject::DAMAGE_FIRE) <<"%\n"; ss << player->damageResist(Game::GameCritterObject::DAMAGE_PLASMA) + armorSlot->damageResist(Game::GameArmorItemObject::DAMAGE_PLASMA) <<"%\n"; ss << player->damageResist(Game::GameCritterObject::DAMAGE_EXPLOSION) + armorSlot->damageResist(Game::GameArmorItemObject::DAMAGE_NORMAL) <<"%"; } else { ss << player->damageResist(Game::GameCritterObject::DAMAGE_NORMAL) <<"%\n"; ss << player->damageResist(Game::GameCritterObject::DAMAGE_LASER) <<"%\n"; ss << player->damageResist(Game::GameCritterObject::DAMAGE_FIRE) <<"%\n"; ss << player->damageResist(Game::GameCritterObject::DAMAGE_PLASMA) <<"%\n"; ss << player->damageResist(Game::GameCritterObject::DAMAGE_EXPLOSION) <<"%"; } auto damageResistanceLabel = new TextArea(ss.str(), screenX+120, screenY+40); auto line2 = new Image(142, 1); line2->setX(screenX); line2->setY(screenY+94); line2->texture()->fill(0x3ff800ff); // default green color auto line3 = new Image(142, 1); line3->setX(screenX); line3->setY(screenY+134); line3->texture()->fill(0x3ff800ff); // default green color // label: Total Wt: (20) auto weight = player->carryWeight(); auto weightMax = player->carryWeightMax(); ss.str(""); ss << weight; auto totalWtLabel = new TextArea(_t(MSG_INVENTORY, 20), screenX+14, screenY+180); auto weightLabel = new TextArea(ss.str(), screenX+70, screenY+180); weightLabel->setWidth(24)->setHorizontalAlign(TextArea::HORIZONTAL_ALIGN_RIGHT); ss.str(""); ss << "/" << weightMax; auto weightMaxLabel = new TextArea(ss.str(), screenX+94, screenY+180); if (weight>weightMax) { weightLabel->setFont(ResourceManager::font("font1.aaf", 0xff0000ff)); } // label: left hand ss.str(""); if (leftHand) { ss << _handItemSummary(leftHand); } auto leftHandLabel = new TextArea(ss.str(), screenX, screenY+100); // label: right hand ss.str(""); if (rightHand) { ss << _handItemSummary(rightHand); } auto rightHandLabel = new TextArea(ss.str(), screenX, screenY+140); // screen info auto screenLabel = new TextArea("", screenX, screenY+20); screenLabel->setWidth(140); //screen size screenLabel->setHeight(168); screenLabel->setVisible(false); screenLabel->setWordWrap(true); addUI(line1); addUI("textLabel", textLabel); addUI("hitPointsLabel", hitPointsLabel); addUI("armorClassLabel", armorClassLabel); addUI("damageThresholdLabel", damageThresholdLabel); addUI("damageResistanceLabel", damageResistanceLabel); addUI("line2", line2); addUI("line3", line3); addUI("totalWtLabel", totalWtLabel); addUI("weightLabel", weightLabel); addUI("weightMaxLabel", weightMaxLabel); addUI("leftHandLabel", leftHandLabel); addUI("rightHandLabel", rightHandLabel); addUI("screenLabel", screenLabel); auto inventoryList = new ItemsList(40, 40); inventoryList->setItems(game->player()->inventory()); addUI(inventoryList); // BIG ICONS // icon: armor if (armorSlot) { auto inventoryItem = new InventoryItem(armorSlot, 154, 183); inventoryItem->setType(InventoryItem::TYPE_SLOT); inventoryItem->addEventHandler("itemdragstop", [inventoryList](Event* event){ inventoryList->onItemDragStop(dynamic_cast<MouseEvent*>(event)); }); inventoryList->addEventHandler("itemdragstop", [inventoryItem](Event* event){ inventoryItem->onArmorDragStop(dynamic_cast<MouseEvent*>(event)); }); addUI(inventoryItem); } // icon: left hand if (leftHand) { auto inventoryItem = new InventoryItem(leftHand, 154, 286); inventoryItem->setType(InventoryItem::TYPE_SLOT); inventoryItem->addEventHandler("itemdragstop", [inventoryList](Event* event){ inventoryList->onItemDragStop(dynamic_cast<MouseEvent*>(event)); }); inventoryList->addEventHandler("itemdragstop", [inventoryItem](Event* event){ inventoryItem->onHandDragStop(dynamic_cast<MouseEvent*>(event)); }); addUI(inventoryItem); } // icon: right hand if (rightHand) { auto inventoryItem = new InventoryItem(rightHand, 247, 286); inventoryItem->setType(InventoryItem::TYPE_SLOT); inventoryItem->addEventHandler("itemdragstop", [inventoryList](Event* event){ inventoryList->onItemDragStop(dynamic_cast<MouseEvent*>(event)); }); inventoryList->addEventHandler("itemdragstop", [inventoryItem](Event* event){ inventoryItem->onHandDragStop(dynamic_cast<MouseEvent*>(event)); }); addUI(inventoryItem); } }
void PropertyField::init(cocos2d::Layer *propertyLayer) { _propertyLayer = propertyLayer; _headImage = Sprite::create("images/property/idle_head.png"); _headImage->setPosition(DDConfig::relativePos(0.13, 0.13)); _headImage->setScale(DDConfig::relativeScaler(1.f)); _headImage->setZOrder(Z_HEAD_IMAGE); _propertyLayer->addChild(_headImage); _titleLabel = Label::createWithTTF("Idle title", TRLocale::s().font(), 30*DDConfig::fontSizeRadio()); _titleLabel->setPosition(DDConfig::relativePos(0.5, 0.12)); _titleLabel->setWidth(DDConfig::relativeScaler(1.f)*300); _titleLabel->setAlignment(TextHAlignment::LEFT); _titleLabel->setZOrder(Z_TEXT); _propertyLayer->addChild(_titleLabel); _describeLabel = Label::createWithTTF("Describe text string...", TRLocale::s().font(), 25*DDConfig::fontSizeRadio()); _describeLabel->setPosition(DDConfig::relativePos(0.5, 0.095)); _describeLabel->setWidth(DDConfig::relativeScaler(1.f)*300); _describeLabel->setAlignment(TextHAlignment::LEFT); _describeLabel->setZOrder(Z_TEXT); _propertyLayer->addChild(_describeLabel); float x_now = 0.31; float x_step = 0.12; float y_image = 0.045; float y_num_diff = -0.012; float y_cost_diff = -0.028; float x_cost_diff = 0.005; float x_text_width = 60*DDConfig::relativeScaler(1.0); auto genPropertyNode = [this, y_num_diff, y_cost_diff,x_cost_diff, x_text_width](float x, float y){ PropertyNode ret; auto image = Sprite::create("images/property/idle_property.png"); image->setPosition(DDConfig::relativePos(x, y)); image->setScale(DDConfig::relativeScaler(0.7f)); image->setZOrder(Z_PROPERTY_IMAGE); _propertyLayer->addChild(image); ret.image = image; auto num = Label::createWithTTF("2/10", TRLocale::s().font(), 18*DDConfig::fontSizeRadio()); num->setPosition(DDConfig::relativePos(x, y + y_num_diff)); num->setZOrder(Z_PROPERTY_NUM); num->setWidth(x_text_width); num->setAlignment(TextHAlignment::RIGHT); _propertyLayer->addChild(num); ret.numLabel = num; auto cost = Label::createWithTTF("200", TRLocale::s().font(), 18*DDConfig::fontSizeRadio()); cost->setPosition(DDConfig::relativePos(x+x_cost_diff, y + y_cost_diff)); cost->setZOrder(Z_PROPERTY_COST); cost->setWidth(x_text_width); cost->setAlignment(TextHAlignment::CENTER); _propertyLayer->addChild(cost); ret.costLabel = cost; return ret; }; // 下方基本图标序列 for (int i = 0; i < NUM_PROPERTY_MAX; i++) { _propertyNodes[i] = genPropertyNode(x_now, y_image); x_now += x_step; } // 五行属性图标 _elementTypeIcon = genPropertyNode(x_now, 0.105); // 移除售卖 _removeIcon = genPropertyNode(x_now, y_image); /* _buildingImage = Sprite::create("images/template_buildings.png"); _buildingImage->setPosition(DDConfig::buildingAreaCenter()); auto rect = DDConfig::buildingAreaRect(); _buildingImage->setScale(rect.size.width/_buildingImage->getContentSize().width); _buildingImage->setZOrder(Z_BUILDING_IMAGE); _buildingLayer->addChild(_buildingImage); _selectionIcon = Sprite::create("images/template_buildings_select_icon.png"); _selectionIcon->setScale(rect.size.height/_selectionIcon->getContentSize().height); _selectionIcon->setVisible(false); _selectionIcon->setZOrder(Z_SELECT_ICON); _buildingLayer->addChild(_selectionIcon); auto listener = EventListenerTouchOneByOne::create(); listener->onTouchBegan = [this](Touch* touch, Event* event){ auto point = touch->getLocation(); auto rect = DDConfig::buildingAreaRect(); touch_moved = false; return rect.containsPoint(point); }; listener->onTouchMoved = [this](Touch* touch, Event* event){ touch_moved = true; }; listener->onTouchEnded = [this](Touch* touch, Event* event){ auto rect = DDConfig::buildingAreaRect(); if (rect.containsPoint(touch->getLocation()) && touch_moved == false) { //算出选中了哪一个 auto point = touch->getLocation(); float diffX = point.x - rect.origin.x; float widthStep = DDConfig::buildingAreaSelectionWidth(); int which = diffX / widthStep; CCLOG("buildingfiled select %d", which); _selectionIcon->setVisible(true); _selectionIcon->setPosition(rect.origin + Vec2{widthStep*which + widthStep*0.5f, rect.size.height*0.5f}); } }; listener->onTouchCancelled = [this](Touch* touch, Event* event){ }; _buildingLayer->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, _buildingLayer); */ }
void UIWidget::parseBaseStyle(const OTMLNodePtr& styleNode) { // load styles used by all widgets for(const OTMLNodePtr& node : styleNode->children()) { if(node->tag() == "color") setColor(node->value<Color>()); else if(node->tag() == "x") setX(node->value<int>()); else if(node->tag() == "y") setY(node->value<int>()); else if(node->tag() == "pos") setPosition(node->value<Point>()); else if(node->tag() == "width") setWidth(node->value<int>()); else if(node->tag() == "height") setHeight(node->value<int>()); else if(node->tag() == "rect") setRect(node->value<Rect>()); else if(node->tag() == "background") setBackgroundColor(node->value<Color>()); else if(node->tag() == "background-color") setBackgroundColor(node->value<Color>()); else if(node->tag() == "background-offset-x") setBackgroundOffsetX(node->value<int>()); else if(node->tag() == "background-offset-y") setBackgroundOffsetY(node->value<int>()); else if(node->tag() == "background-offset") setBackgroundOffset(node->value<Point>()); else if(node->tag() == "background-width") setBackgroundWidth(node->value<int>()); else if(node->tag() == "background-height") setBackgroundHeight(node->value<int>()); else if(node->tag() == "background-size") setBackgroundSize(node->value<Size>()); else if(node->tag() == "background-rect") setBackgroundRect(node->value<Rect>()); else if(node->tag() == "icon") setIcon(stdext::resolve_path(node->value(), node->source())); else if(node->tag() == "icon-source") setIcon(stdext::resolve_path(node->value(), node->source())); else if(node->tag() == "icon-color") setIconColor(node->value<Color>()); else if(node->tag() == "icon-offset-x") setIconOffsetX(node->value<int>()); else if(node->tag() == "icon-offset-y") setIconOffsetY(node->value<int>()); else if(node->tag() == "icon-offset") setIconOffset(node->value<Point>()); else if(node->tag() == "icon-width") setIconWidth(node->value<int>()); else if(node->tag() == "icon-height") setIconHeight(node->value<int>()); else if(node->tag() == "icon-size") setIconSize(node->value<Size>()); else if(node->tag() == "icon-rect") setIconRect(node->value<Rect>()); else if(node->tag() == "icon-clip") setIconClip(node->value<Rect>()); else if(node->tag() == "opacity") setOpacity(node->value<float>()); else if(node->tag() == "enabled") setEnabled(node->value<bool>()); else if(node->tag() == "visible") setVisible(node->value<bool>()); else if(node->tag() == "checked") setChecked(node->value<bool>()); else if(node->tag() == "dragable") setDraggable(node->value<bool>()); else if(node->tag() == "on") setOn(node->value<bool>()); else if(node->tag() == "focusable") setFocusable(node->value<bool>()); else if(node->tag() == "phantom") setPhantom(node->value<bool>()); else if(node->tag() == "size") setSize(node->value<Size>()); else if(node->tag() == "fixed-size") setFixedSize(node->value<bool>()); else if(node->tag() == "clipping") setClipping(node->value<bool>()); else if(node->tag() == "border") { auto split = stdext::split(node->value(), " "); if(split.size() == 2) { setBorderWidth(stdext::safe_cast<int>(split[0])); setBorderColor(stdext::safe_cast<Color>(split[1])); } else throw OTMLException(node, "border param must have its width followed by its color"); } else if(node->tag() == "border-width") setBorderWidth(node->value<int>()); else if(node->tag() == "border-width-top") setBorderWidthTop(node->value<int>()); else if(node->tag() == "border-width-right") setBorderWidthRight(node->value<int>()); else if(node->tag() == "border-width-bottom") setBorderWidthBottom(node->value<int>()); else if(node->tag() == "border-width-left") setBorderWidthLeft(node->value<int>()); else if(node->tag() == "border-color") setBorderColor(node->value<Color>()); else if(node->tag() == "border-color-top") setBorderColorTop(node->value<Color>()); else if(node->tag() == "border-color-right") setBorderColorRight(node->value<Color>()); else if(node->tag() == "border-color-bottom") setBorderColorBottom(node->value<Color>()); else if(node->tag() == "border-color-left") setBorderColorLeft(node->value<Color>()); else if(node->tag() == "margin-top") setMarginTop(node->value<int>()); else if(node->tag() == "margin-right") setMarginRight(node->value<int>()); else if(node->tag() == "margin-bottom") setMarginBottom(node->value<int>()); else if(node->tag() == "margin-left") setMarginLeft(node->value<int>()); else if(node->tag() == "margin") { std::string marginDesc = node->value(); std::vector<std::string> split = stdext::split(marginDesc, " "); if(split.size() == 4) { setMarginTop(stdext::safe_cast<int>(split[0])); setMarginRight(stdext::safe_cast<int>(split[1])); setMarginBottom(stdext::safe_cast<int>(split[2])); setMarginLeft(stdext::safe_cast<int>(split[3])); } else if(split.size() == 3) { int marginTop = stdext::safe_cast<int>(split[0]); int marginHorizontal = stdext::safe_cast<int>(split[1]); int marginBottom = stdext::safe_cast<int>(split[2]); setMarginTop(marginTop); setMarginRight(marginHorizontal); setMarginBottom(marginBottom); setMarginLeft(marginHorizontal); } else if(split.size() == 2) { int marginVertical = stdext::safe_cast<int>(split[0]); int marginHorizontal = stdext::safe_cast<int>(split[1]); setMarginTop(marginVertical); setMarginRight(marginHorizontal); setMarginBottom(marginVertical); setMarginLeft(marginHorizontal); } else if(split.size() == 1) { int margin = stdext::safe_cast<int>(split[0]); setMarginTop(margin); setMarginRight(margin); setMarginBottom(margin); setMarginLeft(margin); } } else if(node->tag() == "padding-top") setPaddingTop(node->value<int>()); else if(node->tag() == "padding-right") setPaddingRight(node->value<int>()); else if(node->tag() == "padding-bottom") setPaddingBottom(node->value<int>()); else if(node->tag() == "padding-left") setPaddingLeft(node->value<int>()); else if(node->tag() == "padding") { std::string paddingDesc = node->value(); std::vector<std::string> split = stdext::split(paddingDesc, " "); if(split.size() == 4) { setPaddingTop(stdext::safe_cast<int>(split[0])); setPaddingRight(stdext::safe_cast<int>(split[1])); setPaddingBottom(stdext::safe_cast<int>(split[2])); setPaddingLeft(stdext::safe_cast<int>(split[3])); } else if(split.size() == 3) { int paddingTop = stdext::safe_cast<int>(split[0]); int paddingHorizontal = stdext::safe_cast<int>(split[1]); int paddingBottom = stdext::safe_cast<int>(split[2]); setPaddingTop(paddingTop); setPaddingRight(paddingHorizontal); setPaddingBottom(paddingBottom); setPaddingLeft(paddingHorizontal); } else if(split.size() == 2) { int paddingVertical = stdext::safe_cast<int>(split[0]); int paddingHorizontal = stdext::safe_cast<int>(split[1]); setPaddingTop(paddingVertical); setPaddingRight(paddingHorizontal); setPaddingBottom(paddingVertical); setPaddingLeft(paddingHorizontal); } else if(split.size() == 1) { int padding = stdext::safe_cast<int>(split[0]); setPaddingTop(padding); setPaddingRight(padding); setPaddingBottom(padding); setPaddingLeft(padding); } } // layouts else if(node->tag() == "layout") { std::string layoutType; if(node->hasValue()) layoutType = node->value(); else layoutType = node->valueAt<std::string>("type", ""); if(!layoutType.empty()) { UILayoutPtr layout; if(layoutType == "horizontalBox") layout = UIHorizontalLayoutPtr(new UIHorizontalLayout(static_self_cast<UIWidget>())); else if(layoutType == "verticalBox") layout = UIVerticalLayoutPtr(new UIVerticalLayout(static_self_cast<UIWidget>())); else if(layoutType == "grid") layout = UIGridLayoutPtr(new UIGridLayout(static_self_cast<UIWidget>())); else if(layoutType == "anchor") layout = UIAnchorLayoutPtr(new UIAnchorLayout(static_self_cast<UIWidget>())); else throw OTMLException(node, "cannot determine layout type"); setLayout(layout); } if(node->hasChildren()) m_layout->applyStyle(node); } // anchors else if(stdext::starts_with(node->tag(), "anchors.")) { UIWidgetPtr parent = getParent(); if(!parent) { if(m_firstOnStyle) throw OTMLException(node, "cannot create anchor, there is no parent widget!"); else continue; } UILayoutPtr layout = parent->getLayout(); UIAnchorLayoutPtr anchorLayout; if(layout->isUIAnchorLayout()) anchorLayout = layout->static_self_cast<UIAnchorLayout>(); if(!anchorLayout) throw OTMLException(node, "cannot create anchor, the parent widget doesn't use anchor layout!"); std::string what = node->tag().substr(8); if(what == "fill") { fill(node->value()); } else if(what == "centerIn") { centerIn(node->value()); } else { Fw::AnchorEdge anchoredEdge = Fw::translateAnchorEdge(what); if(node->value() == "none") { removeAnchor(anchoredEdge); } else { std::vector<std::string> split = stdext::split(node->value(), "."); if(split.size() != 2) throw OTMLException(node, "invalid anchor description"); std::string hookedWidgetId = split[0]; Fw::AnchorEdge hookedEdge = Fw::translateAnchorEdge(split[1]); if(anchoredEdge == Fw::AnchorNone) throw OTMLException(node, "invalid anchor edge"); if(hookedEdge == Fw::AnchorNone) throw OTMLException(node, "invalid anchor target edge"); addAnchor(anchoredEdge, hookedWidgetId, hookedEdge); } } // lua functions } else if(stdext::starts_with(node->tag(), "@")) { // load once if(m_firstOnStyle) { std::string funcName = node->tag().substr(1); std::string funcOrigin = "@" + node->source() + "[" + node->tag() + "]"; g_lua.loadFunction(node->value(), funcOrigin); luaSetField(funcName); } // lua fields value } else if(stdext::starts_with(node->tag(), "&")) { std::string fieldName = node->tag().substr(1); std::string fieldOrigin = "@" + node->source() + "[" + node->tag() + "]"; g_lua.evaluateExpression(node->value(), fieldOrigin); luaSetField(fieldName); } } }
GUI::GUI() { mStreamingMode = STREAMING_MODE_STORE_ALL_FRAMES; QScreen* screen = QGuiApplication::primaryScreen(); menuWidth = screen->geometry().width()*(1.0f/6.0f); mPipelineWidget = nullptr; mStreamer = ImageFileStreamer::New(); QVBoxLayout* viewLayout = new QVBoxLayout; View* view = createView(); view->set2DMode(); view->setBackgroundColor(Color::Black()); setWidth(screen->geometry().width()); setHeight(screen->geometry().height()); enableMaximized(); setTitle("FAST - Viewer"); viewLayout->addWidget(view); menuLayout = new QVBoxLayout; menuLayout->setAlignment(Qt::AlignTop); // Logo QImage* image = new QImage; image->load((Config::getDocumentationPath() + "images/FAST_logo_square.png").c_str()); QLabel* logo = new QLabel; logo->setPixmap(QPixmap::fromImage(image->scaled(menuWidth, ((float)menuWidth/image->width())*image->height(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation))); logo->adjustSize(); menuLayout->addWidget(logo); // Title label QLabel* title = new QLabel; title->setText("Viewer"); QFont font; font.setPixelSize(24 * getScalingFactor()); font.setWeight(QFont::Bold); title->setFont(font); title->setAlignment(Qt::AlignCenter); menuLayout->addWidget(title); // Quit button QPushButton* quitButton = new QPushButton; quitButton->setText("Quit (q)"); quitButton->setStyleSheet("QPushButton { background-color: red; color: white; }"); quitButton->setFixedWidth(menuWidth); menuLayout->addWidget(quitButton); // Connect the clicked signal of the quit button to the stop method for the window QObject::connect(quitButton, &QPushButton::clicked, std::bind(&Window::stop, this)); QLabel* inputListLabel = new QLabel; //inputListLabel->setFixedHeight(24); inputListLabel->setText("Input data"); inputListLabel->setStyleSheet("QLabel { font-weight: bold; }"); menuLayout->addWidget(inputListLabel); mList = new QListWidget; mList->setFixedWidth(menuWidth); mList->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); mList->setFixedHeight(200); mList->setSelectionMode(QAbstractItemView::ExtendedSelection); // Allow multiple items to be selected QObject::connect(mList, &QListWidget::itemSelectionChanged, std::bind(&GUI::selectInputData, this)); menuLayout->addWidget(mList); QPushButton* addButton = new QPushButton; addButton->setText("Add input data"); addButton->setFixedWidth(menuWidth); QObject::connect(addButton, &QPushButton::clicked, std::bind(&GUI::addInputData, this)); menuLayout->addWidget(addButton); QLabel* selectPipelineLabel = new QLabel; selectPipelineLabel->setText("Active pipeline"); selectPipelineLabel->setStyleSheet("QLabel { font-weight: bold; }"); //selectPipelineLabel->setFixedHeight(24); menuLayout->addWidget(selectPipelineLabel); mSelectPipeline = new QComboBox; mSelectPipeline->setFixedWidth(menuWidth); mPipelines = getAvailablePipelines(); int index = 0; int counter = 0; for(auto pipeline : mPipelines) { mSelectPipeline->addItem((pipeline.getName() + " (" + pipeline.getDescription() + ")").c_str()); if(pipeline.getName() == "Image renderer") { index = counter; } ++counter; } mSelectPipeline->setCurrentIndex(index); menuLayout->addWidget(mSelectPipeline); QObject::connect(mSelectPipeline, static_cast<void (QComboBox::*)(int)>(&QComboBox::activated), std::bind(&GUI::selectPipeline, this)); QPushButton* refreshPipeline = new QPushButton; refreshPipeline->setText("Refresh pipeline"); refreshPipeline->setStyleSheet("QPushButton { background-color: blue; color: white; }"); refreshPipeline->setFixedWidth(menuWidth); QObject::connect(refreshPipeline, &QPushButton::clicked, std::bind(&GUI::selectPipeline, this)); menuLayout->addWidget(refreshPipeline); QPushButton* editPipeline = new QPushButton; editPipeline->setText("Edit pipeline"); editPipeline->setStyleSheet("QPushButton { background-color: blue; color: white; }"); editPipeline->setFixedWidth(menuWidth); QObject::connect(editPipeline, &QPushButton::clicked, std::bind(&GUI::editPipeline, this)); menuLayout->addWidget(editPipeline); QPushButton* newPipeline = new QPushButton; newPipeline->setText("New pipeline"); newPipeline->setStyleSheet("QPushButton { background-color: blue; color: white; }"); newPipeline->setFixedWidth(menuWidth); QObject::connect(newPipeline, &QPushButton::clicked, std::bind(&GUI::newPipeline, this)); menuLayout->addWidget(newPipeline); // Playback QHBoxLayout* playbackLayout = new QHBoxLayout; mPlayPauseButton = new QPushButton; mPlayPauseButton->setText("Play"); mPlayPauseButton->setStyleSheet("QPushButton { background-color: green; color: white; }"); //mPlayPauseButton->setFixedHeight(100); QObject::connect(mPlayPauseButton, &QPushButton::clicked, std::bind(&GUI::playPause, this)); playbackLayout->addWidget(mPlayPauseButton); mTimestepSlider = new QSlider(Qt::Horizontal); // Improve style of slider mTimestepSlider->setStyleSheet("QSlider:horizontal { min-height: 50px; } QSlider::groove:horizontal {\n" " border: 1px solid #999999;\n" " height: 10px; /* the groove expands to the size of the slider by default. by giving it a height, it has a fixed size */\n" " background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #B1B1B1, stop:1 #c4c4c4);\n" " margin: 2px 0;\n" "}\n" "\n" "QSlider::handle:horizontal {\n" " background: qlineargradient(x1:0, y1:0, x2:1, y2:1, stop:0 #81BEF7, stop:1 #2E9AFE);\n" " border: 1px solid #5c5c5c;\n" " width: 18px;\n" " height: 25px;\n" " margin: -10px 0; /* handle is placed by default on the contents rect of the groove. Expand outside the groove */\n" " border-radius: 3px;\n" "}"); playbackLayout->addWidget(mTimestepSlider); mTimestepSlider->setTickPosition(QSlider::NoTicks); mTimestepSlider->setRange(0, 1234); mTimestepSlider->setPageStep(1); mTimestepSlider->setSingleStep(1); mTimestepSlider->setStyle(new MyStyle(mTimestepSlider->style())); // Fixes issues with direct jump with slider QObject::connect(mTimestepSlider, &QSlider::sliderMoved, std::bind(&GUI::setTimestep, this)); QObject::connect(mTimestepSlider, &QSlider::sliderPressed, std::bind(&GUI::setTimestep, this)); viewLayout->addLayout(playbackLayout); // Add menu and view to main layout QHBoxLayout* layout = new QHBoxLayout; layout->addLayout(menuLayout); layout->addLayout(viewLayout); mWidget->setLayout(layout); std::cout << "Finished viewer setup" << std::endl; }
void RenderSVGForeignObject::computeLogicalWidth() { // FIXME: Investigate in size rounding issues // FIXME: Remove unnecessary rounding when layout is off ints: webkit.org/b/63656 setWidth(static_cast<int>(roundf(m_viewport.width()))); }
void Label::adjustSize() { setWidth(getFont()->getWidth(getCaption())); setHeight(getFont()->getHeight()); }
UIBorder::UIBorder(UIWindow* win, UIComponent* component) : UIComponent(win) { _component = component; setWidth(component->width + 2); setHeight(component->height + 2); }
void RichTextBox::addRow(const std::string &row) { std::string newRow; gcn::Font *font = getFont(); // Invalidate the cached prewrapped lines mLaidOutTextValid = false; // Use links and user defined colors if (mUseLinksAndUserColors) { std::string tmp = row; std::string::size_type idx1, idx2, idx3; HYPERLINK hLink; // Check for links in format "@@link|Caption@@" idx1 = tmp.find("@@"); while (idx1 != std::string::npos) { idx2 = tmp.find("|", idx1); idx3 = tmp.find("@@", idx2); if (idx2 == std::string::npos || idx3 == std::string::npos) break; hLink.link = tmp.substr(idx1 + 2, idx2 - (idx1 + 2)); hLink.caption = tmp.substr(idx2 + 1, idx3 - (idx2 + 1)); hLink.y1 = mTextRows.size() * font->getHeight(); hLink.y2 = hLink.y1 + font->getHeight(); newRow += tmp.substr(0, idx1); std::string tmp2 = newRow; idx1 = tmp2.find("##"); while (idx1 != std::string::npos) { if ((idx1 + 3) != tmp2.size() && tmp2[idx1 + 3] == '#') { tmp2.erase(idx1, 1); while (idx1 < tmp2.size() && tmp2[idx1] == '#'); idx1++; } else tmp2.erase(idx1, 3); idx1 = tmp2.find("##", idx1); } hLink.x1 = font->getWidth(tmp2) - 1; hLink.x2 = hLink.x1 + font->getWidth(hLink.caption) + 1; mLinks.push_back(hLink); newRow += "##<" + hLink.caption; tmp.erase(0, idx3 + 2); if (!tmp.empty()) { newRow += "##>"; } idx1 = tmp.find("@@"); } newRow += tmp; } // Don't use links and user defined colors else { newRow = row; } mTextRows.push_back(newRow); mQueuedRows.push_back(newRow); // Auto size mode if (mMode == AUTO_SIZE) { std::string plain = newRow; for (std::string::size_type idx1 = plain.find("##"); idx1 != std::string::npos; idx1 = plain.find("##")) { if ((idx1 + 3) < plain.size() && plain[idx1 + 3] == '#') { plain.erase(idx1, 1); while (idx1 < plain.size() && plain[idx1] == '#'); idx1++; continue; } plain.erase(idx1, 3); } // Adjust the RichTextBox size int w = font->getWidth(plain); if (w > getWidth()) setWidth(w); } }
void MMSWindowClass::setAttributesFromTAFF(MMSTaffFile *tafff, string *path, bool reset_paths) { MMSFBColor color; if ((reset_paths)&&(path)&&(*path!="")) { // unset my paths unsetBgImagePath(); } startTAFFScan { switch (attrid) { case MMSGUI_WINDOW_ATTR::MMSGUI_WINDOW_ATTR_IDS_alignment: setAlignment(getAlignmentFromString(attrval_str)); break; case MMSGUI_WINDOW_ATTR::MMSGUI_WINDOW_ATTR_IDS_dx: setDx(attrval_str); break; case MMSGUI_WINDOW_ATTR::MMSGUI_WINDOW_ATTR_IDS_dy: setDy(attrval_str); break; case MMSGUI_WINDOW_ATTR::MMSGUI_WINDOW_ATTR_IDS_w: setWidth(attrval_str); break; case MMSGUI_WINDOW_ATTR::MMSGUI_WINDOW_ATTR_IDS_h: setHeight(attrval_str); break; case MMSGUI_WINDOW_ATTR::MMSGUI_WINDOW_ATTR_IDS_bgcolor: setBgColor(MMSFBColor((unsigned int)attrval_int)); break; case MMSGUI_WINDOW_ATTR::MMSGUI_WINDOW_ATTR_IDS_bgcolor_a: color.a = color.r = color.g = color.b = 0; if (isBgColor()) getBgColor(color); color.a = attrval_int; setBgColor(color); break; case MMSGUI_WINDOW_ATTR::MMSGUI_WINDOW_ATTR_IDS_bgcolor_r: color.a = color.r = color.g = color.b = 0; if (isBgColor()) getBgColor(color); color.r = attrval_int; setBgColor(color); break; case MMSGUI_WINDOW_ATTR::MMSGUI_WINDOW_ATTR_IDS_bgcolor_g: color.a = color.r = color.g = color.b = 0; if (isBgColor()) getBgColor(color); color.g = attrval_int; setBgColor(color); break; case MMSGUI_WINDOW_ATTR::MMSGUI_WINDOW_ATTR_IDS_bgcolor_b: color.a = color.r = color.g = color.b = 0; if (isBgColor()) getBgColor(color); color.b = attrval_int; setBgColor(color); break; case MMSGUI_WINDOW_ATTR::MMSGUI_WINDOW_ATTR_IDS_bgimage: if (*attrval_str) setBgImagePath(""); else setBgImagePath((path)?*path:""); setBgImageName(attrval_str); break; case MMSGUI_WINDOW_ATTR::MMSGUI_WINDOW_ATTR_IDS_bgimage_path: if (*attrval_str) setBgImagePath(attrval_str); else setBgImagePath((path)?*path:""); break; case MMSGUI_WINDOW_ATTR::MMSGUI_WINDOW_ATTR_IDS_bgimage_name: setBgImageName(attrval_str); break; case MMSGUI_WINDOW_ATTR::MMSGUI_WINDOW_ATTR_IDS_opacity: setOpacity(attrval_int); break; case MMSGUI_WINDOW_ATTR::MMSGUI_WINDOW_ATTR_IDS_fadein: setFadeIn((attrval_int) ? true : false); break; case MMSGUI_WINDOW_ATTR::MMSGUI_WINDOW_ATTR_IDS_fadeout: setFadeOut((attrval_int) ? true : false); break; case MMSGUI_WINDOW_ATTR::MMSGUI_WINDOW_ATTR_IDS_debug: setDebug((attrval_int) ? true : false); break; case MMSGUI_WINDOW_ATTR::MMSGUI_WINDOW_ATTR_IDS_margin: setMargin(attrval_int); break; case MMSGUI_WINDOW_ATTR::MMSGUI_WINDOW_ATTR_IDS_up_arrow: setUpArrow(attrval_str); break; case MMSGUI_WINDOW_ATTR::MMSGUI_WINDOW_ATTR_IDS_down_arrow: setDownArrow(attrval_str); break; case MMSGUI_WINDOW_ATTR::MMSGUI_WINDOW_ATTR_IDS_left_arrow: setLeftArrow(attrval_str); break; case MMSGUI_WINDOW_ATTR::MMSGUI_WINDOW_ATTR_IDS_right_arrow: setRightArrow(attrval_str); break; case MMSGUI_WINDOW_ATTR::MMSGUI_WINDOW_ATTR_IDS_navigate_up: setNavigateUp(attrval_str); break; case MMSGUI_WINDOW_ATTR::MMSGUI_WINDOW_ATTR_IDS_navigate_down: setNavigateDown(attrval_str); break; case MMSGUI_WINDOW_ATTR::MMSGUI_WINDOW_ATTR_IDS_navigate_left: setNavigateLeft(attrval_str); break; case MMSGUI_WINDOW_ATTR::MMSGUI_WINDOW_ATTR_IDS_navigate_right: setNavigateRight(attrval_str); break; case MMSGUI_WINDOW_ATTR::MMSGUI_WINDOW_ATTR_IDS_own_surface: #ifdef __HAVE_DIRECTFB__ if(attrval_int) { MMSConfigData config; if(config.getBackend() == MMSFB_BE_DFB) { cerr << "Warning: DirectFB backend does not support own_surface=true (ignored)" << endl; break; } } #endif setOwnSurface((attrval_int) ? true : false); break; case MMSGUI_WINDOW_ATTR::MMSGUI_WINDOW_ATTR_IDS_movein: setMoveIn(getDirectionFromString(attrval_str)); break; case MMSGUI_WINDOW_ATTR::MMSGUI_WINDOW_ATTR_IDS_moveout: setMoveOut(getDirectionFromString(attrval_str)); break; case MMSGUI_WINDOW_ATTR::MMSGUI_WINDOW_ATTR_IDS_modal: setModal((attrval_int) ? true : false); break; case MMSGUI_WINDOW_ATTR::MMSGUI_WINDOW_ATTR_IDS_static_zorder: setStaticZOrder((attrval_int) ? true : false); break; case MMSGUI_WINDOW_ATTR::MMSGUI_WINDOW_ATTR_IDS_always_on_top: setAlwaysOnTop((attrval_int) ? true : false); break; case MMSGUI_WINDOW_ATTR::MMSGUI_WINDOW_ATTR_IDS_focusable: setFocusable((attrval_int) ? true : false); break; case MMSGUI_WINDOW_ATTR::MMSGUI_WINDOW_ATTR_IDS_backbuffer: setBackBuffer((attrval_int) ? true : false); break; case MMSGUI_WINDOW_ATTR::MMSGUI_WINDOW_ATTR_IDS_initial_load: setInitialLoad((attrval_int) ? true : false); break; } } endTAFFScan if ((reset_paths)&&(path)&&(*path!="")) { // set my paths if (!isBgImagePath()) setBgImagePath(*path); } }
void Paddle::setSize(float aWidth, float aHeight) { setWidth(aWidth); setHeight(aHeight); }
Client::Client(Monitor *monitor, Window window, XWindowAttributes *attr) : Thing(monitor, new Rectangle(), Thing::CLIENT) { clientWindow_ = window; frame_ = 0; state_ = WithdrawnState; iconName_ = ""; isCentered_ = false; protocols_ = 0; hasFrame_ = false; requestsFocus_ = false; isDestroyed_ = false; hooked_ = ""; workspace_ = 0; ostringstream oss; oss << "<" << monitor->nextClientId() << ">"; id_ = oss.str(); eventMask_ = PropertyChangeMask; XCORE->selectEvents(clientWindow_, eventMask_); setX(attr->x); setY(attr->y); setWidth(attr->width); setHeight(attr->height); borderWidth_ = attr->border_width; oss.str(""); oss << "constructing new client with dimensions: " << x() << "," << y() << "," << width() << "," << height(); LOGDEBUG(oss.str()); className_ = XCORE->className(clientWindow_); instanceName_ = XCORE->instanceName(clientWindow_); string value; updateTransient(); if (transient_) { value = Util::get(KERNEL->sessionSettings(), "client." + className_ + "::" + instanceName_ + ".transient-mode"); if ("" == value) { value = Util::get(KERNEL->commonSettings(), "default.transient-mode"); if ("" == value) { value = "float"; } } } else { value = Util::get(KERNEL->sessionSettings(), "client." + className_ + "::" + instanceName_ + ".mode"); } if (value == "float") { mode_ = FLOAT; } else if (value == "sticky") { mode_ = STICKY; } else if (value == "max") { mode_ = MAX; } #ifdef SLOT_SUPPORT else if (value == "slot") { mode_ = SLOT; } #endif // SLOT_SUPPORT // fallback, unknown yet else if (Util::get(KERNEL->commonSettings(), "default.client-mode") == "float") { mode_ = FLOAT; } else { mode_ = MAX; } hooked_ = Util::get(KERNEL->sessionSettings(), "client." + className_ + "::" + instanceName_ + ".hooked"); }