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

编程入门 行业动态 更新时间:2024-10-07 21:33:47

recovery 下<a href=https://www.elefans.com/category/jswz/34/1769995.html style=界面UI旋转90 180 270修改"/>

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

原文修改出自简书:

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

 

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

        

          wyman_wu                          关注                          2018.12.19 17:55               字数 55             阅读 18评论 0喜欢 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 0Blank(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 addif (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 addif (!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 

转载于:.html

更多推荐

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

本文发布于:2024-02-27 18:24:10,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1765364.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:界面   UI   recovery

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!