brintos

brintos / linux-shallow public Read only

0
0
Text · 2.4 KiB · 01cbe30 Raw
97 lines · c
1/*2 *  linux/drivers/video/console/fbcon_rotate.h -- Software Display Rotation3 *4 *	Copyright (C) 2005 Antonino Daplas <adaplas@pol.net>5 *6 *  This file is subject to the terms and conditions of the GNU General Public7 *  License.  See the file COPYING in the main directory of this archive8 *  for more details.9 */10 11#ifndef _FBCON_ROTATE_H12#define _FBCON_ROTATE_H13 14#define GETVYRES(s,i) ({                           \15        (fb_scrollmode(s) == SCROLL_REDRAW || fb_scrollmode(s) == SCROLL_MOVE) ? \16        (i)->var.yres : (i)->var.yres_virtual; })17 18#define GETVXRES(s,i) ({                           \19        (fb_scrollmode(s) == SCROLL_REDRAW || fb_scrollmode(s) == SCROLL_MOVE || !(i)->fix.xpanstep) ? \20        (i)->var.xres : (i)->var.xres_virtual; })21 22 23static inline int pattern_test_bit(u32 x, u32 y, u32 pitch, const char *pat)24{25	u32 tmp = (y * pitch) + x, index = tmp / 8,  bit = tmp % 8;26 27	pat +=index;28	return (*pat) & (0x80 >> bit);29}30 31static inline void pattern_set_bit(u32 x, u32 y, u32 pitch, char *pat)32{33	u32 tmp = (y * pitch) + x, index = tmp / 8, bit = tmp % 8;34 35	pat += index;36 37	(*pat) |= 0x80 >> bit;38}39 40static inline void rotate_ud(const char *in, char *out, u32 width, u32 height)41{42	int i, j;43	int shift = (8 - (width % 8)) & 7;44 45	width = (width + 7) & ~7;46 47	for (i = 0; i < height; i++) {48		for (j = 0; j < width - shift; j++) {49			if (pattern_test_bit(j, i, width, in))50				pattern_set_bit(width - (1 + j + shift),51						height - (1 + i),52						width, out);53		}54 55	}56}57 58static inline void rotate_cw(const char *in, char *out, u32 width, u32 height)59{60	int i, j, h = height, w = width;61	int shift = (8 - (height % 8)) & 7;62 63	width = (width + 7) & ~7;64	height = (height + 7) & ~7;65 66	for (i = 0; i < h; i++) {67		for (j = 0; j < w; j++) {68			if (pattern_test_bit(j, i, width, in))69				pattern_set_bit(height - 1 - i - shift, j,70						height, out);71 72		}73	}74}75 76static inline void rotate_ccw(const char *in, char *out, u32 width, u32 height)77{78	int i, j, h = height, w = width;79	int shift = (8 - (width % 8)) & 7;80 81	width = (width + 7) & ~7;82	height = (height + 7) & ~7;83 84	for (i = 0; i < h; i++) {85		for (j = 0; j < w; j++) {86			if (pattern_test_bit(j, i, width, in))87				pattern_set_bit(i, width - 1 - j - shift,88						height, out);89		}90	}91}92 93extern void fbcon_rotate_cw(struct fbcon_ops *ops);94extern void fbcon_rotate_ud(struct fbcon_ops *ops);95extern void fbcon_rotate_ccw(struct fbcon_ops *ops);96#endif97