2d_engine.c

来自「最新MTK手机软件源码」· C语言 代码 · 共 1,940 行 · 第 1/5 页

C
1,940
字号
			   	case G2D_OPERATION_ALPHA_BLENDING:
			   		g2d_alpha_bitblt(g2d_data);
			   	break;
			   	case G2D_OPERATION_FONT_CACHING:
		   		break;
				}
		   }
		break;
	}
#elif (defined(MT6228)||defined(MT6229)||defined(MT6230))
	g2d_data->src_pitch=g2d_data->src_pitch_width;
	g2d_data->dest_pitch=g2d_data->dest_pitch_width;
	switch (g2d_data->g2d_operation_mode)
	{
		case G2D_OPERATION_RECTANGLE_FILL:
			g2d_rectangle_fill(g2d_data);
		break;
		case G2D_OPERATION_FONT_CACHING:
			g2d_font_caching(g2d_data);
		break;
		case G2D_OPERATION_LINE_DRAWING:
			g2d_line_drawing(g2d_data);
		break;
		case G2D_OPERATION_CIRCLE_DRWAING:
			g2d_circle_drawing(g2d_data);
		break;
		case G2D_OPERATION_BEZIER_CURVE_DRAWING:
			g2d_bezier_curve_drawing(g2d_data);
		break;
		case G2D_OPERATION_TRIANGLE_FILL:
			g2d_triangle_fill(g2d_data);
		break;
		case G2D_OPERATION_BITBLT:
			g2d_bitblt(g2d_data);
		break;
		case G2D_OPERATION_ALPHA_BLENDING:
			g2d_alpha_bitblt(g2d_data);
		break;
		case G2D_OPERATION_ROP_BITBLT:
			g2d_rop_bitblt(g2d_data);
		break;
		case G2D_OPERATION_H_LINE_FILL:
			g2d_line_gradient_drawing(g2d_data);
		break;
		case G2D_OPERATION_H_LINE_COPY_MASK:
			g2d_line_copy_drawing(g2d_data);
		break;
	}
#endif
#endif
}	/* g2d_accelerator() */

/*************************************************************************
* FUNCTION
*	   g2d_rectangle_fill
*
* DESCRIPTION
*	   This function execute rectangle fill operation.
*
* PARAMETERS
*    g2d_data : the parameter data structure of G2D module
*
* RETURNS
*		None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void g2d_rectangle_fill(g2d_parameter_struct *g2d_data)
{
#ifdef __MTK_TARGET__
#if (defined (MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227))
	g2d_power_on();

	g2d_set_clip_window(g2d_data);
	ENABLE_G2D_ENGINE_INT;
	if (G2D_ENGINE_IS_BUSY)
	{
		ENABLE_G2D_CMQ;
		while (G2D_CMQ_FREE_SPACE<9)
		{};
		DRV_WriteReg32(G2D_CMQ_DATA_REG,(G2D_CMQ_DEST_BASE_L_ADDR | (g2d_data->dest_base_address & 0xFFFF)));
		DRV_WriteReg32(G2D_CMQ_DATA_REG,(G2D_CMQ_DEST_BASE_H_ADDR | ((g2d_data->dest_base_address>>16) & 0xFFFF)));
		DRV_WriteReg32(G2D_CMQ_DATA_REG,(G2D_CMQ_DEST_PITCH_ADDR | g2d_data->dest_pitch));
		DRV_WriteReg32(G2D_CMQ_DATA_REG,(G2D_CMQ_DEST_Y_ADDR | g2d_data->dest_y));
		DRV_WriteReg32(G2D_CMQ_DATA_REG,(G2D_CMQ_DEST_X_ADDR | g2d_data->dest_x));
		DRV_WriteReg32(G2D_CMQ_DATA_REG,(G2D_CMQ_DEST_HEIGHT_ADDR | g2d_data->dest_height));
		DRV_WriteReg32(G2D_CMQ_DATA_REG,(G2D_CMQ_DEST_WIDTH_ADDR | g2d_data->dest_width));
		DRV_WriteReg32(G2D_CMQ_DATA_REG,(G2D_CMQ_PAT_FG_COLOR_ADDR | g2d_data->pat_fg_color));
    	if (g2d_data->dest_color_mode==G2D_DEST_16BPP_LUT_DISABLE)
    		DRV_WriteReg32(G2D_CMQ_DATA_REG,(G2D_CMQ_FIRE_MODE_CTRL_REG_ADDR | FIRE_G2D_RECTANGLE_FILL));
    	else if (g2d_data->dest_color_mode==G2D_DEST_8BPP_LUT_DISABLE)
			DRV_WriteReg32(G2D_CMQ_DATA_REG,(G2D_CMQ_FIRE_MODE_CTRL_REG_ADDR | (FIRE_G2D_RECTANGLE_FILL|FIRE_DEST_COLOR_8BPP_LUT_DIS)));
		else
			ASSERT(0);
	}
	else
	{
		DISABLE_G2D_CMQ;
	   DRV_WriteReg32(G2D_DEST_BASE_ADDRESS_REG,g2d_data->dest_base_address);
    	DRV_WriteReg32(G2D_DEST_PITCH_REG,g2d_data->dest_pitch);
	   DRV_WriteReg32(G2D_DEST_XY_REG,(g2d_data->dest_x<<16)|g2d_data->dest_y);
    	DRV_WriteReg32(G2D_DEST_WIDTH_HEIGHT_REG,(g2d_data->dest_width<<16) | g2d_data->dest_height);
	   DRV_WriteReg32(G2D_PAT_FG_COLOR_REG,g2d_data->pat_fg_color);
    	if (g2d_data->dest_color_mode==G2D_DEST_16BPP_LUT_DISABLE)
    	{
    		SET_G2D_RECTANGLE_FILL_DEST_16BPP_LUT_DISABLE;
	   }
    	else if (g2d_data->dest_color_mode==G2D_DEST_8BPP_LUT_DISABLE)
   	{
    		SET_G2D_RECTANGLE_FILL_DEST_8BPP_LUT_DISABLE;
	   }
	   else
	   	ASSERT(0);
	}
	while (G2D_ENGINE_IS_BUSY) {};
//   kal_retrieve_eg_events(g2d_event_id,G2D_COMPLETE_EVENT,KAL_OR_CONSUME,&event_group,KAL_SUSPEND);
	g2d_power_off();
#elif (defined(MT6228)||defined(MT6229)||defined(MT6230))
	int temp_data;
	kal_uint32 temp_mode;
	kal_uint16 fire_mode;

	g2d_power_on();
	RESET_G2D_ENGINE;
	g2d_set_clip_window(g2d_data);
	if (g2d_data->g2d_cmq_mode==KAL_TRUE)
	{
		ENABLE_G2D_CMQ;
		temp_mode = REG_G2D_SUBMODE_CTRL;
		if (g2d_data->color_gradient_mode==G2D_REC_FILL_COLOR_GRAD_ENABLE)
		{
			while (G2D_CMQ_FREE_SPACE<29){};
			ENABLE_G2D_CMQ_WRITE;
			temp_data=(int) (g2d_data->alpha_gradient_x*(1<<16));
			G2D_WRITE_CMQ((G2D_CMQ_ALPHA_GRAD_X_L_ADDR|(temp_data & 0xFFFF)));
			G2D_WRITE_CMQ((G2D_CMQ_ALPHA_GRAD_X_H_ADDR|((temp_data>>16) & 0xFFFF)));
			temp_data=(int) (g2d_data->alpha_gradient_y*(1<<16));
			G2D_WRITE_CMQ((G2D_CMQ_ALPHA_GRAD_Y_L_ADDR|(temp_data & 0xFFFF)));
			G2D_WRITE_CMQ((G2D_CMQ_ALPHA_GRAD_Y_H_ADDR|((temp_data>>16) & 0xFFFF)));

			temp_data=(int) (g2d_data->red_gradient_x*(1<<16));
			G2D_WRITE_CMQ((G2D_CMQ_RED_GRAD_X_L_ADDR|(temp_data & 0xFFFF)));
			G2D_WRITE_CMQ((G2D_CMQ_RED_GRAD_X_H_ADDR|((temp_data>>16) & 0xFFFF)));
			temp_data=(int) (g2d_data->red_gradient_y*(1<<16));
			G2D_WRITE_CMQ((G2D_CMQ_RED_GRAD_Y_L_ADDR|(temp_data & 0xFFFF)));
			G2D_WRITE_CMQ((G2D_CMQ_RED_GRAD_Y_H_ADDR|((temp_data>>16) & 0xFFFF)));

			temp_data=(int) (g2d_data->green_gradient_x*(1<<16));
			G2D_WRITE_CMQ((G2D_CMQ_GREEN_GRAD_X_L_ADDR|(temp_data & 0xFFFF)));
			G2D_WRITE_CMQ((G2D_CMQ_GREEN_GRAD_X_H_ADDR|((temp_data>>16) & 0xFFFF)));
			temp_data=(int) (g2d_data->green_gradient_y*(1<<16));
			G2D_WRITE_CMQ((G2D_CMQ_GREEN_GRAD_Y_L_ADDR|(temp_data & 0xFFFF)));
			G2D_WRITE_CMQ((G2D_CMQ_GREEN_GRAD_Y_H_ADDR|((temp_data>>16) & 0xFFFF)));

			temp_data=(int) (g2d_data->blue_gradient_x*(1<<16));
			G2D_WRITE_CMQ((G2D_CMQ_BLUE_GRAD_X_L_ADDR|(temp_data & 0xFFFF)));
			G2D_WRITE_CMQ((G2D_CMQ_BLUE_GRAD_X_H_ADDR|((temp_data>>16) & 0xFFFF)));
			temp_data=(int) (g2d_data->blue_gradient_y*(1<<16));
			G2D_WRITE_CMQ((G2D_CMQ_BLUE_GRAD_Y_L_ADDR|(temp_data & 0xFFFF)));
			G2D_WRITE_CMQ((G2D_CMQ_BLUE_GRAD_Y_H_ADDR|((temp_data>>16) & 0xFFFF)));
			temp_mode |= REG_SUBMODE_CTRL_COLOR_GRADIENT_BIT;
		}
		else
		{
			while (G2D_CMQ_FREE_SPACE<13)	{};
			ENABLE_G2D_CMQ_WRITE;
			temp_mode &= ~REG_SUBMODE_CTRL_COLOR_GRADIENT_BIT;
		}
		if (g2d_data->italic_mode==G2D_REC_FILL_ITALIC_ENABLE)
			temp_mode |= REG_SUBMODE_CTRL_ITALIC_BITBLT_BIT;
		else
			temp_mode &= ~REG_SUBMODE_CTRL_ITALIC_BITBLT_BIT;
		G2D_WRITE_CMQ(G2D_CMQ_SUBMODE_CTRL_REG_L_ADDR | (temp_mode & 0xFFFF));
		G2D_WRITE_CMQ(G2D_CMQ_SUBMODE_CTRL_REG_H_ADDR | ((temp_mode & 0xFFFF)>>16));
		G2D_WRITE_CMQ(G2D_CMQ_DEST_BASE_L_ADDR | (g2d_data->dest_base_address & 0xFFFF));
		G2D_WRITE_CMQ(G2D_CMQ_DEST_BASE_H_ADDR | ((g2d_data->dest_base_address>>16) & 0xFFFF));
		G2D_WRITE_CMQ(G2D_CMQ_DEST_PITCH_ADDR | g2d_data->dest_pitch);
		G2D_WRITE_CMQ(G2D_CMQ_DEST_Y_ADDR | ((kal_uint16) g2d_data->dest_y));
		G2D_WRITE_CMQ(G2D_CMQ_DEST_X_ADDR | ((kal_uint16) g2d_data->dest_x));
		G2D_WRITE_CMQ(G2D_CMQ_DEST_HEIGHT_ADDR | g2d_data->dest_height);
		G2D_WRITE_CMQ(G2D_CMQ_DEST_WIDTH_ADDR | g2d_data->dest_width);
		G2D_WRITE_CMQ(G2D_CMQ_PAT_FG_COLOR_L_ADDR | (g2d_data->pat_fg_color&0xFFFF));
		G2D_WRITE_CMQ(G2D_CMQ_PAT_FG_COLOR_H_ADDR | ((g2d_data->pat_fg_color&0xFFFF0000)>>16));

		temp_mode=REG_G2D_COMM_CTRL;
		if (g2d_data->clip_mode ==G2D_CLIP_ENABLE)
		{
			temp_mode |= REG_COMMON_CTRL_G2D_CLIP_ENABLE_BIT;
		}
		else
			temp_mode &= ~REG_COMMON_CTRL_G2D_CLIP_ENABLE_BIT;
		G2D_WRITE_CMQ(G2D_CMQ_2D_COMMON_CTRL_REG_ADDR | ((kal_uint16)temp_mode))

  		G2D_WRITE_CMQ(G2D_CMQ_FIRE_MODE_CTRL_REG_ADDR |(g2d_data->dest_color_mode)|g2d_data->g2d_operation_mode);
		DISABLE_G2D_CMQ_WRITE;
		wait_cmq_start();
	}
	else
	{
		DISABLE_G2D_CMQ;
		SET_BITBLT_DIRECTION(BITBLT_TRANSFORM_DIRECTION_LT_CORNER);
		SET_BITBLT_TRANSFORM_MODE(BITBLT_TRANSFORM_COPY);
		g2d_set_clip_window(g2d_data);
	   REG_G2D_DEST_BASE_ADDRESS = g2d_data->dest_base_address;
    	REG_G2D_DEST_PITCH = g2d_data->dest_pitch_width;
	   REG_G2D_DEST_XY = (g2d_data->dest_x<<16)|((kal_uint16) g2d_data->dest_y);
    	REG_G2D_DEST_WIDTH_HEIGHT = (g2d_data->dest_width<<16) | g2d_data->dest_height;
	   REG_G2D_PAT_FG_COLOR=g2d_data->pat_fg_color;
		if (g2d_data->color_gradient_mode==G2D_REC_FILL_COLOR_GRAD_ENABLE)
		{
			ENABLE_REC_FILL_COLOR_GRADIENT;
			REG_G2D_ALPHA_GRADIENT_X = (int) (g2d_data->alpha_gradient_x*(1<<16));
			REG_G2D_ALPHA_GRADIENT_Y = (int) (g2d_data->alpha_gradient_y*(1<<16));
			REG_G2D_RED_GRADIENT_X = (int) (g2d_data->red_gradient_x*(1<<16));
			REG_G2D_RED_GRADIENT_Y = (int) (g2d_data->red_gradient_y*(1<<16));
			REG_G2D_GREEN_GRADIENT_X = (int) (g2d_data->green_gradient_x*(1<<16));
			REG_G2D_GREEN_GRADIENT_Y = (int) (g2d_data->green_gradient_y*(1<<16));
			REG_G2D_BLUE_GRADIENT_X = (int) (g2d_data->blue_gradient_x*(1<<16));
			REG_G2D_BLUE_GRADIENT_Y = (int) (g2d_data->blue_gradient_y*(1<<16));
		}
		else
		{
			DISABLE_REC_FILL_COLOR_GRADIENT;
		}

		if (g2d_data->italic_mode==G2D_REC_FILL_ITALIC_ENABLE)
		{
			ENABLE_G2D_BITBLT_ITALIC_MODE;
		}
		else
		{
			DISABLE_G2D_BITBLT_ITALIC_MODE;
		}

		if (g2d_data->clip_mode ==G2D_CLIP_ENABLE)
		{
			ENABLE_G2D_ENGINE_CLIP;
		}
		else
		{
			DISABLE_G2D_ENGINE_CLIP
		}

		fire_mode=(g2d_data->dest_color_mode)|g2d_data->g2d_operation_mode;
		ENABLE_G2D_ENGINE_INT;
		REG_G2D_FIRE_CTRL=fire_mode;
	}

	while (G2D_ENGINE_IS_BUSY) {};
	g2d_power_off();
#endif
#endif
}	/* g2d_rectangle_fill() */

#if (defined(MT6228)||defined(MT6229)||defined(MT6230))
kal_uint8 g2d_bitblt_direction(g2d_parameter_struct *g2d_data)
{
	kal_uint32 src_start_address,src_end_address;
	kal_uint32 dest_start_address,dest_end_address;

	if (g2d_data->src_pitch!=g2d_data->dest_pitch)
	{
		;	/* assert due to the different pitch of source and destination */
	}
	src_start_address=g2d_data->src_base_address;
	src_end_address=src_start_address+g2d_data->src_pitch * g2d_data->end_y;
	dest_start_address=g2d_data->dest_base_address;
	dest_end_address=dest_start_address + g2d_data->dest_pitch * g2d_data->end_y;

	if ((src_start_address<dest_end_address)||(src_end_address>dest_start_address))
		return BITBLT_TRANSFORM_DIRECTION_LT_CORNER;

	if (dest_start_address>src_end_address)
		return BITBLT_TRANSFORM_DIRECTION_RB_CORNER;

	return BITBLT_TRANSFORM_DIRECTION_LT_CORNER;
}	/* g2d_bitblt_direction() */
#endif

/*************************************************************************
* FUNCTION
*	   g2d_bitblt
*
* DESCRIPTION
*	   This function execute bitblt operation.
*
* PARAMETERS
*    g2d_data : the parameter data structure of G2D module
*
* RETURNS
*		None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void g2d_bitblt(g2d_parameter_struct *g2d_data)
{
#ifdef __MTK_TARGET__
#if (defined (MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227))
	kal_uint16 temp_mode;
//	kal_uint32 event_group;

	g2d_power_on();
	switch (g2d_data->bitblt_mode)
	{
    		case BITBLT_TRANSFORM_MIRROR_ROTATE_90:
    		case BITBLT_TRANSFORM_ROTATE_90:
    		case BITBLT_TRANSFORM_ROTATE_270:
    		case BITBLT_TRANSFORM_MIRROR_ROTATE_270:
	    		if ((g2d_data->dest_width!=g2d_data->src_height)||(g2d_data->dest_height!=g2d_data->src_width))
	    			ASSERT(0);
    		break;
    		case BITBLT_TRANSFORM_ROTATE_180:
	    	case BITBLT_TRANSFORM_MIRROR:
	    	case BITBLT_TRANSFORM_MIRROR_ROTATE_180:
	    		if ((g2d_data->dest_width!=g2d_data->src_width)||(g2d_data->dest_height!=g2d_data->src_height))
	    			ASSERT(0);
    		break;
    		case BITBLT_TRANSFORM_COPY:
    		break;
    		default:
    			ASSERT(0);
    		break;
	}
	g2d_set_clip_window(g2d_data);
	ENABLE_G2D_ENGINE_INT;
	if (G2D_ENGINE_IS_BUSY)
	{
		ENABLE_G2D_CMQ;
		while (G2D_CMQ_FREE_SPACE<18)
		{};
		DRV_WriteReg32(G2D_CMQ_DATA_REG,(G2D_CMQ_SRC_BASE_L_ADDR | (g2d_data->src_base_address & 0xFFFF)));
		DRV_WriteReg32(G2D_CMQ_DATA_REG,(G2D_CMQ_SRC_BASE_H_ADDR | ((g2d_data->src_base_address>>16) & 0xFFFF)));
		DRV_WriteReg32(G2D_CMQ_DATA_REG,(G2D_CMQ_DEST_BASE_L_ADDR | (g2d_data->dest_base_address & 0xFFFF)));
		DRV_WriteReg32(G2D_CMQ_DATA_REG,(G2D_CMQ_DEST_BASE_H_ADDR | ((g2d_data->dest_base_address>>16) & 0xFFFF)));
		DRV_WriteReg32(G2D_CMQ_DATA_REG,(G2D_CMQ_SRC_PITCH_ADDR | g2d_data->src_pitch));
		DRV_WriteReg32(G2D_CMQ_DATA_REG,(G2D_CMQ_DEST_PITCH_ADDR | g2d_data->dest_pitch));
		DRV_WriteReg32(G2D_CMQ_DATA_REG,(G2D_CMQ_SRC_Y_ADDR | g2d_data->src_y));
		DRV_WriteReg32(G2D_CMQ_DATA_REG,(G2D_CMQ_SRC_X_ADDR | g2d_data->src_x));
		DRV_WriteReg32(G2D_CMQ_DATA_REG,(G2D_CMQ_SRC_HEIGHT_ADDR | g2d_data->src_height));
		DRV_WriteReg32(G2D_CMQ_DATA_REG,(G2D_CMQ_SRC_WIDTH_ADDR | g2d_data->src_width));
		DRV_WriteReg32(G2D_CMQ_DATA_REG,(G2D_CMQ_DEST_HEIGHT_ADDR | g2d_data->dest_height));
		DRV_WriteReg32(G2D_CMQ_DATA_REG,(G2D_CMQ_DEST_WIDTH_ADDR | g2d_data->dest_width));

	   switch (g2d_data->bitblt_mode)
    	{
    		case BITBLT_TRANSFORM_MIRROR_ROTATE_90:
				DRV_WriteReg32(G2D_CMQ_DATA_REG,(G2D_CMQ_DEST_Y_ADDR | (g2d_data->dest_y+g2d_data->dest_height-1)));
				DRV_WriteReg32(G2D_CMQ_DATA_REG,(G2D_CMQ_DEST_X_ADDR | (g2d_data->dest_x+g2d_data->dest_width-1)));
    		break;
    		case BITBLT_TRANSFORM_ROTATE_90:
				DRV_WriteReg32(G2D_CMQ_DATA_REG,(G2D_CMQ_DEST_Y_ADDR | g2d_data->dest_y));
				DRV_WriteReg32(G2D_CMQ_DATA_REG,(G2D_CMQ_DEST_X_ADDR | (g2d_data->dest_x+g2d_data->dest_width-1)));
	    	break;
    		case BITBLT_TRANSFORM_ROTATE_270:
				DRV_WriteReg32(G2D_CMQ_DATA_REG,(G2D_CMQ_DEST_Y_ADDR | (g2d_data->dest_y+g2d_data->dest_height-1)));
				DRV_WriteReg32(G2D_CMQ_DATA_REG,(G2D_CMQ_DEST_X_ADDR | g2d_data->dest_x));
	    	break;
    		case BITBLT_TRANSFORM_MIRROR_ROTATE_270:
    		case BITBLT_TRANSFORM_COPY:
				DRV_WriteReg32(G2D_CMQ_DATA_REG,(G2D_CMQ_DEST_Y_ADDR | g2d_data->dest_y));
				DRV_WriteReg32(G2D_CMQ_DATA_REG,(G2D_CMQ_DEST_X_ADDR | g2d_data->dest_x));
    		break;
    		case BITBLT_TRANSFORM_ROTATE_180:
				DRV_WriteReg32(G2D_CMQ_DATA_REG,(G2D_CMQ_DEST_Y_ADDR | (g2d_data->dest_y+g2d_data->dest_height-1)));
				DRV_WriteReg32(G2D_CMQ_DATA_REG,(G2D_CMQ_DEST_X_ADDR | (g2d_data->dest_x+g2d_data->dest_width-1)));
    		break;
	    	case BITBLT_TRANSFORM_MIRROR:
				DRV_WriteReg32(G2D_CMQ_DATA_REG,(G2D_CMQ_DEST_Y_ADDR | g2d_data->dest_y));
				DRV_WriteReg32(G2D_CMQ_DATA_REG,(G2D_CMQ_DEST_X_ADDR | (g2d_data->dest_x+g2d_data->dest_width-1)));
    		break;
	    	case BITBLT_TRANSFORM_MIRROR_ROTATE_180:
				DRV_WriteReg32(G2D_CMQ_DATA_REG,(G2D_CMQ_DEST_Y_ADDR | (g2d_data->dest_y+g2d_data->dest_height-1)));
				DRV_WriteReg32(G2D_CMQ_DATA_REG,(G2D_CMQ_DEST_X_ADDR | g2d_data->dest_x));
    		break;
    		default:
    			ASSERT(0);
    		break;
	   }
	   temp_mode=DRV_Reg32(G2D_SUBMODE_CTRL_REG);
	   temp_mode &= ~REG_SUBMODE_CTRL_BITBLT_TRANSFORM_MASK;
	   temp_mode |= g2d_data->bitblt_mode;
		if (g2d_data->src_key_mode==G2D_SRC_KEY_ENABLE)
		{
			temp_mode |= REG_SUBMODE_CTRL_BITBLT_TRANSPARENT_BIT;
			DRV_WriteReg32(G2D_CMQ_DATA_REG,(G2D_CMQ_SRCKEY_COLOR_ADDR|g2d_data->src_key_color));
		}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?