/* draws the bullets */ void draw_bullets(int r, int g, int b, int (*project)(float *f, int *i, int c)) { BULLET *bul = bullets; ALLEGRO_COLOR c1 = makecol(128+r/2, 128+g/2, 128+b/2); ALLEGRO_COLOR c2 = (g) ? makecol(r/5, g/5, b/5) : makecol(r/4, g/4, b/4); float shape[6]; int ishape[6]; int i; while (bul) { if (bul->y > 0) { shape[0] = bul->x - 0.005; shape[1] = bul->y + 0.01; shape[2] = bul->x + 0.005; shape[3] = bul->y + 0.01; shape[4] = bul->x; shape[5] = bul->y - 0.015; if (project(shape, ishape, 6)) { polygon(3, ishape, c1); if (!low_detail) { float cx = (ishape[0] + ishape[2] + ishape[4]) / 3; float cy = (ishape[1] + ishape[3] + ishape[5]) / 3; float boxx[4] = { -1, -1, 1, 1 }; float boxy[4] = { -1, 1, 1, -1 }; for (i=0; i<4; i++) { float rot = ((int)(bul->x*256) & 1) ? bul->y : -bul->y; float tx = cos(rot)*boxx[i] + sin(rot)*boxy[i]; float ty = sin(rot)*boxx[i] - cos(rot)*boxy[i]; boxx[i] = tx * bul->y * view_size() / 8; boxy[i] = ty * bul->y * view_size() / 8; } line(cx+boxx[0], cy+boxy[0], cx+boxx[1], cy+boxy[1], c2); line(cx+boxx[1], cy+boxy[1], cx+boxx[2], cy+boxy[2], c2); line(cx+boxx[2], cy+boxy[2], cx+boxx[3], cy+boxy[3], c2); line(cx+boxx[3], cy+boxy[3], cx+boxx[0], cy+boxy[0], c2); } } } bul = bul->next; } }
static PyObject * THPStorage_(shareCuda)(THPStorage *self) { HANDLE_TH_ERRORS THStorage *storage = self->cdata; AutoGPU gpu_guard(storage->device); THPObjectPtr tuple(PyTuple_New(5)); THPObjectPtr device(PyLong_FromLong(storage->device)); THPObjectPtr _handle(Py_None); Py_INCREF(Py_None); THPObjectPtr size(PyLong_FromLong(storage->size)); THPObjectPtr _offset(PyLong_FromLong(0)); THPObjectPtr view_size(PyLong_FromLong(storage->size)); if (storage->data) { size_t base_size; void *base_ptr = THCCachingAllocator_getBaseAllocation(storage->data, &base_size); ptrdiff_t offset = (char*)storage->data - (char*)base_ptr; cudaIpcMemHandle_t handle; THCudaCheck(cudaIpcGetMemHandle(&handle, base_ptr)); _handle = PyBytes_FromStringAndSize((char *)&handle, CUDA_IPC_HANDLE_SIZE); _offset = PyLong_FromSsize_t((Py_ssize_t)offset); size = PyLong_FromSize_t(base_size / sizeof(real)); } if (!tuple || !device || !_handle || !size || !_offset || !view_size) { return NULL; } PyTuple_SET_ITEM(tuple.get(), 0, device.release()); PyTuple_SET_ITEM(tuple.get(), 1, _handle.release()); PyTuple_SET_ITEM(tuple.get(), 2, size.release()); PyTuple_SET_ITEM(tuple.get(), 3, _offset.release()); PyTuple_SET_ITEM(tuple.get(), 4, view_size.release()); return tuple.release(); END_HANDLE_TH_ERRORS }
ThemeManager::ThemeManager(QSettings& settings, QWidget* parent) : QDialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowCloseButtonHint), m_settings(settings) { setWindowTitle(tr("Themes")); m_tabs = new QTabWidget(this); // Find view sizes int focush = style()->pixelMetric(QStyle::PM_FocusFrameHMargin); int focusv = style()->pixelMetric(QStyle::PM_FocusFrameVMargin); int frame = style()->pixelMetric(QStyle::PM_DefaultFrameWidth); int scrollbar = style()->pixelMetric(QStyle::PM_SliderThickness); QSize grid_size(259 + focush, 154 + focusv + (fontMetrics().height() * 2)); QSize view_size((grid_size.width() + frame + focush) * 2 + scrollbar, (grid_size.height() + frame + focusv) * 2); // Add default themes tab QWidget* tab = new QWidget(this); m_tabs->addTab(tab, tr("Default")); // Add default themes list m_default_themes = new QListWidget(tab); m_default_themes->setSortingEnabled(true); m_default_themes->setViewMode(QListView::IconMode); m_default_themes->setIconSize(QSize(258, 153)); m_default_themes->setGridSize(grid_size); m_default_themes->setMovement(QListView::Static); m_default_themes->setResizeMode(QListView::Adjust); m_default_themes->setSelectionMode(QAbstractItemView::SingleSelection); m_default_themes->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); m_default_themes->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel); m_default_themes->setMinimumSize(view_size); m_default_themes->setWordWrap(true); addItem("gentleblues", true, tr("Gentle Blues")); addItem("oldschool", true, tr("Old School")); addItem("spacedreams", true, tr("Space Dreams")); addItem("writingdesk", true, tr("Writing Desk")); // Add default control buttons QPushButton* new_default_button = new QPushButton(tr("New"), tab); new_default_button->setAutoDefault(false); connect(new_default_button, SIGNAL(clicked()), this, SLOT(newTheme())); m_clone_default_button = new QPushButton(tr("Duplicate"), tab); m_clone_default_button->setAutoDefault(false); connect(m_clone_default_button, SIGNAL(clicked()), this, SLOT(cloneTheme())); // Lay out default themes tab QGridLayout* default_layout = new QGridLayout(tab); default_layout->setColumnStretch(0, 1); default_layout->setRowStretch(2, 1); default_layout->addWidget(m_default_themes, 0, 0, 3, 1); default_layout->addWidget(new_default_button, 0, 1); default_layout->addWidget(m_clone_default_button, 1, 1); // Add themes tab tab = new QWidget(this); m_tabs->addTab(tab, tr("Custom")); // Add themes list m_themes = new QListWidget(tab); m_themes->setSortingEnabled(true); m_themes->setViewMode(QListView::IconMode); m_themes->setIconSize(QSize(258, 153)); m_themes->setGridSize(grid_size); m_themes->setMovement(QListView::Static); m_themes->setResizeMode(QListView::Adjust); m_themes->setSelectionMode(QAbstractItemView::SingleSelection); m_themes->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); m_themes->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel); m_themes->setMinimumSize(view_size); m_themes->setWordWrap(true); QDir dir(Theme::path(), "*.theme"); QStringList themes = dir.entryList(QDir::Files, QDir::Name | QDir::IgnoreCase); for (const QString& theme : themes) { QString name = QSettings(dir.filePath(theme), QSettings::IniFormat).value("Name").toString(); if (!name.isEmpty()) { addItem(QFileInfo(theme).completeBaseName(), false, name); } else { name = QUrl::fromPercentEncoding(QFileInfo(theme).completeBaseName().toUtf8()); QSettings(dir.filePath(theme), QSettings::IniFormat).setValue("Name", name); QString id = Theme::createId(); dir.rename(theme, id + ".theme"); dir.remove(QFileInfo(theme).completeBaseName() + ".png"); QStringList sessions = QDir(Session::path(), "*.session").entryList(QDir::Files); sessions.prepend(""); for (const QString& file : sessions) { Session session(file); if ((session.theme() == name) && (session.themeDefault() == false)) { session.setTheme(id, false); } } addItem(id, false, name); } } // Add control buttons QPushButton* new_button = new QPushButton(tr("New"), tab); new_button->setAutoDefault(false); connect(new_button, SIGNAL(clicked()), this, SLOT(newTheme())); m_clone_button = new QPushButton(tr("Duplicate"), tab); m_clone_button->setAutoDefault(false); m_clone_button->setEnabled(false); connect(m_clone_button, SIGNAL(clicked()), this, SLOT(cloneTheme())); m_edit_button = new QPushButton(tr("Edit"), tab); m_edit_button->setAutoDefault(false); m_edit_button->setEnabled(false); connect(m_edit_button, SIGNAL(clicked()), this, SLOT(editTheme())); m_remove_button = new QPushButton(tr("Delete"), tab); m_remove_button->setAutoDefault(false); m_remove_button->setEnabled(false); connect(m_remove_button, SIGNAL(clicked()), this, SLOT(deleteTheme())); QPushButton* import_button = new QPushButton(tr("Import"), tab); import_button->setAutoDefault(false); connect(import_button, SIGNAL(clicked()), this, SLOT(importTheme())); m_export_button = new QPushButton(tr("Export"), tab); m_export_button->setAutoDefault(false); m_export_button->setEnabled(false); connect(m_export_button, SIGNAL(clicked()), this, SLOT(exportTheme())); // Lay out custom themes tab QGridLayout* custom_layout = new QGridLayout(tab); custom_layout->setColumnStretch(0, 1); custom_layout->setRowMinimumHeight(4, import_button->sizeHint().height()); custom_layout->setRowStretch(7, 1); custom_layout->addWidget(m_themes, 0, 0, 8, 1); custom_layout->addWidget(new_button, 0, 1); custom_layout->addWidget(m_clone_button, 1, 1); custom_layout->addWidget(m_edit_button, 2, 1); custom_layout->addWidget(m_remove_button, 3, 1); custom_layout->addWidget(import_button, 5, 1); custom_layout->addWidget(m_export_button, 6, 1); // Lay out dialog QDialogButtonBox* buttons = new QDialogButtonBox(QDialogButtonBox::Close, Qt::Horizontal, this); connect(buttons, SIGNAL(rejected()), this, SLOT(reject())); QVBoxLayout* layout = new QVBoxLayout(this); layout->addWidget(m_tabs, 1); layout->addSpacing(layout->margin()); layout->addWidget(buttons); // Select theme QString theme = m_settings.value("ThemeManager/Theme").toString(); bool is_default = m_settings.value("ThemeManager/ThemeDefault", false).toBool(); if (!selectItem(theme, is_default)) { selectItem(Theme::defaultId(), true); } selectionChanged(is_default); connect(m_default_themes, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)), this, SLOT(currentThemeChanged(QListWidgetItem*))); connect(m_themes, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)), this, SLOT(currentThemeChanged(QListWidgetItem*))); connect(m_themes, SIGNAL(itemActivated(QListWidgetItem*)), this, SLOT(editTheme())); // Restore size resize(m_settings.value("ThemeManager/Size", sizeHint()).toSize()); }