WIP: CreaGraFix

Pixilang по русски
User avatar
Al_Rado
Posts: 239
Joined: Tue Dec 04, 2007 2:33 pm
Location: Krasnodar
Contact:

WIP: CreaGraFix

Post by Al_Rado »

Так захватила идея симметричного рисования, что взялся писать свой графический редактор :)

Графического редактор CreaGraFix (CGF)

Назначение и возможности:

- развитие креативности правого полушария :)
- создание набросков (скетчей) для пиксель арта, спрайтов (лучше пользоваться стилусом или граф. планшетом, хотя мышкой тоже прикольно);
- создание и редактирование анимированных gif-аватарок;
- создание и редактирование многостраничных спрайтов для игр;
- создание и редактирование пиксельных Pixi-шрифтов;
- удобный перевод графики в ASCII-символы.


Общие характеристики:
(многие параметры намерено ограничены, ввиду целесообразности)


- размер экрана 320х240;
- размер страниц: от 4х4 до 200х200 пикселей;
- количество страниц в одном файле анимации: от 1 до 256;
- формат графических файлов для загрузки/сохранения анимации - Gif;
- формат графических файлов для загрузки изображений- Gif, Jpeg;
- Формат графических файлов для сохранения изображений - Gif, Txt.


Функции графического редактора CreaGraFix v.001:


- загрузка/сохранение Gif-анимации;
- загрузка/сохранение однокадрового Gif;
- загрузка картинки Jpeg в качестве кадра;
- сохранение картинки в виде ASCII-символов;
- изменение размеров кадров в анимации;
- отображение новых размеров;
- изменение количества кадров в анимации;
- создание новой анимации с установленными характеристиками размера и количества кадров;
- очистка текущего кадра;
- копирование содержимого кадра в буфер;
- вставка содержимого кадра из буфера;
- удаление текущего кадра (с уменьшением количества кадров анимации);
- добавление кадра (с увеличением количества кадров анимации, пустой кадр вставляется перед текущим);
- установка скорости проигрывания анимации (время показа каждого кадра);
- переход на кадр вперед;
- переход на кадр назад;
- нормальное проигрывание анимации;
- обратное проигрывание анимации;
- переход на первый кадр;
- переход на последний кадр;
- отображение номеров первого, текущего и последнего кадров;
- выбор режима рисования: карандаш или стерка;
- выбор одного из пяти режимов симметричного рисования : без симметрии, относительно вертикальной оси, относительно горизонтальной оси, зеркальное отражение, относительно вертикальной и горизонтальной оси в о всех четвертях (четыре области с зеркальным отражением)
- вкл./откл. режима отображения фона с направляющими для симметричного рисования;
- увелич./уменьш. яркости фона с направляющими для симметричного рисования;
- отображение логотипа, информации о версии программы, лицензии распространения и авторстве :)

Код программы:

Code: Select all

//© Al_Rado GNU GPL 2.0// CreaGraFix v.001 // Графический редактор

date = "12.06.08" // дата этого релиза :)

//*********************УСТАНОВКА ЗНАЧЕНИЙ ПО УМОЛЧАНИЮ************************
x_window = 320 // ширина окна
y_window = 240 // высота окна
resize_pixi (0,x_window,y_window)

MAKE_LOGOS // создаю лого и картинки

// ширина и высота рабочего поля
widh_wind = 200
high_wind = 200

// ширина и высота, переменные для изменения размеров рабочего поля
widh_wind_t = widh_wind
high_wind_t = high_wind

// координаты Х и Y для рабочего поля
x_wind = -widh_wind/2
y_wind = -high_wind/2

anim_frames = 8 // количество кадров в анимации
anim_frames_t = anim_frames // переменная для изменения количества кадров в анимации

animat = new_pixi( widh_wind, high_wind, anim_frames ) // Pixi-контейнер анимации

frame_num = 0 // текущий кадр

x_frame_num = -4 // координата для нумерации текущего кадра, меняется если количество больше 9

frame_time = 300 // время отображеня кадра анимации (общее для всех кадров)

play_anim = 0 // флаг, три состояния: -1 - проигрывание анимации в обратном порядке, 0 - нет проигрывания, 1 - нормальное проигрывание

color_brush = BLACK // цвет кисти (карандаш или стерка)

color_fon = #999999 // цвет фона для симметричного рисования

bright_fon = 128 // яркость фона для симметричного рисования

mode_fon = -1 // флаг, вкл/выкл направляющие (фон для симметричного рисования): -1 - вкл, 1 - выкл

size_brush = 1 // размер карандаша/стерки

mode_sym = 1 // режим симметричного рисования (значения от 1 до 5)

mode_br = 1 // режим кисточки: 1 - карандаш, 2 - стерка

zakladka = 5 // текущая закладка

// переменные координат X и Y для расположения вновь загруженной картинки
x_tmp = 0
y_tmp = 0

info = 0 // флаг, показывать инф. о программе: 0 - нет, 1 - да


//***************************ГЛАВНЫЙ ЦИКЛ*************************************
start:
clear (SNEG)

// проверка: есть ли запись
if save_flag=1 {SAVE_ANIM}
if save_flag=2 {SAVE_GIF}
if save_flag=3 {SAVE_TXT}

// проверка: показывать инфо
if info = 1 {INFO_ABOUT}

// печать текущего кадра Pixi-контейнера 
fpixi( animat, 0, 0, 0, 0, frame_num )

// обработать мышку (стилус)
handle_keys({play_anim = 0 DRAWING BOTTOM ZAKL},{DRAWING},{DRAWING})

DRAW_ZAKLAD // отрисовка закладок

DRAW_MENU // отрисовка менюшек и кнопок

PLAY_ANIMAT // проверка: проигрывать анимацию

frame(0)
goto start




//***********************ПОДПРОГРАММА ОТРИСОВКИ ЗАКЛАДОК************************
DRAW_ZAKLAD:
fbox(-160,-120,320,16,#AAAAAA)
box(-160,-118,52,14,WHITE)
box(-160+54*1,-118,52,14,WHITE)
box(-160+54*2,-118,52,14,WHITE)
box(-160+54*3,-118,52,14,WHITE)
box(-160+54*4,-118,52,14,WHITE)
box(-160+54*5,-118,52,14,WHITE)
fbox(-162+54*zakladka,-120,58,20,WHITE)
print (" ФАЙЛ   АНИМ   ЦВЕТ  КИСТЬ   ФОН   РИС", -160, -114, BLACK)
ret

//***********************ПОДПРОГРАММА ОТРИСОВКИ КНОПОК************************
DRAW_MENU:

// кнопка информация о программе
fbox( 148, 108, 12, 12, #AAAAAA )
print ("?",150,110,WHITE)

// отрисовка кнопок перемещения по кадрам анимации, воспроизведение анимации вперед/назад
fbox(-100,103,20,12,#AAAAAA)
fbox(79,103,20,12,#AAAAAA)
print("I< << <     > >> >I", -76, 106, BLACK) 
print("0", -94, 106, BLACK) 
temp = anim_frames-1
print("$temp", 82, 106, BLACK) 
if frame_num > 9 { x_frame_num = -9 } else { x_frame_num = -4 }
print("$frame_num", x_frame_num, 106, BLACK)

box(-77,103,20,12,BLACK)
box(-54,103,20,12,BLACK)
box(-31,103,20,12,BLACK)
box(9,103,20,12,BLACK)
box(33,103,20,12,BLACK)
box(56,103,20,12,BLACK)


// закладка -ФАЙЛ-

if zakladka = 0 {
// отгораживаю разные поля меню
fbox(-160,0,60,2,BLACK)
fbox(100,0,60,2,BLACK)

// область новых размеров
box( -widh_wind_t/2 , -high_wind_t/2 , widh_wind_t , high_wind_t , RED )

// отрисовка кнопок
print("
О_АНИМ 

О_JPEG

О_GIF
"
,-155,-100, BLACK)

box(-159,-95,56,12,BLACK)
box(-159,-79,56,12,BLACK)
box(-159,-63,44,12,BLACK)

print("
ШИР/ВЫС 

<    >

КАДРЫ

<    >

НОВ_АН

ПЕРЕСЧ
"
,-155,5, BLACK)
print("$widh_wind_t",-143,29,BLACK)
print("$anim_frames_t",-140,61,BLACK)

box(-159,26,12,12,BLACK)
box(-116,26,12,12,BLACK)
box(-159,58,12,12,BLACK)
box(-116,58,12,12,BLACK)
box(-159,74,56,12,BLACK)
box(-159,90,56,12,BLACK)

print("
C_АНИМ

C_GIF

С_TXT
"
,106,-100, BLACK)

box(104,-95,52,12,BLACK)
box(104,-79,52,12,BLACK)
box(104,-63,44,12,BLACK)

print("
ОЧИС_К

УДАЛ_К

КОПИ_К

ВСТА_К

ДОБА_К
"
,106,5, BLACK)

box(104,10,52,12,BLACK)
box(104,26,52,12,BLACK)
box(104,42,52,12,BLACK)
box(104,58,52,12,BLACK)
box(104,74,52,12,BLACK)

// отрисовать, если только что загружена картинка
if perem_tmp = 1 {
print ("
  U
L   R
  D
", -156, -40, BLACK)

box(-142,-34,12,12,BLACK)
box(-158,-26,12,12,BLACK)
box(-126,-26,12,12,BLACK)
box(-142,-18,12,12,BLACK)

}
}


// закладка -РИСОВАНИЕ-

if zakladka = 5 {

// отрисовка режима рисования (карандаш/стерка)
fbox(-150,-200+100*mode_br,40,100,#CCCCCC)
pixi (karand,-130,0,1,128)
//fbox( -130, 74, size_brush, size_brush, color_brush )

// отрисовка кнопок
print("
ОЧИСТ
"
,106,-95, BLACK)

box(104,-90,52,12,BLACK)

// отрисовать кнопку цветом фона направляющих, если отображение направляющих разрешено
if mode_fon = 1 {
transp (64)
fbox(104,-63+16*mode_fon,44,12,color_fon)
transp (256)
}

print("
НАПР

ЯРК +

ЯРК -
"
,107,-52, BLACK)
box(104,-47,44,12,BLACK)
box(104,-31,44,12,BLACK)
box(104,-15,44,12,BLACK)

fbox(104,-11+16*mode_sym,52,12,#CCCCCC)

print("
ПРОСТО 

ВЕРТИК

ГОРИЗО

ЗЕРКАЛ

ЧЕТЫРЕ
"
,106,0, BLACK)

box(104,5,52,12,BLACK)
box(104,21,52,12,BLACK)
box(104,37,52,12,BLACK)
box(104,53,52,12,BLACK)
box(104,69,52,12,BLACK)
}


// закладка -АНИМАЦИЯ-	

if zakladka = 1 {
print("
ВР:

  +

  -
"
,-154,64, BLACK)
print("$frame_time", -130, 72, BLACK)
box(-157,69,54,12,BLACK)
box(-157,85,44,12,BLACK)
box(-157,101,44,12,BLACK)
}


// рамки, обозначения области меню и вокруг кадра
box( -100 , -100 , 200 , 200 , #AAAAAA )
box( x_wind , y_wind , widh_wind , high_wind , BLUE )

ret

//************************ПОДПРОГРАММА ОПРОСА ЗАКЛАДОК******************************
ZAKL:
if gpr( -160,-118,52,14 )       {perem_tmp = 0 zakladka = 0 }
if gpr( -160+54*1,-118,52,14 )  {perem_tmp = 0 zakladka = 1 }
if gpr( -160+54*2,-118,52,14 )  {perem_tmp = 0 zakladka = 2 }
if gpr( -160+54*3,-118,52,14 )  {perem_tmp = 0 zakladka = 3 }
if gpr( -160+54*4,-118,52,14 )  {perem_tmp = 0 zakladka = 4 }
if gpr( -160+54*5,-118,52,14 )  {perem_tmp = 0 zakladka = 5 }

ret

//************************ПОДПРОГРАММА ОПРОСА КНОПОК********************************
BOTTOM:
// информация о программе
if gpr( 148, 108, 12, 12, )  { info = 1 }

// опрос кнопок перемещения по кадрам анимации, воспроизведение анимации вперед/назад
if anim_frames > 1 {
		if gpr(-31,103,20,12) { frame_num - 1 if frame_num < 0 { frame_num = 0 } }
		if gpr(9,103,20,12)  { frame_num + 1 if frame_num > (anim_frames-1) { frame_num = anim_frames-1 }}
	}

	if gpr(-54,103,20,12) { play_anim = -1 }
	if gpr(33,103,20,12)  { play_anim = 1 }
	if gpr(-77,103,20,12) { frame_num = 0 }
	if gpr(56,103,20,12)  { frame_num = anim_frames-1 }

	
// закладка -ФАЙЛ-
if zakladka = 0 {
	if gpr(-159,-95,56,12) {LOAD_ANIM} // открыть файл анимации
	if gpr(-159,-79,56,12) {LOAD_JPEG} // открыть файл Jpeg и вставить его в кадр	
	if gpr(-159,-63,44,12) {LOAD_GIF}  // открыть файл Gif и вставить его в кадр	
	
	
	if gpr(104,-95,52,12) {save_flag = 1} // записать файл анимации
	if gpr(104,-79,52,12) {save_flag = 2} // записать кадр в .gif файл
	if gpr(104,-63,44,12) {save_flag = 3} // записать кадр в .txt файл
	
	// очищаю кадр		
	if gpr(104,10,52,12) { 
	n=0 while n<(widh_wind*high_wind) {
		animat[((widh_wind*high_wind)*frame_num)+n]=0 
		n+1 
		} 
	}
	
	// удаляю кадр	
	if gpr(104,26,52,12) { 
		tmp_pixi = new_pixi( widh_wind, high_wind, anim_frames-1 )
		n=0 while n<(widh_wind*high_wind)*frame_num {
		tmp_pixi [ n ] = animat[ n ]
		n+1 
		} 

		if (widh_wind*high_wind)*frame_num < (widh_wind*high_wind)*anim_frames {
			n=(widh_wind*high_wind)*frame_num while n<(widh_wind*high_wind)*anim_frames {
			tmp_pixi [ n ] = animat[ n+(widh_wind*high_wind) ]
			n+1 
			} 	
		}
	remove_pixi ( animat ) 
	animat = clone_pixi ( tmp_pixi,0 )	
	anim_frames = get_pixi_frames(animat)
	}	
	
	// копирую кадр
	if gpr(104,42,52,12) { 
	tmp_frame = new_pixi( widh_wind, high_wind, 1 )
		n=0 while n<(widh_wind*high_wind) {
		tmp_frame [ n ] = animat[ ((widh_wind*high_wind)*frame_num) + n ]
		n+1 
		} 
	}
	
	//вставляю кадр
	if gpr(104,58,52,12) { 
		n=0 while n<(widh_wind*high_wind) {
		 animat[ ((widh_wind*high_wind)*frame_num) + n ] = tmp_frame [ n ]
		n+1 
		} 
	}
	
	//добавляю кадр	
	if gpr(104,74,52,12) { 
		tmp_pixi = new_pixi( widh_wind, high_wind, anim_frames+1 )
		n=0 while n<(widh_wind*high_wind)*frame_num {
		tmp_pixi [ n ] = animat[ n ]
		n+1 
		} 

		if (widh_wind*high_wind)*frame_num < (widh_wind*high_wind)*anim_frames {
			n=(widh_wind*high_wind)*frame_num while n<(widh_wind*high_wind)*anim_frames {
			tmp_pixi [ n+(widh_wind*high_wind) ] = animat[ n ]
			n+1 
			} 	
		}
	remove_pixi ( animat ) 
	animat = clone_pixi ( tmp_pixi,0 )	
	anim_frames = get_pixi_frames(animat)	
	}
	
	
	// если загружено изображение, можно переместить его по кадру
	if perem_tmp = 1 {
		if gpr(-142,-34,12,12) { y_tmp-4 }
		
		if gpr(-158,-26,12,12) { x_tmp-4 }
		
		if gpr(-126,-26,12,12) { x_tmp+4 }
		
		if gpr(-142,-18,12,12) { y_tmp+4 }

		set_screen ( animat , frame_num )
		fbox ( x_wind, y_wind, widh_wind, high_wind, SNEG )
		pixi (tmp_frame,x_tmp,y_tmp,0,0)
		set_screen( 0 )
	}

	// изменение размеров Pixi-контейнера (ширина = высота)
		if gpr( -159,26,12,12 ) { 		// <
			if widh_wind_t > 4 {
			widh_wind_t - 1
			high_wind_t - 1
			} else { widh_wind_t = 4 high_wind_t = 4 }
		}	
		
		if gpr( -116,26,12,12 ) { 		// >
			if widh_wind_t < 200 {
			widh_wind_t + 1
			high_wind_t + 1
			} else { widh_wind_t = 200 high_wind_t = 200 }
		}
	
	// изменение кадров в анимации
		if gpr( -159,58,12,12 ) { 	// <	
			if anim_frames_t > 1 {
			anim_frames_t - 1
			} else { anim_frames_t = 1 }
		}
		
		if gpr( -116,58,12,12 ) { 	// >	
			if anim_frames_t < 256 {
			anim_frames_t + 1
			} else { anim_frames_t = 256 }
		}
		
	// создание новой анимации на основе данных
		if gpr( -159,74,56,12 ) { 
		tmp_pixi = new_pixi( widh_wind_t, high_wind_t, anim_frames_t )
		remove_pixi ( animat ) 
		animat = clone_pixi ( tmp_pixi,0 )	
		widh_wind = get_pixi_xsize (animat) 
		widh_wind_t = widh_wind
		high_wind = get_pixi_ysize (animat) 
		high_wind_t = high_wind
		anim_frames = get_pixi_frames(animat)
		anim_frames_t = anim_frames
		x_wind = -widh_wind/2
		y_wind = -high_wind/2
		}	

	// пересчет существующей анимации 
	
		if gpr( -159,90,56,12 ) { 
		tmp_pixi = new_pixi( widh_wind_t, high_wind_t, anim_frames_t )
			
			// если размеры не поменялись, пересчет кадров
			if widh_wind_t = widh_wind {
			n=0 while n<(widh_wind_t*high_wind_t)*anim_frames_t {
			tmp_pixi [ n ] = animat[ n ]
			n+1 
			} 
			
			}
			
			// если введенная информация меньше существующего размера - уменьшение размеров Pixi-контейнера
			if widh_wind_t < widh_wind {
			l=0 while (l<anim_frames_t) {
				m=0 while (m<high_wind_t) {
					n=0 while (n<widh_wind_t) {
					tmp_pixi [ n + widh_wind_t*m + (widh_wind_t*high_wind_t)*l ] = animat[ (n+(widh_wind/2-widh_wind_t/2)) + (widh_wind*(m+high_wind/2-high_wind_t/2)) + (widh_wind*high_wind)*l ]
					n+1
					}
				m+1
				}	
			l+1	
			}
			}

			// если введенная информация больше существующего размера - увеличение размеров Pixi-контейнера
			if widh_wind_t > widh_wind {
			l=0 while (l<anim_frames_t) {
				m=0 while (m<high_wind) {
					n=0 while (n<widh_wind) {
					tmp_pixi [ (n+(widh_wind_t/2-widh_wind/2)) + (widh_wind_t*(high_wind_t/2-high_wind/2+m)) + (widh_wind_t*high_wind_t)*l ] = animat[ n + widh_wind*m + (widh_wind*high_wind)*l ]
					n+1
					}
				m+1
				}	
			l+1	
			}
			}

		remove_pixi ( animat ) 
		animat = clone_pixi ( tmp_pixi,0 )	
		widh_wind = get_pixi_xsize (animat) 
		widh_wind_t = widh_wind
		high_wind = get_pixi_ysize (animat) 
		high_wind_t = high_wind
		anim_frames = get_pixi_frames(animat)
		anim_frames_t = anim_frames
		x_wind = -widh_wind/2
		y_wind = -high_wind/2
	}
}


// закладка -РИСОВАНИЕ-

if zakladka = 5 {

	// очищаю кадр	
	if gpr(104,-90,52,12) { 
	n=0 while n<(widh_wind*high_wind) {
		animat[((widh_wind*high_wind)*frame_num)+n]=0 
		n+1 
		} 
	}
	
	// выбор: карандаш или стерка
	if gpr(-150,-100,40,100) {color_brush = BLACK size_brush = 1 mode_br = 1}
	if gpr(-150,0,40,100) {color_brush = WHITE size_brush = 4 mode_br = 2}

	// вкл/выкл направляющие (фон для симметричного рисования)
	if gpr(104,-47,44,12) { mode_fon = - mode_fon}

	// если фон с направляющими включен, то можно его сделать светлее/темнее 
	if mode_fon = 1 {
		if gpr(104,-31,44,12) { bright_fon = bright_fon-16 color_fon = get_color (bright_fon ,bright_fon ,bright_fon ) 
			if bright_fon < 16 { bright_fon = 16 }
			}
		if gpr(104,-15,44,12) { bright_fon = bright_fon+16 color_fon = get_color (bright_fon ,bright_fon ,bright_fon ) 
			if bright_fon >192 { bright_fon = 192 }
			}
	}

	// выбор одного из четырех режимов симметричного рисования и режима без симметрии
	if gpr(104,5,52,12)  { mode_sym = 1 }
	if gpr(104,21,52,12) { mode_sym = 2 }
	if gpr(104,37,52,12) { mode_sym = 3 }
	if gpr(104,53,52,12) { mode_sym = 4 }
	if gpr(104,69,52,12) { mode_sym = 5 }
}
	
// закладка -АНИМАЦИЯ-	
if zakladka = 1 {	
	if gpr(-157,85,44,12) { frame_time + 100 if frame_time > 10000 { frame_time = 10000 } }
	if gpr(-157,101,44,12)  { frame_time - 100 if frame_time < 100 { frame_time = 100 } }
}
	
ret


//***********************ПОДПРОГРАММА ЗАПИСИ АНИМАЦИИ GIF*******************************
SAVE_ANIM:
save_flag = 0
filename = "                                                                                                                                                                                                                                                                                                "
if (file_dialog( filename, "Сохранить анимацию Gif", "gif", "save_id" )) {
video_export_gif( filename, x_wind, y_wind, widh_wind, high_wind )
	f = 0 while( f < anim_frames ) {
	clear( SNEG )
	fpixi( animat , 0 , 0 , 0 , 0 ,f )
	frame( 100 )
	f + 1
	}
} else {ret}

stop_video_export
ret

//***********************ПОДПРОГРАММА ЗАПИСИ КАДРА GIF*******************************
SAVE_GIF:
save_flag = 0
filename = "                                                                                                                                                                                                                                                                                                "
if (file_dialog( filename, "Сохранить кадр Gif", "gif", "save_id" )) {
video_export_gif( filename, x_wind, y_wind, widh_wind, high_wind )
	clear( SNEG )
	fpixi( animat , 0 , 0 , 0 , 0 ,frame_num )
	frame( 100 )
} else {ret}

stop_video_export
ret


//***********************ПОДПРОГРАММА ЗАПИСИ КАРТИНКИ В ASCII-СИМВОЛАХ*******************************
SAVE_TXT:
save_flag = 0
filename = "                                                                                                                                                                                                                                                                                                "
if (file_dialog( filename, "Сохранить кадр TXT", "txt", "save_id" )) {
	clear( SNEG )
	fpixi( animat , 0 , 0 , 0 , 0 ,frame_num )
	frame(0)
save_screen ( filename, x_wind, y_wind, widh_wind, high_wind )
} else {ret}

ret


//************************ПОДПРОГРАММА ЗАГРУЗКИ ФАЙЛА АНИМАЦИИ********************************
LOAD_ANIM:
filename = 
"                                                                                                                                                                                                                                                                                                "
if (file_dialog( filename, "Открыть анимацию Gif", "gif", "load_id" ) ) {
animat = load_pixi(filename) } else {ret}
widh_wind = get_pixi_xsize (animat) 
widh_wind_t = widh_wind
high_wind = get_pixi_ysize (animat) 
high_wind_t = high_wind
anim_frames = get_pixi_frames(animat)
anim_frames_t = anim_frames
frame_num = 0
x_wind = -get_pixi_xsize (animat) / 2
y_wind = -get_pixi_ysize (animat) / 2
perem_tmp = 0
ret

//************************ПОДПРОГРАММА ЗАГРУЗКИ КАДРА JPEG****************************
LOAD_JPEG:
filename = 
"                                                                                                                                                                                                                                                                                                "
if (file_dialog( filename, "Открыть кадр JPEG", "jpg", "load_id" ) ) {
tmp_frame = load_pixi(filename) } else {ret}
x_tmp = 0
y_tmp = 0
set_screen ( animat , frame_num )
fbox ( x_wind, y_wind, widh_wind, high_wind, SNEG )
pixi (tmp_frame,0,0,0,0)
set_screen( 0 )	
perem_tmp = 1
ret

//************************ПОДПРОГРАММА ЗАГРУЗКИ КАДРА GIF****************************
LOAD_GIF:
filename = 
"                                                                                                                                                                                                                                                                                                "
if (file_dialog( filename, "Открыть кадр GIF", "gif", "load_id" ) ) {
tmp_frame = load_pixi(filename) } else {ret}
x_tmp = 0
y_tmp = 0
set_screen ( animat , frame_num )
fbox ( x_wind, y_wind, widh_wind, high_wind, SNEG )
pixi (tmp_frame,0,0,0,0)
perem_tmp = 1
set_screen( 0 )
ret


//************************ПОДПРОГРАММА РИСОВАНИЯ*************************************
DRAWING:

	if gpr( x_wind, y_wind, widh_wind, high_wind ) {
		if mode_sym = 1 {
			box ( get_pen_x, get_pen_y, size_brush, size_brush, BLACK )}

		if mode_sym = 2 {
			box ( get_pen_x, get_pen_y, size_brush, size_brush, BLACK )
			box ( -get_pen_x, get_pen_y, size_brush, size_brush, BLACK )}

		if mode_sym = 3 {
			box ( get_pen_x, get_pen_y, size_brush, size_brush, BLACK )
			box ( get_pen_x, -get_pen_y, size_brush, size_brush, BLACK )}

		if mode_sym = 4 {
			box ( get_pen_x, get_pen_y, size_brush, size_brush, BLACK )
			box ( -get_pen_x, -get_pen_y, size_brush, size_brush, BLACK )}	
		
		if mode_sym = 5 {
			box ( get_pen_x, get_pen_y, size_brush, size_brush, BLACK )
			box ( -get_pen_x, get_pen_y, size_brush, size_brush, BLACK )
			box ( get_pen_x, -get_pen_y, size_brush, size_brush, BLACK )
			box ( -get_pen_x, -get_pen_y, size_brush, size_brush, BLACK )}
	perem_tmp = 0
	}


if mode_fon = 1 {
	if mode_sym = 1 {
		transp (64) 
		fbox ( x_wind, y_wind, widh_wind, high_wind, color_fon) 
		transp (256)}

	if mode_sym = 2 {
		transp (64) 
		fbox ( 0, y_wind, widh_wind/2, high_wind, color_fon) 
		transp (256)}
		
	if mode_sym = 3 {
	transp (64) 
	fbox ( x_wind, 0, widh_wind, high_wind/2, color_fon) 
	transp (256)}

	if mode_sym = 4 {
		transp (64) 
		fbox ( 0, y_wind, widh_wind/2, high_wind/2, color_fon) 
		fbox ( x_wind, 0, widh_wind/2, high_wind/2, color_fon)
		transp (256)}

	if mode_sym = 5 {
	transp (64) 
	fbox ( 0, y_wind, widh_wind/2, high_wind/2, color_fon) 
	fbox ( x_wind, 0, widh_wind/2, high_wind/2, color_fon)
	transp (256)}
}

set_screen ( animat , frame_num )

if gpr( x_wind, y_wind, widh_wind, high_wind ) {

	if mode_sym = 1 {
		fbox ( get_pen_x, get_pen_y, size_brush, size_brush, color_brush )}

	if mode_sym = 2 {
		fbox ( get_pen_x, get_pen_y, size_brush, size_brush, color_brush )
		fbox ( -get_pen_x, get_pen_y, size_brush, size_brush, color_brush )}

	if mode_sym = 3 {
		fbox ( get_pen_x, get_pen_y, size_brush, size_brush, color_brush )
		fbox ( get_pen_x, -get_pen_y, size_brush, size_brush, color_brush )}

	if mode_sym = 4 {
	fbox ( get_pen_x, get_pen_y, size_brush, size_brush, color_brush )
	fbox ( -get_pen_x, -get_pen_y, size_brush, size_brush, color_brush )}	
		
	if mode_sym = 5 {
		fbox ( get_pen_x, get_pen_y, size_brush, size_brush, color_brush )
		fbox ( -get_pen_x, get_pen_y, size_brush, size_brush, color_brush )
		fbox ( get_pen_x, -get_pen_y, size_brush, size_brush, color_brush )
		fbox ( -get_pen_x, -get_pen_y, size_brush, size_brush, color_brush )}
}

set_screen( 0 )
ret

//************************ПОДПРОГРАММА ПРОИГРЫВАНИЯ АНИМАЦИИ*************************************
PLAY_ANIMAT:

if play_anim = 1 { 
	fpixi( animat, 0, 0 ,0 ,0 ,frame_num ) 
	frame(frame_time)
	frame_num + 1
	if frame_num > (anim_frames-1) { frame_num = anim_frames-1 }
} 

if play_anim = -1 { 
	fpixi( animat, 0, 0 ,0 ,0 ,frame_num ) 
	frame(frame_time)
	frame_num - 1
	if frame_num < 0 { frame_num = 0 }
} 

ret


INFO_ABOUT:
clear (BLACK)

n=5 while n<14 {
fbox ( -(30*n)/2, -(24*n)/2, 30*n, 22*n, WHITE )
effector( SNEG, 256, 0, -50, -60, 54*2, 50*2, 1 ) 
effector( BLUE, 256, 0, -50, -60, 54*2, 50*2, 1 ) 
pixi ( logo_CGF, 0, -10, 2, 0, 1)
t_scale (400,400,400)
print ( "
CreaGraFix

   v.001
", -40, 20, BLACK )
t_reset
print ("© Al_Rado     GNU GPL 2.0     ",-150,100, BLACK)
print (date,90,100, BLACK)
frame ( 300 )
n+1
}
frame ( 4000 )
clear (WHITE)
info = 0
ret


//************************ПОДПРОГРАММА СОЗДАНИЯ ЛОГО*************************************
MAKE_LOGOS:

b=#FFFFFF 
logo_CGF="
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbb.bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.bbbbbbbbbbbbb
bbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbb
bbbbbbbbbbbbb....bbbbbbbbbbbbbbbbbbbbbbbbbbb....bbbbbbbbbbbb
bbbbbbbbbbbbb.bbb..bbbbbbbbbbbbbbbbbbbbbbb..bbb.bbbbbbbbbbbb
bbbbbbbbbbbbb.bbbb..bbbbbbbbbbbbbbbbbbbbb..bbbb.bbbbbbbbbbbb
bbbbbbbbbbbbb..bbbb..bbbbbbbbbbbbbbbbbbb..bbbb..bbbbbbbbbbbb
bbbbbbbbbbbbb.bbbbbbb.bbbbbbbbbbbbbbbbb.bbbbbbb.bbbbbbbbbbbb
bbbbbbbbbbbbb.bbbbbbbb..bbbbbbbbbbbbb..bbbbbbbb.bbbbbbbbbbbb
bbbbbbbbbbbbbb.bbbbbbbb.bbbbbbbbbbbbb.bbbbbbbb.bbbbbbbbbbbbb
bbbbbbbbbbbbbb.bbbbbbbbb.bbbbbbbbbbb.bbbbbbbbb.bbbbbbbbbbbbb
bbbbbbbbbbbbbb.bb...bbbbb.bbbbbbbbb.bbbbb...bb.bbbbbbbbbbbbb
bbbbbbbbbbbbbb..b.b..bbbb..bbbbbbb..bbbb..b.b..bbbbbbbbbbbbb
bbbbbbbbbbbbbbb.b..b.bbbbb.bbbbbbb.bbbbb.b..b.bbbbbbbbbbbbbb
bbbbbbbbbbbbbbb..bbbb.bbbb.bbbbbbb.bbbb.bbbb..bbbbbbbbbbbbbb
bbbbbbbbbbbbbbbb.bbbb..bbb...bbb...bbb..bbbb.bbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbb..bbb.bbbb..bbb..bbbb.bbb..bbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbb.bbb..bbb.......bbb..bbb.bbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbb.bbb.bbbbbbbbbbbbb.bbb.bbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbb..b.bbbbbbbbbbbbb.b..bbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbb.b.b.bbbbbbbbb.b.b.bbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbb.bbb.bbbbbbb.bbb.bbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbb.bbb.bbbbbbb.bbb.bbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbb.bbbbb.bbb.bbbbb.bbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbb..bbb.bbbbbbb.bbb..bbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbb...bbbbbbb..b..bbbbbbb...bbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbb....bbb..bbbbbb.bbbbbb..bbb....bbbbbbbbbbbbbb
bbbbbbbbbbbb...b.b...b.b.bbbb.b.bbbb.b.b...b.b...bbbbbbbbbbb
bbbbbbbbb...bb..b.bbbb.bbb.bb.b.bb.bbb.bbbb.b..bb...bbbbbbbb
bbbbbbbb..b...bbbbbbbb..bb..b.b.b..bb..bbbbbbbb...b..bbbbbbb
bbbbbb.b...bb.bbbbbbbbb.....bbbbb.....bbbbbbbbb.bb...b.bbbbb
bbbb...b.bbbb.bbbbbbbbbb.bb..bbb..bb.bbbbbbbbbb.bbbb.b...bbb
bbbb.....b.b.b.bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.b.b.b.....bbb
bbbbb..bb...b.b..bbbbbbbbbbbbbbbbbbbbbbbbbbb..b.b...bb..bbbb
bbbbbbbbbbbb.......bbbbbbbbbbbbbbbbbbbbbbb.......bbbbbbbbbbb
bbbbbbbbbbbbbb...b.bbbbbbbbbbbbbbbbbbbbbbb.b...bbbbbbbbbbbbb
bbbbbbbbbbbbbbb..b.b.bbbbbbbb...bbbbbbbb.b.b..bbbbbbbbbbbbbb
bbbbbbbbbbbbbbb......bbbbbb...b...bbbbbb......bbbbbbbbbbbbbb
bbbbbbbbbbbbbb.....bbbbbbbbbbbbbbbbbbbbbbb.....bbbbbbbbbbbbb
bbbbbbbbbbbbbb.bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.bbbbbbbbbbbbb
bbbbbbbbbbbbbb.bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.bbbbbbbbbbbbb
bbbbbbbbbbbbb...bbb.b....bbbbbbbbbbb....b.bbb...bbbbbbbbbbbb
bbbbbbbbbbbb..b..b..bb...bbbbbbbbbbb...bb..b..b..bbbbbbbbbbb
bbbbbbbbbbbb....bbb.bbbbbbbbbbbbbbbbbbbbb.bbb....bbbbbbbbbbb
bbbbbbbbbbbb..bb.bbbbb..bbbbbbbbbbbbb..bbbbb.bb..bbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbb.bbbbb.....bbbbb.bbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbb..bbbbb..b..bbbbb..bbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbb.bb..b..bbb..b..bb.bbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbb.......bbbbb.......bbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
"
make_pixi(logo_CGF)

A=#191919 B=#191919 C=#1E1E1E D=#212121 E=#232323 F=#313131 G=#3A3A3A H=#3A3A3A I=#3A3A3A J=#3E3E3E K=#414141 L=#454545 M=#4A4A4A 
N=#4A4A4A O=#4E4E4E P=#515151 Q=#585858 R=#5A5A5A S=#5A5A5A T=#656565 U=#6A6A6A V=#6B6B6B W=#747474 X=#7B7B7B Y=#7B7B7B Z=#848484 
a=#858585 b=#8C8C8C c=#8C8C8C d=#939393 e=#949494 f=#949494 g=#9E9E9E h=#A5A5A5 i=#A6A6A6 j=#ADADAD k=#ADADAD l=#B0B0B0 m=#B5B5B5 
n=#B5B5B5 o=#B9B9B9 p=#C5C5C5 q=#C5C5C5 r=#D1D1D1 s=#DDDDDD t=#DEDEDE u=#EFEFEF v=#EEEEEE w=#FAFAFA x=#FFFFFF y=#FFFFFF z=#FFFFFF 
karand="
.......PT.......
.......BB.......
......nBBq......
......FFEK......
.....gTPNVk.....
.....HTWWZH.....
....ZnHcgNhc....
...uNrSckKwKw...
...VrggckWqqW...
..rSyStcknZySt..
..PtyHyckvNytS..
.qVyrVyckyKwyVo.
.BwyckyckyWqywD.
ZgyyPvyZkykZyyhZ
NfytKyyZkywBywgP
ZFSSFyyDYyrDWWNc
ZBBEPHSkETFqhnkc
ZBDHNPPYfYkqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukw
yDBBBDEFHKNNPSNv
yHBDEHKNSTVWZcHy
cBDHNSVYfhnqtuhc
wBDHNSVYfhnqtukc
rEBDFHNPTVWZcgWy
ywccccccccccccqy
"
make_pixi(karand)

ret

ВекторКодПиксельПолигон - ВотЧтоЯЛюблю!
User avatar
Al_Rado
Posts: 239
Joined: Tue Dec 04, 2007 2:33 pm
Location: Krasnodar
Contact:

Re: WIP: CreaGraFix

Post by Al_Rado »

Только вот, если пользоваться кнопочкой "выделить всё" - почему-то добавляется в текст программы несколько пробелов в начале каждой строки... Что коверкает код...
Если вручную выделять текст программы и затем вставлять в текстовик - все нормально. Интересно, у меня одного так? Может браузер глючит.
ВекторКодПиксельПолигон - ВотЧтоЯЛюблю!
User avatar
NightRadio
Site Admin
Posts: 3941
Joined: Fri Jan 23, 2004 12:28 am
Location: Ekaterinburg. Russia
Contact:

Re: WIP: CreaGraFix

Post by NightRadio »

Классная идея!
Потестим :)
Кстати, после команды "Выделить Всё" у меня тоже пробелы вставляются :)
И еще под linux почему-то всё виснет после попытки растянуть окно pixilang... Этот момент я еще не понял до конца..
User avatar
Al_Rado
Posts: 239
Joined: Tue Dec 04, 2007 2:33 pm
Location: Krasnodar
Contact:

WIP: CreaGraFix v.002

Post by Al_Rado »

Да, под Линуксом не проверял... Он у меня сейчас временно недоступен )
Пока выдалось свободное время, вот замутил версию 002 :)

Новые функции CreaGraFix v.002:


- запись процесса рисования в видео файл: все окно программы (работает пока только под Windows). Назначение данного режима: поделиться с миром - как создаются шедевры =) ;
- запись процесса рисования в Gif файл: область анимации; Назначение данного режима: запись рисования, для последующей загрузки и редактирования.
- отображение секундомера при записи в видео файл, для контроля его длительности/объема (пока секундомер выдает значения не совсем корректно);
- отображение общего количества кадров, экспортируемых в gif файл, для контроля его длительности/объема;
- установка частоты кадров при экспорте в gif, от 1 кадра в секунду до максимально возможного;
- позиционирование загруженной картинки в кадре;
- изменение масштаба загруженной картинки в кадре;
- загрузка фонового изображения (служит для удобства отрисовки, при сохранении изображения/анимации не выводится);
- позиционирование фонового изображения;
- изменение масштаба фонового изображения;
- вкл./откл. отображения фонового изображения;
- выбор режима отображения фона: постоянно отображать или только во время рисования;
- увелич./уменьш. яркости отображения фонового изображения;
- изменение размеров карандаша/стерки;
- выбор цвета карандаша: 16 градаций серого;
- выбор цвета карандаша: палитра 16 цветов (пиксель-артовская);
- отображение текущего цвета в палитре;
- отображение текущего цвета и размера над "инструментом" (карандаш/стерка);
- косметические изменения;
- исправлены мелкие баги... без этого никак :)

Code: Select all

//© Al_Rado GNU GPL 2.0// CreaGraFix // Графический редактор

ver = "v.002" // версия релиза
date = "15.06.08" // дата релиза 

//*********************УСТАНОВКА ЗНАЧЕНИЙ ПО УМОЛЧАНИЮ************************
x_window = 320 // ширина окна
y_window = 240 // высота окна
resize_pixi (0,x_window,y_window)

MAKE_LOGOS // создаю лого и картинки

// ширина и высота рабочего поля
widh_wind = 200
high_wind = 200

// ширина и высота, переменные для изменения размеров рабочего поля
widh_wind_t = widh_wind
high_wind_t = high_wind

// координаты Х и Y для рабочего поля
x_wind = -widh_wind/2
y_wind = -high_wind/2

anim_frames = 8 // количество кадров в анимации
anim_frames_t = anim_frames // переменная для изменения количества кадров в анимации

animat = new_pixi( widh_wind, high_wind, anim_frames ) // Pixi-контейнер анимации
n=0 while n<(widh_wind*high_wind*anim_frames) {
	animat [ n ] = #FFFFFA
	n+1
	}
pixi_transp (animat,1,#FFFFFA)

frame_num = 0 // текущий кадр

x_frame_num = -4 // координата для нумерации текущего кадра, меняется если количество больше 9

frame_time = 100 // время отображеня кадра анимации (общее для всех кадров)

play_anim = 0 // флаг, три состояния: -1 - проигрывание анимации в обратном порядке, 0 - нет проигрывания, 1 - нормальное проигрывание

color_brush = BLACK // цвет кисти (карандаш или стерка)

color_brush_tmp = color_brush // переменная в которой хранится значение цвета карандаша при смене режима на стерку

color_fon = #999999 // цвет фона для симметричного рисования

bright_fon = 128 // яркость фона для симметричного рисования

mode_fon = -1 // флаг, вкл/выкл направляющие (фон для симметричного рисования): -1 - вкл, 1 - выкл

size_brush = 1 // размер карандаша/стерки

mode_sym = 1 // режим симметричного рисования (значения от 1 до 5)

mode_br = 1 // режим кисточки: 1 - карандаш, 2 - стерка

zakladka = 5 // текущая закладка

// переменные координат X и Y для расположения вновь загруженной картинки
x_tmp = 0
y_tmp = 0

info = 0 // флаг, показывать инф. о программе: 0 - нет, 1 - да

stop_export_gif = 0  // флаг останова экспорта в gif, 0 - нет останова, 1 - остановить экспорт

stop_export_avi = 0 // флаг останова экспорта в avi, 0 - нет останова, 1 - остановить экспорт

status_export_avi = 0 // статус экспорта, 0 - нет экспорта, 1 - идет экспорт

status_export_gif = 0 // статус экспорта, 0 - нет экспорта, 1 - идет экспорт

frame_exp = 0 // количество экспортированных кадров

fraq = 0 // частота кадров при экспорте в Gif

scale_tmp = 0 // масштаб картинки загруженной в кадр

fon = new_pixi (10,10,1)// фон-пустышка

// параметры фонового изображения: координата X и Y, масштаб
x_fon = 0
y_fon = 0
scale_fon = 0

wiev_fon_flag = 1 // флаг отображения фона: -1 - не отображать, 1 - отображать

wiev_fon = 1 // режим отображения фона: 1 - постоянно отображать, 2 - только во время рисования

bright_fon_img = 128 // яркость отображения фоновой картинки

// три массива значений для палитры из 16 цветов. Красная, зеленая и синяя состовляющие соответственно
color_R = new_array(16)
color_G = new_array(16)
color_B = new_array(16)
n=0
color_R[n] = 255  color_G[n] = 255  color_B[n] = 255  n+1
color_R[n] = 172  color_G[n] = 234  color_B[n] = 136  n+1
color_R[n] = 208  color_G[n] = 220  color_B[n] = 113  n+1
color_R[n] = 171  color_G[n] = 171  color_B[n] = 171  n+1
color_R[n] = 122  color_G[n] = 191  color_B[n] = 199  n+1
color_R[n] = 187  color_G[n] = 119  color_B[n] = 109  n+1
color_R[n] = 104  color_G[n] = 169  color_B[n] = 65   n+1
color_R[n] = 128  color_G[n] = 128  color_B[n] = 128  n+1
color_R[n] = 124  color_G[n] = 112  color_B[n] = 218  n+1
color_R[n] = 144  color_G[n] = 95   color_B[n] = 37   n+1
color_R[n] = 141  color_G[n] = 71   color_B[n] = 179  n+1
color_R[n] = 84   color_G[n] = 84   color_B[n] = 84   n+1
color_R[n] = 140  color_G[n] = 62   color_B[n] = 52   n+1
color_R[n] = 87   color_G[n] = 66   color_B[n] = 0    n+1
color_R[n] = 62   color_G[n] = 49   color_B[n] = 162  n+1
color_R[n] = 0    color_G[n] = 0    color_B[n] = 0  

// координаты ячейки текущего цвета карандаша (черный по умолчанию)
x_color = -155+3*13
y_color = -80+3*13




//***************************ГЛАВНЫЙ ЦИКЛ*************************************
start:
clear (SNEG)

if wiev_fon_flag > 0 & wiev_fon = 1 { transp (bright_fon_img) fpixi (fon,x_fon,y_fon,0,scale_fon,0) transp (256) } // вывод фонового изображения (постоянно).

// закрываю все, кроме рабочего поля
fbox(-x_window/2,-y_window/2,x_window,y_window/2-high_wind/2,WHITE)
fbox(-x_window/2,y_window/2-(y_window/2-high_wind/2),x_window,y_window/2-high_wind/2,WHITE)
fbox(-x_window/2,-y_window/2,x_window/2-widh_wind/2,y_window,WHITE)
fbox(widh_wind/2,-y_window/2,x_window/2-widh_wind/2,y_window,WHITE)

// проверка: есть ли запись
if save_flag=1 {SAVE_ANIM}
if save_flag=2 {SAVE_GIF}
if save_flag=3 {SAVE_TXT}
if save_flag=4 { EXPORT_AVI start_timer (0) start_timer (1) }
if save_flag=5 { EXPORT_GIF start_timer (0) start_timer (1) }

if stop_export_gif = 1 {stop_video_export stop_export_gif = 0 }
if stop_export_avi = 1 {stop_video_export stop_export_avi = 0 }

// проверка: показывать инфо
if info = 1 {INFO_ABOUT}

// печать текущего кадра Pixi-контейнера 
fpixi( animat, 0, 0, 0, 0, frame_num )



// обработать мышку (стилус)
handle_keys({play_anim = 0 DRAWING BOTTOM ZAKL},{DRAWING},{DRAWING})

DRAW_ZAKLAD // отрисовка закладок

DRAW_MENU // отрисовка менюшек и кнопок

PLAY_ANIMAT // проверка: проигрывать анимацию


// если идет запись в Gif файл, то сохраняются кадры через n-ное время, иначе просто перерисовываю экран
if stop_export_gif = 0 & status_export_gif = 1 { pause_video_export frame (fraq) frame_exp+1 resume_video_export frame (0)} else { frame(0) } 

goto start




//***********************ПОДПРОГРАММА ОТРИСОВКИ ЗАКЛАДОК************************
DRAW_ZAKLAD:
fbox(-160,-120,320,16,#AAAAAA)
box(-160,-118,52,14,WHITE)
box(-160+54*1,-118,52,14,WHITE)
box(-160+54*2,-118,52,14,WHITE)
box(-160+54*3,-118,52,14,WHITE)
box(-160+54*4,-118,52,14,WHITE)
box(-160+54*5,-118,52,14,WHITE)
fbox(-162+54*zakladka,-120,58,20,WHITE)
print (" ФАЙЛ   АНИМ   ЦВЕТ  КИСТЬ   ФОН   РИС", -160, -114, BLACK)
ret

//***********************ПОДПРОГРАММА ОТРИСОВКИ КНОПОК************************
DRAW_MENU:

// кнопка информация о программе
fbox( 148, 108, 12, 12, #AAAAAA )
print ("?",150,110,WHITE)

// отрисовка кнопок перемещения по кадрам анимации, воспроизведение анимации вперед/назад
fbox(-100,103,20,12,#AAAAAA)
fbox(79,103,20,12,#AAAAAA)
print("I< << <     > >> >I", -76, 106, BLACK) 
print("0", -94, 106, BLACK) 
temp = anim_frames-1
print("$temp", 82, 106, BLACK) 
if frame_num > 9 { x_frame_num = -9 } else { x_frame_num = -4 }
print("$frame_num", x_frame_num, 106, BLACK)

box(-77,103,20,12,BLACK)
box(-54,103,20,12,BLACK)
box(-31,103,20,12,BLACK)
box(9,103,20,12,BLACK)
box(33,103,20,12,BLACK)
box(56,103,20,12,BLACK)


// закладка ----------ФАЙЛ----------

if zakladka = 0 {
// отгораживаю разные поля меню
fbox(-160,0,60,2,BLACK)
fbox(100,0,60,2,BLACK)

// область новых размеров
box( -widh_wind_t/2 , -high_wind_t/2 , widh_wind_t , high_wind_t , RED )

// отрисовка кнопок
print("
О_АНИМ 

О_JPEG

О_GIF
"
,-155,-100, BLACK)

box(-159,-95,56,12,BLACK)
box(-159,-79,56,12,BLACK)
box(-159,-63,44,12,BLACK)

print("
ШИР/ВЫС 

<    >

КАДРЫ

<    >

НОВ_АН

ПЕРЕСЧ
"
,-155,5, BLACK)
print("$widh_wind_t",-143,29,BLACK)
print("$anim_frames_t",-140,61,BLACK)

box(-159,26,12,12,BLACK)
box(-116,26,12,12,BLACK)
box(-159,58,12,12,BLACK)
box(-116,58,12,12,BLACK)
box(-159,74,56,12,BLACK)
box(-159,90,56,12,BLACK)


box(104,-95,52,12,BLACK)
box(104,-79,52,12,BLACK)
box(104,-63,44,12,BLACK)

print("
C_АНИМ

C_GIF

С_TXT
"
,106,-100, BLACK)

fbox(102,8,48,28,#CCCCCC)
fbox(104,10,44,12,WHITE)
fbox(102,40,57,39,#CCCCCC)
fbox(104,42,44,12,WHITE)
fbox(104,65,10,12,WHITE)
fbox(130,65,10,12,WHITE)

// если идет запись рисования в AVI, подсвечиваю кнопку СТОП красным и вывожу секундомер
if status_export_avi = 1 {
fbox(104,83,44,12,RED) 
s = get_timer(0)/1000
if s > 60 { start_timer (0) }
m = get_timer(1)/60000
print( "$m:$s c", 110, 27, BLUE ) 
} else { box(104,83,44,12,RED) print( "0:0 c", 110, 27, BLUE )}

// если идет запись рисования в GIF, подсвечиваю кнопку СТОП красным и вывожу количество записанных кадров
if status_export_gif = 1 {
fbox(104,83,44,12,RED) 
print( "$frame_exp", 110, 56, BLUE ) 
print( "    K", 110, 56, BLUE )
print( "    Гц", 110, 69, BLUE )
} else { 
frame_exp = 0 
box(104,83,44,12,RED) 
print( "000 K", 110, 56, BLUE )
print( "    Гц", 110, 69, BLUE )}

print("
Э_AVI



Э_GIF


<  >

СТОП
"
,106,5, BLACK)

if fraq != 0 {fraq_per_s = 1000/fraq} else {fraq_per_s = 24}
print("$fraq_per_s",114,69, BLACK)


// отрисовать, если только что загружена картинка
if perem_tmp = 1 {

print ("
  В
Л   П
  Н
", -156, -40, BLUE)

box(-142,-34,12,12,BLUE)
box(-158,-26,12,12,BLUE)
box(-126,-26,12,12,BLUE)
box(-142,-18,12,12,BLUE)

print ("
  +
-   +
  -
", 111, -40, BLUE)

box(124,-34,12,12,BLUE)
box(108,-26,12,12,BLUE)
box(140,-26,12,12,BLUE)
box(124,-18,12,12,BLUE)

}
}

// закладка ----------АНИМАЦИЯ----------	

if zakladka = 1 {
print("
ВР:

  +

  -
"
,-154,64, BLACK)
print("$frame_time", -130, 72, BLACK)
box(-157,69,54,12,BLACK)
box(-157,85,44,12,BLACK)
box(-157,101,44,12,BLACK)

print("
ОЧИС_К

УДАЛ_К

КОПИ_К

ВСТА_К

ДОБА_К
"
,106,5, BLACK)

box(104,10,52,12,BLACK)
box(104,26,52,12,BLACK)
box(104,42,52,12,BLACK)
box(104,58,52,12,BLACK)
box(104,74,52,12,BLACK)

}


// закладка ----------ЦВЕТ-----------

if zakladka = 2 {

print ("16 цв",-150,-90, BLACK)
l=0
n=0 while n<4 {
	m=0 while m<4{
	fbox( -155+m*13 ,-80+n*13 , 12, 12, get_color ( color_R[l], color_G[l], color_B[l] ) )
	m+1 l+1
	}
n+1
}

print ("16 сер",-152,-7, BLACK)
l=0
n=1 while n<5 {
	m=1 while m<5{
	fbox( -168+m*13, -10+n*13, 12, 12, get_color ( 256-16*l , 256-16*l , 256-16*l ) )
	m+1 l+1
	}
n+1
}

box ( x_color , y_color , 12, 12, BLACK )

}

// закладка ----------КИСТЬ----------

if zakladka = 3 {


}


// закладка ----------ФОН------------

if zakladka = 4 {

// отрисовка кнопок
print("
О_ФОН 
"
,-155,-100, BLACK)
box(-159,-95,56,12,BLACK)

print ("
  В
Л   П
  Н
", -156, -40, BLUE)

box(-142,-34,12,12,BLUE)
box(-158,-26,12,12,BLUE)
box(-126,-26,12,12,BLUE)
box(-142,-18,12,12,BLUE)

print ("
  +
-   +
  -
", 111, -40, BLUE)

box(124,-34,12,12,BLUE)
box(108,-26,12,12,BLUE)
box(140,-26,12,12,BLUE)
box(124,-18,12,12,BLUE)


if wiev_fon_flag > 0 { fbox(105,-90,48,12,#CCCCCC) } else { box(105,-90,48,12,BLACK) }

print (
"
ПОКАЗ

ПОСТ

ВРЕМ
",110,-95,BLACK)

box(105,-74,40,12,BLACK)
box(105,-58,40,12,BLACK)

print ("x",147,-87+16*wiev_fon,BLACK)

print("


<ЯРК>
"
,107,-17, BLACK)

box(104,4,10,12,BLACK)
box(139,4,10,12,BLACK)

}
// закладка --------РИСОВАНИЕ--------

if zakladka = 5 {

// отрисовка режима рисования (карандаш/стерка)

fbox(-150,-200+100*mode_br,40,100,#CCCCCC)
pixi (karand,-130,0,1,128)


// отрисовка настроек карандаша/стерки

if mode_br = 1 {

fbox(-148,-79,37,15,#EEEEEE)
box(-147,-77,10,10,BLACK)
box(-124,-77,10,10,BLACK)

print("
 <  >
"
,-155,-83, BLACK)
fbox(-130-size_brush/2,-72-size_brush/2, size_brush, size_brush,color_brush)

} else {

fbox(-148,69,37,15,#AAAAAA)
box(-147,71,10,10,BLACK)
box(-124,71,10,10,BLACK)

print("
 <  >
"
,-155,65, BLACK)

fbox(-130-size_brush/2,76-size_brush/2, size_brush, size_brush,color_brush)
}

// отрисовка кнопок
print("
ОЧИСТ
"
,106,-95, BLACK)

box(104,-90,52,12,BLACK)

// отрисовать кнопку цветом фона направляющих, если отображение направляющих разрешено
if mode_fon = 1 {
transp (64)
fbox(104,-63+16*mode_fon,44,12,color_fon)
transp (256)
}

print("
НАПР

<ЯРК>
"
,107,-52, BLACK)
box(104,-47,44,12,BLACK)
box(104,-31,10,12,BLACK)
box(139,-31,10,12,BLACK)

fbox(104,-11+16*mode_sym,52,12,#CCCCCC)

print("
ПРОСТО 

ВЕРТИК

ГОРИЗО

ЗЕРКАЛ

ЧЕТЫРЕ
"
,106,0, BLACK)

box(104,5,52,12,BLACK)
box(104,21,52,12,BLACK)
box(104,37,52,12,BLACK)
box(104,53,52,12,BLACK)
box(104,69,52,12,BLACK)
}


// рамки, обозначения области меню и вокруг кадра
box( -100 , -100 , 200 , 200 , #AAAAAA )
box( x_wind , y_wind , widh_wind , high_wind , BLUE )

ret

//************************ПОДПРОГРАММА ОПРОСА ЗАКЛАДОК******************************
ZAKL:
if gpr( -160,-118,52,14 )       {perem_tmp = 0 zakladka = 0 }
if gpr( -160+54*1,-118,52,14 )  {perem_tmp = 0 zakladka = 1 }
if gpr( -160+54*2,-118,52,14 )  {perem_tmp = 0 zakladka = 2 }
if gpr( -160+54*3,-118,52,14 )  {perem_tmp = 0 zakladka = 3 }
if gpr( -160+54*4,-118,52,14 )  {perem_tmp = 0 zakladka = 4 }
if gpr( -160+54*5,-118,52,14 )  {perem_tmp = 0 zakladka = 5 }

ret

//************************ПОДПРОГРАММА ОПРОСА КНОПОК********************************
BOTTOM:
// информация о программе
if gpr( 148, 108, 12, 12, )  { info = 1 }

// опрос кнопок перемещения по кадрам анимации, воспроизведение анимации вперед/назад
if anim_frames > 1 {
		if gpr(-31,103,20,12) { frame_num - 1 if frame_num < 0 { frame_num = 0 } }
		if gpr(9,103,20,12)  { frame_num + 1 if frame_num > (anim_frames-1) { frame_num = anim_frames-1 }}
	}

	if gpr(-54,103,20,12) { play_anim = -1 }
	if gpr(33,103,20,12)  { play_anim = 1 }
	if gpr(-77,103,20,12) { frame_num = 0 }
	if gpr(56,103,20,12)  { frame_num = anim_frames-1 }

	

// закладка ----------ФАЙЛ----------

if zakladka = 0 {
	if gpr(-159,-95,56,12) {LOAD_ANIM} // открыть файл анимации
	if gpr(-159,-79,56,12) {LOAD_JPEG} // открыть файл Jpeg и вставить его в кадр	
	if gpr(-159,-63,44,12) {LOAD_GIF}  // открыть файл Gif и вставить его в кадр	
	
	
	if gpr(104,-95,52,12) {save_flag = 1} // записать файл анимации
	if gpr(104,-79,52,12) {save_flag = 2} // записать кадр в .gif файл
	if gpr(104,-63,44,12) {save_flag = 3} // записать кадр в .txt файл
	
	if gpr(104,10,44,12) { save_flag = 4 } // записать процесса рисования в .avi файл
	if gpr(104,42,44,12) { save_flag = 5 } // записать процесса рисования в .gif файл	
	if gpr(104,83,44,12) { stop_export_gif = 1 stop_export_avi = 1 status_export_avi = 0 status_export_gif = 0 } // останов записи
	if gpr(104,65,10,12) { fraq+100 if fraq>1000 { fraq=1000 } } // уменьшение частоты кадров при экспорте в .gif файл
	if gpr(130,65,10,12) { fraq-100 if fraq<0 { fraq=0 }} // увеличение частоты кадров при экспорте в .gif файл	
	
	
	// если загружено одностраничное изображение, можно переместить его по кадру и изменить размер по ширине/высоте
	if perem_tmp = 1 {
		if gpr(-142,-34,12,12) { y_tmp-4 } // выше
		
		if gpr(-158,-26,12,12) { x_tmp-4 } // левее
		
		if gpr(-126,-26,12,12) { x_tmp+4 } // правее
		
		if gpr(-142,-18,12,12) { y_tmp+4 } // ниже
		
		
		if gpr(124,-34,12,12) | gpr(140,-26,12,12) { scale_tmp+8 } // увеличение высоты и ширины
		
		if gpr(124,-18,12,12) | gpr(108,-26,12,12) { scale_tmp-8 } // уменьшение высоты и ширины

		
		set_screen ( animat , frame_num )
		fbox ( x_wind, y_wind, widh_wind, high_wind, SNEG )
		fpixi (tmp_frame,x_tmp,y_tmp,0,scale_tmp,0)
		set_screen( 0 )
	}

	// изменение размеров Pixi-контейнера (ширина = высота)
		if gpr( -159,26,12,12 ) { 		// <
			if widh_wind_t > 4 {
			widh_wind_t - 1
			high_wind_t - 1
			} else { widh_wind_t = 4 high_wind_t = 4 }
		}	
		
		if gpr( -116,26,12,12 ) { 		// >
			if widh_wind_t < 200 {
			widh_wind_t + 1
			high_wind_t + 1
			} else { widh_wind_t = 200 high_wind_t = 200 }
		}
	
	// изменение кадров в анимации
		if gpr( -159,58,12,12 ) { 	// <	
			if anim_frames_t > 1 {
			anim_frames_t - 1
			} else { anim_frames_t = 1 }
		}
		
		if gpr( -116,58,12,12 ) { 	// >	
			if anim_frames_t < 256 {
			anim_frames_t + 1
			} else { anim_frames_t = 256 }
		}
		
	// создание новой анимации на основе данных
		if gpr( -159,74,56,12 ) { 
		tmp_pixi = new_pixi( widh_wind_t, high_wind_t, anim_frames_t )
			n=0 while n<(widh_wind_t*high_wind_t*anim_frames_t) {
			tmp_pixi [ n ] = #FFFFFA
			n+1
			}
			pixi_transp (tmp_pixi,1,#FFFFFA)
		
		
		
		remove_pixi ( animat ) 
		animat = clone_pixi ( tmp_pixi,1 )	
		widh_wind = get_pixi_xsize (animat) 
		widh_wind_t = widh_wind
		high_wind = get_pixi_ysize (animat) 
		high_wind_t = high_wind
		anim_frames = get_pixi_frames(animat)
		anim_frames_t = anim_frames
		x_wind = -widh_wind/2
		y_wind = -high_wind/2
		}	

	// пересчет существующей анимации 
	
		if gpr( -159,90,56,12 ) { 
		tmp_pixi = new_pixi( widh_wind_t, high_wind_t, anim_frames_t )
			n=0 while n<(widh_wind_t*high_wind_t*anim_frames_t) {
			tmp_pixi [ n ] = #FFFFFA
			n+1
			}
			pixi_transp (tmp_pixi,1,#FFFFFA)	
						
			
			// если размеры не поменялись, пересчет кадров
			if widh_wind_t = widh_wind {
			n=0 while n<(widh_wind_t*high_wind_t)*anim_frames_t {
			tmp_pixi [ n ] = animat[ n ]
			n+1 
			} 
			
			}
			
			// если введенная информация меньше существующего размера - уменьшение размеров Pixi-контейнера
			if widh_wind_t < widh_wind {
			l=0 while (l<anim_frames_t) {
				m=0 while (m<high_wind_t) {
					n=0 while (n<widh_wind_t) {
					tmp_pixi [ n + widh_wind_t*m + (widh_wind_t*high_wind_t)*l ] = animat[ (n+(widh_wind/2-widh_wind_t/2)) + (widh_wind*(m+high_wind/2-high_wind_t/2)) + (widh_wind*high_wind)*l ]
					n+1
					}
				m+1
				}	
			l+1	
			}
			}

			// если введенная информация больше существующего размера - увеличение размеров Pixi-контейнера
			if widh_wind_t > widh_wind {
			l=0 while (l<anim_frames_t) {
				m=0 while (m<high_wind) {
					n=0 while (n<widh_wind) {
					tmp_pixi [ (n+(widh_wind_t/2-widh_wind/2)) + (widh_wind_t*(high_wind_t/2-high_wind/2+m)) + (widh_wind_t*high_wind_t)*l ] = animat[ n + widh_wind*m + (widh_wind*high_wind)*l ]
					n+1
					}
				m+1
				}	
			l+1	
			}
			}

		remove_pixi ( animat ) 
		animat = clone_pixi ( tmp_pixi,1 )	
		widh_wind = get_pixi_xsize (animat) 
		widh_wind_t = widh_wind
		high_wind = get_pixi_ysize (animat) 
		high_wind_t = high_wind
		anim_frames = get_pixi_frames(animat)
		anim_frames_t = anim_frames
		x_wind = -widh_wind/2
		y_wind = -high_wind/2
	}
}

// закладка ----------АНИМАЦИЯ----------	

if zakladka = 1 {	
	
	// задаю время показа кадра в милисекундах 
	if gpr(-157,85,44,12) { frame_time + 100 if frame_time > 10000 { frame_time = 10000 } }
	if gpr(-157,101,44,12)  { frame_time - 100 if frame_time < 0 { frame_time = 0 } }

	// очищаю кадр		
	if gpr(104,10,52,12) { 
	n=0 while n<(widh_wind*high_wind) {
		animat[((widh_wind*high_wind)*frame_num)+n] =  #FFFFFA
		n+1 
		} 
	}
	
	// удаляю кадр	
	if gpr(104,26,52,12) { 
		tmp_pixi = new_pixi( widh_wind, high_wind, anim_frames-1 )
			n=0 while n<(widh_wind_t*high_wind_t*anim_frames_t) {
			tmp_pixi [ n ] = #FFFFFA
			n+1
			}
			pixi_transp (tmp_pixi,1,#FFFFFA)
		n=0 while n<(widh_wind*high_wind)*frame_num {
		tmp_pixi [ n ] = animat[ n ]
		n+1 
		} 

		if (widh_wind*high_wind)*frame_num < (widh_wind*high_wind)*anim_frames {
			n=(widh_wind*high_wind)*frame_num while n<(widh_wind*high_wind)*anim_frames {
			tmp_pixi [ n ] = animat[ n+(widh_wind*high_wind) ]
			n+1 
			} 	
		}
	remove_pixi ( animat ) 
	animat = clone_pixi ( tmp_pixi,1 )	
	anim_frames = get_pixi_frames(animat)
	}	
	
	// копирую кадр
	if gpr(104,42,52,12) { 
	tmp_frame = new_pixi( widh_wind, high_wind, 1 )
			n=0 while n<(widh_wind_t*high_wind_t*anim_frames_t) {
			tmp_frame [ n ] = #FFFFFA
			n+1
			}
			pixi_transp (tmp_frame,1,#FFFFFA)
	
		n=0 while n<(widh_wind*high_wind) {
		tmp_frame [ n ] = animat[ ((widh_wind*high_wind)*frame_num) + n ]
		n+1 
		} 
	}
	
	//вставляю кадр
	if gpr(104,58,52,12) { 
		n=0 while n<(widh_wind*high_wind) {
		 animat[ ((widh_wind*high_wind)*frame_num) + n ] = tmp_frame [ n ]
		n+1 
		} 
	}
	
	//добавляю кадр	
	if gpr(104,74,52,12) { 
		tmp_pixi = new_pixi( widh_wind, high_wind, anim_frames+1 )
			n=0 while n<(widh_wind_t*high_wind_t*anim_frames_t) {
			tmp_pixi [ n ] = #FFFFFA
			n+1
			}
			pixi_transp (tmp_pixi,1,#FFFFFA)
		
		n=0 while n<(widh_wind*high_wind)*frame_num {
		tmp_pixi [ n ] = animat[ n ]
		n+1 
		} 

		if (widh_wind*high_wind)*frame_num < (widh_wind*high_wind)*anim_frames {
			n=(widh_wind*high_wind)*frame_num while n<(widh_wind*high_wind)*anim_frames {
			tmp_pixi [ n+(widh_wind*high_wind) ] = animat[ n ]
			n+1 
			} 	
		}
	remove_pixi ( animat ) 
	animat = clone_pixi ( tmp_pixi,1 )	
	anim_frames = get_pixi_frames(animat)	
	}
	
}

// закладка ----------ЦВЕТ-----------

if zakladka = 2 {
	if mode_br = 1 {
	l=0
	n=0 while n<4 {
		m=0 while m<4{
		if gpr( -155+m*13 ,-80+n*13 , 12, 12 ) { color_brush = get_color ( color_R[l], color_G[l], color_B[l] ) x_color = -155+m*13 y_color = -80+n*13  }
		m+1 l+1
		}
	n+1
	}

	l=0
	n=1 while n<5 {
		m=1 while m<5{
		if gpr( -168+m*13, -10+n*13, 12, 12 ) { color_brush = get_color ( 256-16*l, 256-16*l, 256-16*l ) x_color = -168+m*13 y_color = -10+n*13  }
		m+1 l+1
		}
	n+1
	}
}
}

// закладка ----------КИСТЬ----------

if zakladka = 3 {


}



// закладка ----------ФОН------------

if zakladka = 4 {
	if gpr(-159,-95,56,12) {LOAD_FON} // открыть файл Jpeg/Gif в качестве фонового изображения

// если показывается фоновое изображение, можно его переместить по кадру и изменить масштаб отображения

if wiev_fon_flag > 0 {

	if gpr(-142,-34,12,12) { y_fon-4 } // выше
		
	if gpr(-158,-26,12,12) { x_fon-4 } // левее
		
	if gpr(-126,-26,12,12) { x_fon+4 } // правее
		
	if gpr(-142,-18,12,12) { y_fon+4 } // ниже
		
		
	if gpr(124,-34,12,12) | gpr(140,-26,12,12) { scale_fon+8 } // увеличение высоты и ширины
		
	if gpr(124,-18,12,12) | gpr(108,-26,12,12) { scale_fon-8 } // уменьшение высоты и ширины

	// уменьш./увелич. яркости фонового изображения
	
		if gpr(104,4,10,12) { bright_fon_img-8  
			if bright_fon_img < 16 { bright_fon_img = 16 }
			}
		if gpr(139,4,10,12) { bright_fon_img+8  
			if bright_fon_img >256 { bright_fon_img = 256 }
			}
}
		
// как отображать фоновое изображение


	if gpr(105,-90,48,12) { wiev_fon_flag = -wiev_fon_flag } // отображать / не отображать
	
	if gpr(105,-74,40,12) { wiev_fon = 1 } // постоянно
	
	if gpr(105,-58,40,12) { wiev_fon = 2 } // временно
		
}


// закладка --------РИСОВАНИЕ--------

if zakladka = 5 {

	// очищаю кадр	
	if gpr(104,-90,52,12) { 
	n=0 while n<(widh_wind*high_wind) {
		animat[((widh_wind*high_wind)*frame_num)+n] = #FFFFFA 
		n+1 
		} 
	}
	
	// выбор: карандаш или стерка
	if gpr(-150,-60,40,60) { color_brush = color_brush_tmp mode_br = 1 } 
	if gpr(-150,0,40,65) { color_brush_tmp = color_brush color_brush = #FFFFFA mode_br = 2 } 
	
	// увелич/уменьш размера карандаша
	if gpr(-147,-77,10,10) { size_brush-1 if size_brush < 1 { size_brush = 1 } }
	if gpr(-124,-77,10,10) { size_brush+1 if size_brush > 10 { size_brush = 10 } }	
	
	// увелич/уменьш размера стерки
	if gpr(-147,71,10,10) { size_brush-1 if size_brush < 1 { size_brush = 1 } }
	if gpr(-124,71,10,10) { size_brush+1 if size_brush > 10 { size_brush = 10 } }		

	// вкл/выкл направляющие (фон для симметричного рисования)
	if gpr(104,-47,44,12) { mode_fon = - mode_fon}

	// если фон с направляющими включен, то можно его сделать светлее/темнее 
	if mode_fon = 1 {
		if gpr(104,-31,10,12) { bright_fon = bright_fon-16 color_fon = get_color (bright_fon ,bright_fon ,bright_fon ) 
			if bright_fon < 16 { bright_fon = 16 }
			}
		if gpr(139,-31,10,12) { bright_fon = bright_fon+16 color_fon = get_color (bright_fon ,bright_fon ,bright_fon ) 
			if bright_fon >192 { bright_fon = 192 }
			}
	}

	// выбор одного из четырех режимов симметричного рисования и режима без симметрии
	if gpr(104,5,52,12)  { mode_sym = 1 }
	if gpr(104,21,52,12) { mode_sym = 2 }
	if gpr(104,37,52,12) { mode_sym = 3 }
	if gpr(104,53,52,12) { mode_sym = 4 }
	if gpr(104,69,52,12) { mode_sym = 5 }
}
	

	
ret


//***********************ПОДПРОГРАММА ЗАПИСИ АНИМАЦИИ GIF*******************************
SAVE_ANIM:
save_flag = 0
filename = "                                                                                                                                                                                                                                                                                                "
if (file_dialog( filename, "Сохранить анимацию Gif", "gif", "save_id" )) {
video_export_gif( filename, x_wind, y_wind, widh_wind, high_wind )
	f = 0 while( f < anim_frames ) {
	clear( SNEG )
	fpixi( animat , 0 , 0 , 0 , 0 ,f )
	frame( 100 )
	f + 1
	}
} else {ret}

stop_video_export
ret

//****************ПОДПРОГРАММА ЗАПИСИ ПРОЦЕССА РИСОВАНИЯ В ВИДЕО ФАЙЛ (все окно 320х240)**********************
EXPORT_AVI:
filename = "                                                                                                                                                                                                                                                                                                "
if (file_dialog( filename, "Сохранить рисование в AVI", "avi", "save_id" )) {
video_export_realtime (1) //Включение режима реального времени
video_export_fps (24) // стандартная частота кадров для видео

// !!! не все кодеки поддерживают запись с нестандартной частотой кадров !!!
// 12 к/с поддерживает кодек XVid

video_export_avi ( filename, -x_window/2, -y_window/2, x_window, y_window )
} else {save_flag = 0 ret}
save_flag = 0 
status_export_avi = 1
stop_export_avi = 0
ret

//****************ПОДПРОГРАММА ЗАПИСИ ПРОЦЕССА РИСОВАНИЯ В АНИМИРОВАННЫЙ GIF ФАЙЛ (поле рисования)**********************
EXPORT_GIF:
filename = "                                                                                                                                                                                                                                                                                                "
if (file_dialog( filename, "Сохранить рисование в GIF", "gif", "save_id" )) {
video_export_gif ( filename, x_wind+1, y_wind+1, widh_wind-1, high_wind-1 )
} else {save_flag = 0 ret}
save_flag = 0 
status_export_gif = 1
stop_export_gif = 0
ret


//***********************ПОДПРОГРАММА ЗАПИСИ КАДРА GIF*******************************
SAVE_GIF:
save_flag = 0
filename = "                                                                                                                                                                                                                                                                                                "
if (file_dialog( filename, "Сохранить кадр Gif", "gif", "save_id" )) {
video_export_gif( filename, x_wind, y_wind, widh_wind, high_wind )
	clear( SNEG )
	fpixi( animat , 0 , 0 , 0 , 0 ,frame_num )
	frame( 100 )
} else {ret}

stop_video_export
ret


//***********************ПОДПРОГРАММА ЗАПИСИ КАРТИНКИ В ASCII-СИМВОЛАХ*******************************
SAVE_TXT:
save_flag = 0
filename = "                                                                                                                                                                                                                                                                                                "
if (file_dialog( filename, "Сохранить кадр TXT", "txt", "save_id" )) {
	clear( SNEG )
	fpixi( animat , 0 , 0 , 0 , 0 ,frame_num )
	frame(0)
save_screen ( filename, x_wind, y_wind, widh_wind, high_wind )
} else {ret}

ret


//************************ПОДПРОГРАММА ЗАГРУЗКИ ФАЙЛА АНИМАЦИИ********************************
LOAD_ANIM:
filename = 
"                                                                                                                                                                                                                                                                                                "
if (file_dialog( filename, "Открыть анимацию Gif", "gif", "load_id" ) ) {
animat = load_pixi(filename) } else {ret}

// обрезать кадры???

widh_wind = get_pixi_xsize (animat) 
widh_wind_t = widh_wind
high_wind = get_pixi_ysize (animat) 
high_wind_t = high_wind
anim_frames = get_pixi_frames(animat)
anim_frames_t = anim_frames
frame_num = 0
x_wind = -get_pixi_xsize (animat) / 2
y_wind = -get_pixi_ysize (animat) / 2
perem_tmp = 0
ret

//************************ПОДПРОГРАММА ЗАГРУЗКИ КАДРА JPEG****************************
LOAD_JPEG:
filename = 
"                                                                                                                                                                                                                                                                                                "
if (file_dialog( filename, "Открыть кадр JPEG", "jpg", "load_id" ) ) {
tmp_frame = load_pixi(filename) } else {ret}
x_tmp = 0
y_tmp = 0
//widh_tmp = get_pixi_xsize (tmp_frame)
//high_tmp = get_pixi_ysize (tmp_frame)
set_screen ( animat , frame_num )
fbox ( x_wind, y_wind, widh_wind, high_wind, SNEG )
fpixi (tmp_frame,0,0,0,0,0)
set_screen( 0 )	
perem_tmp = 1
ret

//************************ПОДПРОГРАММА ЗАГРУЗКИ КАДРА GIF****************************
LOAD_GIF:
filename = 
"                                                                                                                                                                                                                                                                                                "
if (file_dialog( filename, "Открыть кадр GIF", "gif", "load_id" ) ) {
tmp_frame = load_pixi(filename) } else {ret}
x_tmp = 0
y_tmp = 0
//widh_tmp = get_pixi_xsize (tmp_frame)
//high_tmp = get_pixi_ysize (tmp_frame)
set_screen ( animat , frame_num )
fbox ( x_wind, y_wind, widh_wind, high_wind, SNEG )
fpixi (tmp_frame,0,0,0,0,0)
perem_tmp = 1
set_screen( 0 )
ret

//************************ПОДПРОГРАММА ЗАГРУЗКИ ФОНОВОГО ИЗОБРАЖЕНИЯ JPEG/GIF****************************
LOAD_FON:
filename = 
"                                                                                                                                                                                                                                                                                                "
if (file_dialog( filename, "Открыть фон JPEG/GIF", "jpg/gif", "load_id" ) ) {
fon = load_pixi(filename) } else {ret}
x_fon = 0
y_fon = 0
scale_fon = 0

ret



//************************ПОДПРОГРАММА РИСОВАНИЯ*************************************
DRAWING:

	if wiev_fon_flag > 0 & wiev_fon = 2 { 
		transp (bright_fon_img)
		fpixi (fon,x_fon,y_fon,0,scale_fon,0) 
		transp (256)
		
		// закрываю все, кроме рабочего поля
		fbox(-x_window/2,-y_window/2,x_window,y_window/2-high_wind/2,WHITE)
		fbox(-x_window/2,y_window/2-(y_window/2-high_wind/2),x_window,y_window/2-high_wind/2,WHITE)
		fbox(-x_window/2,-y_window/2,x_window/2-widh_wind/2,y_window,WHITE)
		fbox(widh_wind/2,-y_window/2,x_window/2-widh_wind/2,y_window,WHITE)
		}
	
	if gpr( x_wind, y_wind, widh_wind, high_wind ) {
		if mode_sym = 1 {
			box ( get_pen_x, get_pen_y, size_brush, size_brush, BLACK )}

		if mode_sym = 2 {
			box ( get_pen_x, get_pen_y, size_brush, size_brush, BLACK )
			box ( -get_pen_x, get_pen_y, size_brush, size_brush, BLACK )}

		if mode_sym = 3 {
			box ( get_pen_x, get_pen_y, size_brush, size_brush, BLACK )
			box ( get_pen_x, -get_pen_y, size_brush, size_brush, BLACK )}

		if mode_sym = 4 {
			box ( get_pen_x, get_pen_y, size_brush, size_brush, BLACK )
			box ( -get_pen_x, -get_pen_y, size_brush, size_brush, BLACK )}	
		
		if mode_sym = 5 {
			box ( get_pen_x, get_pen_y, size_brush, size_brush, BLACK )
			box ( -get_pen_x, get_pen_y, size_brush, size_brush, BLACK )
			box ( get_pen_x, -get_pen_y, size_brush, size_brush, BLACK )
			box ( -get_pen_x, -get_pen_y, size_brush, size_brush, BLACK )}
	perem_tmp = 0
	}


if mode_fon = 1 {
	if mode_sym = 1 {
		transp (64) 
		fbox ( x_wind, y_wind, widh_wind, high_wind, color_fon) 
		transp (256)}

	if mode_sym = 2 {
		transp (64) 
		fbox ( 0, y_wind, widh_wind/2, high_wind, color_fon) 
		transp (256)}
		
	if mode_sym = 3 {
	transp (64) 
	fbox ( x_wind, 0, widh_wind, high_wind/2, color_fon) 
	transp (256)}

	if mode_sym = 4 {
		transp (64) 
		fbox ( 0, y_wind, widh_wind/2, high_wind/2, color_fon) 
		fbox ( x_wind, 0, widh_wind/2, high_wind/2, color_fon)
		transp (256)}

	if mode_sym = 5 {
	transp (64) 
	fbox ( 0, y_wind, widh_wind/2, high_wind/2, color_fon) 
	fbox ( x_wind, 0, widh_wind/2, high_wind/2, color_fon)
	transp (256)}
}

set_screen ( animat , frame_num )

if gpr( x_wind, y_wind, widh_wind, high_wind ) {

	if mode_sym = 1 {
		fbox ( get_pen_x, get_pen_y, size_brush, size_brush, color_brush )}

	if mode_sym = 2 {
		fbox ( get_pen_x, get_pen_y, size_brush, size_brush, color_brush )
		fbox ( -get_pen_x, get_pen_y, size_brush, size_brush, color_brush )}

	if mode_sym = 3 {
		fbox ( get_pen_x, get_pen_y, size_brush, size_brush, color_brush )
		fbox ( get_pen_x, -get_pen_y, size_brush, size_brush, color_brush )}

	if mode_sym = 4 {
	fbox ( get_pen_x, get_pen_y, size_brush, size_brush, color_brush )
	fbox ( -get_pen_x, -get_pen_y, size_brush, size_brush, color_brush )}	
		
	if mode_sym = 5 {
		fbox ( get_pen_x, get_pen_y, size_brush, size_brush, color_brush )
		fbox ( -get_pen_x, get_pen_y, size_brush, size_brush, color_brush )
		fbox ( get_pen_x, -get_pen_y, size_brush, size_brush, color_brush )
		fbox ( -get_pen_x, -get_pen_y, size_brush, size_brush, color_brush )}
}

set_screen( 0 )
ret

//************************ПОДПРОГРАММА ПРОИГРЫВАНИЯ АНИМАЦИИ*************************************
PLAY_ANIMAT:

if play_anim = 1 { 
	fpixi( animat, 0, 0 ,0 ,0 ,frame_num ) 
	frame(frame_time)
	frame_num + 1
	if frame_num > (anim_frames-1) { frame_num = anim_frames-1 }
} 

if play_anim = -1 { 
	fpixi( animat, 0, 0 ,0 ,0 ,frame_num ) 
	frame(frame_time)
	frame_num - 1
	if frame_num < 0 { frame_num = 0 }
} 

ret


INFO_ABOUT:
clear (BLACK)

n=5 while n<14 {
fbox ( -(30*n)/2, -(24*n)/2, 30*n, 22*n, WHITE )
effector( SNEG, 256, 0, -50, -60, 54*2, 50*2, 1 ) 
effector( BLUE, 256, 0, -50, -60, 54*2, 50*2, 1 ) 
pixi ( logo_CGF, 0, -10, 2, 0, 1)
t_scale (400,400,400)
print ( "
CreaGraFix


", -40, 20, BLACK )
print ( ver, -16, 44, BLACK )
t_reset
print ("© Al_Rado     GNU GPL 2.0     ",-150,100, BLACK)
print (date,90,100, BLACK)
frame ( 300 )
n+1
}
frame ( 4000 )
clear (WHITE)
info = 0
ret


//************************ПОДПРОГРАММА СОЗДАНИЯ ЛОГО*************************************
MAKE_LOGOS:

b=#FFFFFF 
logo_CGF="
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbb.bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.bbbbbbbbbbbbb
bbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbb
bbbbbbbbbbbbb....bbbbbbbbbbbbbbbbbbbbbbbbbbb....bbbbbbbbbbbb
bbbbbbbbbbbbb.bbb..bbbbbbbbbbbbbbbbbbbbbbb..bbb.bbbbbbbbbbbb
bbbbbbbbbbbbb.bbbb..bbbbbbbbbbbbbbbbbbbbb..bbbb.bbbbbbbbbbbb
bbbbbbbbbbbbb..bbbb..bbbbbbbbbbbbbbbbbbb..bbbb..bbbbbbbbbbbb
bbbbbbbbbbbbb.bbbbbbb.bbbbbbbbbbbbbbbbb.bbbbbbb.bbbbbbbbbbbb
bbbbbbbbbbbbb.bbbbbbbb..bbbbbbbbbbbbb..bbbbbbbb.bbbbbbbbbbbb
bbbbbbbbbbbbbb.bbbbbbbb.bbbbbbbbbbbbb.bbbbbbbb.bbbbbbbbbbbbb
bbbbbbbbbbbbbb.bbbbbbbbb.bbbbbbbbbbb.bbbbbbbbb.bbbbbbbbbbbbb
bbbbbbbbbbbbbb.bb...bbbbb.bbbbbbbbb.bbbbb...bb.bbbbbbbbbbbbb
bbbbbbbbbbbbbb..b.b..bbbb..bbbbbbb..bbbb..b.b..bbbbbbbbbbbbb
bbbbbbbbbbbbbbb.b..b.bbbbb.bbbbbbb.bbbbb.b..b.bbbbbbbbbbbbbb
bbbbbbbbbbbbbbb..bbbb.bbbb.bbbbbbb.bbbb.bbbb..bbbbbbbbbbbbbb
bbbbbbbbbbbbbbbb.bbbb..bbb...bbb...bbb..bbbb.bbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbb..bbb.bbbb..bbb..bbbb.bbb..bbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbb.bbb..bbb.......bbb..bbb.bbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbb.bbb.bbbbbbbbbbbbb.bbb.bbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbb..b.bbbbbbbbbbbbb.b..bbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbb.b.b.bbbbbbbbb.b.b.bbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbb.bbb.bbbbbbb.bbb.bbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbb.bbb.bbbbbbb.bbb.bbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbb.bbbbb.bbb.bbbbb.bbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbb..bbb.bbbbbbb.bbb..bbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbb...bbbbbbb..b..bbbbbbb...bbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbb....bbb..bbbbbb.bbbbbb..bbb....bbbbbbbbbbbbbb
bbbbbbbbbbbb...b.b...b.b.bbbb.b.bbbb.b.b...b.b...bbbbbbbbbbb
bbbbbbbbb...bb..b.bbbb.bbb.bb.b.bb.bbb.bbbb.b..bb...bbbbbbbb
bbbbbbbb..b...bbbbbbbb..bb..b.b.b..bb..bbbbbbbb...b..bbbbbbb
bbbbbb.b...bb.bbbbbbbbb.....bbbbb.....bbbbbbbbb.bb...b.bbbbb
bbbb...b.bbbb.bbbbbbbbbb.bb..bbb..bb.bbbbbbbbbb.bbbb.b...bbb
bbbb.....b.b.b.bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.b.b.b.....bbb
bbbbb..bb...b.b..bbbbbbbbbbbbbbbbbbbbbbbbbbb..b.b...bb..bbbb
bbbbbbbbbbbb.......bbbbbbbbbbbbbbbbbbbbbbb.......bbbbbbbbbbb
bbbbbbbbbbbbbb...b.bbbbbbbbbbbbbbbbbbbbbbb.b...bbbbbbbbbbbbb
bbbbbbbbbbbbbbb..b.b.bbbbbbbb...bbbbbbbb.b.b..bbbbbbbbbbbbbb
bbbbbbbbbbbbbbb......bbbbbb...b...bbbbbb......bbbbbbbbbbbbbb
bbbbbbbbbbbbbb.....bbbbbbbbbbbbbbbbbbbbbbb.....bbbbbbbbbbbbb
bbbbbbbbbbbbbb.bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.bbbbbbbbbbbbb
bbbbbbbbbbbbbb.bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.bbbbbbbbbbbbb
bbbbbbbbbbbbb...bbb.b....bbbbbbbbbbb....b.bbb...bbbbbbbbbbbb
bbbbbbbbbbbb..b..b..bb...bbbbbbbbbbb...bb..b..b..bbbbbbbbbbb
bbbbbbbbbbbb....bbb.bbbbbbbbbbbbbbbbbbbbb.bbb....bbbbbbbbbbb
bbbbbbbbbbbb..bb.bbbbb..bbbbbbbbbbbbb..bbbbb.bb..bbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbb.bbbbb.....bbbbb.bbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbb..bbbbb..b..bbbbb..bbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbb.bb..b..bbb..b..bb.bbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbb.......bbbbb.......bbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
"
make_pixi(logo_CGF)

A=#191919 B=#191919 C=#1E1E1E D=#212121 E=#232323 F=#313131 G=#3A3A3A H=#3A3A3A I=#3A3A3A J=#3E3E3E K=#414141 L=#454545 M=#4A4A4A 
N=#4A4A4A O=#4E4E4E P=#515151 Q=#585858 R=#5A5A5A S=#5A5A5A T=#656565 U=#6A6A6A V=#6B6B6B W=#747474 X=#7B7B7B Y=#7B7B7B Z=#848484 
a=#858585 b=#8C8C8C c=#8C8C8C d=#939393 e=#949494 f=#949494 g=#9E9E9E h=#A5A5A5 i=#A6A6A6 j=#ADADAD k=#ADADAD l=#B0B0B0 m=#B5B5B5 
n=#B5B5B5 o=#B9B9B9 p=#C5C5C5 q=#C5C5C5 r=#D1D1D1 s=#DDDDDD t=#DEDEDE u=#EFEFEF v=#EEEEEE w=#FAFAFA x=#FFFFFF y=#FFFFFF z=#FFFFFF 
karand="
.......PT.......
.......BB.......
......nBBq......
......FFEK......
.....gTPNVk.....
.....HTWWZH.....
....ZnHcgNhc....
...uNrSckKwKw...
...VrggckWqqW...
..rSyStcknZySt..
..PtyHyckvNytS..
.qVyrVyckyKwyVo.
.BwyckyckyWqywD.
ZgyyPvyZkykZyyhZ
NfytKyyZkywBywgP
ZFSSFyyDYyrDWWNc
ZBBEPHSkETFqhnkc
ZBDHNPPYfYkqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukw
yDBBBDEFHKNNPSNv
yHBDEHKNSTVWZcHy
cBDHNSVYfhnqtuhc
wBDHNSVYfhnqtukc
rEBDFHNPTVWZcgWy
ywccccccccccccqy
"
make_pixi(karand)

ret

Теперь можно набросать что-нибудь и сохранить сие творение в реал тайме, затем снова загрузить и отредактировать покадрово...
ВекторКодПиксельПолигон - ВотЧтоЯЛюблю!
User avatar
Al_Rado
Posts: 239
Joined: Tue Dec 04, 2007 2:33 pm
Location: Krasnodar
Contact:

Re: WIP: CreaGraFix

Post by Al_Rado »

Т.к. в размещенных текстах постоянно куда исчезают пробелы, разместил исходник тут http://slil.ru/25897536
ВекторКодПиксельПолигон - ВотЧтоЯЛюблю!
goglus
Posts: 122
Joined: Tue Dec 04, 2007 4:19 pm
Contact:

Re: WIP: CreaGraFix

Post by goglus »

ща заценим, а то я без инета был
а вечером и под линухой тестну
goglus
Posts: 122
Joined: Tue Dec 04, 2007 4:19 pm
Contact:

Re: WIP: CreaGraFix

Post by goglus »

наконец то свершилось то о чем я мечтал давно
редактор супер
готов поучаствовать чем могу
я бы вот иконки сразу сменил
+ я легко его повесил под виндой
goglus
Posts: 122
Joined: Tue Dec 04, 2007 4:19 pm
Contact:

Re: WIP: CreaGraFix

Post by goglus »

на покете не влезает в экран (пикси там не поддерживает поворот экрана(((
goglus
Posts: 122
Joined: Tue Dec 04, 2007 4:19 pm
Contact:

Re: WIP: CreaGraFix

Post by goglus »

сразу бросается в глаза
1 подсветки симметричн рисования - идея класс - но я б убрал настройку запутывет) включить какуюнить по умолчанию и постоянно а не по клику а то раздражает глаз
2 нужно сделать луп плея + отметка конечно заюзенного а то оценить нарисованное сложно
User avatar
Al_Rado
Posts: 239
Joined: Tue Dec 04, 2007 2:33 pm
Location: Krasnodar
Contact:

Re: WIP: CreaGraFix

Post by Al_Rado »

goglus спасибо за оценку и отзывы :)

Теперь замечания по порядку:
1. Сменить иконки - буду менять не только иконки (их еще собственно нет) но и весь GUI. Но принцип закладок останется... Буду рад твоей помощи )
2. Раздражает блыманье фона направляющих при симм. рисовании - согласен, работает странно... Сделаю постоянно. Настройку яркости тоже переделаю... Чтоб понятнее было )
3. Луп плея. Предполагаю несколько вариантов: постоянное полное проигрывание, проигрывание вперед-назад... И еще какой нить )
4. Отметка заюзаного - ты имеешь ввиду отображение отрисованных кадров? Можно их отображать в уменьшенном виде... Думаю пока как переделать тайм лайн.
5. На покете не влезает в экран - какие варианты решения траблы? Сделать вариант ГУИ с меньшими параметрами экрана?
6. Под Windows XP Sp2 у меня ни разу не вис... Скажи при выполнении каких действий виснет или сбоит - найдем решение )

Теперь от себя: редактор нормально справляется с анимацией созданной в нем самом, а вот с загруженной траблы... И это даже не глюки, просто загрузка анимации еще не дописана ) В новой версии постараюсь исправить недостатки )
ВекторКодПиксельПолигон - ВотЧтоЯЛюблю!
goglus
Posts: 122
Joined: Tue Dec 04, 2007 4:19 pm
Contact:

Re: WIP: CreaGraFix

Post by goglus »

1. Сменить иконки - буду менять не только иконки (их еще собственно нет) но и весь GUI. Но принцип закладок останется... Буду рад твоей помощи )

вот я когдато делал эскизы к аниматоры
Image
Image
Image
Image
Image

закладки в принципе не плохо просто некоторые надо соединить - скажем цвет и инструменты

2. Раздражает блыманье фона направляющих при симм. рисовании - согласен, работает странно... Сделаю постоянно. Настройку яркости тоже переделаю... Чтоб понятнее было )

да можно и без настройки, меньше кнопок легче код

3. Луп плея. Предполагаю несколько вариантов: постоянное полное проигрывание, проигрывание вперед-назад... И еще какой нить )

из личного опыта исходя могу сказать - требуется только луп и просто плей ну и перемещение по кадрам кнопкой или по иконкам

4. Отметка заюзаного - ты имеешь ввиду отображение отрисованных кадров? Можно их отображать в уменьшенном виде... Думаю пока как переделать тайм лайн.

отображать иконками круто но сложно, хотябы сделать та, по уиолчанию 1 кадр, плюсуеш число кадров растет и по этим кадрам луп и гонять


5. На покете не влезает в экран - какие варианты решения траблы? Сделать вариант ГУИ с меньшими параметрами экрана?

ну ченить придумаем

6. Под Windows XP Sp2 у меня ни разу не вис... Скажи при выполнении каких действий виснет или сбоит - найдем решение )

я хотел просто стереть кадр

юзабилити надо улучшить и нирвана тут же всех накроет
User avatar
Al_Rado
Posts: 239
Joined: Tue Dec 04, 2007 2:33 pm
Location: Krasnodar
Contact:

Re: WIP: CreaGraFix

Post by Al_Rado »

Именно о стиле хай-тек я и думал ) Но по-хорошему, сделать возможность смены выда иконок, кнопок и т.п. с подгрузкой из файлов.
Первый вариант мне нравится ) Естественно кнопок с названиями (ни по-русски, ни по-английски) не будет - будут иконки.
Настройки яркости фона, думаю оставить, только сделать удобнее... Или опционально включать... Если юзать фон и направляющие в этом есть смысл. За величину кода я не переживаю ) Пусть будет столько, чтобы удобно и эффективно было рисовать в нем )
На счет количества, назначения и содержания закладок - пока мне видится так, в закладке цвет реализовано пока мало, а будет много ) Оттого и отдельно. При увеличении функций, все будет так, чтобы удобство было на первом месте.
ВекторКодПиксельПолигон - ВотЧтоЯЛюблю!
goglus
Posts: 122
Joined: Tue Dec 04, 2007 4:19 pm
Contact:

Re: WIP: CreaGraFix

Post by goglus »

ну логичнее бы всетаки начать писать с более простого
что то типа пикситрекера, но расширяемого в дальнейшем, тут и надежность и юзабилити более контролируемо будет
а иконки надо сделать анимированными - текстовыми - а главное в самом редакторе и нарисованными )
User avatar
Al_Rado
Posts: 239
Joined: Tue Dec 04, 2007 2:33 pm
Location: Krasnodar
Contact:

Re: WIP: CreaGraFix

Post by Al_Rado »

Дабы продолжить развитие редактора CreaGraFix, выкладываю версию .003
Изменений не очень много, в основном исправление багов... Но все по порядку.

Новые функции CreaGraFix v.003:

Исправления, основанные на отзывах )
- отображение фона с направляющими для симметричного рисования теперь постоянно (не мерцает);
- отображение картинки в качестве фона также отображается в двух режимах: "есть" и "нет";
- нажимая на "+" в полоске навигации, можно добавить кадр в конец анимации, на "-" удалить последний кадр (теперь по умолчанию в анимации 1 кадр);
- добавлен режим зацикленного воспроизведения анимации (луп), работает как в нормальном, так и в обратном проигрывании;

Также добавил такие мелочи, как:
- обводка черным в отображении текущего цвета и размера над "карандашем", для более наглядного отображения(особенно актуально с градациями серого);
- переделал отображение текущего цвета в палитре, теперь лучше видно;
- изменил нумерацию кадров: теперь анимация начинается с первого кадра, а номер последнего совпадает с общим количеством (так понятнее);

Работа над ошибками:
- побежден баг с прозрачностью возникавший после загрузки анимашек;
- выловлена ошибка из-за которой редактор отказывался иногда пересчитывать размеры анимации;
- и еще мелкие баги )

Code: Select all

//© Al_Rado GNU GPL 2.0// CreaGraFix // Графический редактор

ver = "v.003" // версия релиза
date = "07.07.08" // дата релиза 

//*********************УСТАНОВКА ЗНАЧЕНИЙ ПО УМОЛЧАНИЮ************************
x_window = 320 // ширина окна
y_window = 240 // высота окна
resize_pixi (0,x_window,y_window)

MAKE_LOGOS // создаю лого и картинки

// ширина и высота рабочего поля
widh_wind = 200
high_wind = 200

// ширина и высота, переменные для изменения размеров рабочего поля
widh_wind_t = widh_wind
high_wind_t = high_wind

// координаты Х и Y для рабочего поля
x_wind = -widh_wind/2
y_wind = -high_wind/2

anim_frames = 1 // количество кадров в анимации
anim_frames_t = anim_frames // переменная для изменения количества кадров в анимации

color_alfa = #FFFFF0

animat = new_pixi( widh_wind, high_wind, anim_frames ) // Pixi-контейнер анимации
n=0 while n<(widh_wind*high_wind) {
	animat [ n ] = color_alfa
	n+1
	}
pixi_transp (animat,1,color_alfa)

frame_num = 0 // текущий кадр

x_frame_num = -4 // координата для нумерации текущего кадра, меняется если количество больше 9

frame_time = 100 // время отображеня кадра анимации (общее для всех кадров)

play_anim = 0 // флаг, три состояния: -1 - проигрывание анимации в обратном порядке, 0 - нет проигрывания, 1 - нормальное проигрывание

color_brush = BLACK // цвет кисти (карандаш или стерка)

color_brush_tmp = color_brush // переменная в которой хранится значение цвета карандаша при смене режима на стерку

color_fon = #999999 // цвет фона для симметричного рисования

bright_fon = 128 // яркость фона для симметричного рисования

mode_fon = -1 // флаг, вкл/выкл направляющие (фон для симметричного рисования): -1 - вкл, 1 - выкл

size_brush = 1 // размер карандаша/стерки

mode_sym = 1 // режим симметричного рисования (значения от 1 до 5)

mode_br = 1 // режим кисточки: 1 - карандаш, 2 - стерка

zakladka = 5 // текущая закладка

// переменные координат X и Y для расположения вновь загруженной картинки
x_tmp = 0
y_tmp = 0

info = 0 // флаг, показывать инф. о программе: 0 - нет, 1 - да

stop_export_gif = 0  // флаг останова экспорта в gif, 0 - нет останова, 1 - остановить экспорт

stop_export_avi = 0 // флаг останова экспорта в avi, 0 - нет останова, 1 - остановить экспорт

status_export_avi = 0 // статус экспорта, 0 - нет экспорта, 1 - идет экспорт

status_export_gif = 0 // статус экспорта, 0 - нет экспорта, 1 - идет экспорт

frame_exp = 0 // количество экспортированных кадров

fraq = 0 // частота кадров при экспорте в Gif

scale_tmp = 0 // масштаб картинки загруженной в кадр

fon = new_pixi (10,10,1)// фон-пустышка

// параметры фонового изображения: координата X и Y, масштаб
x_fon = 0
y_fon = 0
scale_fon = 0

wiev_fon_flag = 1 // флаг отображения фона: -1 - не отображать, 1 - отображать

wiev_fon = 1 // режим отображения фона: 1 - постоянно отображать, 2 - только во время рисования

bright_fon_img = 128 // яркость отображения фоновой картинки

// три массива значений для палитры из 16 цветов. Красная, зеленая и синяя состовляющие соответственно
color_R = new_array(16)
color_G = new_array(16)
color_B = new_array(16)
n=0
color_R[n] = 255  color_G[n] = 255  color_B[n] = 255  n+1
color_R[n] = 172  color_G[n] = 234  color_B[n] = 136  n+1
color_R[n] = 208  color_G[n] = 220  color_B[n] = 113  n+1
color_R[n] = 171  color_G[n] = 171  color_B[n] = 171  n+1
color_R[n] = 122  color_G[n] = 191  color_B[n] = 199  n+1
color_R[n] = 187  color_G[n] = 119  color_B[n] = 109  n+1
color_R[n] = 104  color_G[n] = 169  color_B[n] = 65   n+1
color_R[n] = 128  color_G[n] = 128  color_B[n] = 128  n+1
color_R[n] = 124  color_G[n] = 112  color_B[n] = 218  n+1
color_R[n] = 144  color_G[n] = 95   color_B[n] = 37   n+1
color_R[n] = 141  color_G[n] = 71   color_B[n] = 179  n+1
color_R[n] = 84   color_G[n] = 84   color_B[n] = 84   n+1
color_R[n] = 140  color_G[n] = 62   color_B[n] = 52   n+1
color_R[n] = 87   color_G[n] = 66   color_B[n] = 0    n+1
color_R[n] = 62   color_G[n] = 49   color_B[n] = 162  n+1
color_R[n] = 0    color_G[n] = 0    color_B[n] = 0  

// координаты ячейки текущего цвета карандаша (черный по умолчанию)
x_color = -155+3*13
y_color = -80+3*13

loop = -1 // зацикливание анимации: -1 - нет, 1 - есть


//***************************ГЛАВНЫЙ ЦИКЛ*************************************
start:
clear (SNEG)

if wiev_fon_flag > 0 & wiev_fon = 1 { transp (bright_fon_img) fpixi (fon,x_fon,y_fon,0,scale_fon,0) transp (256) } // вывод фонового изображения (постоянно).

SYMM_FON // вывод фона с направляющими для симметричного рисования (постоянно).

// закрываю все, кроме рабочего поля
fbox(-x_window/2,-y_window/2,x_window,y_window/2-high_wind/2,WHITE)
fbox(-x_window/2,y_window/2-(y_window/2-high_wind/2),x_window,y_window/2-high_wind/2,WHITE)
fbox(-x_window/2,-y_window/2,x_window/2-widh_wind/2,y_window,WHITE)
fbox(widh_wind/2,-y_window/2,x_window/2-widh_wind/2,y_window,WHITE)

// проверка: есть ли запись
if save_flag=1 {SAVE_ANIM}
if save_flag=2 {SAVE_GIF}
if save_flag=3 {SAVE_TXT}
if save_flag=4 { EXPORT_AVI start_timer (0) start_timer (1) }
if save_flag=5 { EXPORT_GIF start_timer (0) start_timer (1) }

if stop_export_gif = 1 {stop_video_export stop_export_gif = 0 }
if stop_export_avi = 1 {stop_video_export stop_export_avi = 0 }

// проверка: показывать инфо
if info = 1 {INFO_ABOUT}

// печать текущего кадра Pixi-контейнера 
fpixi( animat, 0, 0, 0, 0, frame_num )



// обработать мышку (стилус)
handle_keys({play_anim = 0 DRAWING BOTTOM ZAKL},{DRAWING},{DRAWING})

DRAW_ZAKLAD // отрисовка закладок

DRAW_MENU // отрисовка менюшек и кнопок

PLAY_ANIMAT // проверка: проигрывать анимацию


// если идет запись в Gif файл, то сохраняются кадры через n-ное время, иначе просто перерисовываю экран
if stop_export_gif = 0 & status_export_gif = 1 { pause_video_export frame (fraq) frame_exp+1 resume_video_export frame (0)} else { frame(0) } 

goto start




//***********************ПОДПРОГРАММА ОТРИСОВКИ ЗАКЛАДОК************************
DRAW_ZAKLAD:
fbox(-160,-120,320,16,#AAAAAA)
box(-160,-118,52,14,WHITE)
box(-160+54*1,-118,52,14,WHITE)
box(-160+54*2,-118,52,14,WHITE)
box(-160+54*3,-118,52,14,WHITE)
box(-160+54*4,-118,52,14,WHITE)
box(-160+54*5,-118,52,14,WHITE)
fbox(-162+54*zakladka,-120,58,20,WHITE)
print (" ФАЙЛ   АНИМ   ЦВЕТ  КИСТЬ   ФОН   РИС", -160, -114, BLACK)
ret

//***********************ПОДПРОГРАММА ОТРИСОВКИ КНОПОК************************
DRAW_MENU:

// кнопка информация о программе
fbox( 148, 108, 12, 12, #AAAAAA )
print ("?",150,110,WHITE)

// отрисовка кнопок перемещения по кадрам анимации, воспроизведение анимации вперед/назад
TIMELINE



// закладка ----------ФАЙЛ----------

if zakladka = 0 {
// отгораживаю разные поля меню
fbox(-160,0,60,2,BLACK)
fbox(100,0,60,2,BLACK)

// область новых размеров
box( -widh_wind_t/2 , -high_wind_t/2 , widh_wind_t , high_wind_t , RED )

// отрисовка кнопок
print("
О_АНИМ 

О_JPEG

О_GIF
"
,-155,-100, BLACK)

box(-159,-95,56,12,BLACK)
box(-159,-79,56,12,BLACK)
box(-159,-63,44,12,BLACK)

print("
ШИР/ВЫС 

<    >

КАДРЫ

<    >

НОВ_АН

ПЕРЕСЧ
"
,-155,5, BLACK)
print("$widh_wind_t",-143,29,BLACK)
print("$anim_frames_t",-140,61,BLACK)

box(-159,26,12,12,BLACK)
box(-116,26,12,12,BLACK)
box(-159,58,12,12,BLACK)
box(-116,58,12,12,BLACK)
box(-159,74,56,12,BLACK)
box(-159,90,56,12,BLACK)


box(104,-95,52,12,BLACK)
box(104,-79,52,12,BLACK)
box(104,-63,44,12,BLACK)

print("
C_АНИМ

C_GIF

С_TXT
"
,106,-100, BLACK)

fbox(102,8,48,28,#CCCCCC)
fbox(104,10,44,12,WHITE)
fbox(102,40,57,39,#CCCCCC)
fbox(104,42,44,12,WHITE)
fbox(104,65,10,12,WHITE)
fbox(130,65,10,12,WHITE)

// если идет запись рисования в AVI, подсвечиваю кнопку СТОП красным и вывожу секундомер
if status_export_avi = 1 {
fbox(104,83,44,12,RED) 
s = get_timer(0)/1000
if s > 60 { start_timer (0) }
m = get_timer(1)/60000
print( "$m:$s c", 110, 27, BLUE ) 
} else { box(104,83,44,12,RED) print( "0:0 c", 110, 27, BLUE )}

// если идет запись рисования в GIF, подсвечиваю кнопку СТОП красным и вывожу количество записанных кадров
if status_export_gif = 1 {
fbox(104,83,44,12,RED) 
print( "$frame_exp", 110, 56, BLUE ) 
print( "    K", 110, 56, BLUE )
print( "    Гц", 110, 69, BLUE )
} else { 
frame_exp = 0 
box(104,83,44,12,RED) 
print( "000 K", 110, 56, BLUE )
print( "    Гц", 110, 69, BLUE )}

print("
Э_AVI



Э_GIF


<  >

СТОП
"
,106,5, BLACK)

if fraq != 0 {fraq_per_s = 1000/fraq} else {fraq_per_s = 24}
print("$fraq_per_s",114,69, BLACK)


// отрисовать, если только что загружена картинка
if perem_tmp = 1 {

print ("
  В
Л   П
  Н
", -156, -40, BLUE)

box(-142,-34,12,12,BLUE)
box(-158,-26,12,12,BLUE)
box(-126,-26,12,12,BLUE)
box(-142,-18,12,12,BLUE)

print ("
  +
-   +
  -
", 111, -40, BLUE)

box(124,-34,12,12,BLUE)
box(108,-26,12,12,BLUE)
box(140,-26,12,12,BLUE)
box(124,-18,12,12,BLUE)

}
}

// закладка ----------АНИМАЦИЯ----------	

if zakladka = 1 {
print("
ВР:

  +

  -
"
,-154,-100, BLACK)
print("$frame_time", -130, -92, BLACK)
box(-157,-95,54,12,BLACK)
box(-157,-79,44,12,BLACK)
box(-157,-63,44,12,BLACK)

print("
ОЧИС_К

УДАЛ_К

КОПИ_К

ВСТА_К

ДОБА_К
"
,106,5, BLACK)

box(104,10,52,12,BLACK)
box(104,26,52,12,BLACK)
box(104,42,52,12,BLACK)
box(104,58,52,12,BLACK)
box(104,74,52,12,BLACK)

}


// закладка ----------ЦВЕТ-----------

if zakladka = 2 {

print ("16 цв",-150,-90, BLACK)
l=0
n=0 while n<4 {
	m=0 while m<4{
	fbox( -155+m*13 ,-80+n*13 , 12, 12, get_color ( color_R[l], color_G[l], color_B[l] ) )
	m+1 l+1
	}
n+1
}

print ("16 сер",-152,-7, BLACK)
l=0
n=1 while n<5 {
	m=1 while m<5{
	fbox( -168+m*13, -10+n*13, 12, 12, get_color ( 256-16*l , 256-16*l , 256-16*l ) )
	m+1 l+1
	}
n+1
}

box ( x_color , y_color , 12, 12, get_color ( 256-get_red (color_brush), 256-get_green (color_brush), 256-get_blue(color_brush) ) )
box ( x_color+2 , y_color+2 , 8, 8, get_color ( 256-get_red (color_brush)/2, 256-get_green (color_brush)/2, 256-get_blue(color_brush)/2 ) )



}

// закладка ----------КИСТЬ----------

if zakladka = 3 {


}


// закладка ----------ФОН------------

if zakladka = 4 {

// отрисовка кнопок
print("
О_ФОН 
"
,-155,-100, BLACK)
box(-159,-95,56,12,BLACK)

print ("
  В
Л   П
  Н
", -156, -40, BLUE)

box(-142,-34,12,12,BLUE)
box(-158,-26,12,12,BLUE)
box(-126,-26,12,12,BLUE)
box(-142,-18,12,12,BLUE)

print ("
  +
-   +
  -
", 111, -40, BLUE)

box(124,-34,12,12,BLUE)
box(108,-26,12,12,BLUE)
box(140,-26,12,12,BLUE)
box(124,-18,12,12,BLUE)


if wiev_fon_flag > 0 { fbox(105,-90,48,12,#CCCCCC) } else { box(105,-90,48,12,BLACK) }

print (
"
ПОКАЗ
",110,-95,BLACK)

print("


<ЯРК>
"
,107,-17, BLACK)

box(104,4,10,12,BLACK)
box(139,4,10,12,BLACK)

}
// закладка --------РИСОВАНИЕ--------

if zakladka = 5 {

// отрисовка режима рисования (карандаш/стерка)

fbox(-150,-200+100*mode_br,40,100,#CCCCCC)
pixi (karand,-130,0,1,128)


// отрисовка настроек карандаша/стерки

if mode_br = 1 {

fbox(-148,-79,37,15,#EEEEEE)
box(-147,-77,10,10,BLACK)
box(-124,-77,10,10,BLACK)

print("
 <  >
"
,-155,-83, BLACK)
fbox(-130-size_brush/2,-72-size_brush/2, size_brush, size_brush,color_brush)
if size_brush>2 {box(-130-size_brush/2,-72-size_brush/2, size_brush, size_brush,BLACK)}
} else {

fbox(-148,69,37,15,#AAAAAA)
box(-147,71,10,10,BLACK)
box(-124,71,10,10,BLACK)

print("
 <  >
"
,-155,65, BLACK)

fbox(-130-size_brush/2,76-size_brush/2, size_brush, size_brush,color_brush)
}

// отрисовка кнопок
print("
ОЧИСТ
"
,106,-95, BLACK)

box(104,-90,52,12,BLACK)

// отрисовать кнопку цветом фона направляющих, если отображение направляющих разрешено
if mode_fon = 1 {
transp (64)
fbox(104,-63+16*mode_fon,44,12,color_fon)
transp (256)
}

print("
НАПР

<ЯРК>
"
,107,-52, BLACK)
box(104,-47,44,12,BLACK)
box(104,-31,10,12,BLACK)
box(139,-31,10,12,BLACK)

fbox(104,-11+16*mode_sym,52,12,#CCCCCC)

print("
ПРОСТО 

ВЕРТИК

ГОРИЗО

ЗЕРКАЛ

ЧЕТЫРЕ
"
,106,0, BLACK)

box(104,5,52,12,BLACK)
box(104,21,52,12,BLACK)
box(104,37,52,12,BLACK)
box(104,53,52,12,BLACK)
box(104,69,52,12,BLACK)
}


// рамки, обозначения области меню и вокруг кадра
box( -100 , -100 , 200 , 200 , #AAAAAA )
box( x_wind , y_wind , widh_wind , high_wind , BLUE )

ret

// Подпрограмма отрисовки кнопок перемещения по кадрам анимации, воспроизведение анимации вперед/назад
TIMELINE:
fbox(-100,103,23,12,#AAAAAA)
fbox(77,103,26,12,#AAAAAA)
if loop=1 {fbox(121,103,12,12,#CCCCCC) } // если включено зацикливание проигрывания анимации, подсвечиваю кнопку
print("I< << <     > >> >I      L", -76, 106, BLACK) 
print("-                          +", -110, 106, BLACK) 
print("1", -94, 106, BLACK) 
temp = anim_frames
print("$temp", 82, 106, BLACK) 


if frame_num >= anim_frames { frame_num = anim_frames temp = frame_num } else { temp = frame_num+1 }


if temp > 9 { x_frame_num = -9 } else { x_frame_num = -4 }
print("$temp", x_frame_num, 106, BLACK)

box(-77,103,20,12,BLACK)
box(-54,103,20,12,BLACK)
box(-31,103,20,12,BLACK)
box(9,103,20,12,BLACK)
box(33,103,20,12,BLACK)
box(56,103,20,12,BLACK)
box(-113,103,12,12,BLACK)
box(103,103,12,12,BLACK)


box(121,103,12,12,BLACK)

ret

//************************ПОДПРОГРАММА ОПРОСА ЗАКЛАДОК******************************
ZAKL:
if gpr( -160,-118,52,14 )       {perem_tmp = 0 zakladka = 0 }
if gpr( -160+54*1,-118,52,14 )  {perem_tmp = 0 zakladka = 1 }
if gpr( -160+54*2,-118,52,14 )  {perem_tmp = 0 zakladka = 2 }
if gpr( -160+54*3,-118,52,14 )  {perem_tmp = 0 zakladka = 3 }
if gpr( -160+54*4,-118,52,14 )  {perem_tmp = 0 zakladka = 4 }
if gpr( -160+54*5,-118,52,14 )  {perem_tmp = 0 zakladka = 5 }

ret

//************************ПОДПРОГРАММА ОПРОСА КНОПОК********************************
BOTTOM:
// информация о программе
if gpr( 148, 108, 12, 12, )  { info = 1 }

// опрос кнопок перемещения по кадрам анимации, воспроизведение анимации вперед/назад
if anim_frames > 1 {
		if gpr(-31,103,20,12) { frame_num - 1 if frame_num < 0 { frame_num = 0 } }
		if gpr(9,103,20,12)  { frame_num + 1 if frame_num > (anim_frames-1) { frame_num = anim_frames-1 }}
	}

	if gpr(-54,103,20,12) { play_anim = -1 }
	if gpr(33,103,20,12)  { play_anim = 1 }
	if gpr(-77,103,20,12) { frame_num = 0 }
	if gpr(56,103,20,12)  { frame_num = anim_frames-1 }
	if gpr(121,103,12,12) { loop = -loop }
	
// удаляю кадр	
	if gpr(-113,103,12,12) { 
		tmp_pixi = new_pixi( widh_wind, high_wind, anim_frames-1 )
			n=0 while n<(widh_wind*high_wind*anim_frames+1) {
			tmp_pixi [ n ] = color_alfa
			n+1
			}
			pixi_transp (tmp_pixi,1,color_alfa)
		n=0 while n<(widh_wind*high_wind)*frame_num {
		tmp_pixi [ n ] = animat[ n ]
		n+1 
		} 

		if (widh_wind*high_wind)*frame_num < (widh_wind*high_wind)*anim_frames {
			n=(widh_wind*high_wind)*frame_num while n<(widh_wind*high_wind)*anim_frames {
			tmp_pixi [ n ] = animat[ n ]
			n+1 
			} 	
		}
	remove_pixi ( animat ) 
	animat = clone_pixi ( tmp_pixi,1 )	
	anim_frames = get_pixi_frames(animat)
	if frame_num = anim_frames { frame_num-1 }
	if frame_num < 0 { frame_num = 1 }
	if frame_num > anim_frames { frame_num = anim_frames }
	
	TIMELINE
	}	

//добавляю кадр	
	if gpr(103,103,12,12) { 
		tmp_pixi = new_pixi( widh_wind, high_wind, anim_frames+1 )
			n=0 while n<(widh_wind*high_wind*anim_frames+1) {
			tmp_pixi [ n ] = color_alfa
			n+1
			}
			pixi_transp (tmp_pixi,1,color_alfa)
		

			n=0 while n<(widh_wind*high_wind)*anim_frames {
			tmp_pixi [ n ] = animat[ n ]
			n+1 
			} 	
			
			n=((widh_wind*high_wind)*anim_frames) while n<(widh_wind*high_wind)*(anim_frames+1) {
			tmp_pixi [ n ] = color_alfa
			n+1 
			} 				
			
			

	remove_pixi ( animat ) 
	animat = clone_pixi ( tmp_pixi,1 )	
	anim_frames = get_pixi_frames(animat)	
	TIMELINE
	}	

// закладка ----------ФАЙЛ----------

if zakladka = 0 {
	if gpr(-159,-95,56,12) {LOAD_ANIM} // открыть файл анимации
	if gpr(-159,-79,56,12) {LOAD_JPEG} // открыть файл Jpeg и вставить его в кадр	
	if gpr(-159,-63,44,12) {LOAD_GIF}  // открыть файл Gif и вставить его в кадр	
	
	
	if gpr(104,-95,52,12) {save_flag = 1} // записать файл анимации
	if gpr(104,-79,52,12) {save_flag = 2} // записать кадр в .gif файл
	if gpr(104,-63,44,12) {save_flag = 3} // записать кадр в .txt файл
	
	if gpr(104,10,44,12) { save_flag = 4 } // записать процесса рисования в .avi файл
	if gpr(104,42,44,12) { save_flag = 5 } // записать процесса рисования в .gif файл	
	if gpr(104,83,44,12) { stop_export_gif = 1 stop_export_avi = 1 status_export_avi = 0 status_export_gif = 0 } // останов записи
	if gpr(104,65,10,12) { fraq+100 if fraq>1000 { fraq=1000 } } // уменьшение частоты кадров при экспорте в .gif файл
	if gpr(130,65,10,12) { fraq-100 if fraq<0 { fraq=0 }} // увеличение частоты кадров при экспорте в .gif файл	
	
	
	// если загружено одностраничное изображение, можно переместить его по кадру и изменить размер по ширине/высоте
	if perem_tmp = 1 {
		if gpr(-142,-34,12,12) { y_tmp-4 } // выше
		
		if gpr(-158,-26,12,12) { x_tmp-4 } // левее
		
		if gpr(-126,-26,12,12) { x_tmp+4 } // правее
		
		if gpr(-142,-18,12,12) { y_tmp+4 } // ниже
		
		
		if gpr(124,-34,12,12) | gpr(140,-26,12,12) { scale_tmp+8 } // увеличение высоты и ширины
		
		if gpr(124,-18,12,12) | gpr(108,-26,12,12) { scale_tmp-8 } // уменьшение высоты и ширины

		
		set_screen ( animat , frame_num )
		fbox ( x_wind, y_wind, widh_wind, high_wind, SNEG )
		fpixi (tmp_frame,x_tmp,y_tmp,0,scale_tmp,0)
		set_screen( 0 )
	}

	// изменение размеров Pixi-контейнера (ширина = высота)
		if gpr( -159,26,12,12 ) { 		// <
			if widh_wind_t > 4 {
			widh_wind_t - 1
			high_wind_t - 1
			} else { widh_wind_t = 4 high_wind_t = 4 }
		}	
		
		if gpr( -116,26,12,12 ) { 		// >
			if widh_wind_t < 200 {
			widh_wind_t + 1
			high_wind_t + 1
			} else { widh_wind_t = 200 high_wind_t = 200 }
		}
	
	// изменение кадров в анимации
		if gpr( -159,58,12,12 ) { 	// <	
			if anim_frames_t > 1 {
			anim_frames_t - 1
			} else { anim_frames_t = 1 }
		}
		
		if gpr( -116,58,12,12 ) { 	// >	
			if anim_frames_t < 256 {
			anim_frames_t + 1
			} else { anim_frames_t = 256 }
		}
		
	// создание новой анимации на основе данных
		if gpr( -159,74,56,12 ) { 
		tmp_pixi = new_pixi( widh_wind_t, high_wind_t, anim_frames_t )
			n=0 while n<(widh_wind_t*high_wind_t*anim_frames_t) {
			tmp_pixi [ n ] = color_alfa
			n+1
			}
			pixi_transp (tmp_pixi,1,color_alfa)
				
		remove_pixi ( animat ) 
		animat = clone_pixi ( tmp_pixi,1 )	
		
		pixi_transp (animat,1,color_alfa)
		
		widh_wind = get_pixi_xsize (animat) 
		widh_wind_t = widh_wind
		high_wind = get_pixi_ysize (animat) 
		high_wind_t = high_wind
		anim_frames = get_pixi_frames(animat)
		anim_frames_t = anim_frames
		x_wind = -widh_wind/2
		y_wind = -high_wind/2
		}	

	// пересчет существующей анимации 
	
		if gpr( -159,90,56,12 ) { 
		tmp_pixi = new_pixi( widh_wind_t, high_wind_t, anim_frames_t )
			n=0 while n<(widh_wind_t*high_wind_t*anim_frames_t) {
			tmp_pixi [ n ] = color_alfa
			n+1
			}
			pixi_transp (tmp_pixi,1,color_alfa)	
						
			
			// если размеры не поменялись, пересчет кадров
			if widh_wind_t = widh_wind {
			n=0 while n<(widh_wind_t*high_wind_t)*anim_frames_t {
			tmp_pixi [ n ] = animat[ n ]
			n+1 
			} 
			
			}
			
			// если введенная информация меньше существующего размера - уменьшение размеров Pixi-контейнера
			if widh_wind_t < widh_wind {
			l=0 while (l<anim_frames_t) {
				m=0 while (m<high_wind_t) {
					n=0 while (n<widh_wind_t) {
					tmp_pixi [ n + widh_wind_t*m + (widh_wind_t*high_wind_t)*l ] = animat[ (n+(widh_wind/2-widh_wind_t/2)) + (widh_wind*(m+high_wind/2-high_wind_t/2)) + (widh_wind*high_wind)*l ]
					n+1
					}
				m+1
				}	
			l+1	
			}
			}

			// если введенная информация больше существующего размера - увеличение размеров Pixi-контейнера
			if widh_wind_t > widh_wind {
			l=0 while (l<anim_frames_t) {
				m=0 while (m<high_wind) {
					n=0 while (n<widh_wind) {
					tmp_pixi [ (n+(widh_wind_t/2-widh_wind/2)) + (widh_wind_t*(high_wind_t/2-high_wind/2+m)) + (widh_wind_t*high_wind_t)*l ] = animat[ n + widh_wind*m + (widh_wind*high_wind)*l ]
					n+1
					}
				m+1
				}	
			l+1	
			}
			}

		remove_pixi ( animat ) 
		animat = clone_pixi ( tmp_pixi,1 )

		pixi_transp (animat,1,color_alfa)	
		
		widh_wind = get_pixi_xsize (animat) 
		widh_wind_t = widh_wind
		high_wind = get_pixi_ysize (animat) 
		high_wind_t = high_wind
		anim_frames = get_pixi_frames(animat)
		anim_frames_t = anim_frames
		x_wind = -widh_wind/2
		y_wind = -high_wind/2
		
	if frame_num = anim_frames_t { frame_num-1 }
	if frame_num < 0 { frame_num = 1 }
	if frame_num > anim_frames_t { frame_num = anim_frames_t }			
	fpixi( animat, 0, 0, 0, 0, frame_num )	
	}
}

// закладка ----------АНИМАЦИЯ----------	

if zakladka = 1 {	
	
	// задаю время показа кадра в милисекундах 
	if gpr(-157,-79,44,12) { frame_time + 100 if frame_time > 10000 { frame_time = 10000 } }
	if gpr(-157,-63,44,12)  { frame_time - 100 if frame_time < 0 { frame_time = 0 } }

	// очищаю кадр		
	if gpr(104,10,52,12) { 
	n=0 while n<(widh_wind*high_wind) {
		animat[((widh_wind*high_wind)*frame_num)+n] =  color_alfa
		n+1 
		} 
	}
	
	// удаляю кадр	
	if gpr(104,26,52,12) { 
		tmp_pixi = new_pixi( widh_wind, high_wind, anim_frames-1 )
			n=0 while n<(widh_wind_t*high_wind_t*anim_frames_t) {
			tmp_pixi [ n ] = color_alfa
			n+1
			}
			pixi_transp (tmp_pixi,1,color_alfa)
		n=0 while n<(widh_wind*high_wind)*frame_num {
		tmp_pixi [ n ] = animat[ n ]
		n+1 
		} 

		if (widh_wind*high_wind)*frame_num < (widh_wind*high_wind)*anim_frames {
			n=(widh_wind*high_wind)*frame_num while n<(widh_wind*high_wind)*anim_frames {
			tmp_pixi [ n ] = animat[ n+(widh_wind*high_wind) ]
			n+1 
			} 	
		}
	remove_pixi ( animat ) 
	animat = clone_pixi ( tmp_pixi,1 )	
	anim_frames = get_pixi_frames(animat)
	if frame_num = anim_frames { frame_num-1 }
	if frame_num < 0 { frame_num = 1 }
	if frame_num > anim_frames { frame_num = anim_frames }
	}	
	
	// копирую кадр в буфер
	if gpr(104,42,52,12) { 
	tmp_frame = new_pixi( widh_wind, high_wind, 1 )
			n=0 while n<(widh_wind_t*high_wind_t*anim_frames_t) {
			tmp_frame [ n ] = color_alfa
			n+1
			}
			pixi_transp (tmp_frame,1,color_alfa)
	
		n=0 while n<(widh_wind*high_wind) {
		tmp_frame [ n ] = animat[ ((widh_wind*high_wind)*frame_num) + n ]
		n+1 
		} 
	}
	
	//вставляю содержимое буфера
	if gpr(104,58,52,12) { 
		n=0 while n<(widh_wind*high_wind) {
		 animat[ ((widh_wind*high_wind)*frame_num) + n ] = tmp_frame [ n ]
		n+1 
		} 
	}
	
	//добавляю кадр	
	if gpr(104,74,52,12) { 
		tmp_pixi = new_pixi( widh_wind, high_wind, anim_frames+1 )
			n=0 while n<(widh_wind*high_wind*anim_frames+1) {
			tmp_pixi [ n ] = color_alfa
			n+1
			}
			pixi_transp (tmp_pixi,1,color_alfa)
		
		n=0 while n<(widh_wind*high_wind)*frame_num {
		tmp_pixi [ n ] = animat[ n ]
		n+1 
		} 

		if (widh_wind*high_wind)*frame_num < (widh_wind*high_wind)*anim_frames {
			n=(widh_wind*high_wind)*frame_num while n<(widh_wind*high_wind)*anim_frames {
			tmp_pixi [ n+(widh_wind*high_wind) ] = animat[ n ]
			n+1 
			} 	
		}
	remove_pixi ( animat ) 
	animat = clone_pixi ( tmp_pixi,1 )	
	anim_frames = get_pixi_frames(animat)	
	}
	
}

// закладка ----------ЦВЕТ-----------

if zakladka = 2 {
	if mode_br = 1 {
	l=0
	n=0 while n<4 {
		m=0 while m<4{
		if gpr( -155+m*13 ,-80+n*13 , 12, 12 ) { color_brush = get_color ( color_R[l], color_G[l], color_B[l] ) x_color = -155+m*13 y_color = -80+n*13  }
		m+1 l+1
		}
	n+1
	}

	l=0
	n=1 while n<5 {
		m=1 while m<5{
		if gpr( -168+m*13, -10+n*13, 12, 12 ) { color_brush = get_color ( 256-16*l, 256-16*l, 256-16*l ) x_color = -168+m*13 y_color = -10+n*13  }
		m+1 l+1
		}
	n+1
	}
}
}

// закладка ----------КИСТЬ----------

if zakladka = 3 {


}



// закладка ----------ФОН------------

if zakladka = 4 {
	if gpr(-159,-95,56,12) {LOAD_FON} // открыть файл Jpeg/Gif в качестве фонового изображения

// если показывается фоновое изображение, можно его переместить по кадру и изменить масштаб отображения

if wiev_fon_flag > 0 {

	if gpr(-142,-34,12,12) { y_fon-4 } // выше
		
	if gpr(-158,-26,12,12) { x_fon-4 } // левее
		
	if gpr(-126,-26,12,12) { x_fon+4 } // правее
		
	if gpr(-142,-18,12,12) { y_fon+4 } // ниже
		
		
	if gpr(124,-34,12,12) | gpr(140,-26,12,12) { scale_fon+8 } // увеличение высоты и ширины
		
	if gpr(124,-18,12,12) | gpr(108,-26,12,12) { scale_fon-8 } // уменьшение высоты и ширины

	// уменьш./увелич. яркости фонового изображения
	
		if gpr(104,4,10,12) { bright_fon_img-8  
			if bright_fon_img < 16 { bright_fon_img = 16 }
			}
		if gpr(139,4,10,12) { bright_fon_img+8  
			if bright_fon_img >256 { bright_fon_img = 256 }
			}
}
		
// как отображать фоновое изображение


	if gpr(105,-90,48,12) { wiev_fon_flag = -wiev_fon_flag } // отображать / не отображать
}


// закладка --------РИСОВАНИЕ--------

if zakladka = 5 {

	// очищаю кадр	
	if gpr(104,-90,52,12) { 
	n=0 while n<(widh_wind*high_wind) {
		animat[((widh_wind*high_wind)*frame_num)+n] = color_alfa 
		n+1 
		} 
	}
	
	// выбор: карандаш или стерка
	if gpr(-150,-60,40,60) { color_brush = color_brush_tmp mode_br = 1 } 
	if gpr(-150,0,40,65) { color_brush_tmp = color_brush color_brush = color_alfa mode_br = 2 } 
	
	// увелич/уменьш размера карандаша
	if gpr(-147,-77,10,10) { size_brush-1 if size_brush < 1 { size_brush = 1 } }
	if gpr(-124,-77,10,10) { size_brush+1 if size_brush > 10 { size_brush = 10 } }	
	
	// увелич/уменьш размера стерки
	if gpr(-147,71,10,10) { size_brush-1 if size_brush < 1 { size_brush = 1 } }
	if gpr(-124,71,10,10) { size_brush+1 if size_brush > 10 { size_brush = 10 } }		

	// вкл/выкл направляющие (фон для симметричного рисования)
	if gpr(104,-47,44,12) { mode_fon = - mode_fon}

	// если фон с направляющими включен, то можно его сделать светлее/темнее 
	if mode_fon = 1 {
		if gpr(104,-31,10,12) { bright_fon = bright_fon-16 color_fon = get_color (bright_fon ,bright_fon ,bright_fon ) 
			if bright_fon < 16 { bright_fon = 16 }
			}
		if gpr(139,-31,10,12) { bright_fon = bright_fon+16 color_fon = get_color (bright_fon ,bright_fon ,bright_fon ) 
			if bright_fon >192 { bright_fon = 192 }
			}
	}

	// выбор одного из четырех режимов симметричного рисования и режима без симметрии
	if gpr(104,5,52,12)  { mode_sym = 1 }
	if gpr(104,21,52,12) { mode_sym = 2 }
	if gpr(104,37,52,12) { mode_sym = 3 }
	if gpr(104,53,52,12) { mode_sym = 4 }
	if gpr(104,69,52,12) { mode_sym = 5 }
}
	

	
ret


//***********************ПОДПРОГРАММА ЗАПИСИ АНИМАЦИИ GIF*******************************
SAVE_ANIM:
save_flag = 0
filename = "                                                                                                                                                                                                                                                                                                "
if (file_dialog( filename, "Сохранить анимацию Gif", "gif", "save_id" )) {
video_export_gif( filename, x_wind, y_wind, widh_wind, high_wind )
	f = 0 while( f < anim_frames ) {
	clear( SNEG )
	fpixi( animat , 0 , 0 , 0 , 0 ,f )
	frame( 100 )
	f + 1
	}
} else {ret}

stop_video_export
ret

//****************ПОДПРОГРАММА ЗАПИСИ ПРОЦЕССА РИСОВАНИЯ В ВИДЕО ФАЙЛ (все окно 320х240)**********************
EXPORT_AVI:
filename = "                                                                                                                                                                                                                                                                                                "
if (file_dialog( filename, "Сохранить рисование в AVI", "avi", "save_id" )) {
video_export_realtime (1) //Включение режима реального времени
video_export_fps (24) // стандартная частота кадров для видео

// !!! не все кодеки поддерживают запись с нестандартной частотой кадров !!!
// 12 к/с поддерживает кодек XVid

video_export_avi ( filename, -x_window/2, -y_window/2, x_window, y_window )
} else {save_flag = 0 ret}
save_flag = 0 
status_export_avi = 1
stop_export_avi = 0
ret

//****************ПОДПРОГРАММА ЗАПИСИ ПРОЦЕССА РИСОВАНИЯ В АНИМИРОВАННЫЙ GIF ФАЙЛ (поле рисования)**********************
EXPORT_GIF:
filename = "                                                                                                                                                                                                                                                                                                "
if (file_dialog( filename, "Сохранить рисование в GIF", "gif", "save_id" )) {
video_export_gif ( filename, x_wind+1, y_wind+1, widh_wind-1, high_wind-1 )
} else {save_flag = 0 ret}
save_flag = 0 
status_export_gif = 1
stop_export_gif = 0
ret


//***********************ПОДПРОГРАММА ЗАПИСИ КАДРА GIF*******************************
SAVE_GIF:
save_flag = 0
filename = "                                                                                                                                                                                                                                                                                                "
if (file_dialog( filename, "Сохранить кадр Gif", "gif", "save_id" )) {
video_export_gif( filename, x_wind, y_wind, widh_wind, high_wind )
	clear( SNEG )
	fpixi( animat , 0 , 0 , 0 , 0 ,frame_num )
	frame( 100 )
} else {ret}

stop_video_export
ret


//***********************ПОДПРОГРАММА ЗАПИСИ КАРТИНКИ В ASCII-СИМВОЛАХ*******************************
SAVE_TXT:
save_flag = 0
filename = "                                                                                                                                                                                                                                                                                                "
if (file_dialog( filename, "Сохранить кадр TXT", "txt", "save_id" )) {
	clear( SNEG )
	fpixi( animat , 0 , 0 , 0 , 0 ,frame_num )
	frame(0)
save_screen ( filename, x_wind, y_wind, widh_wind, high_wind )
} else {ret}

ret


//************************ПОДПРОГРАММА ЗАГРУЗКИ ФАЙЛА АНИМАЦИИ********************************
LOAD_ANIM:
filename = 
"                                                                                                                                                                                                                                                                                                "
if (file_dialog( filename, "Открыть анимацию Gif", "gif", "load_id" ) ) {
tmp_pixi_tt = load_pixi(filename) } else {ret}

widh_wind_tt = get_pixi_xsize (tmp_pixi_tt) 
high_wind_tt = get_pixi_ysize (tmp_pixi_tt) 

if widh_wind_tt > 200 {widh_wind = 200 } else { widh_wind = widh_wind_tt }
if high_wind_tt > 200 {high_wind = 200 } else { high_wind = high_wind_tt }

anim_frames_tt = get_pixi_frames(tmp_pixi_tt)
if anim_frames_tt > 256 {anim_frames = 256 } else { anim_frames = anim_frames_tt }

if widh_wind=widh_wind_tt & high_wind=high_wind_tt & anim_frames=anim_frames_tt { animat = clone_pixi (tmp_pixi_tt, 0) }

widh_wind_t = widh_wind_tt high_wind_t = high_wind_tt //anim_frames_t = anim_frames_tt - 1


frame_num = 0
x_wind = -get_pixi_xsize (animat) / 2
y_wind = -get_pixi_ysize (animat) / 2

color_alfa = get_pixi_alpha (animat)

perem_tmp = 0
ret

//************************ПОДПРОГРАММА ЗАГРУЗКИ КАДРА JPEG****************************
LOAD_JPEG:
filename = 
"                                                                                                                                                                                                                                                                                                "
if (file_dialog( filename, "Открыть кадр JPEG", "jpg", "load_id" ) ) {
tmp_frame = load_pixi(filename) } else {ret}
x_tmp = 0
y_tmp = 0
//widh_tmp = get_pixi_xsize (tmp_frame)
//high_tmp = get_pixi_ysize (tmp_frame)
set_screen ( animat , frame_num )
fbox ( x_wind, y_wind, widh_wind, high_wind, SNEG )
fpixi (tmp_frame,0,0,0,0,0)
set_screen( 0 )	
perem_tmp = 1
ret

//************************ПОДПРОГРАММА ЗАГРУЗКИ КАДРА GIF****************************
LOAD_GIF:
filename = 
"                                                                                                                                                                                                                                                                                                "
if (file_dialog( filename, "Открыть кадр GIF", "gif", "load_id" ) ) {
tmp_frame = load_pixi(filename) } else {ret}
x_tmp = 0
y_tmp = 0
//widh_tmp = get_pixi_xsize (tmp_frame)
//high_tmp = get_pixi_ysize (tmp_frame)
set_screen ( animat , frame_num )
fbox ( x_wind, y_wind, widh_wind, high_wind, SNEG )
fpixi (tmp_frame,0,0,0,0,0)
perem_tmp = 1
set_screen( 0 )
ret

//************************ПОДПРОГРАММА ЗАГРУЗКИ ФОНОВОГО ИЗОБРАЖЕНИЯ JPEG/GIF****************************
LOAD_FON:
filename = 
"                                                                                                                                                                                                                                                                                                "
if (file_dialog( filename, "Открыть фон JPEG/GIF", "jpg/gif", "load_id" ) ) {
fon = load_pixi(filename) } else {ret}
x_fon = 0
y_fon = 0
scale_fon = 0

ret



//************************ПОДПРОГРАММА РИСОВАНИЯ*************************************
DRAWING:

	if wiev_fon_flag > 0 & wiev_fon = 2 { 
		transp (bright_fon_img)
		fpixi (fon,x_fon,y_fon,0,scale_fon,0) 
		transp (256)
		
		// закрываю все, кроме рабочего поля
		fbox(-x_window/2,-y_window/2,x_window,y_window/2-high_wind/2,WHITE)
		fbox(-x_window/2,y_window/2-(y_window/2-high_wind/2),x_window,y_window/2-high_wind/2,WHITE)
		fbox(-x_window/2,-y_window/2,x_window/2-widh_wind/2,y_window,WHITE)
		fbox(widh_wind/2,-y_window/2,x_window/2-widh_wind/2,y_window,WHITE)
		}
	
	if gpr( x_wind, y_wind, widh_wind, high_wind ) {
		if mode_sym = 1 {
			box ( get_pen_x, get_pen_y, size_brush, size_brush, BLACK )}

		if mode_sym = 2 {
			box ( get_pen_x, get_pen_y, size_brush, size_brush, BLACK )
			box ( -get_pen_x, get_pen_y, size_brush, size_brush, BLACK )}

		if mode_sym = 3 {
			box ( get_pen_x, get_pen_y, size_brush, size_brush, BLACK )
			box ( get_pen_x, -get_pen_y, size_brush, size_brush, BLACK )}

		if mode_sym = 4 {
			box ( get_pen_x, get_pen_y, size_brush, size_brush, BLACK )
			box ( -get_pen_x, -get_pen_y, size_brush, size_brush, BLACK )}	
		
		if mode_sym = 5 {
			box ( get_pen_x, get_pen_y, size_brush, size_brush, BLACK )
			box ( -get_pen_x, get_pen_y, size_brush, size_brush, BLACK )
			box ( get_pen_x, -get_pen_y, size_brush, size_brush, BLACK )
			box ( -get_pen_x, -get_pen_y, size_brush, size_brush, BLACK )}
	perem_tmp = 0
	}


set_screen ( animat , frame_num )

if gpr( x_wind, y_wind, widh_wind, high_wind ) {

	if mode_sym = 1 {
		fbox ( get_pen_x, get_pen_y, size_brush, size_brush, color_brush )}

	if mode_sym = 2 {
		fbox ( get_pen_x, get_pen_y, size_brush, size_brush, color_brush )
		fbox ( -get_pen_x, get_pen_y, size_brush, size_brush, color_brush )}

	if mode_sym = 3 {
		fbox ( get_pen_x, get_pen_y, size_brush, size_brush, color_brush )
		fbox ( get_pen_x, -get_pen_y, size_brush, size_brush, color_brush )}

	if mode_sym = 4 {
	fbox ( get_pen_x, get_pen_y, size_brush, size_brush, color_brush )
	fbox ( -get_pen_x, -get_pen_y, size_brush, size_brush, color_brush )}	
		
	if mode_sym = 5 {
		fbox ( get_pen_x, get_pen_y, size_brush, size_brush, color_brush )
		fbox ( -get_pen_x, get_pen_y, size_brush, size_brush, color_brush )
		fbox ( get_pen_x, -get_pen_y, size_brush, size_brush, color_brush )
		fbox ( -get_pen_x, -get_pen_y, size_brush, size_brush, color_brush )}
}

set_screen( 0 )
ret

//************************ПОДПРОГРАММА ОТРИСОВКИ ФОНА С НАПРАВЛЯЮЩИМИ ДЛЯ СИММЕТРИЧНОГО РИСОВАНИЯ*************************************

SYMM_FON:

if mode_fon = 1 {
	if mode_sym = 1 {
		transp (64) 
		fbox ( x_wind, y_wind, widh_wind, high_wind, color_fon) 
		transp (256)}

	if mode_sym = 2 {
		transp (64) 
		fbox ( 0, y_wind, widh_wind/2, high_wind, color_fon) 
		transp (256)}
		
	if mode_sym = 3 {
	transp (64) 
	fbox ( x_wind, 0, widh_wind, high_wind/2, color_fon) 
	transp (256)}

	if mode_sym = 4 {
		transp (64) 
		fbox ( 0, y_wind, widh_wind/2, high_wind/2, color_fon) 
		fbox ( x_wind, 0, widh_wind/2, high_wind/2, color_fon)
		transp (256)}

	if mode_sym = 5 {
	transp (64) 
	fbox ( 0, y_wind, widh_wind/2, high_wind/2, color_fon) 
	fbox ( x_wind, 0, widh_wind/2, high_wind/2, color_fon)
	transp (256)}
}
ret







//************************ПОДПРОГРАММА ПРОИГРЫВАНИЯ АНИМАЦИИ*************************************
PLAY_ANIMAT:

if play_anim = 1 & loop = -1 { 
	fpixi( animat, 0, 0 ,0 ,0 ,frame_num ) 
	frame(frame_time)
	frame_num + 1
	if frame_num > (anim_frames-1) { frame_num = anim_frames-1 }
} 

if play_anim = -1 & loop = -1 { 
	fpixi( animat, 0, 0 ,0 ,0 ,frame_num ) 
	frame(frame_time)
	frame_num - 1
	if frame_num < 0 { frame_num = 0 }
} 

if play_anim = 1 & loop = 1 { 
	fpixi( animat, 0, 0 ,0 ,0 ,frame_num ) 
	frame(frame_time)
	frame_num + 1
	if frame_num > (anim_frames-1) { frame_num = 0 }
} 

if play_anim = -1 & loop = 1 { 
	fpixi( animat, 0, 0 ,0 ,0 ,frame_num ) 
	frame(frame_time)
	frame_num - 1
	if frame_num < 0 { frame_num = anim_frames }
} 

ret


INFO_ABOUT:
clear (BLACK)

n=5 while n<14 {
fbox ( -(30*n)/2, -(24*n)/2, 30*n, 22*n, WHITE )
effector( SNEG, 256, 0, -50, -60, 54*2, 50*2, 1 ) 
effector( BLUE, 256, 0, -50, -60, 54*2, 50*2, 1 ) 
pixi ( logo_CGF, 0, -10, 2, 0, 1)
t_scale (400,400,400)
print ( "
CreaGraFix


", -40, 20, BLACK )
print ( ver, -16, 44, BLACK )
t_reset
print ("© Al_Rado     GNU GPL 2.0     ",-150,100, BLACK)
print (date,90,100, BLACK)
frame ( 300 )
n+1
}
frame ( 4000 )
clear (WHITE)
info = 0
ret


//************************ПОДПРОГРАММА СОЗДАНИЯ ЛОГО*************************************
MAKE_LOGOS:

b=#FFFFFF 
logo_CGF="
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbb.bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.bbbbbbbbbbbbb
bbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbb
bbbbbbbbbbbbb....bbbbbbbbbbbbbbbbbbbbbbbbbbb....bbbbbbbbbbbb
bbbbbbbbbbbbb.bbb..bbbbbbbbbbbbbbbbbbbbbbb..bbb.bbbbbbbbbbbb
bbbbbbbbbbbbb.bbbb..bbbbbbbbbbbbbbbbbbbbb..bbbb.bbbbbbbbbbbb
bbbbbbbbbbbbb..bbbb..bbbbbbbbbbbbbbbbbbb..bbbb..bbbbbbbbbbbb
bbbbbbbbbbbbb.bbbbbbb.bbbbbbbbbbbbbbbbb.bbbbbbb.bbbbbbbbbbbb
bbbbbbbbbbbbb.bbbbbbbb..bbbbbbbbbbbbb..bbbbbbbb.bbbbbbbbbbbb
bbbbbbbbbbbbbb.bbbbbbbb.bbbbbbbbbbbbb.bbbbbbbb.bbbbbbbbbbbbb
bbbbbbbbbbbbbb.bbbbbbbbb.bbbbbbbbbbb.bbbbbbbbb.bbbbbbbbbbbbb
bbbbbbbbbbbbbb.bb...bbbbb.bbbbbbbbb.bbbbb...bb.bbbbbbbbbbbbb
bbbbbbbbbbbbbb..b.b..bbbb..bbbbbbb..bbbb..b.b..bbbbbbbbbbbbb
bbbbbbbbbbbbbbb.b..b.bbbbb.bbbbbbb.bbbbb.b..b.bbbbbbbbbbbbbb
bbbbbbbbbbbbbbb..bbbb.bbbb.bbbbbbb.bbbb.bbbb..bbbbbbbbbbbbbb
bbbbbbbbbbbbbbbb.bbbb..bbb...bbb...bbb..bbbb.bbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbb..bbb.bbbb..bbb..bbbb.bbb..bbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbb.bbb..bbb.......bbb..bbb.bbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbb.bbb.bbbbbbbbbbbbb.bbb.bbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbb..b.bbbbbbbbbbbbb.b..bbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbb.b.b.bbbbbbbbb.b.b.bbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbb.bbb.bbbbbbb.bbb.bbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbb.bbb.bbbbbbb.bbb.bbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbb.bbbbb.bbb.bbbbb.bbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbb..bbb.bbbbbbb.bbb..bbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbb...bbbbbbb..b..bbbbbbb...bbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbb....bbb..bbbbbb.bbbbbb..bbb....bbbbbbbbbbbbbb
bbbbbbbbbbbb...b.b...b.b.bbbb.b.bbbb.b.b...b.b...bbbbbbbbbbb
bbbbbbbbb...bb..b.bbbb.bbb.bb.b.bb.bbb.bbbb.b..bb...bbbbbbbb
bbbbbbbb..b...bbbbbbbb..bb..b.b.b..bb..bbbbbbbb...b..bbbbbbb
bbbbbb.b...bb.bbbbbbbbb.....bbbbb.....bbbbbbbbb.bb...b.bbbbb
bbbb...b.bbbb.bbbbbbbbbb.bb..bbb..bb.bbbbbbbbbb.bbbb.b...bbb
bbbb.....b.b.b.bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.b.b.b.....bbb
bbbbb..bb...b.b..bbbbbbbbbbbbbbbbbbbbbbbbbbb..b.b...bb..bbbb
bbbbbbbbbbbb.......bbbbbbbbbbbbbbbbbbbbbbb.......bbbbbbbbbbb
bbbbbbbbbbbbbb...b.bbbbbbbbbbbbbbbbbbbbbbb.b...bbbbbbbbbbbbb
bbbbbbbbbbbbbbb..b.b.bbbbbbbb...bbbbbbbb.b.b..bbbbbbbbbbbbbb
bbbbbbbbbbbbbbb......bbbbbb...b...bbbbbb......bbbbbbbbbbbbbb
bbbbbbbbbbbbbb.....bbbbbbbbbbbbbbbbbbbbbbb.....bbbbbbbbbbbbb
bbbbbbbbbbbbbb.bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.bbbbbbbbbbbbb
bbbbbbbbbbbbbb.bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.bbbbbbbbbbbbb
bbbbbbbbbbbbb...bbb.b....bbbbbbbbbbb....b.bbb...bbbbbbbbbbbb
bbbbbbbbbbbb..b..b..bb...bbbbbbbbbbb...bb..b..b..bbbbbbbbbbb
bbbbbbbbbbbb....bbb.bbbbbbbbbbbbbbbbbbbbb.bbb....bbbbbbbbbbb
bbbbbbbbbbbb..bb.bbbbb..bbbbbbbbbbbbb..bbbbb.bb..bbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbb.bbbbb.....bbbbb.bbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbb..bbbbb..b..bbbbb..bbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbb.bb..b..bbb..b..bb.bbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbb.......bbbbb.......bbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
"
make_pixi(logo_CGF)

A=#191919 B=#191919 C=#1E1E1E D=#212121 E=#232323 F=#313131 G=#3A3A3A H=#3A3A3A I=#3A3A3A J=#3E3E3E K=#414141 L=#454545 M=#4A4A4A 
N=#4A4A4A O=#4E4E4E P=#515151 Q=#585858 R=#5A5A5A S=#5A5A5A T=#656565 U=#6A6A6A V=#6B6B6B W=#747474 X=#7B7B7B Y=#7B7B7B Z=#848484 
a=#858585 b=#8C8C8C c=#8C8C8C d=#939393 e=#949494 f=#949494 g=#9E9E9E h=#A5A5A5 i=#A6A6A6 j=#ADADAD k=#ADADAD l=#B0B0B0 m=#B5B5B5 
n=#B5B5B5 o=#B9B9B9 p=#C5C5C5 q=#C5C5C5 r=#D1D1D1 s=#DDDDDD t=#DEDEDE u=#EFEFEF v=#EEEEEE w=#FAFAFA x=#FFFFFF y=#FFFFFF z=#FFFFFF 
karand="
.......PT.......
.......BB.......
......nBBq......
......FFEK......
.....gTPNVk.....
.....HTWWZH.....
....ZnHcgNhc....
...uNrSckKwKw...
...VrggckWqqW...
..rSyStcknZySt..
..PtyHyckvNytS..
.qVyrVyckyKwyVo.
.BwyckyckyWqywD.
ZgyyPvyZkykZyyhZ
NfytKyyZkywBywgP
ZFSSFyyDYyrDWWNc
ZBBEPHSkETFqhnkc
ZBDHNPPYfYkqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukc
ZBDHNSVYfhnqtukw
yDBBBDEFHKNNPSNv
yHBDEHKNSTVWZcHy
cBDHNSVYfhnqtuhc
wBDHNSVYfhnqtukc
rEBDFHNPTVWZcgWy
ywccccccccccccqy
"
make_pixi(karand)

ret



продублировал тут http://slil.ru/25962902
ВекторКодПиксельПолигон - ВотЧтоЯЛюблю!
User avatar
Al_Rado
Posts: 239
Joined: Tue Dec 04, 2007 2:33 pm
Location: Krasnodar
Contact:

Re: WIP: CreaGraFix

Post by Al_Rado »

Текст программы тут http://slil.ru/25962912 (в прошлом посте продублировал описаловку)
ВекторКодПиксельПолигон - ВотЧтоЯЛюблю!
Post Reply