Домой Классы Статические функции Перечисления (ENUM) Записи (RECORD)

{Canvas|_to_draw}


CLASS {Canvas|_to_draw} , UNTESTED, BITWISE :


Класс канвы для рисования на объекте изображения {Bitmap} или на контроле класса {Paintbox}.


IMPORT : {Bitmap} , {Control} , {AL4_form} , {AL4_drawing} .

{Bitmap} Bitmap_|to_draw_on_ , READ , INIT

Целевой объект {Bitmap} или NONE (альтернативно, поле Control_ должно быть не NONE).


{Control} Control_|to_paint_ , READ , INIT

Целевой объект {Control} или NONE (альтернативно, поле Bitmap_ должно быть не NONE).


INT Handle|_canvas_object , READ

Дескриптор, связывает объект AL-IV с целевым низкоуровневым объектом канвы.


INT Printer_handle , READ

Как и предыдущий, но используется в случае рисования на канве принтера.



------------------------------------------------------------------ 'colors'

INT Foreground|_color

Цвет "чернил", используется для рисования линий и текста. Достаточно присвоить значение полю перед рисованием с использованием либых "рисующих" методов. Используйте оператор PUSH для временного присваивания значения, и восстановления предыдущего цвета по окончании блока PUSH.


INT Background|_color

Так же, как и для Foreground, но задает цвет заполнения (закрашивания).


BOOL Alpha|_channel_used_for_32_bpp_bitmaps

Установите значение в TRUE для использования альфа-канала при рисовании на 32-битном изображении (класса {Bitmap}). Если значение FALSE, то старший байт цвета игнрируется.


  

ENUMERATION {rgba_order} :

        'R_G_B|_A|_mainly_in_windows' ,

        'B_G_R|_A|_usual_for_linux' .



FUN RGBA_order ==> {rgba_order}



---------------------------------------------------------- 'clip rectangle'

{Geometry}.{rect} Clip|_rect|angle||Clipping|_rect|angle

Установите этот прямоугольник для того, чтобы ограничить рисование его границами. Если высота или ширина прямоугольника равна 0, то он игнорируется.



FUN RGB|_to_color (
     
INT R|ed_0_to_255 ,
     
INT G|reen_0_to_255 ,
     
INT B|lue_0_to_255 ) ==> INT


Функция для формирования RGB-цвета из трех раздельных конмпонент R (красный), G (зеленый) и B (синий).


FUN Replace_alpha|_in_color (
     
INT C|olor_value ,
     
REAL A|lpha_value_0_to_1 ) ==> INT , IF A IS CONST , THEN A IN [0 TO 1] :


Функция для замещения в цвете поля альфа-прозрачности указанным значением ( возвращает цвет с замененным альфа-каналом).

CONSTANT INT :

          BLACK|_COLOR = 0xFF_00_00_00

          WHITE|_COLOR = 0xFF_FF_FF_FF

          MAROON|_COLOR = 0xFF_00_00_80

          GREEN|_COLOR = 0xFF_00_80_00

          OLIVE|_COLOR = 0xFF_00_80_80

          NAVY|_COLOR = 0xFF_80_00_00

          MAGENTA|_COLOR = 0xFF_80_00_80

          PURPLE|_SAME_AS_MAGENTA = 0xFF_80_00_80

          TEAL|_COLOR = 0xFF_80_80_00

          GRAY|_COLOR = 0xFF_80_80_80

          GREY|_SAME_AS_GRAY = 0xFF_80_80_80

          DK_GRAY|_COLOR = 0xFF_40_40_40

          DK_GREY|_COLOR = 0xFF_40_40_40

          SILVER|_COLOR = 0xFF_C0_C0_C0

          RED|_COLOR = 0xFF_00_00_FF

          LIME|_COLOR = 0xFF_00_FF_00

          YELLOW|_COLOR = 0xFF_00_FF_FF

          BLUE|_COLOR = 0xFF_FF_00_00

          FUCHSIA|_COLOR = 0xFF_FF_00_FF

          AQUA|_COLOR = 0xFF_FF_FF_00

          CYAN|_COLOR = 0xFF_FF_FF_00

          BROWN|_COLOR = 0xFF_50_50_A0

          DK_BROWN|_COLOR = 0xFF_30_30_60

          ORANGE|_COLOR = 0xFF_33_99_FF

          SKY_BLUE = 0xFF_F0_CA_A6

          LT_PINK|_COLOR = 0xFF_BF_B3_FF

          PINK|_COLOR = 0xFF_CB_C0_FF

          KHAKI|_COLOR = 0xFF_6B_86_78 .


Набор часто используемых цветов.


----------------------------------------------------------- 'system colors'

 

ENUMERATION {system_color} :

        'ACTIVE_CAPTION' ,

        'ACTIVE_GRADIENT' ,

        'ACTIVE_BORDER' ,

        'ACTIVE_TEXT' ,

        'BUTTON|_FACE' ,

        'BUTTON_TEXT' ,

        'BUTTON_HIGHLIGHT' ,

        'BUTTON_SHADOW' ,

        'DESKTOP|_BACKGROUND' ,

        'GRAY_TEXT' ,

        'HELP|_BACKGROUND' ,

        'HELP_TEXT' ,

        'INACTIVE_CAPTION' ,

        'INACTIVE_GRADIENT' ,

        'INACTIVE_BORDER' ,

        'INACTIVE_TEXT' ,

        'MENU|_BACKGROUND' ,

        'MENU_TEXT' ,

        'MENU_HIGHLIGHT' ,

        'SCROLLBAR' ,

        'WINDOW|_COLOR' ,

        'WINDOW_TEXT' ,

        'WINDOW_FRAME' ,

        'HIGHLIGHT' ,

        'HIGHLIGHT_TEXT' .


Доступные "системные" цвета. Могут использоваться как параметр функции System_color, возвращающей текущее значение соответствующего системного цвета.


FUN System_color ( {system_color} System|_name_color ) ==> INT


Возвращает текущее значение системного цвета.


FUNCTION Mix|_colors ( INT C1|_color , INT C2|_color ) ==> INT


Смешивает 2 цвета, получая (почти) средний цвет из двух.


FUNCTION Mix_percents (
     
INT C1|_color ,
     
INT C2|_color ,
     
INT Percents|_0_TO_100 ) ==> INT



---------------------------------------------------------------- 'карандаш'

REAL Pen_width

Толщина линии пера. В отличие от других измеряемых размеров, этот размер задается не в поинтах, а в пикселах. Так же, в соответствии с историческими традициями, значение 0 означает толщину пера "по умолчанию" (и обычно соответствует значению 1 пиксел).


{pen_style} Pen_style

Текущий стиль пера. Для изменения, просто присвойте полю новоее значения (как и для большинства свойств канвы). Или используйте оператор PUSH для временного присваивания значения.



ENUMERATION {pen_style} :

        'SOLID_PEN' ,

        'CLEAR_PEN' .


Доступные стили пера.


------------------------------------------------------------------- 'кисть'

{brush_style} Brush|_style

Текущий стиль кисти (используется для закрашивания внутренности рисумой фигуры). Для изменения, просто присвойте полю новоее значения (как и для большинства свойств канвы). Или используйте оператор PUSH для временного присваивания значения.



ENUMERATION {brush_style} :

        'SOLID_BRUSH' ,

        'CLEAR_BRUSH' ,

        'HORIZONTAL' ,

        'VERTICAL' ,

        'DIAGONAL' ,

        'BDIAGONAL' ,

        'CROSS|_BRUSH' ,

        'DIAGONAL_CROSS' .


Доступные стили кисти. На некоторых платформах стили, отличные от 'SOLID_BRUSH' (сплошная заливка) и 'CLEAR_BRUSH' (отсутствие заливки) могут игнорироваться (изображаться сплошными).


------------------------------------------------------------------- 'шрифт'

{Font} Font|_tool , READ

Текущий шрифт (для изображения текста).



METHOD Set_font ( {Font} F|ont_set )


Установка шрифта рисования текста. Или, можно просто менять значения полей объекта Font (поля Face, Size, Bold, Italic, Underline).


METHOD Measure|_string (
     
STR S|tring_to_measure ) ==> {Geometry}.{rect}


Измерение размера текста, рисуемого текущим шрифтом. В возвращаемом прямоугольнике, точка Loc = Pt(0,0), ширина и высота - в текущих единицах измерения. Чтобы получить максимально возможную высоту символа, можно передать в качестве параметра строку "_/|", или просто использовать Font.Size (в поинтах). Ширина ведущих и завершающих пробелов всегда равна нулю.


------------------------------------------------------- 'единицы измерения'

{units} Units|_measure_graphics

Текущие единицы измерения. По умолчанию, используются поинты, но можно в любой момент установить другие единицы измерения (пикселы, дюймы, сантиметры). Это не касается толщины линии Pen_width, всегда заданной в пикселах.



ENUMERATION {units|_measure_graphics} :

        'POINTS|_UNITS' ,

        'PIXELS|_UNITS' ,

        'INCHES|_UNITS' ,

        'CENTIMETERS|_UNITS' .


Доступные единицы измерения.


FUN Units_convert (
     
{units} Dest|ination ,
     
{units} Source|_units ,
     
REAL Value|_convert ) ==> REAL


Конвертирование иединиц измерения.


FUN Points_to_pixels ( REAL P|oints_value ) ==> INT


Конвертирование иединиц измерения из поинтов в пиксели (с округдением значения в целое).


FUN Pixels_to_points ( REAL P|ixels_value ) ==> REAL


Конвертирование иединиц измерения из пикселов в поинты.


---------------------------------------------------------------- 'создание'

   

FUNCTION New_canvas (
     
{Bitmap} B|itmap_to_paint_in ) ==> {Canvas} , NEW



FUNCTION New_paint_canvas|_may_not_be_supported_on_certain_platforms (
     
{Control} C|ontrol_paint ) ==> {Canvas} , NEW



FUNCTION New_print_canvas ( INT H|andle_printer ) ==> {Canvas} , NEW



------------------------------------------------------ 'рисование на канве'

        

METHOD Erase|_entire_canvas



METHOD Rect|angle_draw ( {rect} R|ectangle )



METHOD Line|_draw (
     
{Geometry}.{point} P1|_from_point ,
     
{point} P2|_to_point )



METHOD Ellipse|_draw ( {rect} R|ectangle_ellipse )



STRUCTURE {arc|_information}

      {rect} R|ect|angle

      {point} A|ngles|_degrees_sector

      BOOL Sided|_shape .



METHOD Arc|_or_pie (
     
{rect} R|ectangle ,
     
{point} A|ngles_sector_2_angles_in_degrees ,
     
BOOL Sided|_shape )



METHOD Poly|line_polygon (
     
{point} P|oints_array [*] ,
     
BOOL Closed|_shape )



METHOD Text|_draw ( {point} Point|_top_left , STR Text|_to_draw )



------------------------------------------------- 'трансформация координат'

      

METHOD Reset_transform|ations



METHOD Offset|_transform (
     
REAL Dx|_delta_points ,
     
REAL Dy|_delta_points )



METHOD Offset_pt || Offset_point_positive ( {point} P|oint_to_offset )



METHOD Offset_neg|ative_point ( {point} P|oint_to_offset )



METHOD Rotate|_transform ( REAL Angle|_in_degrees )



METHOD Scale|_transform ( REAL X_scale|_value , REAL Y_scale|_value )



--------------------------------------------------------- 'quality control'

 

ENUMERATION {quality|_drawing_lines_shapes} :

        'HIGH|_QUALITY' ,

        'MEDIUM|_QUALITY' ,

        'LOW|_QUALITY' .


{quality} Quality|_drawing



---------------------------------------- 'End of paint operations sequence'

 

METHOD End_paint



--------------------------------------------- 'operations between canvases'

 

METHOD Copy_rect|angle (
     
{rect} Dest|ination ,
     
{Canvas} From|_source_canvas ,
     
{rect} Source|_rectangle )


END