void ComboBox::paint(Graphics &g) { Size size = getSize(); gsize_t btnWidth = size.height; gsize_t textWidth = size.width - btnWidth; // paint item g.setColor(getTheme().getColor(Theme::TEXT_BACKGROUND)); g.fillRect(1,1,textWidth - 2,size.height - 2); g.setColor(getTheme().getColor(_focused ? Theme::CTRL_DARKBORDER : Theme::CTRL_BORDER)); g.drawRect(0,0,textWidth,size.height); if(_selected >= 0) { gsize_t textlimit = textWidth - getTheme().getTextPadding() * 2; gpos_t ystart = (size.height - g.getFont().getSize().height) / 2; gsize_t count = getGraphics()->getFont().limitStringTo(_items[_selected],textlimit); g.setColor(getTheme().getColor(Theme::TEXT_FOREGROUND)); g.drawString(getTheme().getTextPadding(),ystart,_items[_selected],0,count); } // paint button border and bg const Color &bg = getTheme().getColor(Theme::BTN_BACKGROUND); g.colorFadeRect(VERTICAL,bg,bg + 20,textWidth + 2,1,btnWidth - 3,size.height - 2); g.setColor(getTheme().getColor(_focused ? Theme::CTRL_DARKBORDER : Theme::CTRL_BORDER)); g.drawRect(textWidth + 1,0,btnWidth - 1,size.height); // paint triangle size_t pressedPad = _pressed ? 1 : 0; Pos t1(size.width - btnWidth / 2,size.height - ARROW_PAD + pressedPad); Pos t2(size.width - ARROW_PAD,ARROW_PAD + pressedPad); Pos t3(textWidth + ARROW_PAD,ARROW_PAD + pressedPad); g.setColor(getTheme().getColor(Theme::CTRL_DARKBACK)); g.fillTriangle(t1,t2,t3); g.setColor(getTheme().getColor(Theme::CTRL_DARKBORDER)); g.drawTriangle(t1,t2,t3); }
void ComboBox::ItemWindow::paint(Graphics &g) { g.setColor(getTheme().getColor(Theme::TEXT_BACKGROUND)); g.fillRect(Pos(0,0),getSize()); g.setColor(getTheme().getColor(Theme::CTRL_BORDER)); g.drawRect(Pos(0,0),getSize()); const Color &tf = getTheme().getColor(Theme::TEXT_FOREGROUND); const Color &sb = getTheme().getColor(Theme::SEL_BACKGROUND); const Color &sf = getTheme().getColor(Theme::SEL_FOREGROUND); gpos_t y = 0; gsize_t itemHeight = g.getFont().getSize().height; g.setColor(tf); for(auto it = _cb->_items.begin(); it != _cb->_items.end(); ++it) { if(_highlighted == (int)distance(_cb->_items.begin(),it)) { g.colorFadeRect(VERTICAL,sb,sb + 20,SELPAD,y + SELPAD, getSize().width - SELPAD * 2 - 1, itemHeight + getTheme().getTextPadding() * 2 - SELPAD * 2); g.setColor(sf); } g.drawString(getTheme().getTextPadding(),y + getTheme().getTextPadding(),*it); g.setColor(tf); y += itemHeight + getTheme().getTextPadding() * 2; } }
void Settings::setTheme(int value) { if (getTheme() != value) { settings.setValue("apptheme", value); emit themeChanged(); } }
void MessageBox::addButton(const sf::String& caption) { Button::Ptr button; if (!getTheme() || m_buttonClassName.empty()) button = std::make_shared<Button>(); else button = getTheme()->internalLoad(getPrimaryLoadingParameter(), m_buttonClassName); button->setTextSize(m_textSize); button->setText(caption); button->connect("Pressed", [=](){ m_callback.text = caption; sendSignal("ButtonPressed", caption); }); add(button, "#TGUI_INTERNAL$MessageBoxButton$" + caption + "#"); m_buttons.push_back(button); rearrange(); }
void Map::update (uint32_t deltaTime) { _pointCount = 0; if (_pause) return; _timeManager.update(deltaTime); if (_restartDue > 0 && _restartDue <= _time) { const std::string currentName = getName(); info(LOG_MAP, "restarting map " + currentName); if (isFailed()) { const Map::PlayerList& players = getPlayers(); for (Map::PlayerListConstIter i = players.begin(); i != players.end(); ++i) { const Player* p = *i; GameEvent.failedMap(p->getClientId(), currentName, getFailReason(p), getTheme()); } System.track("mapstate", "failed:" + currentName); } else { load(currentName); } return; } if (_world) { _time += deltaTime; while (_time - _physicsTime >= Constant::DELTA_PHYSICS_MILLIS) { _physicsTime += Constant::DELTA_PHYSICS_MILLIS; { ExecutionTime visitTime("VisitTime", 2000L); visitEntities(this); } handleFlyingNPC(); handleFishNPC(); if (_time >= _warmupPhase) { _entityRemovalAllowed = false; ExecutionTime stepTime("StepTime", 2000L); _world->Step(Constant::DELTA_PHYSICS_SECONDS, 8, 3); _entityRemovalAllowed = true; } } const int t = _referenceTime - _time / 1000; if (t < 0) return; static int lastT = 0; if (lastT != t) { GameEvent.sendTimeRemaining(t); lastT = t; } } }
ColorBar::ScrollableView::ScrollableView() { SkinTheme* theme = static_cast<SkinTheme*>(getTheme()); int l = theme->get_part(PART_EDITOR_SELECTED_W)->w; int t = theme->get_part(PART_EDITOR_SELECTED_N)->h; int r = theme->get_part(PART_EDITOR_SELECTED_E)->w; int b = theme->get_part(PART_EDITOR_SELECTED_S)->h; jwidget_set_border(this, l, t, r, b); }
ColorButton::ColorButton(const Color& color, int imgtype) : ButtonBase("", colorbutton_type(), JI_BUTTON, JI_BUTTON) , m_color(color) , m_imgtype(imgtype) , m_frame(NULL) { jwidget_focusrest(this, true); setFont(static_cast<SkinTheme*>(getTheme())->getMiniFont()); }
inline IMapContext* getMapContext (const std::string& name) { const std::string randomMapBase = "random"; if (name.compare(0, randomMapBase.size(), randomMapBase) == 0) { const ThemeType& theme = getTheme(name); info(LOG_MAP, "use theme " + theme.name); RandomMapContext *ctx = new RandomMapContext(name, theme, 8, 18, 20, 14); return ctx; } return new LUAMapContext(name); }
EditorView::EditorView(EditorView::Type type) : View() , m_type(type) { SkinTheme* theme = static_cast<SkinTheme*>(getTheme()); int l = theme->get_part(PART_EDITOR_SELECTED_W)->w; int t = theme->get_part(PART_EDITOR_SELECTED_N)->h; int r = theme->get_part(PART_EDITOR_SELECTED_E)->w; int b = theme->get_part(PART_EDITOR_SELECTED_S)->h; jwidget_set_border(this, l, t, r, b); hideScrollBars(); }
void CThemes::readFile(const char *themename) { if(themefile.loadConfig(themename)) { getTheme(themefile); notifier = new CColorSetupNotifier; notifier->changeNotify(NONEXISTANT_LOCALE, NULL); hasThemeChanged = true; delete notifier; } else printf("[neutrino theme] %s not found\n", themename); }
Size ComboBox::getPrefSize() const { gsize_t max = 0; gsize_t pad = getTheme().getTextPadding(); const Font& f = getGraphics()->getFont(); for(auto it = _items.begin(); it != _items.end(); ++it) { gsize_t width = f.getStringWidth(*it); if(width > max) max = width; if(max > MAX_WIDTH) { max = MAX_WIDTH; break; } } return Size(max + pad * 2 + f.getSize().height + ARROW_PAD,f.getSize().height + pad * 2); }
bool EditorView::onProcessMessage(Message* msg) { switch (msg->type) { case JM_SETPOS: // This avoid the displacement of the widgets in the viewport jrect_copy(this->rc, &msg->setpos.rect); updateView(); return true; case JM_DRAW: { Widget* viewport = getViewport(); Widget* child = reinterpret_cast<JWidget>(jlist_first_data(viewport->children)); JRect pos = jwidget_get_rect(this); SkinTheme* theme = static_cast<SkinTheme*>(getTheme()); bool selected = false; switch (m_type) { // Only show the view selected if it is the current editor case CurrentEditorMode: selected = (child == current_editor); break; // Always show selected case AlwaysSelected: selected = true; break; } theme->draw_bounds_nw(ji_screen, pos->x1, pos->y1, pos->x2-1, pos->y2-1, selected ? PART_EDITOR_SELECTED_NW: PART_EDITOR_NORMAL_NW, false); jrect_free(pos); } return true; } return View::onProcessMessage(msg); }
void VoronoiWindow::themeComboBox_activated(const QString& themeName) { TeTheme* theme = getTheme(themeName.latin1()); if(theme == 0) return; // Updates the combo box with delimiters... TeLayer* layer = theme->layer(); boxComboBox->setCurrentText(layer->name().c_str()); // Lists attributes on the weightComboBox weightComboBox->clear(); //if (text=="") text=themeComboBox->currentText().latin1(); TeTable *attrTable = &layer->attrTables()[0]; TeAttributeList * attrList=&attrTable->attributeList(); for (std::vector<TeAttribute>::iterator i=attrList->begin(); i!=attrList->end();++i) { cout<<i->rep_.name_<<endl; weightComboBox->insertItem(i->rep_.name_); } }
bool ColorBar::ScrollableView::onProcessMessage(Message* msg) { switch (msg->type) { case JM_DRAW: { Viewport* viewport = getViewport(); Widget* child = reinterpret_cast<Widget*>(jlist_first_data(viewport->children)); SkinTheme* theme = static_cast<SkinTheme*>(getTheme()); theme->draw_bounds_nw(ji_screen, rc->x1, rc->y1, rc->x2-1, rc->y2-1, hasFocus() ? PART_EDITOR_SELECTED_NW: PART_EDITOR_NORMAL_NW, false); } return true; } return View::onProcessMessage(msg); }
// @brief 读取设置 void DynamicData::loadAppConfig() { QSettings configIniRead(CONFIG_FILE, QSettings::IniFormat); foreach ( const QString &key, _options.keys() ) { if ( configIniRead.contains(key) ) { QVariant value = configIniRead.value(key); if ( !value.isValid() || !_options[key].setValue(value) ){ TyLogWarning("Invalid value for option \"%s\"", key.toUtf8().data()); } }else{ _options[key].reset(); } } loadUserSaveFile(userSettingsFileName()); if (!getThemeList().contains(getTheme())){ TyLogFatal("not exists theme file, reset theme to default \"%s\"", DEFAULT_THEME); _options[KEY_THEME].reset(); } // _language = configIniRead->value(KEY_LANGUAGE, "").toString(); // if(_language.isEmpty())// 当取不到语言设置时,使用系统当前语言 // _language = QLocale::system().name(); TyLogInfo("Load AppConfig: %s", StringUtils::toString(_options).toUtf8().data()); }
// setup default Colors void CThemes::setupDefaultColors() { CConfigFile empty(':'); getTheme(empty); }
void LinkLabel::onPaint(PaintEvent& ev) { getTheme()->paintLinkLabel(ev); }
void TextBox::onPaint(PaintEvent& ev) { getTheme()->paintTextBox(ev); }
void ListBox::onPaint(PaintEvent& ev) { getTheme()->paintListBox(ev); }
bool AppearanceGTK2::saveSettings(const QString& gtkrcFile) const { QFile gtkrc(gtkrcFile); gtkrc.remove(); if(!gtkrc.open(QIODevice::WriteOnly | QIODevice::Text)) { qWarning() << "There was unable to write the file .gtkrc-2.0"; return false; } QTextStream flow(>krc); flow << "# File created by KDE Gtk Config" << "\n" << "# Configs for GTK2 programs \n\n"; QString themeGtkrcFile=themesGtkrcFile(getTheme()); //TODO: is this really needed? if(!themeGtkrcFile.isEmpty()) flow << "include \"" << themeGtkrcFile << "\"\n"; //We include the theme's gtkrc file if(QFile::exists("/etc/gtk-2.0/gtkrc")) flow << "include \"/etc/gtk-2.0/gtkrc\"\n"; //We include the /etc's config file int nameEnd = m_settings["font"].lastIndexOf(QRegExp(" ([0-9]+|bold|italic)")); QString fontFamily = m_settings["font"].left(nameEnd); //TODO: is this really needed? flow << "style \"user-font\" \n" << "{\n" << "\tfont_name=\""<< fontFamily << "\"\n" << "}\n"; flow << "widget_class \"*\" style \"user-font\"\n"; flow << "gtk-font-name=\"" << m_settings["font"] << "\"\n"; flow << "gtk-theme-name=\"" << m_settings["theme"] << "\"\n"; flow << "gtk-icon-theme-name=\""<< m_settings["icon"] << "\"\n"; flow << "gtk-fallback-icon-theme=\"" << m_settings["icon_fallback"] << "\"\n"; flow << "gtk-cursor-theme-name=\"" << m_settings["cursor"] << "\"\n"; flow << "gtk-toolbar-style=" << m_settings["toolbar_style"] << "\n"; flow << "gtk-menu-images=" << m_settings["show_icons_menus"] << "\n"; flow << "gtk-button-images=" << m_settings["show_icons_buttons"] << "\n"; flow << "gtk-primary-button-warps-slider=" << m_settings["primary_button_warps_slider"] << "\n"; //we're done with the ~/.gtk-2.0 file gtkrc.close(); //TODO: do we really need the linked file? if(QFile::remove(gtkrcFile+"-kde4")) qDebug() << "ready to create the symbolic link"; if( !QFile::link(gtkrcFile, gtkrcFile+"-kde4") ) qWarning() << "Couldn't create the symboling link to .gtkrc-2.0-kde4 :("; // else // qDebug() << "Symbolic link created for .gtkrc-2.0-kde4 :D"; if(gtkrcFile==defaultConfigFile()) QProcess::startDetached(QStandardPaths::findExecutable("reload_gtk_apps")); return true; }
void Menu::onPaint(PaintEvent& ev) { getTheme()->paintMenu(ev); }
int ComboBox::ItemWindow::getItemAt(const Pos &pos) { return pos.y / (getGraphics()->getFont().getSize().height + getTheme().getTextPadding() * 2); }
ColorBar::ColorBar(int align) : Box(align) , m_paletteButton("Edit Palette", JI_BUTTON) , m_paletteView(false) , m_fgColor(Color::fromIndex(15), IMAGE_INDEXED) , m_bgColor(Color::fromIndex(0), IMAGE_INDEXED) , m_lock(false) { setBorder(gfx::Border(1*jguiscale())); child_spacing = 1*jguiscale(); m_paletteView.setBoxSize(6*jguiscale()); m_paletteView.setColumns(4); m_fgColor.setPreferredSize(0, m_fgColor.getPreferredSize().h); m_bgColor.setPreferredSize(0, m_bgColor.getPreferredSize().h); m_scrollableView.attachToView(&m_paletteView); int w = (m_scrollableView.getBorder().getSize().w + m_scrollableView.getViewport()->getBorder().getSize().w + m_paletteView.getPreferredSize().w + getTheme()->scrollbar_size); jwidget_set_min_size(&m_scrollableView, w, 0); m_scrollableView.setExpansive(true); addChild(&m_paletteButton); addChild(&m_scrollableView); addChild(&m_fgColor); addChild(&m_bgColor); this->border_width.l = 2*jguiscale(); this->border_width.t = 2*jguiscale(); this->border_width.r = 2*jguiscale(); this->border_width.b = 2*jguiscale(); this->child_spacing = 2*jguiscale(); m_paletteView.IndexChange.connect(&ColorBar::onPaletteIndexChange, this); m_fgColor.Change.connect(&ColorBar::onFgColorButtonChange, this); m_bgColor.Change.connect(&ColorBar::onBgColorButtonChange, this); // Set background color reading its value from the configuration. setBgColor(get_config_color("ColorBar", "BG", getBgColor())); // Clear the selection of the BG color in the palette. m_paletteView.clearSelection(); // Set foreground color reading its value from the configuration. setFgColor(get_config_color("ColorBar", "FG", getFgColor())); // Change color-bar background color (not ColorBar::setBgColor) Widget::setBgColor(((SkinTheme*)getTheme())->get_tab_selected_face_color()); m_paletteView.setBgColor(((SkinTheme*)getTheme())->get_tab_selected_face_color()); // Change labels foreground color setup_mini_look(&m_paletteButton); m_paletteButton.setFont(((SkinTheme*)getTheme())->getMiniFont()); m_paletteButton.Click.connect(Bind<void>(&ColorBar::onPaletteButtonClick, this)); setDoubleBuffered(true); onColorButtonChange(getFgColor()); }
Size Editable::getPrefSize() const { gsize_t pad = getTheme().getTextPadding(); return Size(DEF_WIDTH + pad * 2,getGraphics()->getFont().getSize().height + pad * 2); }
void Editable::paint(Graphics &g) { Size fsize = g.getFont().getSize(); Size size = getSize(); int count = getMaxCharNum(g); gpos_t ystart = (size.height - fsize.height) / 2; int start = _begin; /* if begin could not be determined previously, try that again */ if(_begin == std::numeric_limits<size_t>::max()) { setBegin(); assert(_begin != std::numeric_limits<size_t>::max()); start = _begin; } string text = _secret ? string(_str.length(),'*') : _str; count = MIN((int)text.length(),count); g.setColor(getTheme().getColor(Theme::TEXT_BACKGROUND)); g.fillRect(1,1,size.width - 2,size.height - 2); g.setColor(getTheme().getColor(_focused ? Theme::CTRL_DARKBORDER : Theme::CTRL_BORDER)); g.drawRect(Pos(0,0),size); gsize_t pad = getTheme().getTextPadding(); if(_selStart != -1) { int spos; /* selection background */ g.setColor(getTheme().getColor(Theme::SEL_BACKGROUND)); spos = (start > _selStart ? 0 : (_selStart - start)); g.fillRect(pad + fsize.width * spos, ystart - CURSOR_OVERLAP, fsize.width * (MIN(count - spos,MIN(_selEnd - start,_selEnd - _selStart))), fsize.height + CURSOR_OVERLAP * 2); /* part before selection */ if(start < _selStart) { g.setColor(getTheme().getColor(Theme::TEXT_FOREGROUND)); g.drawString(pad,ystart,text,start,MIN(count,_selStart)); } /* selection */ g.setColor(getTheme().getColor(Theme::SEL_FOREGROUND)); g.drawString(pad + fsize.width * spos,ystart,text,MAX(start,_selStart), (MIN(count - spos,MIN(_selEnd - start,_selEnd - _selStart)))); /* part behind selection */ if(_selEnd < start + count) { g.setColor(getTheme().getColor(Theme::TEXT_FOREGROUND)); spos = _selEnd - start; g.drawString(pad + spos * fsize.width,ystart,text,_selEnd, MIN(count - spos,MIN((int)text.length() - start,(int)text.length() - _selEnd))); } } else { g.setColor(getTheme().getColor(Theme::TEXT_FOREGROUND)); g.drawString(pad,ystart,text,start,count); } if(_focused) { g.setColor(getTheme().getColor(Theme::CTRL_DARKBORDER)); g.fillRect(pad + fsize.width * (_cursor - start), ystart - CURSOR_OVERLAP,CURSOR_WIDTH,fsize.height + CURSOR_OVERLAP * 2); } }
void Slider::onPaint(PaintEvent& ev) { getTheme()->paintSlider(ev); }
void Splitter::onPaint(PaintEvent& ev) { getTheme()->paintSplitter(ev); }
void Panel::paintBackground(Graphics &g) { Rectangle prect = g.getPaintRect(); g.setColor(getTheme().getColor(Theme::CTRL_BACKGROUND)); g.fillRect(prect.getPos(),prect.getSize()); }
bool TextBox::onProcessMessage(Message* msg) { switch (msg->type) { case JM_DRAW: getTheme()->draw_textbox(this, &msg->draw.rect); return true; case JM_SIGNAL: if (msg->signal.num == JI_SIGNAL_SET_TEXT) { View* view = View::getView(this); if (view) view->updateView(); } break; case JM_KEYPRESSED: if (hasFocus()) { View* view = View::getView(this); if (view) { gfx::Rect vp = view->getViewportBounds(); gfx::Point scroll = view->getViewScroll(); int textheight = jwidget_get_text_height(this); switch (msg->key.scancode) { case KEY_LEFT: scroll.x -= vp.w/2; view->setViewScroll(scroll); break; case KEY_RIGHT: scroll.x += vp.w/2; view->setViewScroll(scroll); break; case KEY_UP: scroll.y -= vp.h/2; view->setViewScroll(scroll); break; case KEY_DOWN: scroll.y += vp.h/2; view->setViewScroll(scroll); break; case KEY_PGUP: scroll.y -= (vp.h-textheight); view->setViewScroll(scroll); break; case KEY_PGDN: scroll.y += (vp.h-textheight); view->setViewScroll(scroll); break; case KEY_HOME: scroll.y = 0; view->setViewScroll(scroll); break; case KEY_END: scroll.y = jrect_h(this->rc) - vp.h; view->setViewScroll(scroll); break; default: return false; } } return true; } break; case JM_BUTTONPRESSED: { View* view = View::getView(this); if (view) { captureMouse(); jmouse_set_cursor(JI_CURSOR_SCROLL); return true; } break; } case JM_MOTION: { View* view = View::getView(this); if (view && hasCapture()) { gfx::Rect vp = view->getViewportBounds(); gfx::Point scroll = view->getViewScroll(); scroll.x += jmouse_x(1) - jmouse_x(0); scroll.y += jmouse_y(1) - jmouse_y(0); view->setViewScroll(scroll); jmouse_control_infinite_scroll(vp); } break; } case JM_BUTTONRELEASED: { View* view = View::getView(this); if (view && hasCapture()) { releaseMouse(); jmouse_set_cursor(JI_CURSOR_NORMAL); return true; } break; } case JM_WHEEL: { View* view = View::getView(this); if (view) { gfx::Point scroll = view->getViewScroll(); scroll.y += (jmouse_z(1) - jmouse_z(0)) * jwidget_get_text_height(this)*3; view->setViewScroll(scroll); } break; } } return Widget::onProcessMessage(msg); }
void Entry::onPaint(PaintEvent& ev) { getTheme()->paintEntry(ev); }