a11y 0.2.2

无障碍(ACCESSIBILITY,A11Y,辅助功能)
Documentation
/*
 * Copyright (c) 2024. The RigelA open source project team and
 * its contributors reserve all rights.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * http://www.apache.org/licenses/LICENSE-2.0
 * Unless required by applicable law or agreed to in writing, software distributed under the
 * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and limitations under the License.
 */

use scintilla_sys::{SC_PHASES_MULTIPLE, SC_PHASES_ONE, SC_PHASES_TWO};

/// 有几种顺序可以绘制文本区域,从而在速度和允许看到文本的所有像素(即使它们与其他元素重叠)之间进行权衡。
#[derive(Debug, PartialEq)]
pub enum Phases {
    /// 在单相绘图(SC_PHASES_ONE)中,以一种样式绘制的每个字符序列都与其背景一起绘制。如果一个字符悬在游程的末尾,例如在“V_”中,“V”的样式与“_”不同,则这可能导致“V”右侧被“_”的背景透支,从而将其截断。
    /// 单相绘图已弃用,应用程序不应使用它。
    One,
    /// 两相绘制(SC_PHASES_TWO)通过先绘制一条线的所有背景,然后在透明模式下绘制文本来解决这一问题。线条是单独绘制的,任何线条都不会与另一条线条重叠,因此任何重叠到另一条线上的像素(如字符上的极端上升和下降)都将被切断。除非缓冲绘制在平台上或平台自然缓冲,否则两相绘制可能会比单相闪烁更多。默认情况下,绘制为两个阶段。
    Two,
    /// 多阶段绘制(SC_PHASES_MULTIPLE)多次绘制整个区域,每个特征绘制一次,从而在图层或阶段中构建外观。所有线条的彩色背景都绘制在任何文本之前,然后以透明模式在组合背景上绘制所有文本,而不将文本剪裁到线条边界。这允许极端的上升和下降溢出到相邻的行中。此模式与缓冲绘图不兼容,如果打开缓冲绘图,它将充当SC_PHASES_TWO。多阶段绘图比两阶段绘图慢。使用SCI_SETLAYOUTCACHE(SC_cache_PAGE)或更高版本设置布局缓存可以确保多阶段绘制不会明显变慢。
    Multiple,
}

impl From<u32> for Phases {
    fn from(value: u32) -> Self {
        match value {
            SC_PHASES_ONE => Self::One,
            SC_PHASES_TWO => Self::Two,
            SC_PHASES_MULTIPLE => Self::Multiple,
            _ => Self::One,
        }
    }
}

impl Into<u32> for Phases {
    fn into(self) -> u32 {
        match self {
            Self::One => SC_PHASES_ONE,
            Self::Two => SC_PHASES_TWO,
            Self::Multiple => SC_PHASES_MULTIPLE,
        }
    }
}