flex-grow:1
(вместо width: 100%
), просто в отличие от table-cell это работает даже на <select>
<!DOCTYPE html>
<html lang="ru" style="height:100%;">
<head>
<meta charset="utf-8">
<title>Полигон</title>
<!--
<link href="stypes.css" rel="stylesheet">
<script src="script.js"></script>
-->
<!--<script type="module" src="/static/vue.js"></script>-->
<style>
</style>
</head>
<body style="height:100%;margin:0;">
<div style="display:flex;flex-direction:row;flex-wrap:nowrap;width:100%;">
<button style="flex:0 1 fit-content;background-color:lightgray;"
>setraw
</button>
<select
style="flex-grow:1;background-color:lightyellow"
>
<optgroup>
<option>Select-remaining</option>
<option>many1</option>
<option>many2</option>
<option>many3</option>
</optgroup>
</select>
<button
style="flex:0 1 fit-content;background-color:lightblue"
>vsplit
</button>
</div>
</body>
<script>
</script>
</html>
state
, в котором лежит то состояние, которое пользователь передавал в push_state. Таким образом, через это состояние можно определить, на сколько позиций назад вернулся пользователь, и избавляться от боли в зависимости от того, насколько функциональность много̶с̶т̶р̶а̶д̶а̶л̶ь̶н̶а̶я̶целевая готов к удалению
/готов к дампу
, неубывающий идентификатор, зависимости, зависимый, ожидаемый размер и ещё что-то} и срезов данных {тот же идентификатор, N байт кусочка файла}. По ходу выгрузки строится дерево зависимостей, и как только все ноды оказались в WAL, ставлю флаги готов к дампу
и начинаю запись. Случится нарушение - восстановлю недозаписанную транзакцию по WAL, истечёт актуальность - помечу блоки как готов к удалению
.Можно ли как-то выполнить нужную мне подстановку?
gliuButton* gliuCallBackStafGL(double mouseX, double mouseY)
{
if (!gliuButtonStore.stackSize)// мой стек кнопок. кнопки хранятся блоками.
{
return;
}
glPushMatrix(); // сохраним матрицу, чтобы ничего не испортить
GLuint buf[8] = { 0 };
glSelectBuffer(8, buf);
glLoadIdentity(); // координаты объектов я задавал в экранных координатах
// => стандартные координаты [-1;1]x[-1;1] будут охватывать 4 пикселя
glTranslatef(-mouseX, -mouseY, 0);
glRenderMode(GL_SELECT); // включаем буфер
glInitNames();
glPushName(0); // не помню, для чего именно это нужно, но иначе не работает
unsigned i = 0;
// сложности с хранением блоками
struct _gliuStackElemSet_buttonPtr *ptr = gliuButtonStore.current;
gliuButton **cur;
if (!ptr->_bsize)
{
ptr = ptr->_before;
}
cur = &ptr->_buf[ptr->_bsize - 1];
for (i = 0; i < gliuButtonStore.stackSize; i++)
{
glLoadName(i); // загрузить имя
glRecti((*cur)->labelPart->x, (*cur)->labelPart->y, (*cur)->labelPart->x + (*cur)->labelPart->width, (*cur)->labelPart->y + (*cur)->labelPart->height); // вместо кнопки - просто прямоугольник
if (cur != ptr->_buf)
{
cur--;
}
else
{
ptr = ptr->_before;
}
}
glPopName();
// сколько попаданий?
int hits = glRenderMode(GL_RENDER);
if (hits>0)
{
ptr = gliuButtonStore.current;
if (!ptr->_bsize)
{
ptr = ptr->_before;
}
cur = &ptr->_buf[ptr->_bsize - 1];
for (i = 0; i < gliuButtonStore.stackSize; i++)
{
if (i == buf[3])
{
// именно в buf[3] хранится "имя"
// полезно изучить всё содержимое buf
break;
}
if (cur != ptr->_buf)
{
cur--;
}
else
{
ptr = ptr->_before;
}
}
glPopMatrix();
return *cur;
}
else
{
glPopMatrix();
return 0;
}
}
Я лишь знаю С++ и в основном это работа с массивамивозникает ощущение, что нет навыка написания программ масштаба Вами предложенного. Надеюсь не будет новостью необходимость делать акцент на раздельную компиляцию (чтобы на каждый запуск не уходило секунд 10), максимальное разделение на функции и проверка на корректность входных параметров (что позволит написать качественный код и использовать его в других проектах). Ну и разумеется знание правил оформления для максимального комфорта дебага.
glutSetColor(int cell,
GLfloat red, GLfloat green, GLfloat blue);
unsigned char bitmap[] = { 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0xFF, 0xFF, 0x00,
0x03, 0xFF, 0xFF, 0xC0,
0x07, 0xFF, 0xFF, 0xE0,
0x0F, 0x80, 0x01, 0xF0,
0x1E, 0x00, 0x00, 0xF8,
0x1C, 0x00, 0x00, 0x38,
0x3C, 0x7E, 0x7E, 0x3C,
0x38, 0x0E, 0x70, 0x1C,
0x39, 0xF0, 0x0F, 0x9C,
0x38, 0x00, 0x00, 0x1C,
0x38, 0x00, 0x00, 0x1C,
0x38, 0x38, 0x1C, 0x1C,
0x38, 0xFE, 0x7F, 0x1C,
0x38, 0xC6, 0x63, 0x1C,
0x38, 0xD6, 0x6B, 0x1C,
0x38, 0xD6, 0x6B, 0x1C,
0x38, 0xC6, 0x63, 0x1C,
0x38, 0xFE, 0x7F, 0x1C,
0x38, 0x7C, 0x3E, 0x1C,
0x3C, 0x00, 0x00, 0x3C,
0x3C, 0x00, 0x00, 0x3C,
0x7E, 0x00, 0x00, 0x7E,
0x7F, 0x80, 0x01, 0xFE,
0x77, 0xFF, 0xFF, 0xEE,
0x63, 0xFF, 0xFF, 0xC7,
0xE7, 0xFF, 0xFF, 0xE7,
0xFF, 0xF0, 0x0F, 0xFF,
0xFF, 0x00, 0x01, 0xFF,
0xF0, 0x00, 0x00, 0x0F
};
void draw(){
glClearColor(1, 1, 0, 1);//жёлтым
glClear(GL_COLOR_BUFFER_BIT);//закрасить
glPixelTransferi(GL_MAP_COLOR, 1);//использоваь карту
float map[2] = { 1, 0 };//пусть...
//...все единицы закрашивают в чёрный, а все нули - в белый цвета...
glPixelMapfv(GL_PIXEL_MAP_I_TO_R, 2, map);
glPixelMapfv(GL_PIXEL_MAP_I_TO_G, 2, map);
glPixelMapfv(GL_PIXEL_MAP_I_TO_B, 2, map);
//...и все нули будут прозрачными
map[0] = 0, map[1] = 1;
glPixelMapfv(GL_PIXEL_MAP_I_TO_A, 2, map);
//Итого: для единиц действует цвет glColor4f(0,0,0,1), а для нулей будет glColor4f(1,1,1,0)
glRasterPos2i(-160, -160);//позиция от центра экрана в пикселях ( не забыть вызвать glOrtho(...) )
glPixelZoom(10, 10);//теперь работает
/*этот блок*/ glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
/*лучше поставить*/ glEnable(GL_BLEND); //прозрачность
/*в начале программы*/ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); //определяется компонентом ALPHA
glDrawPixels(32, 32, GL_COLOR_INDEX, GL_BITMAP, bitmap);//рисовать 32x32 bitmap, где кадый бит определяет цветовой индекс "0" или "1"
glPixelTransferi(GL_MAP_COLOR, 0);//не использовать карту
}