recovery 下界面UI旋转90 180 270修改

原文修改出自简书:https://www.jianshu.com/p/768fdd954061

应该是MTK修改的google源码,支持recovery下屏幕旋转90/180/270, 作者把MTK的修改上传了,验证没有问,可以直接使用,多谢分享

 

Android O恢复出厂设置时,图标和屏的方向不一致

        

96         
wyman_wu                                                   
                 2018.12.19 17:55               字数 55             阅读 18评论 0
                   

        

在alps\bootable\recovery\minui\Android.mk中 添加mt_graphic_rotate.cpp

LOCAL_SRC_FILES := \
    events.cpp \
    graphics.cpp \
    graphics_adf.cpp \
    graphics_drm.cpp \
    graphics_fbdev.cpp \
    resources.cpp \
    mt_graphic_rotate.cpp

在alps\bootable\recovery\minui\graphics_fbdev.cpp中做修改

#if 0
  Blank(true);
  Blank(false); #endif // return gr_draw;//mtk delete return rotate_canvas_get(gr_draw);//mtk add 
GRSurface* MinuiBackendFbdev::Flip() {
  rotate_surface(gr_draw, rotate_canvas_get(gr_draw));//mtk add
  if (double_buffered) {
} else {
    // Copy from the in-memory surface to the framebuffer.
    memcpy(gr_framebuffer[0].data, gr_draw->data, gr_draw->height * gr_draw->row_bytes);
  }
  // return gr_draw;//mtk delete return rotate_canvas_get(gr_draw);//mtk add 
rotate_canvas_exit();//mtk add
  if (!double_buffered && gr_draw) {
    free(gr_draw->data);
    free(gr_draw); } 

创建alps\bootable\recovery\minui\mt_graphic_rotate.cpp

/*
* Copyright (C) 2014 MediaTek Inc.
* Modification based on code covered by the mentioned copyright
* and/or permission notice(s).
*/


#include <stdbool.h> #include <stdlib.h> #include <unistd.h> #include <inttypes.h> #include <fcntl.h> #include <stdio.h> #include <sys/cdefs.h> #include <sys/ioctl.h> #include <sys/mman.h> #include <sys/types.h> #include <linux/fb.h> #include <linux/kd.h> #include "minui/minui.h" #include "graphics.h" GRSurface __gr_canvas; GRSurface* gr_canvas = NULL; int rotate_index=-1; static void print_surface_info(GRSurface *s, const char *name) { printf("[graphics] %s > Height:%d, Width:%d, PixelBytes:%d, RowBytes:%d, Size:%d, Data: 0x%08" PRIxPTR "\n", name, s->height, s->width, s->pixel_bytes, s->row_bytes, s->height* s->row_bytes, (uintptr_t) s->data); } // Read configuration from MTK_LCM_PHYSICAL_ROTATION #ifndef MTK_LCM_PHYSICAL_ROTATION #define MTK_LCM_PHYSICAL_ROTATION "undefined" #endif static int rotate_config(GRSurface *gr_draw) { if (rotate_index<0) { if (gr_draw->pixel_bytes != 4) rotate_index=0; // support 4 bytes pixel only else if (0 == strncmp(MTK_LCM_PHYSICAL_ROTATION, "90", 2)) { rotate_index=1; } else if (0 == strncmp(MTK_LCM_PHYSICAL_ROTATION, "180", 3)) { rotate_index=2; } else if (0 == strncmp(MTK_LCM_PHYSICAL_ROTATION, "270", 3)) rotate_index=3; else rotate_index=0; printf("[graphics] rotate_config %d %s\n", rotate_index, MTK_LCM_PHYSICAL_ROTATION); } return 3;//mtk /*修改这个值可以改变图标的方向*/ } #define swap(x, y, type) {type z; z=x; x=y; y=z;} // Allocate and setup the canvas object void rotate_canvas_init(GRSurface *gr_draw) { gr_canvas = &__gr_canvas; memcpy(gr_canvas, gr_draw, sizeof(GRSurface)); // Swap canvas' height and width, if the rotate angle is 90" or 270" if (rotate_config(gr_draw)%2) { swap(gr_canvas->width, gr_canvas->height, int); gr_canvas->row_bytes = gr_canvas->width * gr_canvas->pixel_bytes; } gr_canvas->data = (unsigned char*) malloc(gr_canvas->height * gr_canvas->row_bytes); if (gr_canvas->data == NULL) { printf("[graphics] rotate_canvas_init() malloc gr_canvas->data failed\n"); gr_canvas = NULL; return; } memset(gr_canvas->data, 0, gr_canvas->height * gr_canvas->row_bytes); print_surface_info(gr_draw, "gr_draw"); print_surface_info(gr_canvas, "gr_canvas"); } // Cleanup the canvas void rotate_canvas_exit(void) { if (gr_canvas) { if (gr_canvas->data) free(gr_canvas->data); free(gr_canvas); } gr_canvas=NULL; } // Return the canvas object GRSurface *rotate_canvas_get(GRSurface *gr_draw) { // Initialize the canvas, if it was not exist. if (gr_canvas==NULL) rotate_canvas_init(gr_draw); return gr_canvas; } // Surface Rotate Routines static void rotate_surface_0(GRSurface *dst, GRSurface *src) { memcpy(dst->data, src->data, src->height*src->row_bytes); } static void rotate_surface_270(GRSurface *dst, GRSurface *src) { int v, w, h; unsigned int *src_pixel; unsigned int *dst_pixel; for (h=0, v=src->width-1; h<dst->height; h++, v--) { for (w=0; w<dst->width; w++) { dst_pixel = (unsigned int *)(dst->data + dst->row_bytes*h); src_pixel = (unsigned int *)(src->data + src->row_bytes*w); *(dst_pixel+w)=*(src_pixel+v); } } } static void rotate_surface_180(GRSurface *dst, GRSurface *src) { int v, w, k, h; unsigned int *src_pixel; unsigned int *dst_pixel; for (h=0, k=src->height-1; h<dst->height && k>=0 ; h++, k--) { dst_pixel = (unsigned int *)(dst->data + dst->row_bytes*h); src_pixel = (unsigned int *)(src->data + src->row_bytes*k); for (w=0, v=src->width-1; w<dst->width && v>=0; w++, v--) { *(dst_pixel+w)=*(src_pixel+v); } } } static void rotate_surface_90(GRSurface *dst, GRSurface *src) { int w, k, h; unsigned int *src_pixel; unsigned int *dst_pixel; for (h=0; h<dst->height; h++) { for (w=0, k=src->height-1; w<dst->width; w++, k--) { dst_pixel = (unsigned int *)(dst->data + dst->row_bytes*h); src_pixel = (unsigned int *)(src->data + src->row_bytes*k); *(dst_pixel+w)=*(src_pixel+h); } } } typedef void (*rotate_surface_t) (GRSurface *, GRSurface *); rotate_surface_t rotate_func[4]= { rotate_surface_0, rotate_surface_90, rotate_surface_180, rotate_surface_270 }; // rotate and copy src* surface to dst surface void rotate_surface(GRSurface *dst, GRSurface *src) { rotate_surface_t rotate; rotate=rotate_func[rotate_config(dst)]; rotate(dst, src); } 

创建alps\bootable\recovery\minui\mt_graphic_rotate.h

/*
* Copyright (C) 2014 MediaTek Inc.
* Modification based on code covered by the mentioned copyright
* and/or permission notice(s).
*/

#ifndef MT_GRAPHICS_ROTATE_H_
#define MT_GRAPHICS_ROTATE_H_ #include "minui/minui.h" void rotate_canvas_exit(void); void rotate_canvas_init(GRSurface *gr_draw); void rotate_surface(GRSurface *dst, GRSurface *src); GRSurface *rotate_canvas_get(GRSurface *gr_draw); #endif 

转载于:https://www.cnblogs.com/codeking100/p/10344008.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机多图,比较漂亮。800*480的。其他尺寸自己改SysInfo.ini文件 X,Y是坐标,IconPushed为图标的地址,SizePushed,SizeNormal图标的大小。 GLOBALSETTINGS ShowMessage = 0 Quitno X = 0 x方向的位置(后同) Y = 0 y方向的位置(后同) Width = 480 桌面背景图片宽度 Height = 272 桌面背景图片高度 Arrange = No 排列与否,和windows桌面排列一样 BackgroundBitmap = \SDMMC\app\PIC\background.bmp 显示桌面背景图片,可以修改成你想显示的图片名称及位置 StartUpAnimation = FlyUp Accelerated = yes TopMost = no #--------------------------------- DATE 显示日期的设置, x = 60 y = 3 Color = FFFFFF 字体颜色(后同) FrameColor = 000000 Size = 18 字体大小(后同) Weight = 700 CreateFont TIME 显示时间的设置, x = 155 y = 3 Color = FFFFFF FrameColor = 000000 Format = HH':'mm':'ss' 时间格式 Size = 18 Weight = 700 CreateFont Interval = 1000 刷新间隔,单位好像是毫秒 BATTERY 显示电池信息, x = 10 y = 5 Width = 38 Height = 16 ColorBattery = A0A0A0 ColorHigh = 00A000 ColorLow = A0A000 ColorCritical = A00000 Segments = 10 电池电量显示分块数 #--------------------------------- #--------------------------------- ICONXPBUTTON 自定义快捷方式,注意每节前后有#----作为分段 x = 420 程序图标的显示位置,X方向 y = 1 程序图标的显示位置,y方向 Command = \SDMMC\应用软件\Off.exe 应用程序位置名称 SizeNormal = 48 图标大小,不能小于图标文件的尺寸 SizePushed = 48 按下去后的图标大小 ScaleAlpha = 100 比例 Ic\SDMMC\图标库\off.ico 快捷方式的图标位置名称 ScaleAlpha = 100 比例 Ic\SDMMC\图标库\off.ico 按下去后的图标位置名称 Quitno 程序启动后是否自动退出,YES是的,no不关闭 TEXT 快捷方式的文字说明 x = 25 文字说明的显示位置,X方向 y = 150 文字说明的显示位置,Y方向 Text = 语音电子书 文字说明的内容 Color = FFFFFF 文字的颜色 FrameColor = 000000 背景框颜色 Size = 16 文字的大小 Weight = 700 CreateFont #--------------------------------- #--------------------------------- ICONXPBUTTON x = 5 y = -16 NewIni = ..\Navi\Navi.ini 运行下一个页面 SizeNormal = 48 SizePushed = 48 S
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值