package Claw.Low_Level.GDI is
--
-- CLAW - Class Library for Ada and Windows.
--
-- This is the place where various commonly used low-level routines
-- are collected.
--
-- This child package deals with GDI-related routines:
--
-- Drawing, paths, bitmap manipulation, metafiles, etc.
--
--
-- Copyright 1996, 1997 R.R. Software, Inc.
-- P.O. Box 1512, Madison WI 53701
-- All rights reserved.
--
use Claw.Win32;
type Void_Record_Type is record
-- Dummy record type for various routines.
null;
end record;
type Void_Ptr_Type is access all Void_Record_Type;
subtype DIB_Info_Header_Ptr_Type is Void_Ptr_Type;
type Constant_Access_Point_Type is access constant Claw.Point_Type;
type Constant_Access_Int_Type is access constant Claw.Int;
Dummy : Float := 1.0; -- Variable to convince J/A 3.0.7 that floating point is in use.
function Select_Object (Dc : HDc;
Tool : Tool_Handle_Type) return Tool_Handle_Type;
pragma Import (StdCall, Select_Object, "SelectObject");
function Select_Brush (Dc : Hdc;
Object : HBrush) return HBrush;
pragma Import (StdCall, Select_Brush, "SelectObject");
function Get_Stock_Brush (Index : Int) return HBrush;
pragma Import (StdCall, Get_Stock_Brush, "GetStockObject");
function Create_Solid_Brush (Color : Claw.Colors.Color_Type) return Hbrush;
pragma Import (StdCall, Create_Solid_Brush, "CreateSolidBrush");
function Create_Hatch_Brush (Index : Int;
Color : Claw.Colors.Color_Type) return Hbrush;
pragma Import (StdCall, Create_Hatch_Brush, "CreateHatchBrush");
function Create_Pattern_Brush(H : in HBitmap) return HBrush;
pragma Import (StdCall, Create_Pattern_Brush, "CreatePatternBrush");
function Delete_Brush (Object : Hbrush) return Bool;
pragma Import (StdCall, Delete_Brush, "DeleteObject");
function Select_Pen (Dc : Hdc;
Object : HPen) return HPen;
pragma Import (StdCall, Select_Pen, "SelectObject");
function Get_Stock_Pen(Index : Int) return HPen;
pragma Import (StdCall, Get_Stock_Pen, "GetStockObject");
function Create_Pen (Pen_Style: Int;
Width : Int;
Color : Claw.Colors.Color_Type) return Hpen;
pragma Import (StdCall, Create_Pen, "CreatePen");
function Delete_Pen (Object : Hpen) return Bool;
pragma Import (StdCall, Delete_Pen, "DeleteObject");
function Select_Font (Dc : Hdc;
Object : HFont) return HFont;
pragma Import (StdCall, Select_Font, "SelectObject");
function Get_Stock_Font(Index : Int) return HFont;
pragma Import (StdCall, Get_Stock_Font, "GetStockObject");
function Create_Font (Height : Int;
Width : Int;
Escapement : Int;
Orientation: Int;
Weight : Int;
Is_Italic : DWord;
Underline : DWord;
Strike_Out : DWord;
Character_Set : DWord;
Precision : DWord;
Clip_Precision : DWord;
Quality : DWord;
Pitch_Font : DWord;
Typeface_Name : Lpcstr) return HFont;
pragma Import (StdCall, Create_Font, "CreateFontA");
function Delete_Font (Object : Hfont) return Bool;
pragma Import (StdCall, Delete_Font, "DeleteObject");
function Select_Bitmap (Dc : Hdc;
Object : HBitmap) return HBitmap;
pragma Import (StdCall, Select_Bitmap, "SelectObject");
function Delete_Bitmap (Object : HBitmap) return Bool;
pragma Import (StdCall, Delete_Bitmap, "DeleteObject");
function Get_Bk_Color (Dc : Hdc) return Claw.Colors.Color_Type;
pragma Import (StdCall, Get_Bk_Color, "GetBkColor");
function Get_Bk_Mode (Dc : Hdc) return Int;
pragma Import (StdCall, Get_Bk_Mode, "GetBkMode");
function Get_Text_Color (Dc : Hdc) return Claw.Colors.Color_Type;
pragma Import (StdCall, Get_Text_Color, "GetTextColor");
function Set_Bk_Color (Dc : Hdc;
Color : Claw.Colors.Color_Type) return Claw.Colors.Color_Type;
pragma Import (StdCall, Set_Bk_Color, "SetBkColor");
function Set_Bk_Mode (Dc : Hdc;
Bk_Mode : Int) return Int;
pragma Import (StdCall, Set_Bk_Mode, "SetBkMode");
function Set_Text_Color (Dc : Hdc;
Color : Claw.Colors.Color_Type) return Claw.Colors.Color_Type;
pragma Import (StdCall, Set_Text_Color, "SetTextColor");
function Get_Nearest_Color (Handle : in Claw.Win32.HDc;
Color : in Claw.Colors.Color_Type)
return Claw.Colors.Color_Type;
pragma Import (StdCall, Get_Nearest_Color, "GetNearestColor");
function Text_Out (Dc : Hdc;
X,
Y : Long;
Str : Lpcstr;
Count : Int) return Bool;
pragma Import (StdCall, Text_Out, "TextOutA");
ETO_OPAQUE : UInt := 16#002#;
ETO_CLIPPED : UInt := 16#004#;
ETO_GLYPH_INDEX : UInt := 16#010#; -- Windows 4.0 only.
function Ext_Text_Out (Dc : Hdc;
X,
Y : Long;
Options : UInt;
Rect : access Rectangle_Type;
Str : Lpcstr;
Count : Int;
Zero : Long := 0) return Bool;
pragma Import (StdCall, Ext_Text_Out, "ExtTextOutA");
function Get_Current_Position_Ex (Dc : HDc;
Pt : access Point_Type) return Bool;
pragma Import (StdCall, Get_Current_Position_Ex, "GetCurrentPositionEx");
function Set_Text_Align (Dc : Hdc;
Align : UInt) return UInt;
pragma Import (StdCall, Set_Text_Align, "SetTextAlign");
function Get_Text_Align (Dc : Hdc) return UInt;
pragma Import (StdCall, Get_Text_Align, "GetTextAlign");
function Set_Text_Justification(Dc : Hdc;
ExtraSpace : UInt;
Breaks : UInt) return Bool;
pragma Import (StdCall, Set_Text_Justification, "SetTextJustification");
--Line and Curve functions
function Line_to(Dc : in Hdc;
X, Y : in Long) return Bool;
pragma Import (StdCall, Line_to, "LineTo");
function Move_To_Ex (Dc : in HDc;
nX, nY : in Long;
Pt : access Point_Type) return Bool;
pragma Import (StdCall, Move_To_Ex, "MoveToEx");
function Angle_Arc (Dc: in Hdc;
X,
Y: in Int;
Radius: in DWord;
Start_Angle,
Sweep_Angle: in Float) return Bool;
pragma Import (StdCall, Angle_Arc, "AngleArc");
function Arc_To (Dc: in Hdc;
Left,
Right,
Top,
Bottom: in Int;
X1,
Y1,
X2,
Y2: in Int) return Bool;
pragma Import (StdCall, Arc_To, "ArcTo");
function Get_Arc_Direction (Dc: in Hdc) return Int;
pragma Import (StdCall, Get_Arc_Direction, "GetArcDirection");
function Poly_Bezier (Dc: in Hdc;
Ppt: in Constant_Access_Point_Type;
--/\ points to 1st element of array of points
Points: in DWord) return Bool;
pragma Import (StdCall, Poly_Bezier, "PolyBezier");
function Poly_Bezier_To (Dc: in Hdc;
Ppt: in Constant_Access_Point_Type;
--/\ points to 1st element of array of points
Points: in DWord) return Bool;
pragma Import (StdCall, Poly_Bezier_To, "PolyBezierTo");
function Poly_Draw (Dc: in Hdc;
Ppt: in Constant_Access_Point_Type;
--/\ points to 1st element of array of points
Types: in Void_Ptr_Type;
--/\ points to 1st element of array of bytes
Count: in Int) return Bool;
pragma Import (StdCall, Poly_Draw, "PolyDraw");
function Poly_Line (Dc: in Hdc;
Ppt: in Constant_Access_Point_Type;
--/\ points to 1st element of array of points
Points: in Int) return Bool;
pragma Import (StdCall, Poly_Line, "Polyline");
function Poly_Line_To (Dc: in Hdc;
Ppt: in Constant_Access_Point_Type;
--/\ points to 1st element of array of points
Points: in Int) return Bool;
pragma Import (StdCall, Poly_Line_To, "PolylineTo");
function Poly_Polyline (Dc: in Hdc;
Ppt: in Constant_Access_Point_Type;
--/\ points to 1st element of array of points
Poly_Points: access DWord;
--/\ points to 1st element of array of values
Count: in DWord) return Bool;
pragma Import (StdCall, Poly_Polyline, "PolyPolyline");
function Set_Arc_Direction (Dc: in Hdc;
Arc_Direction: in Int) return Int;
pragma Import (StdCall, Set_Arc_Direction, "SetArcDirection");
--Higher level draw routines:
--
function Arc (Dc : Hdc;
X1,
Y1,
X2,
Y2,
X3,
Y3,
X4,
Y4 : Long) return Bool;
pragma Import (StdCall, Arc, "Arc");
function Chord(Dc : HDc;
X1,
Y1,
X2,
Y2,
X3,
Y3,
X4,
Y4 : Long) return Bool;
pragma Import (StdCall, Chord, "Chord");
function Ellipse (Dc : Hdc;
X1,
Y1,
X2,
Y2 : Long) return Bool;
pragma Import (StdCall, Ellipse, "Ellipse");
function Pie (Dc : Hdc;
X1,
Y1,
X2,
Y2,
X3,
Y3,
X4,
Y4 : Long) return Bool;
pragma Import (StdCall, Pie, "Pie");
function Rectangle(Dc : Hdc;
X1,
Y1,
X2,
Y2 : Long) return Bool;
pragma Import (StdCall, Rectangle, "Rectangle");
function Round_Rect(Dc : Hdc;
X1,
Y1,
X2,
Y2,
X3,
Y3 : Long) return Bool;
pragma Import (StdCall, Round_Rect, "RoundRect");
function Polygon (Dc: in Hdc;
Points: in Constant_Access_Point_Type;
--Actually points to 1st item in array
Count: in Int) return Bool;
pragma Import (StdCall, Polygon, "Polygon");
function Poly_Polygon (Dc: in Hdc;
Points: in Constant_Access_Point_Type;
--/\ Points to 1st item in Points array
Poly_Counts: access Int;
--/\ Points to 1st item in Poly_Counts array
Count: in Int) return Bool;
pragma Import (StdCall, Poly_Polygon, "PolyPolygon");
function Draw_Focus_Rect (Dc : in Hdc;
Rect : access Rectangle_Type) return Bool;
pragma Import (StdCall, Draw_Focus_Rect, "DrawFocusRect");
-- Palettes:
function Select_Palette(Dc : Hdc;
Object : HPalette;
bForceBackground:Bool) return HPalette;
pragma Import (StdCall, Select_Palette, "SelectPalette");
function Get_Stock_Palette(Index : Int) return HPalette;
pragma Import (StdCall, Get_Stock_Palette, "GetStockObject");
function Delete_Palette (Object : HPalette) return Bool;
pragma Import (StdCall, Delete_Palette, "DeleteObject");
function Resize_Palette (Handle : in Claw.Win32.HPalette;
new_count : in UInt) return BOOL;
pragma Import (StdCall, Resize_Palette, "ResizePalette");
function Get_Nearest_Palette_Index (Handle:in Claw.Win32.HPalette;
Color :in Claw.Colors.Color_Type)
return UInt;
pragma Import (StdCall, Get_Nearest_Palette_Index, "GetNearestPaletteIndex");
function Realize_Palette (Handle : in HDc) return Uint;
pragma Import (StdCall, Realize_Palette, "RealizePalette");
-- Regions:
function Select_Region(Dc : Hdc;
Object : HRegion) return HRegion;
pragma Import (StdCall, Select_Region, "SelectObject");
function Create_Rectangular_Region(Left, Right, Top, Bottom : in Int)
return HRegion;
pragma Import (StdCall, Create_Rectangular_Region, "CreateRectRgn");
function Create_Elliptic_Region(Left, Right, Top, Bottom : in Int)
return HRegion;
pragma Import (StdCall, Create_Elliptic_Region, "CreateEllipticRgn");
function Create_Rounded_Rectangular_Region(Left, Right, Top, Bottom : in Int;
Ellipse_Width, Ellipse_Height: in Int)
return HRegion;
pragma Import (StdCall, Create_Rounded_Rectangular_Region,"CreateRoundRectRgn");
function Delete_Region (Object : HRegion) return Bool;
pragma Import (StdCall, Delete_Region, "DeleteObject");
function Select_Clip_Rgn (The_Hdc: in Hdc;
Hrgn: in HRegion) return Int;
pragma Import (StdCall, Select_Clip_Rgn, "SelectClipRgn");
function Offset_Clip_Rgn (The_Hdc: in Hdc;
X_Offset: in Int;
Y_Offset: in Int) return Int;
pragma Import (StdCall, Offset_Clip_Rgn, "OffsetClipRgn");
function Create_Polygon_Rgn (P: in Constant_Access_Point_Type; -- Really a point list.
Count: in Int;
Fill_Mode: in Claw.Codes.Fill_Modes) return HRegion;
pragma Import (StdCall, Create_Polygon_Rgn, "CreatePolygonRgn");
function Create_Poly_Polygon_Rgn (PPt: Constant_Access_Point_Type; -- Really a point list.
PolyCounts: Constant_Access_Int_Type; -- Really a int list.
Count: in Int;
PolyFillMode: in Claw.Codes.Fill_Modes) return HRegion;
pragma Import (StdCall, Create_Poly_Polygon_Rgn, "CreatePolyPolygonRgn");
function Ext_Create_Region (X_Form: access Claw.Win32.X_Form_Type;
Count: in DWord;
Rgn_Data: Void_Ptr_Type) return HRegion;
pragma Import (StdCall, Ext_Create_Region, "ExtCreateRegion");
function Equal_Rgn (Src_Rgn_1: in HRegion;
Src_Rgn_2: in HRegion) return Bool;
pragma Import (StdCall, Equal_Rgn, "EqualRgn");
function Combine_Rgn (Dest: in HRegion;
Src1: in HRegion;
Src2: in HRegion;
CombineMode: in Int) return Int;
pragma Import (StdCall, Combine_Rgn, "CombineRgn");
function Fill_Rgn (The_Hdc: in Hdc;
Rgn: in HRegion;
Brush: in HBrush) return Bool;
pragma Import (StdCall, Fill_Rgn, "FillRgn");
function Frame_Rgn (The_Hdc: in Hdc;
Rgn: in HRegion;
Brush: in HBrush;
Width: in Int;
Height: in Int) return Bool;
pragma Import (StdCall, Frame_Rgn, "FrameRgn");
function Invert_Rgn (The_Hdc: in Hdc;
Rgn: in HRegion) return Bool;
pragma Import (StdCall, Invert_Rgn, "InvertRgn");
function Offset_Rgn (Rgn: in HRegion;
X_Offset: in Int;
Y_Offset: in Int) return Int;
pragma Import (StdCall, Offset_Rgn, "OffsetRgn");
function Paint_Rgn (The_Hdc: in Hdc;
Rgn: in HRegion) return Bool;
pragma Import (StdCall, Paint_Rgn, "PaintRgn");
function Pt_In_Region (Rgn: in HRegion;
X: in Int;
Y: in Int) return Bool;
pragma Import (StdCall, Pt_In_Region, "PtInRegion");
function Rect_In_Region (Rgn: in HRegion;
Prc: access Rectangle_Type) return Bool;
pragma Import (StdCall, Rect_In_Region, "RectInRegion");
function Invalidate_Rgn (Wnd: in HWnd;
Rgn: in HRegion;
Erase: in Bool) return Bool;
pragma Import (StdCall, Invalidate_Rgn, "InvalidateRgn");
function Validate_Rgn (Wnd: in HWnd;
Rgn: in HRegion) return Bool;
pragma Import (StdCall, Validate_Rgn, "ValidateRgn");
function Ext_Select_Clip_Rgn (The_Hdc: in Hdc;
Rgn: in HRegion;
Mode: in Int) return Int;
pragma Import (StdCall, Ext_Select_Clip_Rgn, "ExtSelectClipRgn");
function Get_Clip_Rgn (The_Hdc: in Hdc;
Rgn: in HRegion) return Int;
pragma Import (StdCall, Get_Clip_Rgn, "GetClipRgn");
function Get_Meta_Rgn (The_Hdc: in Hdc;
Rgn: in HRegion) return Int;
pragma Import (StdCall, Get_Meta_Rgn, "GetMetaRgn");
function Set_Meta_Rgn (The_Hdc: in Hdc) return Int;
pragma Import (StdCall, Set_Meta_Rgn, "SetMetaRgn");
function Get_Poly_Fill_Mode (The_Hdc: in Hdc) return Claw.Codes.Fill_Modes;
pragma Import (StdCall, Get_Poly_Fill_Mode, "GetPolyFillMode");
function Set_Poly_Fill_Mode (The_Hdc: in Hdc;
Poly_Fill_Mode: in Claw.Codes.Fill_Modes) return Claw.Codes.Fill_Modes;
pragma Import (StdCall, Set_Poly_Fill_Mode, "SetPolyFillMode");
function Get_Region_Data (Rgn: in HRegion;
Count: in Int;
Rgn_Data: Void_Ptr_Type) return DWord;
--Rgn_Data should be the 'Access of the Header field of a
--Claw.Region_Data_Type, which contains the rectangle records
--after the header.
pragma Import (StdCall, Get_Region_Data, "GetRegionData");
function Get_Rgn_Box (Rgn: in HRegion;
Prc: access Rectangle_Type) return Int;
pragma Import (StdCall, Get_Rgn_Box, "GetRgnBox");
-- DC:
function Create_Compatible_DC (DC : in HDc) return HDc;
pragma Import (StdCall, Create_Compatible_DC, "CreateCompatibleDC");
function Delete_DC (DC : in HDc) return Bool;
pragma Import (StdCall, Delete_DC, "DeleteDC");
function Release_DC (Wnd : in HWnd;
DC : in HDc) return Bool;
pragma Import (StdCall, Release_DC, "ReleaseDC");
function Get_DC (Wnd : in HWnd) return HDc;
pragma Import (StdCall, Get_DC, "GetDC");
function Get_Window_DC (Wnd : in HWnd) return HDc;
pragma Import (StdCall, Get_Window_DC, "GetWindowDC");
function Create_DC (Driver : in Lpcstr; -- Documentation is conflicted; better set it.
Device : in Lpcstr;
Port : in DWord := 0; -- not used in Win32.
Devmode : in DWord := 0) return HDc;
pragma Import (StdCall, Create_DC, "CreateDCA");
function Save_DC (Wnd : in HWnd) return Claw.Int;
pragma Import (StdCall, Save_DC, "SaveDC");
function Restore_DC (Wnd : in HWnd;
Save_Cnt : in Claw.Int) return Bool;
pragma Import (StdCall, Restore_DC, "RestoreDC");
function Start_Page (DC : in HDc) return Int;
pragma Import (StdCall, Start_Page, "StartPage");
function End_Page (DC : in HDc) return Int;
pragma Import (StdCall, End_Page, "EndPage");
type Doc_Info_Type is record
Size : Claw.Int := 20;
Doc_Name : Lpcstr;
Output_File : Lpcstr; -- null unless directing to a file.
Data_Type: Lpcstr := null; -- Always null except on Windows 95; can't find
-- any documentation as to what it ought to be if not
-- null.
FWType : Claw.DWord := 0; -- Used only on Windows 95, best ignored.
end record;
function Start_Doc (DC : in HDc;
DocInfo : access Doc_Info_Type) return Int;
pragma Import (StdCall, Start_Doc, "StartDocA");
function End_Doc (DC : in HDc) return Int;
pragma Import (StdCall, End_Doc, "EndDoc");
function Abort_Doc (DC : in HDc) return Int;
pragma Import (StdCall, Abort_Doc, "AbortDoc");
type Abort_Proc_Type is access function (DC : in HDc;
Error : in Claw.Int) return Bool;
pragma Convention (StdCall, Abort_Proc_Type);
-- Error can be 0 (no error) or SP_OUTOFDISK (can wait).
-- Return True to continue and False to abort.
function Set_Abort_Proc (DC : in HDc;
Proc : in Abort_Proc_Type) return Int;
pragma Import (StdCall, Set_Abort_Proc, "SetAbortProc");
SP_ERROR : constant Claw.Int := -1;
SP_APPABORT : constant Claw.Int := -2;
SP_USERABORT: constant Claw.Int := -3;
SP_OUTOFDISK: constant Claw.Int := -4;
SP_OUTOFMEMORY: constant Claw.Int := -5;
type GDC_ints is new claw.int;
for GDC_ints'size use 32;
TECHNOLOGY_index : constant GDC_ints := 2; -- Device classification
CURVECAPS_index : constant GDC_ints := 28; -- Curve capabilities
LINECAPS_index : constant GDC_ints := 30; -- Line capabilities
POLYGONALCAPS_index : constant GDC_ints := 32; -- Polygonal capabilities
TEXTCAPS_index : constant GDC_ints := 34; -- Text capabilities
CLIPCAPS_index : constant GDC_ints := 36; -- Clipping capabilities
RASTERCAPS_index : constant GDC_ints := 38; -- Bitblt capabilities
function Get_Device_Caps (Dc: in Claw.Win32.HDc; index : in GDC_ints) return int;
pragma Import (StdCall, Get_Device_Caps, "GetDeviceCaps");
function Get_Text_Extent_Point (Dc: in Claw.Win32.HDc;
Text : in Claw.Win32.Lpcstr;
Count : in Claw.Int;
Size : access Size_Type) return Bool;
pragma Import (StdCall, Get_Text_Extent_Point, "GetTextExtentPoint32A");
function Get_Tabbed_Text_Extent_Point_no_Tabs (Dc: in Claw.Win32.HDc;
Text : in Claw.Win32.Lpcstr;
Count : in Claw.Int;
TCount : in Claw.Int := 0;
T_Arr : in Claw.Dword := 0
) return Claw.DWord;
pragma Import (StdCall, Get_Tabbed_Text_Extent_Point_no_Tabs, "GetTabbedTextExtentA");
function Get_Tabbed_Text_Extent_Point (Dc: in Claw.Win32.HDc;
Text : in Claw.Win32.Lpcstr;
Count : in Claw.Int;
Tab_Count : in Claw.Int;
Tab_Array : access Claw.Int) return Claw.DWord;
pragma Import (StdCall, Get_Tabbed_Text_Extent_Point, "GetTabbedTextExtentA");
function Get_System_Metrics(Index : Int) return Int;
pragma Import (StdCall, Get_System_Metrics, "GetSystemMetrics");
-- Coordinate systems routines:
function Client_To_Screen (Wnd: in HWnd;
Point: access Claw.Point_Type) return Bool;
pragma Import (StdCall, Client_To_Screen, "ClientToScreen");
function Screen_To_Client (Wnd: in HWnd;
Point: access Claw.Point_Type) return Bool;
pragma Import (StdCall, Screen_To_Client, "ScreenToClient");
function Map_Window_Points (Wnd_From: in HWnd;
Wnd_To: in HWnd;
Points: access Point_Type; -- Really a point list.
Num: in UInt) return Int;
pragma Import (StdCall, Map_Window_Points, "MapWindowPoints");
function Set_Map_Mode (The_Hdc: in Hdc;
Map_Mode: in Int) return Int;
pragma Import (StdCall, Set_Map_Mode, "SetMapMode");
function Get_Map_Mode (The_Hdc: in Hdc) return Int;
pragma Import (StdCall, Get_Map_Mode, "GetMapMode");
function Get_Window_Ext_Ex (The_Hdc: in Hdc;
Size: access Claw.Size_Type) return Bool;
pragma Import (StdCall, Get_Window_Ext_Ex, "GetWindowExtEx");
function Set_Window_Ext_Ex (The_Hdc: in Hdc;
X_Extent: in Int;
Y_Extent: in Int;
Size: access Claw.Size_Type) return Bool;
pragma Import (StdCall, Set_Window_Ext_Ex, "SetWindowExtEx");
function Scale_Window_Ext_Ex (The_Hdc: in Hdc;
X_Num: in Int;
X_Demon: in Int;
Y_Num: in Int;
Y_Demon: in Int;
Size: access Claw.Size_Type) return Bool;
pragma Import (StdCall, Scale_Window_Ext_Ex, "ScaleWindowExtEx");
function Scale_Viewport_Ext_Ex (The_Hdc: in Hdc;
X_Num: in Int;
X_Demon: in Int;
Y_Num: in Int;
Y_Demon: in Int;
Size: access Claw.Size_Type) return Bool;
pragma Import (StdCall, Scale_Viewport_Ext_Ex, "ScaleViewportExtEx");
function Get_Viewport_Ext_Ex (The_Hdc: in Hdc;
Size: access Claw.Size_Type) return Bool;
pragma Import (StdCall, Get_Viewport_Ext_Ex, "GetViewportExtEx");
function Set_Viewport_Ext_Ex (The_Hdc: in Hdc;
X_Extent: in Int;
Y_Extent: in Int;
Size: access Claw.Size_Type) return Bool;
pragma Import (StdCall, Set_Viewport_Ext_Ex, "SetViewportExtEx");
function DP_To_LP (The_Hdc: in Hdc;
Points: access Claw.Point_Type; -- Really a list
Count: in Int) return Bool;
pragma Import (StdCall, DP_To_LP, "DPtoLP");
function LP_To_DP (The_Hdc: in Hdc;
Points: access Claw.Point_Type; -- Really a list
Count: in Int) return Bool;
pragma Import (StdCall, LP_To_DP, "LPtoDP");
function Set_Window_Org_Ex (The_Hdc: in Hdc;
X: in Int;
Y: in Int;
Point: access Claw.Point_Type) return Bool;
pragma Import (StdCall, Set_Window_Org_Ex, "SetWindowOrgEx");
function Get_Window_Org_Ex (The_Hdc: in Hdc;
Point: access Claw.Point_Type) return Bool;
pragma Import (StdCall, Get_Window_Org_Ex, "GetWindowOrgEx");
function Set_Viewport_Org_Ex (The_Hdc: in Hdc;
X: in Int;
Y: in Int;
Point: access Claw.Point_Type) return Bool;
pragma Import (StdCall, Set_Viewport_Org_Ex, "SetViewportOrgEx");
function Get_Viewport_Org_Ex (The_Hdc: in Hdc;
Point: access Claw.Point_Type) return Bool;
pragma Import (StdCall, Get_Viewport_Org_Ex, "GetViewportOrgEx");
function Offset_Window_Org_Ex (The_Hdc: in Hdc;
X_Offset: in Int;
Y_Offset: in Int;
Point: access Claw.Point_Type) return Bool;
pragma Import (StdCall, Offset_Window_Org_Ex, "OffsetWindowOrgEx");
function Offset_Viewport_Org_Ex (The_Hdc: in Hdc;
X_Offset: in Int;
Y_Offset: in Int;
Point: access Claw.Point_Type) return Bool;
pragma Import (StdCall, Offset_Viewport_Org_Ex, "OffsetViewportOrgEx");
function Pt_Visible (The_Hdc: in Hdc;
X: in Int;
Y: in Int) return Bool;
pragma Import (StdCall, Pt_Visible, "PtVisible");
function Set_Graphics_Mode (The_Hdc: in Hdc;
Mode: in Int) return Int;
pragma Import (StdCall, Set_Graphics_Mode, "SetGraphicsMode");
function Get_Graphics_Mode (The_Hdc: in Hdc) return Int;
pragma Import (StdCall, Get_Graphics_Mode, "GetGraphicsMode");
function Set_World_Transform (The_Hdc: in Hdc;
XForm: access Claw.Win32.X_Form_Type) return Bool;
pragma Import (StdCall, Set_World_Transform, "SetWorldTransform");
function Get_World_Transform (The_Hdc: in Hdc;
XForm: access Claw.Win32.X_Form_Type) return Bool;
pragma Import (StdCall, Get_World_Transform, "GetWorldTransform");
function Modify_World_Transform (The_Hdc: in Hdc;
XForm: access Claw.Win32.X_Form_Type;
Mode: in DWord) return Bool;
pragma Import (StdCall, Modify_World_Transform, "ModifyWorldTransform");
function Combine_Transform (Result: access Claw.Win32.X_Form_Type;
XForm1: access Claw.Win32.X_Form_Type;
XForm2: access Claw.Win32.X_Form_Type) return Bool;
pragma Import (StdCall, Combine_Transform, "CombineTransform");
-- Path-related routines:
function Abort_Path (The_Hdc: in Hdc) return Bool;
pragma Import (StdCall, Abort_Path, "AbortPath");
function Begin_Path (The_Hdc: in Hdc) return Bool;
pragma Import (StdCall, Begin_Path, "BeginPath");
function Close_Figure (The_Hdc: in Hdc) return Bool;
pragma Import (StdCall, Close_Figure, "CloseFigure");
function End_Path (The_Hdc: in Hdc) return Bool;
pragma Import (StdCall, End_Path, "EndPath");
function Stroke_Path (The_Hdc: in Hdc) return Bool;
pragma Import (StdCall, Stroke_Path, "StrokePath");
function Flatten_Path (The_Hdc: in Hdc) return Bool;
pragma Import (StdCall, Flatten_Path, "FlattenPath");
function Fill_Path (The_Hdc: in Hdc) return Bool;
pragma Import (StdCall, Fill_Path, "FillPath");
type Byte_List_Type is array (Integer range <>) of aliased Byte;
function Get_Path (The_Hdc: in Hdc;
Points: access Point_Type; -- Really a point list.
Types: access Byte; -- Really a byte list.
Size: in Int) return Int;
pragma Import (StdCall, Get_Path, "GetPath");
function Get_Path_Size (The_Hdc: in Hdc;
Points: in Int := 0;
Types: in Int := 0;
Size: in Int := 0) return Int;
pragma Import (StdCall, Get_Path_Size, "GetPath");
-- Get Path Size returns the size of a Path; only the first parameter
-- is used.
function Path_To_Region (The_Hdc: in Hdc) return HRegion;
pragma Import (StdCall, Path_To_Region, "PathToRegion");
function Get_Miter_Limit (The_Hdc: in Hdc;
Limit: access Float) return Bool;
pragma Import (StdCall, Get_Miter_Limit, "GetMiterLimit");
function Set_Miter_Limit (The_Hdc: in Hdc;
New_Limit: in Float;
Old_Limit: access Float) return Bool;
pragma Import (StdCall, Set_Miter_Limit, "SetMiterLimit");
function Stroke_And_Fill_Path (The_Hdc: in Hdc) return Bool;
pragma Import (StdCall, Stroke_And_Fill_Path, "StrokeAndFillPath");
function Select_Clip_Path (The_Hdc: in Hdc;
Mode: in Int) return Bool;
pragma Import (StdCall, Select_Clip_Path, "SelectClipPath");
function Widen_Path (The_Hdc: in Hdc) return Bool;
pragma Import (StdCall, Widen_Path, "WidenPath");
-- Bitmap-related routines:
function Create_Bitmap (Width : Int; -- note width comes first
Height : Int;
Planes : UInt;
Pixel_Width : Uint;
Data_Ptr : Pixel_Byte_Ptr_Type) return HBitmap;
pragma Import (StdCall, Create_Bitmap, "CreateBitmap");
function Create_DIB_Pattern_Brush_Pt (
DIB_Packed: in DIB_Info_Header_Ptr_Type;
--Points to header, color table and bits
Usage: in UInt) return HBrush;
pragma Import (StdCall, Create_DIB_Pattern_Brush_Pt, "CreateDIBPatternBrushPt");
function Stretch_DIBits (The_Hdc: in Hdc;
X_Dest: in Int;
Y_Dest: in Int;
Dest_Width: in Int;
Dest_Height: in Int;
X_Src: in Int;
Y_Src: in Int;
Src_Width: in Int;
Src_Height: in Int;
Bits: in Pixel_Byte_Ptr_Type;
Bits_Info: in DIB_Info_Header_Ptr_Type;
--/\ really points to header AND color table
Usage: UInt;
Rop: DWord) return Int;
pragma Import (StdCall, Stretch_DIBits, "StretchDIBits");
function Create_DIBitmap (The_Hdc: in Hdc;
BMIH: in DIB_Info_Header_Ptr_Type;
WInit: in DWord;
Bit_Init: in Pixel_Byte_Ptr_Type;
BMI: in DIB_Info_Header_Ptr_Type;
--/\ really points to header AND color table
Usage: in UInt) return HBitmap;
pragma Import (StdCall, Create_DIBitmap, "CreateDIBitmap");
function Set_DIBits (The_Hdc: in Hdc;
Bitmap: in HBitmap;
Start_Scan: in UInt;
Scan_Lines: in UInt;
Bits: in Pixel_Byte_Ptr_Type;
BMI: in DIB_Info_Header_Ptr_Type;
--/\ really points to header AND color table
Color_Use: in UInt) return Int;
pragma Import (StdCall, Set_DIBits, "SetDIBits");
function Get_DIBits (The_Hdc: in Hdc;
Bitmap: in HBitmap;
Start_Scan: in UInt;
Scan_Lines: in UInt;
Bits: in Pixel_Byte_Ptr_Type;
BPI: in DIB_Info_Header_Ptr_Type;
--/\ really points to header AND color table
Usage: in UInt) return Int;
pragma Import (StdCall, Get_DIBits, "GetDIBits");
-- function Create_Bitmap_Indirect (Bitmap: access DDB_Info_Type)
-- return HBitmap;
-- pragma Import (StdCall, Create_Bitmap_Indirect, "CreateBitmapIndirect");
function Create_Compatible_Bitmap (The_Hdc: in Hdc;
Width: in Int;
Height: in Int) return HBitmap;
pragma Import (StdCall, Create_Compatible_Bitmap, "CreateCompatibleBitmap");
function Pat_Blt (The_Hdc: in Hdc;
X_Left: in Int;
Y_Left: in Int;
Width: in Int;
Height: in Int;
Rop: DWord) return Bool;
pragma Import (StdCall, Pat_Blt, "PatBlt");
function Bit_Blt (The_Hdc: in Hdc;
X_Dest: in Int;
Y_Dest: in Int;
Width: in Int;
Height: in Int;
Src_DC: in Hdc;
X_Src: in Int;
Y_Src: in Int;
Rop: in DWord) return Bool;
pragma Import (StdCall, Bit_Blt, "BitBlt");
function Stretch_Blt (Dest: in Hdc;
X_Origin_Dest: in Int;
Y_Origin_Dest: in Int;
Width_Dest: in Int;
Height_Dest: in Int;
Src: in Hdc;
X_Origin_Src: in Int;
Y_Origin_Src: in Int;
Width_Src: in Int;
Height_Src: in Int;
Rop: in DWord) return Bool;
pragma Import (StdCall, Stretch_Blt, "StretchBlt");
function Get_Stretch_Blt_Mode (The_Hdc: in Hdc) return Int;
pragma Import (StdCall, Get_Stretch_Blt_Mode, "GetStretchBltMode");
function Set_Stretch_Blt_Mode (The_Hdc: in Hdc;
Stretch_Mode: in Int) return Int;
pragma Import (StdCall, Set_Stretch_Blt_Mode, "SetStretchBltMode");
function Load_Bitmap (Instance: in HInstance;
Bitmap_Name: in Lpcstr) return HBitmap;
pragma Import (StdCall, Load_Bitmap, "LoadBitmapA");
function Create_DIB_Section (The_Hdc: in Hdc;
Bmi: in DIB_Info_Header_Ptr_Type;
Usage: in UInt;
Ptr_Bits: access Pixel_Byte_Ptr_Type;
Section: in UInt;
Offset: in DWord) return HBitmap;
pragma Import (StdCall, Create_DIB_Section, "CreateDIBSection");
function Get_Bitmap_Dimension_Ex (Bitmap: in HBitmap;
Dim: access Claw.Size_Type) return Bool;
pragma Import (StdCall, Get_Bitmap_Dimension_Ex, "GetBitmapDimensionEx");
function Get_DIB_Color_Table (The_Hdc: in Hdc;
Start_Index: in UInt;
Entries: in UInt;
Colors: access Claw.Colors.DIB_Color_Type) return UInt;
--/\ Points to 1st in list
pragma Import (StdCall, Get_DIB_Color_Table, "GetDIBColorTable");
function Get_Pixel (The_Hdc: in Hdc;
X_Pos: in Int;
Y_Pos: in Int) return Claw.Colors.Color_Type;
pragma Import (StdCall, Get_Pixel, "GetPixel");
function Mask_Blt (Dest: in Hdc;
X_Dest: in Int;
Y_Dest: in Int;
Width: in Int;
Height: in Int;
Src_Hdc: in Hdc;
X_Src: in Int;
Y_Src: in Int;
Mask: in HBitmap;
X_Mask: in Int;
Y_Mask: in Int;
Rop: in DWord) return Bool;
pragma Import (StdCall, Mask_Blt, "MaskBlt");
function Plg_Blt (Dest: in Hdc;
The_Points: in Constant_Access_Point_Type;
--/\ Points to array of 3 points
Src: in Hdc;
X_Src: in Int;
Y_Src: in Int;
Width: in Int;
Height: in Int;
Mask: in HBitmap;
X_Mask: in Int;
Y_Mask: in Int) return Bool;
pragma Import (StdCall, Plg_Blt, "PlgBlt");
function Set_Bitmap_Dimension_Ex (Bitmap: in HBitmap;
Width: in Int;
Height: in Int;
Size: access Claw.Size_Type) return Bool;
pragma Import (StdCall, Set_Bitmap_Dimension_Ex, "SetBitmapDimensionEx");
type Constant_Access_DIB_Color_Type is access constant Claw.Colors.DIB_Color_Type;
function Set_DIB_Color_Table (The_Hdc: in Hdc;
Start_Index: in UInt;
Entries: in UInt;
Colors: Constant_Access_DIB_Color_Type) return UInt;
--/\ Points to 1st in list
pragma Import (StdCall, Set_DIB_Color_Table, "SetDIBColorTable");
function Set_DIBits_To_Device (The_Hdc: in Hdc;
X_Dest: in Int;
Y_Dest: in Int;
Width: in DWord;
Height: in DWord;
X_Src: in Int;
Y_Src: in Int;
Start_Scan: in UInt;
Scan_Lines: in UInt;
Bits: in Pixel_Byte_Ptr_Type;
BMI: in DIB_Info_Header_Ptr_Type;
--/\ really points to header AND color table
Color_Use: in UInt) return Int;
pragma Import (StdCall, Set_DIBits_To_Device, "SetDIBitsToDevice");
function Set_Pixel (The_Hdc: in Hdc;
X: in Int;
Y: in Int;
Color: in Claw.Colors.Color_Type) return Claw.Colors.Color_Type;
pragma Import (StdCall, Set_Pixel, "SetPixel");
function Set_Pixel_V (The_Hdc: in Hdc;
X: in Int;
Y: in Int;
Color: in Claw.Colors.Color_Type) return Bool;
pragma Import (StdCall, Set_Pixel_V, "SetPixelV");
function Ext_Flood_Fill (The_Hdc: in Hdc;
X_Start: in Int;
Y_Start: in Int;
Color: in Claw.Colors.Color_Type;
Fill_Type: in UInt) return Bool;
pragma Import (StdCall, Ext_Flood_Fill, "ExtFloodFill");
-- Icon operations:
function Copy_Icon (Icon: in HIcon) return HIcon;
pragma Import (StdCall, Copy_Icon, "CopyIcon");
function Destroy_Icon (Icon: in HIcon) return Bool;
pragma Import (StdCall, Destroy_Icon, "DestroyIcon");
function Draw_Icon (Dc: in HDc;
X: in Int;
Y: in Int;
Icon: in HIcon) return Bool;
pragma Import (StdCall, Draw_Icon, "DrawIcon");
DI_MASK : constant Uint := 1;
DI_IMAGE : constant Uint := 2;
DI_NORMAL: constant Uint := 3;
DI_COMPAT: constant Uint := 4;
DI_DEFAULTSIZE: constant Uint := 8;
function Draw_Icon_Ex (Dc: in HDc;
X: in Int;
Y: in Int;
Icon: in HIcon;
Width: in Int;
Height: in Int;
Step: in UInt;
Background: in HBrush;
Flags: in UInt -- DI_xxxx
) return Bool;
pragma Import (StdCall, Draw_Icon_Ex, "DrawIconEx");
-- Windows 4.x and later only.
function Load_Icon1 (Instance: in HInstance;
Name: in LpCStr) return HIcon;
pragma Import (StdCall, Load_Icon1, "LoadIconA");
function Load_Icon2 (Instance: in HInstance;
Code: in UInt) return HIcon;
pragma Import (StdCall, Load_Icon2, "LoadIconA");
function Load_Icon (Instance: in HInstance;
Name: in LpCStr) return HIcon renames Load_Icon1;
function Load_Icon (Instance: in HInstance;
Code: in UInt) return HIcon renames Load_Icon2;
function Load_Icon_Image1 (Instance: in HInstance;
Name: in LpCStr;
UType: in UInt := 1; -- Icon.
Width: in Int;
Height: in Int;
Flags: in UInt) return HIcon;
pragma Import (StdCall, Load_Icon_Image1, "LoadImageA");
-- Many functions are available only on Windows 4.x and later.
function Load_Icon_Image2 (Instance: in HInstance;
Code: in UInt; -- OIC_xxx value.
UType: in UInt := 1; -- Icon.
Height: in Int;
Width: in Int;
Flags: in UInt) return HIcon;
pragma Import (StdCall, Load_Icon_Image2, "LoadImageA");
-- Many functions are available only on Windows 4.x and later.
function Load_Icon_Image (Instance: in HInstance;
Name: in LpCStr;
UType: in UInt := 1; -- Icon.
Width: in Int;
Height: in Int;
Flags: in UInt) return HIcon renames Load_Icon_Image1;
function Load_Icon_Image (Instance: in HInstance;
Code: in UInt;
UType: in UInt := 1; -- Icon.
Width: in Int;
Height: in Int;
Flags: in UInt) return HIcon renames Load_Icon_Image2;
end Claw.Low_Level.GDI;