Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-cw
Commits
97ebf8f5
Commit
97ebf8f5
authored
Aug 25, 2004
by
Huw Davies
Committed by
Alexandre Julliard
Aug 25, 2004
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Make the DEFAULT_GUI_FONT scalable with screen resolution and let it
be 8pt MS Shell Dlg for simple scripts.
parent
03490879
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
59 additions
and
26 deletions
+59
-26
gdiobj.c
dlls/gdi/gdiobj.c
+59
-26
No files found.
dlls/gdi/gdiobj.c
View file @
97ebf8f5
...
@@ -133,7 +133,7 @@ struct DefaultFontInfo
...
@@ -133,7 +133,7 @@ struct DefaultFontInfo
LOGFONTW
SystemFont
;
LOGFONTW
SystemFont
;
LOGFONTW
DeviceDefaultFont
;
LOGFONTW
DeviceDefaultFont
;
LOGFONTW
SystemFixedFont
;
LOGFONTW
SystemFixedFont
;
LOGFONTW
DefaultGuiFont
;
LOGFONTW
DefaultGuiFont
;
/* Note for this font the lfHeight member should be the point size */
};
};
static
const
struct
DefaultFontInfo
default_fonts
[]
=
static
const
struct
DefaultFontInfo
default_fonts
[]
=
...
@@ -155,9 +155,9 @@ static const struct DefaultFontInfo default_fonts[] =
...
@@ -155,9 +155,9 @@ static const struct DefaultFontInfo default_fonts[] =
{
'\0'
}
{
'\0'
}
},
},
{
/* DefaultGuiFont */
{
/* DefaultGuiFont */
-
11
,
0
,
0
,
0
,
FW_NORMAL
,
FALSE
,
FALSE
,
FALSE
,
ANSI_CHARSET
,
8
,
0
,
0
,
0
,
FW_NORMAL
,
FALSE
,
FALSE
,
FALSE
,
ANSI_CHARSET
,
0
,
0
,
DEFAULT_QUALITY
,
VARIABLE_PITCH
|
FF_SWISS
,
0
,
0
,
DEFAULT_QUALITY
,
VARIABLE_PITCH
|
FF_SWISS
,
{
'M'
,
'S'
,
' '
,
'S'
,
'
a'
,
'n'
,
's'
,
' '
,
'S'
,
'e'
,
'r'
,
'i'
,
'f
'
,
'\0'
}
{
'M'
,
'S'
,
' '
,
'S'
,
'
h'
,
'e'
,
'l'
,
'l'
,
' '
,
'D'
,
'l'
,
'g
'
,
'\0'
}
},
},
},
},
{
EASTEUROPE_CHARSET
,
{
EASTEUROPE_CHARSET
,
...
@@ -177,9 +177,9 @@ static const struct DefaultFontInfo default_fonts[] =
...
@@ -177,9 +177,9 @@ static const struct DefaultFontInfo default_fonts[] =
{
'\0'
}
{
'\0'
}
},
},
{
/* DefaultGuiFont */
{
/* DefaultGuiFont */
-
11
,
0
,
0
,
0
,
FW_NORMAL
,
FALSE
,
FALSE
,
FALSE
,
EASTEUROPE_CHARSET
,
8
,
0
,
0
,
0
,
FW_NORMAL
,
FALSE
,
FALSE
,
FALSE
,
EASTEUROPE_CHARSET
,
0
,
0
,
DEFAULT_QUALITY
,
VARIABLE_PITCH
|
FF_SWISS
,
0
,
0
,
DEFAULT_QUALITY
,
VARIABLE_PITCH
|
FF_SWISS
,
{
'M'
,
'S'
,
' '
,
'S'
,
'
a'
,
'n'
,
's'
,
' '
,
'S'
,
'e'
,
'r'
,
'i'
,
'f
'
,
'\0'
}
{
'M'
,
'S'
,
' '
,
'S'
,
'
h'
,
'e'
,
'l'
,
'l'
,
' '
,
'D'
,
'l'
,
'g
'
,
'\0'
}
},
},
},
},
{
RUSSIAN_CHARSET
,
{
RUSSIAN_CHARSET
,
...
@@ -199,9 +199,9 @@ static const struct DefaultFontInfo default_fonts[] =
...
@@ -199,9 +199,9 @@ static const struct DefaultFontInfo default_fonts[] =
{
'\0'
}
{
'\0'
}
},
},
{
/* DefaultGuiFont */
{
/* DefaultGuiFont */
-
11
,
0
,
0
,
0
,
FW_NORMAL
,
FALSE
,
FALSE
,
FALSE
,
RUSSIAN_CHARSET
,
8
,
0
,
0
,
0
,
FW_NORMAL
,
FALSE
,
FALSE
,
FALSE
,
RUSSIAN_CHARSET
,
0
,
0
,
DEFAULT_QUALITY
,
VARIABLE_PITCH
|
FF_SWISS
,
0
,
0
,
DEFAULT_QUALITY
,
VARIABLE_PITCH
|
FF_SWISS
,
{
'M'
,
'S'
,
' '
,
'S'
,
'
a'
,
'n'
,
's'
,
' '
,
'S'
,
'e'
,
'r'
,
'i'
,
'f
'
,
'\0'
}
{
'M'
,
'S'
,
' '
,
'S'
,
'
h'
,
'e'
,
'l'
,
'l'
,
' '
,
'D'
,
'l'
,
'g
'
,
'\0'
}
},
},
},
},
{
GREEK_CHARSET
,
{
GREEK_CHARSET
,
...
@@ -221,9 +221,9 @@ static const struct DefaultFontInfo default_fonts[] =
...
@@ -221,9 +221,9 @@ static const struct DefaultFontInfo default_fonts[] =
{
'\0'
}
{
'\0'
}
},
},
{
/* DefaultGuiFont */
{
/* DefaultGuiFont */
-
11
,
0
,
0
,
0
,
FW_NORMAL
,
FALSE
,
FALSE
,
FALSE
,
GREEK_CHARSET
,
8
,
0
,
0
,
0
,
FW_NORMAL
,
FALSE
,
FALSE
,
FALSE
,
GREEK_CHARSET
,
0
,
0
,
DEFAULT_QUALITY
,
VARIABLE_PITCH
|
FF_SWISS
,
0
,
0
,
DEFAULT_QUALITY
,
VARIABLE_PITCH
|
FF_SWISS
,
{
'M'
,
'S'
,
' '
,
'S'
,
'
a'
,
'n'
,
's'
,
' '
,
'S'
,
'e'
,
'r'
,
'i'
,
'f
'
,
'\0'
}
{
'M'
,
'S'
,
' '
,
'S'
,
'
h'
,
'e'
,
'l'
,
'l'
,
' '
,
'D'
,
'l'
,
'g
'
,
'\0'
}
},
},
},
},
{
TURKISH_CHARSET
,
{
TURKISH_CHARSET
,
...
@@ -243,9 +243,9 @@ static const struct DefaultFontInfo default_fonts[] =
...
@@ -243,9 +243,9 @@ static const struct DefaultFontInfo default_fonts[] =
{
'\0'
}
{
'\0'
}
},
},
{
/* DefaultGuiFont */
{
/* DefaultGuiFont */
-
11
,
0
,
0
,
0
,
FW_NORMAL
,
FALSE
,
FALSE
,
FALSE
,
TURKISH_CHARSET
,
8
,
0
,
0
,
0
,
FW_NORMAL
,
FALSE
,
FALSE
,
FALSE
,
TURKISH_CHARSET
,
0
,
0
,
DEFAULT_QUALITY
,
VARIABLE_PITCH
|
FF_SWISS
,
0
,
0
,
DEFAULT_QUALITY
,
VARIABLE_PITCH
|
FF_SWISS
,
{
'M'
,
'S'
,
' '
,
'S'
,
'
a'
,
'n'
,
's'
,
' '
,
'S'
,
'e'
,
'r'
,
'i'
,
'f
'
,
'\0'
}
{
'M'
,
'S'
,
' '
,
'S'
,
'
h'
,
'e'
,
'l'
,
'l'
,
' '
,
'D'
,
'l'
,
'g
'
,
'\0'
}
},
},
},
},
{
HEBREW_CHARSET
,
{
HEBREW_CHARSET
,
...
@@ -265,9 +265,9 @@ static const struct DefaultFontInfo default_fonts[] =
...
@@ -265,9 +265,9 @@ static const struct DefaultFontInfo default_fonts[] =
{
'\0'
}
{
'\0'
}
},
},
{
/* DefaultGuiFont */
{
/* DefaultGuiFont */
-
11
,
0
,
0
,
0
,
FW_NORMAL
,
FALSE
,
FALSE
,
FALSE
,
HEBREW_CHARSET
,
8
,
0
,
0
,
0
,
FW_NORMAL
,
FALSE
,
FALSE
,
FALSE
,
HEBREW_CHARSET
,
0
,
0
,
DEFAULT_QUALITY
,
VARIABLE_PITCH
|
FF_SWISS
,
0
,
0
,
DEFAULT_QUALITY
,
VARIABLE_PITCH
|
FF_SWISS
,
{
'M'
,
'S'
,
' '
,
'S'
,
'
a'
,
'n'
,
's'
,
' '
,
'S'
,
'e'
,
'r'
,
'i'
,
'f
'
,
'\0'
}
{
'M'
,
'S'
,
' '
,
'S'
,
'
h'
,
'e'
,
'l'
,
'l'
,
' '
,
'D'
,
'l'
,
'g
'
,
'\0'
}
},
},
},
},
{
ARABIC_CHARSET
,
{
ARABIC_CHARSET
,
...
@@ -287,9 +287,9 @@ static const struct DefaultFontInfo default_fonts[] =
...
@@ -287,9 +287,9 @@ static const struct DefaultFontInfo default_fonts[] =
{
'\0'
}
{
'\0'
}
},
},
{
/* DefaultGuiFont */
{
/* DefaultGuiFont */
-
11
,
0
,
0
,
0
,
FW_NORMAL
,
FALSE
,
FALSE
,
FALSE
,
ARABIC_CHARSET
,
8
,
0
,
0
,
0
,
FW_NORMAL
,
FALSE
,
FALSE
,
FALSE
,
ARABIC_CHARSET
,
0
,
0
,
DEFAULT_QUALITY
,
VARIABLE_PITCH
|
FF_SWISS
,
0
,
0
,
DEFAULT_QUALITY
,
VARIABLE_PITCH
|
FF_SWISS
,
{
'M'
,
'S'
,
' '
,
'S'
,
'
a'
,
'n'
,
's'
,
' '
,
'S'
,
'e'
,
'r'
,
'i'
,
'f
'
,
'\0'
}
{
'M'
,
'S'
,
' '
,
'S'
,
'
h'
,
'e'
,
'l'
,
'l'
,
' '
,
'D'
,
'l'
,
'g
'
,
'\0'
}
},
},
},
},
{
BALTIC_CHARSET
,
{
BALTIC_CHARSET
,
...
@@ -309,9 +309,9 @@ static const struct DefaultFontInfo default_fonts[] =
...
@@ -309,9 +309,9 @@ static const struct DefaultFontInfo default_fonts[] =
{
'\0'
}
{
'\0'
}
},
},
{
/* DefaultGuiFont */
{
/* DefaultGuiFont */
-
11
,
0
,
0
,
0
,
FW_NORMAL
,
FALSE
,
FALSE
,
FALSE
,
BALTIC_CHARSET
,
8
,
0
,
0
,
0
,
FW_NORMAL
,
FALSE
,
FALSE
,
FALSE
,
BALTIC_CHARSET
,
0
,
0
,
DEFAULT_QUALITY
,
VARIABLE_PITCH
|
FF_SWISS
,
0
,
0
,
DEFAULT_QUALITY
,
VARIABLE_PITCH
|
FF_SWISS
,
{
'M'
,
'S'
,
' '
,
'S'
,
'
a'
,
'n'
,
's'
,
' '
,
'S'
,
'e'
,
'r'
,
'i'
,
'f
'
,
'\0'
}
{
'M'
,
'S'
,
' '
,
'S'
,
'
h'
,
'e'
,
'l'
,
'l'
,
' '
,
'D'
,
'l'
,
'g
'
,
'\0'
}
},
},
},
},
{
THAI_CHARSET
,
{
THAI_CHARSET
,
...
@@ -331,9 +331,9 @@ static const struct DefaultFontInfo default_fonts[] =
...
@@ -331,9 +331,9 @@ static const struct DefaultFontInfo default_fonts[] =
{
'\0'
}
{
'\0'
}
},
},
{
/* DefaultGuiFont */
{
/* DefaultGuiFont */
-
11
,
0
,
0
,
0
,
FW_NORMAL
,
FALSE
,
FALSE
,
FALSE
,
THAI_CHARSET
,
8
,
0
,
0
,
0
,
FW_NORMAL
,
FALSE
,
FALSE
,
FALSE
,
THAI_CHARSET
,
0
,
0
,
DEFAULT_QUALITY
,
VARIABLE_PITCH
|
FF_SWISS
,
0
,
0
,
DEFAULT_QUALITY
,
VARIABLE_PITCH
|
FF_SWISS
,
{
'M'
,
'S'
,
' '
,
'S'
,
'
a'
,
'n'
,
's'
,
' '
,
'S'
,
'e'
,
'r'
,
'i'
,
'f
'
,
'\0'
}
{
'M'
,
'S'
,
' '
,
'S'
,
'
h'
,
'e'
,
'l'
,
'l'
,
' '
,
'D'
,
'l'
,
'g
'
,
'\0'
}
},
},
},
},
{
SHIFTJIS_CHARSET
,
{
SHIFTJIS_CHARSET
,
...
@@ -353,7 +353,7 @@ static const struct DefaultFontInfo default_fonts[] =
...
@@ -353,7 +353,7 @@ static const struct DefaultFontInfo default_fonts[] =
{
'\0'
}
{
'\0'
}
},
},
{
/* DefaultGuiFont */
{
/* DefaultGuiFont */
-
11
,
0
,
0
,
0
,
FW_NORMAL
,
FALSE
,
FALSE
,
FALSE
,
SHIFTJIS_CHARSET
,
9
,
0
,
0
,
0
,
FW_NORMAL
,
FALSE
,
FALSE
,
FALSE
,
SHIFTJIS_CHARSET
,
0
,
0
,
DEFAULT_QUALITY
,
VARIABLE_PITCH
|
FF_SWISS
,
0
,
0
,
DEFAULT_QUALITY
,
VARIABLE_PITCH
|
FF_SWISS
,
{
'M'
,
'S'
,
' '
,
'U'
,
'I'
,
' '
,
'G'
,
'o'
,
't'
,
'h'
,
'i'
,
'c'
,
'\0'
}
{
'M'
,
'S'
,
' '
,
'U'
,
'I'
,
' '
,
'G'
,
'o'
,
't'
,
'h'
,
'i'
,
'c'
,
'\0'
}
},
},
...
@@ -375,7 +375,7 @@ static const struct DefaultFontInfo default_fonts[] =
...
@@ -375,7 +375,7 @@ static const struct DefaultFontInfo default_fonts[] =
{
'\0'
}
{
'\0'
}
},
},
{
/* DefaultGuiFont */
{
/* DefaultGuiFont */
-
11
,
0
,
0
,
0
,
FW_NORMAL
,
FALSE
,
FALSE
,
FALSE
,
GB2312_CHARSET
,
9
,
0
,
0
,
0
,
FW_NORMAL
,
FALSE
,
FALSE
,
FALSE
,
GB2312_CHARSET
,
0
,
0
,
DEFAULT_QUALITY
,
VARIABLE_PITCH
|
FF_SWISS
,
0
,
0
,
DEFAULT_QUALITY
,
VARIABLE_PITCH
|
FF_SWISS
,
{
'M'
,
'S'
,
' '
,
'S'
,
'o'
,
'n'
,
'g'
,
'\0'
}
/* FIXME: Is this correct? */
{
'M'
,
'S'
,
' '
,
'S'
,
'o'
,
'n'
,
'g'
,
'\0'
}
/* FIXME: Is this correct? */
},
},
...
@@ -397,9 +397,9 @@ static const struct DefaultFontInfo default_fonts[] =
...
@@ -397,9 +397,9 @@ static const struct DefaultFontInfo default_fonts[] =
{
'\0'
}
{
'\0'
}
},
},
{
/* DefaultGuiFont */
{
/* DefaultGuiFont */
-
11
,
0
,
0
,
0
,
FW_NORMAL
,
FALSE
,
FALSE
,
FALSE
,
HANGEUL_CHARSET
,
9
,
0
,
0
,
0
,
FW_NORMAL
,
FALSE
,
FALSE
,
FALSE
,
HANGEUL_CHARSET
,
0
,
0
,
DEFAULT_QUALITY
,
VARIABLE_PITCH
|
FF_SWISS
,
0
,
0
,
DEFAULT_QUALITY
,
VARIABLE_PITCH
|
FF_SWISS
,
{
'G'
,
'u'
,
'l'
,
'i'
,
'm'
},
{
'G'
,
'u'
,
'l'
,
'i'
,
'm'
,
'\0'
},
},
},
},
},
{
CHINESEBIG5_CHARSET
,
{
CHINESEBIG5_CHARSET
,
...
@@ -419,7 +419,7 @@ static const struct DefaultFontInfo default_fonts[] =
...
@@ -419,7 +419,7 @@ static const struct DefaultFontInfo default_fonts[] =
{
'\0'
}
{
'\0'
}
},
},
{
/* DefaultGuiFont */
{
/* DefaultGuiFont */
-
11
,
0
,
0
,
0
,
FW_NORMAL
,
FALSE
,
FALSE
,
FALSE
,
CHINESEBIG5_CHARSET
,
8
,
0
,
0
,
0
,
FW_NORMAL
,
FALSE
,
FALSE
,
FALSE
,
CHINESEBIG5_CHARSET
,
0
,
0
,
DEFAULT_QUALITY
,
VARIABLE_PITCH
|
FF_SWISS
,
0
,
0
,
DEFAULT_QUALITY
,
VARIABLE_PITCH
|
FF_SWISS
,
{
'\0'
}
/* FIXME - what is the native font??? */
{
'\0'
}
/* FIXME - what is the native font??? */
},
},
...
@@ -441,7 +441,7 @@ static const struct DefaultFontInfo default_fonts[] =
...
@@ -441,7 +441,7 @@ static const struct DefaultFontInfo default_fonts[] =
{
'\0'
}
{
'\0'
}
},
},
{
/* DefaultGuiFont */
{
/* DefaultGuiFont */
-
11
,
0
,
0
,
0
,
FW_NORMAL
,
FALSE
,
FALSE
,
FALSE
,
JOHAB_CHARSET
,
8
,
0
,
0
,
0
,
FW_NORMAL
,
FALSE
,
FALSE
,
FALSE
,
JOHAB_CHARSET
,
0
,
0
,
DEFAULT_QUALITY
,
VARIABLE_PITCH
|
FF_SWISS
,
0
,
0
,
DEFAULT_QUALITY
,
VARIABLE_PITCH
|
FF_SWISS
,
{
'M'
,
'S'
,
' '
,
'M'
,
'i'
,
'n'
,
'g'
,
'l'
,
'i'
,
'u'
,
'\0'
}
/* FIXME: Is this correct? */
{
'M'
,
'S'
,
' '
,
'M'
,
'i'
,
'n'
,
'g'
,
'l'
,
'i'
,
'u'
,
'\0'
}
/* FIXME: Is this correct? */
},
},
...
@@ -488,6 +488,33 @@ static UINT get_default_charset( void )
...
@@ -488,6 +488,33 @@ static UINT get_default_charset( void )
return
csi
.
ciCharset
;
return
csi
.
ciCharset
;
}
}
static
const
WCHAR
dpi_key_name
[]
=
{
'S'
,
'o'
,
'f'
,
't'
,
'w'
,
'a'
,
'r'
,
'e'
,
'\\'
,
'F'
,
'o'
,
'n'
,
't'
,
's'
,
'\0'
};
static
const
WCHAR
dpi_value_name
[]
=
{
'L'
,
'o'
,
'g'
,
'P'
,
'i'
,
'x'
,
'e'
,
'l'
,
's'
,
'\0'
};
/******************************************************************************
* get_dpi (internal)
*
* get the dpi from the registry
*/
static
DWORD
get_dpi
(
void
)
{
DWORD
dpi
=
96
;
HKEY
hkey
;
if
(
RegOpenKeyW
(
HKEY_CURRENT_CONFIG
,
dpi_key_name
,
&
hkey
)
==
ERROR_SUCCESS
)
{
DWORD
type
,
size
,
new_dpi
;
size
=
sizeof
(
new_dpi
);
if
(
RegQueryValueExW
(
hkey
,
dpi_value_name
,
NULL
,
&
type
,
(
void
*
)
&
new_dpi
,
&
size
)
==
ERROR_SUCCESS
)
{
if
(
type
==
REG_DWORD
&&
new_dpi
!=
0
)
dpi
=
new_dpi
;
}
RegCloseKey
(
hkey
);
}
return
dpi
;
}
/******************************************************************************
/******************************************************************************
* create_stock_font
* create_stock_font
...
@@ -586,6 +613,7 @@ BOOL GDI_Init(void)
...
@@ -586,6 +613,7 @@ BOOL GDI_Init(void)
HINSTANCE16
instance
;
HINSTANCE16
instance
;
HKEY
hkey
;
HKEY
hkey
;
GDIOBJHDR
*
ptr
;
GDIOBJHDR
*
ptr
;
LOGFONTW
default_gui_font
;
const
struct
DefaultFontInfo
*
deffonts
;
const
struct
DefaultFontInfo
*
deffonts
;
int
i
;
int
i
;
...
@@ -620,7 +648,12 @@ BOOL GDI_Init(void)
...
@@ -620,7 +648,12 @@ BOOL GDI_Init(void)
stock_objects
[
SYSTEM_FONT
]
=
create_stock_font
(
"System"
,
&
deffonts
->
SystemFont
,
hkey
);
stock_objects
[
SYSTEM_FONT
]
=
create_stock_font
(
"System"
,
&
deffonts
->
SystemFont
,
hkey
);
stock_objects
[
DEVICE_DEFAULT_FONT
]
=
create_stock_font
(
"DeviceDefault"
,
&
deffonts
->
DeviceDefaultFont
,
hkey
);
stock_objects
[
DEVICE_DEFAULT_FONT
]
=
create_stock_font
(
"DeviceDefault"
,
&
deffonts
->
DeviceDefaultFont
,
hkey
);
stock_objects
[
SYSTEM_FIXED_FONT
]
=
create_stock_font
(
"SystemFixed"
,
&
deffonts
->
SystemFixedFont
,
hkey
);
stock_objects
[
SYSTEM_FIXED_FONT
]
=
create_stock_font
(
"SystemFixed"
,
&
deffonts
->
SystemFixedFont
,
hkey
);
stock_objects
[
DEFAULT_GUI_FONT
]
=
create_stock_font
(
"DefaultGui"
,
&
deffonts
->
DefaultGuiFont
,
hkey
);
/* For the default gui font, we use the lfHeight member in deffonts as a place-holder
for the point size so we must convert this into a true height */
memcpy
(
&
default_gui_font
,
&
deffonts
->
DefaultGuiFont
,
sizeof
(
default_gui_font
));
default_gui_font
.
lfHeight
=
-
MulDiv
(
default_gui_font
.
lfHeight
,
get_dpi
(),
72
);
stock_objects
[
DEFAULT_GUI_FONT
]
=
create_stock_font
(
"DefaultGui"
,
&
default_gui_font
,
hkey
);
stock_objects
[
DC_BRUSH
]
=
CreateBrushIndirect
(
&
DCBrush
);
stock_objects
[
DC_BRUSH
]
=
CreateBrushIndirect
(
&
DCBrush
);
stock_objects
[
DC_PEN
]
=
CreatePenIndirect
(
&
DCPen
);
stock_objects
[
DC_PEN
]
=
CreatePenIndirect
(
&
DCPen
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment