| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409 | 
							- /*
 
-   u8g_rot.c
 
-   Universal 8bit Graphics Library
 
-   
 
-   Copyright (c) 2011, olikraus@gmail.com
 
-   All rights reserved.
 
-   Redistribution and use in source and binary forms, with or without modification, 
 
-   are permitted provided that the following conditions are met:
 
-   * Redistributions of source code must retain the above copyright notice, this list 
 
-     of conditions and the following disclaimer.
 
-     
 
-   * Redistributions in binary form must reproduce the above copyright notice, this 
 
-     list of conditions and the following disclaimer in the documentation and/or other 
 
-     materials provided with the distribution.
 
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
 
-   CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
 
-   INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
 
-   MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
 
-   DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
 
-   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
 
-   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
 
-   NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
 
-   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
 
-   CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 
 
-   STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
 
-   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 
 
-   ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  
 
-   
 
-   
 
- */
 
- #include "u8g.h"
 
- uint8_t u8g_dev_rot90_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg);
 
- uint8_t u8g_dev_rot180_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg);
 
- uint8_t u8g_dev_rot270_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg);
 
- uint8_t u8g_dev_rot_dummy_fn(void *u8g, void *dev, uint8_t msg, void *arg)
 
- {
 
-   return 0;
 
- }
 
- u8g_dev_t u8g_dev_rot = { u8g_dev_rot_dummy_fn, NULL, NULL };
 
- void u8g_UndoRotation(u8g_t *u8g)
 
- {
 
-   if ( u8g->dev != &u8g_dev_rot )
 
-     return;
 
-   u8g->dev = u8g_dev_rot.dev_mem;
 
-   u8g_UpdateDimension(u8g);
 
- }
 
- void u8g_SetRot90(u8g_t *u8g)
 
- {
 
-   if ( u8g->dev != &u8g_dev_rot )
 
-   {
 
-     u8g_dev_rot.dev_mem = u8g->dev;
 
-     u8g->dev = &u8g_dev_rot;
 
-   }
 
-   u8g_dev_rot.dev_fn = u8g_dev_rot90_fn;
 
-   u8g_UpdateDimension(u8g);
 
- }
 
- void u8g_SetRot180(u8g_t *u8g)
 
- {
 
-   if ( u8g->dev != &u8g_dev_rot )
 
-   {
 
-     u8g_dev_rot.dev_mem = u8g->dev;
 
-     u8g->dev = &u8g_dev_rot;
 
-   }
 
-   u8g_dev_rot.dev_fn = u8g_dev_rot180_fn;
 
-   u8g_UpdateDimension(u8g);
 
- }
 
- void u8g_SetRot270(u8g_t *u8g)
 
- {
 
-   if ( u8g->dev != &u8g_dev_rot )
 
-   {
 
-     u8g_dev_rot.dev_mem = u8g->dev;
 
-     u8g->dev = &u8g_dev_rot;
 
-   }
 
-   u8g_dev_rot.dev_fn = u8g_dev_rot270_fn;
 
-   u8g_UpdateDimension(u8g);
 
- }
 
- uint8_t u8g_dev_rot90_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
 
- {
 
-   u8g_dev_t *rotation_chain = (u8g_dev_t *)(dev->dev_mem);
 
-   switch(msg)
 
-   {
 
-     default:
 
-     /*
 
-     case U8G_DEV_MSG_INIT:
 
-     case U8G_DEV_MSG_STOP:
 
-     case U8G_DEV_MSG_PAGE_FIRST:
 
-     case U8G_DEV_MSG_PAGE_NEXT:
 
-     case U8G_DEV_MSG_SET_COLOR_ENTRY:
 
-     case U8G_DEV_MSG_SET_XY_CB:
 
-     */
 
-       return u8g_call_dev_fn(u8g, rotation_chain, msg, arg);
 
- #ifdef U8G_DEV_MSG_IS_BBX_INTERSECTION
 
-     case U8G_DEV_MSG_IS_BBX_INTERSECTION:
 
-       {
 
-         u8g_dev_arg_bbx_t *bbx = (u8g_dev_arg_bbx_t *)arg;
 
-         u8g_uint_t x, y, tmp;
 
-         
 
-         /* transform the reference point */
 
-         y = bbx->x;
 
-         x = u8g->height;
 
-         /* x = u8g_GetWidthLL(u8g, rotation_chain); */
 
-         x -= bbx->y; 
 
-         x--;
 
-         
 
-         /* adjust point to be the uppler left corner again */
 
-         x -= bbx->h;
 
-         x++;
 
-         
 
-         /* swap box dimensions */        
 
-         tmp = bbx->w;
 
-         bbx->w = bbx->h;
 
-         bbx->h = tmp;
 
-         
 
-         /* store x,y */
 
-         bbx->x = x;
 
-         bbx->y = y;
 
-       }
 
-       return u8g_call_dev_fn(u8g, rotation_chain, msg, arg);
 
- #endif /* U8G_DEV_MSG_IS_BBX_INTERSECTION */
 
-     case U8G_DEV_MSG_GET_PAGE_BOX:
 
-       /* get page size from next device in the chain */
 
-       u8g_call_dev_fn(u8g, rotation_chain, msg, arg);
 
-       //printf("pre x: %3d..%3d y: %3d..%3d   ", ((u8g_box_t *)arg)->x0, ((u8g_box_t *)arg)->x1, ((u8g_box_t *)arg)->y0, ((u8g_box_t *)arg)->y1);
 
-       {
 
- 	u8g_box_t new_box;
 
- 	//new_box.x0 = u8g_GetHeightLL(u8g,rotation_chain) - ((u8g_box_t *)arg)->y1 - 1;
 
- 	//new_box.x1 = u8g_GetHeightLL(u8g,rotation_chain) - ((u8g_box_t *)arg)->y0 - 1;
 
- 	
 
- 	new_box.x0 = ((u8g_box_t *)arg)->y0;
 
- 	new_box.x1 = ((u8g_box_t *)arg)->y1;
 
- 	new_box.y0 = ((u8g_box_t *)arg)->x0;
 
- 	new_box.y1 = ((u8g_box_t *)arg)->x1;
 
- 	*((u8g_box_t *)arg) = new_box;
 
- 	//printf("post x: %3d..%3d y: %3d..%3d\n", ((u8g_box_t *)arg)->x0, ((u8g_box_t *)arg)->x1, ((u8g_box_t *)arg)->y0, ((u8g_box_t *)arg)->y1);
 
-       }
 
-       break;
 
-     case U8G_DEV_MSG_GET_WIDTH:
 
-       *((u8g_uint_t *)arg) = u8g_GetHeightLL(u8g,rotation_chain);
 
-       break;
 
-     case U8G_DEV_MSG_GET_HEIGHT:
 
-       *((u8g_uint_t *)arg) = u8g_GetWidthLL(u8g, rotation_chain);
 
-       break;
 
-     case U8G_DEV_MSG_SET_PIXEL:
 
-     case U8G_DEV_MSG_SET_TPIXEL:
 
-       {
 
-         u8g_uint_t x, y;
 
-         y = ((u8g_dev_arg_pixel_t *)arg)->x;
 
-         x = u8g_GetWidthLL(u8g, rotation_chain);
 
-         x -= ((u8g_dev_arg_pixel_t *)arg)->y; 
 
-         x--;
 
-         ((u8g_dev_arg_pixel_t *)arg)->x = x;
 
-         ((u8g_dev_arg_pixel_t *)arg)->y = y;
 
-       }
 
-       u8g_call_dev_fn(u8g, rotation_chain, msg, arg);
 
-       break;
 
-     case U8G_DEV_MSG_SET_8PIXEL:
 
-     case U8G_DEV_MSG_SET_4TPIXEL:
 
-       {
 
-         u8g_uint_t x, y;
 
- 	//uint16_t x,y;
 
-         y = ((u8g_dev_arg_pixel_t *)arg)->x;
 
-         x = u8g_GetWidthLL(u8g, rotation_chain);
 
-         x -= ((u8g_dev_arg_pixel_t *)arg)->y; 
 
-         x--;
 
-         ((u8g_dev_arg_pixel_t *)arg)->x = x;
 
-         ((u8g_dev_arg_pixel_t *)arg)->y = y;
 
-         ((u8g_dev_arg_pixel_t *)arg)->dir+=1;
 
-         ((u8g_dev_arg_pixel_t *)arg)->dir &= 3;
 
-       }
 
-       u8g_call_dev_fn(u8g, rotation_chain, msg, arg);
 
-       break;
 
-   }
 
-   return 1;
 
- }
 
- uint8_t u8g_dev_rot180_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
 
- {
 
-   u8g_dev_t *rotation_chain = (u8g_dev_t *)(dev->dev_mem);
 
-   switch(msg)
 
-   {
 
-     default:
 
-     /*
 
-     case U8G_DEV_MSG_INIT:
 
-     case U8G_DEV_MSG_STOP:
 
-     case U8G_DEV_MSG_PAGE_FIRST:
 
-     case U8G_DEV_MSG_PAGE_NEXT:
 
-     case U8G_DEV_MSG_SET_COLOR_ENTRY:
 
-     case U8G_DEV_MSG_SET_XY_CB:
 
-     */
 
-       return u8g_call_dev_fn(u8g, rotation_chain, msg, arg);
 
- #ifdef U8G_DEV_MSG_IS_BBX_INTERSECTION
 
-     case U8G_DEV_MSG_IS_BBX_INTERSECTION:
 
-       {
 
-         u8g_dev_arg_bbx_t *bbx = (u8g_dev_arg_bbx_t *)arg;
 
-         u8g_uint_t x, y;
 
-         
 
-         /* transform the reference point */
 
-         //y = u8g_GetHeightLL(u8g, rotation_chain);
 
-         y = u8g->height;
 
-         y -= bbx->y; 
 
-         y--;
 
-         
 
-         //x = u8g_GetWidthLL(u8g, rotation_chain);
 
-         x = u8g->width;
 
-         x -= bbx->x; 
 
-         x--;
 
-         
 
-         /* adjust point to be the uppler left corner again */
 
-         y -= bbx->h;
 
-         y++;
 
-         
 
-         x -= bbx->w;
 
-         x++;
 
-                 
 
-         /* store x,y */
 
-         bbx->x = x;
 
-         bbx->y = y;
 
-       }
 
-       return u8g_call_dev_fn(u8g, rotation_chain, msg, arg);
 
- #endif /* U8G_DEV_MSG_IS_BBX_INTERSECTION */
 
-     case U8G_DEV_MSG_GET_PAGE_BOX:
 
-       /* get page size from next device in the chain */
 
-       u8g_call_dev_fn(u8g, rotation_chain, msg, arg);
 
-       //printf("pre x: %3d..%3d y: %3d..%3d   ", ((u8g_box_t *)arg)->x0, ((u8g_box_t *)arg)->x1, ((u8g_box_t *)arg)->y0, ((u8g_box_t *)arg)->y1);
 
-       {
 
- 	u8g_box_t new_box;
 
- 	
 
- 	new_box.x0 = u8g_GetWidthLL(u8g,rotation_chain) - ((u8g_box_t *)arg)->x1 - 1;
 
- 	new_box.x1 = u8g_GetWidthLL(u8g,rotation_chain) - ((u8g_box_t *)arg)->x0 - 1;
 
- 	new_box.y0 = u8g_GetHeightLL(u8g,rotation_chain) - ((u8g_box_t *)arg)->y1 - 1;
 
- 	new_box.y1 = u8g_GetHeightLL(u8g,rotation_chain) - ((u8g_box_t *)arg)->y0 - 1;
 
- 	*((u8g_box_t *)arg) = new_box;
 
- 	//printf("post x: %3d..%3d y: %3d..%3d\n", ((u8g_box_t *)arg)->x0, ((u8g_box_t *)arg)->x1, ((u8g_box_t *)arg)->y0, ((u8g_box_t *)arg)->y1);
 
-       }
 
-       break;
 
-     case U8G_DEV_MSG_GET_WIDTH:
 
-       *((u8g_uint_t *)arg) = u8g_GetWidthLL(u8g,rotation_chain);
 
-       break;
 
-     case U8G_DEV_MSG_GET_HEIGHT:
 
-       *((u8g_uint_t *)arg) = u8g_GetHeightLL(u8g, rotation_chain);
 
-       break;
 
-     case U8G_DEV_MSG_SET_PIXEL:
 
-     case U8G_DEV_MSG_SET_TPIXEL:
 
-       {
 
-         u8g_uint_t x, y;
 
-         y = u8g_GetHeightLL(u8g, rotation_chain);
 
-         y -= ((u8g_dev_arg_pixel_t *)arg)->y; 
 
-         y--;
 
-         
 
-         x = u8g_GetWidthLL(u8g, rotation_chain);
 
-         x -= ((u8g_dev_arg_pixel_t *)arg)->x; 
 
-         x--;
 
-         
 
-         ((u8g_dev_arg_pixel_t *)arg)->x = x;
 
-         ((u8g_dev_arg_pixel_t *)arg)->y = y;
 
-       }
 
-       u8g_call_dev_fn(u8g, rotation_chain, msg, arg);
 
-       break;
 
-     case U8G_DEV_MSG_SET_8PIXEL:
 
-     case U8G_DEV_MSG_SET_4TPIXEL:
 
-       {
 
-         u8g_uint_t x, y;
 
-         
 
-         y = u8g_GetHeightLL(u8g, rotation_chain);
 
-         y -= ((u8g_dev_arg_pixel_t *)arg)->y; 
 
-         y--;
 
-         
 
-         x = u8g_GetWidthLL(u8g, rotation_chain);
 
-         x -= ((u8g_dev_arg_pixel_t *)arg)->x; 
 
-         x--;
 
-         
 
-         ((u8g_dev_arg_pixel_t *)arg)->x = x;
 
-         ((u8g_dev_arg_pixel_t *)arg)->y = y;
 
-         ((u8g_dev_arg_pixel_t *)arg)->dir+=2;
 
-         ((u8g_dev_arg_pixel_t *)arg)->dir &= 3;
 
-       }
 
-       u8g_call_dev_fn(u8g, rotation_chain, msg, arg);
 
-       break;
 
-   }
 
-   return 1;
 
- }
 
- uint8_t u8g_dev_rot270_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
 
- {
 
-   u8g_dev_t *rotation_chain = (u8g_dev_t *)(dev->dev_mem);
 
-   switch(msg)
 
-   {
 
-     default:
 
-     /*
 
-     case U8G_DEV_MSG_INIT:
 
-     case U8G_DEV_MSG_STOP:
 
-     case U8G_DEV_MSG_PAGE_FIRST:
 
-     case U8G_DEV_MSG_PAGE_NEXT:
 
-     case U8G_DEV_MSG_SET_COLOR_ENTRY:
 
-     case U8G_DEV_MSG_SET_XY_CB:
 
-     */
 
-       return u8g_call_dev_fn(u8g, rotation_chain, msg, arg);
 
- #ifdef U8G_DEV_MSG_IS_BBX_INTERSECTION
 
-     case U8G_DEV_MSG_IS_BBX_INTERSECTION:
 
-       {
 
-         u8g_dev_arg_bbx_t *bbx = (u8g_dev_arg_bbx_t *)arg;
 
-         u8g_uint_t x, y, tmp;
 
-         
 
-         /* transform the reference point */
 
-         x = bbx->y;
 
-         
 
-         y = u8g->width;
 
-         /* y = u8g_GetHeightLL(u8g, rotation_chain); */
 
-         y -= bbx->x; 
 
-         y--;
 
-                 
 
-         /* adjust point to be the uppler left corner again */
 
-         y -= bbx->w;
 
-         y++;
 
-         
 
-         /* swap box dimensions */        
 
-         tmp = bbx->w;
 
-         bbx->w = bbx->h;
 
-         bbx->h = tmp;
 
-         
 
-         /* store x,y */
 
-         bbx->x = x;
 
-         bbx->y = y;
 
-       }
 
-       return u8g_call_dev_fn(u8g, rotation_chain, msg, arg);
 
- #endif /* U8G_DEV_MSG_IS_BBX_INTERSECTION */
 
-     case U8G_DEV_MSG_GET_PAGE_BOX:
 
-       /* get page size from next device in the chain */
 
-       u8g_call_dev_fn(u8g, rotation_chain, msg, arg);
 
-       //printf("pre x: %3d..%3d y: %3d..%3d   ", ((u8g_box_t *)arg)->x0, ((u8g_box_t *)arg)->x1, ((u8g_box_t *)arg)->y0, ((u8g_box_t *)arg)->y1);
 
-       {
 
- 	u8g_box_t new_box;
 
- 	
 
- 	new_box.x0 = u8g_GetHeightLL(u8g,rotation_chain) - ((u8g_box_t *)arg)->y1 - 1;
 
- 	new_box.x1 = u8g_GetHeightLL(u8g,rotation_chain) - ((u8g_box_t *)arg)->y0 - 1;
 
- 	new_box.y0 = u8g_GetWidthLL(u8g,rotation_chain) - ((u8g_box_t *)arg)->x1 - 1;
 
- 	new_box.y1 = u8g_GetWidthLL(u8g,rotation_chain) - ((u8g_box_t *)arg)->x0 - 1;
 
- 	*((u8g_box_t *)arg) = new_box;
 
- 	//printf("post x: %3d..%3d y: %3d..%3d\n", ((u8g_box_t *)arg)->x0, ((u8g_box_t *)arg)->x1, ((u8g_box_t *)arg)->y0, ((u8g_box_t *)arg)->y1);
 
-       }
 
-       break;
 
-     case U8G_DEV_MSG_GET_WIDTH:
 
-       *((u8g_uint_t *)arg) = u8g_GetHeightLL(u8g,rotation_chain);
 
-       break;
 
-     case U8G_DEV_MSG_GET_HEIGHT:
 
-       *((u8g_uint_t *)arg) = u8g_GetWidthLL(u8g, rotation_chain);
 
-       break;
 
-     case U8G_DEV_MSG_SET_PIXEL:
 
-     case U8G_DEV_MSG_SET_TPIXEL:
 
-       {
 
-         u8g_uint_t x, y;
 
-         x = ((u8g_dev_arg_pixel_t *)arg)->y;
 
-         
 
-         y = u8g_GetHeightLL(u8g, rotation_chain);
 
-         y -= ((u8g_dev_arg_pixel_t *)arg)->x; 
 
-         y--;
 
-           
 
-         /*
 
-         x = u8g_GetWidthLL(u8g, rotation_chain);
 
-         x -= ((u8g_dev_arg_pixel_t *)arg)->y; 
 
-         x--;
 
-         */
 
-         ((u8g_dev_arg_pixel_t *)arg)->x = x;
 
-         ((u8g_dev_arg_pixel_t *)arg)->y = y;
 
-       }
 
-       u8g_call_dev_fn(u8g, rotation_chain, msg, arg);
 
-       break;
 
-     case U8G_DEV_MSG_SET_8PIXEL:
 
-     case U8G_DEV_MSG_SET_4TPIXEL:
 
-       {
 
-         u8g_uint_t x, y;
 
-         x = ((u8g_dev_arg_pixel_t *)arg)->y;
 
-         
 
-         y = u8g_GetHeightLL(u8g, rotation_chain);
 
-         y -= ((u8g_dev_arg_pixel_t *)arg)->x; 
 
-         y--;
 
-           
 
-         /*
 
-         x = u8g_GetWidthLL(u8g, rotation_chain);
 
-         x -= ((u8g_dev_arg_pixel_t *)arg)->y; 
 
-         x--;
 
-         */
 
-         ((u8g_dev_arg_pixel_t *)arg)->x = x;
 
-         ((u8g_dev_arg_pixel_t *)arg)->y = y;
 
-         ((u8g_dev_arg_pixel_t *)arg)->dir+=3;
 
-         ((u8g_dev_arg_pixel_t *)arg)->dir &= 3;
 
-       }
 
-       u8g_call_dev_fn(u8g, rotation_chain, msg, arg);
 
-       break;
 
-   }
 
-   return 1;
 
- }
 
 
  |