mirror of
https://github.com/VincentWei/MiniGUI.git
synced 2026-09-25 11:07:54 +08:00
debug for MIXED orientation
This commit is contained in:
+8
-2
@@ -9091,6 +9091,7 @@ typedef enum {
|
||||
GLYPH_GRAVITY_POLICY_NATURAL,
|
||||
GLYPH_GRAVITY_POLICY_STRONG,
|
||||
GLYPH_GRAVITY_POLICY_LINE,
|
||||
GLYPH_GRAVITY_POLICY_MIXED,
|
||||
} GlyphGravityPolicy;
|
||||
|
||||
/** Get the vertical orientation property of a Unicode character */
|
||||
@@ -9107,6 +9108,7 @@ MG_EXPORT UVerticalOrient GUIAPI UCharGetVerticalOrientation(Uchar32 uc);
|
||||
* pass %GLYPH_GRAVITY_AUTO and %GLYPH_GRAVITY_POLICY_STRONG in.
|
||||
*
|
||||
* \param script The script type to query
|
||||
* \param vertical TRUE for vertical layout
|
||||
* \param base_gravity The base gravity of the layout
|
||||
* \param policy The gravity policy
|
||||
*
|
||||
@@ -9116,7 +9118,7 @@ MG_EXPORT UVerticalOrient GUIAPI UCharGetVerticalOrientation(Uchar32 uc);
|
||||
* Since: 3.4.0
|
||||
*/
|
||||
MG_EXPORT GlyphGravity GUIAPI ScriptGetGlyphGravity(ScriptType script,
|
||||
GlyphGravity base_gravity, GlyphGravityPolicy policy);
|
||||
BOOL vertical, GlyphGravity base_gravity, GlyphGravityPolicy policy);
|
||||
|
||||
/**
|
||||
* \fn GlyphGravity GUIAPI ScriptGetGlyphGravityForWide (ScriptType script,
|
||||
@@ -9136,6 +9138,7 @@ MG_EXPORT GlyphGravity GUIAPI ScriptGetGlyphGravity(ScriptType script,
|
||||
* preferred gravity of @script.
|
||||
*
|
||||
* \param script The script type to query
|
||||
* \param vertical TRUE for vertical layout.
|
||||
* \param wide TRUE for wide characters as returned by IsUCharWide()
|
||||
* \param base_gravity The base gravity of the paragraph
|
||||
* \param policy The gravity policy
|
||||
@@ -9146,7 +9149,8 @@ MG_EXPORT GlyphGravity GUIAPI ScriptGetGlyphGravity(ScriptType script,
|
||||
* Since: 3.4.0
|
||||
*/
|
||||
GlyphGravity ScriptGetGlyphGravityForWide (ScriptType script,
|
||||
BOOL wide, GlyphGravity base_gravity, GlyphGravityPolicy policy);
|
||||
BOOL vertical, BOOL wide,
|
||||
GlyphGravity base_gravity, GlyphGravityPolicy policy);
|
||||
|
||||
/** @} end of unicode_ops */
|
||||
|
||||
@@ -12254,6 +12258,8 @@ MG_EXPORT int GUIAPI UChars2AChars(LOGFONT* logfont, const Uchar32* ucs,
|
||||
*/
|
||||
#define GRF_TEXT_ORIENTATION_MIXED 0x05000000
|
||||
|
||||
#define GRF_TEXT_ORIENTATION_LINE 0x06000000
|
||||
|
||||
#define GRF_LINE_EXTENT_MASK 0x00C00000
|
||||
/**
|
||||
* The maximal line extent is fixed.
|
||||
|
||||
+11
-11
@@ -633,7 +633,7 @@ static inline ScriptTypeProperties get_script_properties (ScriptType script)
|
||||
return script_properties[script];
|
||||
}
|
||||
|
||||
GlyphGravity ScriptGetGlyphGravity (ScriptType script,
|
||||
GlyphGravity ScriptGetGlyphGravity (ScriptType script, BOOL vertical,
|
||||
GlyphGravity base_gravity, GlyphGravityPolicy hint)
|
||||
{
|
||||
ScriptTypeProperties props = get_script_properties (script);
|
||||
@@ -641,25 +641,18 @@ GlyphGravity ScriptGetGlyphGravity (ScriptType script,
|
||||
if (base_gravity == GLYPH_GRAVITY_AUTO)
|
||||
base_gravity = props.preferred_gravity;
|
||||
|
||||
return ScriptGetGlyphGravityForWide (script, props.wide,
|
||||
return ScriptGetGlyphGravityForWide (script, vertical, props.wide,
|
||||
base_gravity, hint);
|
||||
}
|
||||
|
||||
|
||||
#define GLYPH_GRAVITY_IS_VERTICAL(gravity) \
|
||||
((gravity) == GLYPH_GRAVITY_EAST || (gravity) == GLYPH_GRAVITY_WEST)
|
||||
|
||||
GlyphGravity ScriptGetGlyphGravityForWide (ScriptType script,
|
||||
GlyphGravity ScriptGetGlyphGravityForWide (ScriptType script, BOOL vertical,
|
||||
BOOL wide, GlyphGravity base_gravity, GlyphGravityPolicy hint)
|
||||
{
|
||||
ScriptTypeProperties props = get_script_properties (script);
|
||||
BOOL vertical;
|
||||
|
||||
if (base_gravity == GLYPH_GRAVITY_AUTO)
|
||||
base_gravity = props.preferred_gravity;
|
||||
|
||||
vertical = GLYPH_GRAVITY_IS_VERTICAL(base_gravity);
|
||||
|
||||
/* Everything is designed such that a system with no vertical support
|
||||
* renders everything correctly horizontally. So, if not in a vertical
|
||||
* gravity, base and resolved gravities are always the same.
|
||||
@@ -688,10 +681,17 @@ GlyphGravity ScriptGetGlyphGravityForWide (ScriptType script,
|
||||
|
||||
case GLYPH_GRAVITY_POLICY_LINE:
|
||||
if ((base_gravity == GLYPH_GRAVITY_EAST) ^
|
||||
(props.horiz_dir == GLYPH_RUN_DIR_RTL))
|
||||
(props.horiz_dir == HORIZONTAL_DIRECTION_RTL))
|
||||
return GLYPH_GRAVITY_SOUTH;
|
||||
else
|
||||
return GLYPH_GRAVITY_NORTH;
|
||||
|
||||
case GLYPH_GRAVITY_POLICY_MIXED:
|
||||
// CSS3: horizontal-only scripts are typeset sideways
|
||||
if (props.vert_dir == VERTICAL_DIRECTION_NONE)
|
||||
return GLYPH_GRAVITY_EAST;
|
||||
else
|
||||
return props.preferred_gravity;
|
||||
}
|
||||
}
|
||||
#endif /* _MGCHARSET_UNICODE */
|
||||
|
||||
@@ -135,6 +135,7 @@ static GlyphOrient resolve_glyph_orient(const LAYOUTINFO* layout,
|
||||
}
|
||||
|
||||
gravity = ScriptGetGlyphGravityForWide(trun->st,
|
||||
layout->rf & GRF_WRITING_MODE_VERTICAL_FLAG,
|
||||
trun->flags & TEXTRUN_FLAG_UPRIGHT,
|
||||
layout->grv_base, layout->grv_plc);
|
||||
|
||||
|
||||
@@ -124,6 +124,10 @@ LAYOUTINFO* GUIAPI CreateLayoutInfo(
|
||||
break;
|
||||
case GRF_TEXT_ORIENTATION_MIXED:
|
||||
layout->grv_base = GLYPH_GRAVITY_SOUTH;
|
||||
layout->grv_plc = GLYPH_GRAVITY_POLICY_MIXED;
|
||||
break;
|
||||
case GRF_TEXT_ORIENTATION_LINE:
|
||||
layout->grv_base = GLYPH_GRAVITY_EAST;
|
||||
layout->grv_plc = GLYPH_GRAVITY_POLICY_LINE;
|
||||
break;
|
||||
case GRF_TEXT_ORIENTATION_UPRIGHT:
|
||||
|
||||
Reference in New Issue
Block a user