Функция 0 — определить и нарисовать окно

From KolibriOS wiki
Revision as of 06:41, 4 April 2010 by Mike.dld (talk | contribs)
Jump to navigation Jump to search

Параметры

биты тип значение описание
eax
 0..31 uint32 0 Номер функции.
ebx
 0..15 uint16 ширина окна Расположение окна относительно оси X.
16..31 int16 позиция окна по X
ecx
 0..15 uint16 высота окна Расположение окна относительно оси Y.
16..31 int16 позиция окна по Y
edx
 0..23 rgb888 цвет клиентской области
24..27 uint4 тип окна
  • 0 - тип окна I - окно фиксированных размеров;
  • 1 - только определить область окна, ничего не рисовать;
  • 2 - тип окна II - окно изменяемых размеров;
  • 3 - тип окна III - окно со скином;
  • 4 - тип окна IV - окно со скином фиксированных размеров.

Остальные возможные значения (от 5 до 15) зарезервированы, вызов функции с такими значениями игнорируется.

28 bit флаг: текст заголовка Тип окна I-II: игнорируется.

Тип окна III-IV:

  • 0 - нет заголовка;
  • 1 - адрес строки заголовка задаётся в edi.
29 bit флаг: начало координат Начало координат совпадает с:
  • 0 - левым верхним углом окна: 0 по горизонтали, 0 по вертикали;
  • 1 - левым верхним углом клиентской области: <ширина рамки> по горизонтали, <высота заголовка> по вертикали.
30 bit флаг: сплошной фон Клиентская область при отрисовке окна:
  • 0 - заполняется;
  • 1 - не заполняется.
31 bit флаг: градиентный фон Клиентская область заполняется:
  • 0 - сплошным цветом;
  • 1 - градиентом от указанного цвета к чёрному.
esi
 0..23 rgb888 цвет заголовка окна Только для окон типа I и II.
24 bit флаг: неперемещаемое окно
  • 0 - окно может быть перемещено пользователем;
  • 1 - окно не может быть перемещено пользователем.
25..27 0 Зарезервированы.
28..31 uint4 стиль заголовка окна Тип окна I-II:
  • 0 - нет градиента;
  • 4 - негативный градиент;
  • 8 - обычный градиент.

Другие значения зарезервированы.

Тип окна III-IV: игнорируется.

edi
 0..31 rgb888 цвет рамки окна Только для окон типа I и II.
pointer адрес строки заголовка Только для окон типа III и IV при edx28 = 1.

Возвращаемое значение

Функция не возвращает значения.

Замечания

  • Положение и размеры окна устанавливаются при первом вызове этой функции и игнорируются при последующих; для изменения положения и/или размеров уже созданного окна используйте 67-ю функцию.
  • Для окон стилей Y=3,4 с заголовком (A=1) строка заголовка устанавливается при первом вызове этой функции и игнорируется при последующих (точнее говоря, игнорируется после вызова подфункции 2 функции 12 - конца перерисовки); для изменения строки заголовка уже созданного окна используйте подфункцию 1 функции 71.
  • Если использовать окна соответствующих стилей, то положение и/или размеры окна могут меняться пользователем. Текущие положение и размеры могут быть получены вызовом функции 9.
  • Окно должно умещаться на экране. Если переданные координаты и размеры не удовлетворяют этому условию, то соответствующая координата (или, возможно, обе) считается нулем, а если и это не помогает, то соответствующий размер (или, возможно, оба) устанавливается в размер экрана.
Далее обозначим xpos,ypos,xsize,ysize - значения, передаваемые в ebx,ecx. 
Координаты приводятся относительно левого верхнего угла окна, который, таким образом, задается как (0,0), 
координаты правого нижнего угла суть (xsize,ysize).
  • Размеры окна понимаются в смысле координат правого нижнего угла.
Это же относится и ко всем остальным функциям.
Это означает, что реальные размеры на 1 пиксель больше.

Вид окна типа I

  • рисуется внешняя рамка цвета, указанного в edi,шириной 1 пиксель
  • рисуется заголовок - прямоугольник с левым верхним углом (1,1)и правым нижним (xsize-1,min(25,ysize)) цвета, указанного в esi (с учетом градиента)
  • если ysize>=26, то закрашивается рабочая область окна - прямоугольник с левым верхним углом (1,21) и правым нижним (xsize-1,ysize-1) (размерами (xsize-1)*(ysize-21)) - цветом, указанным в edx (с учетом градиента)
  • если A=1 и строка заголовка установлена подфункцией 1 функции 71, то она выводится в соответствующем месте заголовка

Вид окна типа II

  • рисуется внешняя рамка шириной 1 пиксель "затенённого" цвета edi (все составляющие цвета уменьшаются в два раза)
  • рисуется промежуточная рамка шириной 3 пикселя цвета edi
  • рисуется внутренняя рамка шириной 1 пиксель "затенённого" цвета edi
  • рисуется заголовок - прямоугольник с левым верхним углом (4,4) и правым нижним (xsize-4,min(20,ysize)) цвета, указанного в esi (с учетом градиента)
  • если ysize>=26, то закрашивается рабочая область окна - прямоугольник с левым верхним углом (5,20) и правым нижним (xsize-5,ysize-5) - цветом, указанным в edx (с учетом градиента)
  • если A=1 и строка заголовка установлена подфункцией 1 функции 71, то она выводится в соответствующем месте заголовка

Вид окна со скином (типа III и IV)

  • рисуется внешняя рамка шириной 1 пиксель цвета 'outer' из скина
  • рисуется промежуточная рамка шириной 3 пикселя цвета 'frame' из скина
  • рисуется внутренняя рамка шириной 1 пиксель цвета 'inner' из скина
  • рисуется заголовок (по картинкам из скина) в прямоугольнике (0,0) - (xsize,_skinh-1)
  • если ysize>=26, то закрашивается рабочая область окна - прямоугольник с левым верхним углом (5,_skinh) и правым нижним (xsize-5,ysize-5) - цветом, указанным в edx (с учетом градиента)
  • определяются две стандартные кнопки: закрытия и минимизации (смотри функцию 8)
  • если A=1 и в edi (ненулевой) указатель на строку заголовка, то она выводится в заголовке в месте, определяемом скином
  • Значение переменной _skinh доступно как результат вызова подфункции 4 функции 48