os/graphics/graphicscomposition/openwfcompositionengine/common/src/owfutils.c
author sl@SLION-WIN7.fritz.box
Fri, 15 Jun 2012 03:10:57 +0200
changeset 0 bde4ae8d615e
permissions -rw-r--r--
First public contribution.
     1 /* Copyright (c) 2009 The Khronos Group Inc.
     2  *
     3  * Permission is hereby granted, free of charge, to any person obtaining a
     4  * copy of this software and/or associated documentation files (the
     5  * "Materials"), to deal in the Materials without restriction, including
     6  * without limitation the rights to use, copy, modify, merge, publish,
     7  * distribute, sublicense, and/or sell copies of the Materials, and to
     8  * permit persons to whom the Materials are furnished to do so, subject to
     9  * the following conditions:
    10  *
    11  * The above copyright notice and this permission notice shall be included
    12  * in all copies or substantial portions of the Materials.
    13  *
    14  * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    15  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    16  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
    17  * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
    18  * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
    19  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
    20  * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
    21  */
    22 
    23  #include "owftypes.h"
    24 
    25 #ifdef __cplusplus
    26 extern "C" {
    27 #endif
    28 
    29 OWFint min(OWFint aLhs, OWFint aRhs)
    30 {
    31     if (aLhs < aRhs) {
    32         return aLhs;
    33     }
    34     return aRhs;
    35 }
    36 
    37 void OWF_Rect_Set(OWF_RECTANGLE* rect,
    38                   OWFint left,
    39                   OWFint top,
    40                   OWFint width,
    41                   OWFint height)
    42 {
    43     if (!rect) {
    44         return;
    45     }
    46 
    47     rect->x = left;
    48     rect->y = top;
    49     rect->width = width;
    50     rect->height = height;
    51 }
    52 
    53 OWFboolean OWF_Rect_Clip(OWF_RECTANGLE* clipped,
    54                          OWF_RECTANGLE* rect,
    55                          OWF_RECTANGLE* bounds)
    56 {
    57     OWFint dw, dh, dx0, dy0, dx1, dy1; /* destination image coordinates */
    58     OWFint bl, bt, br, bb;
    59 
    60     bl = bounds->x;
    61     bt = bounds->y;
    62     br = bl + bounds->width;
    63     bb = bt + bounds->height;
    64 
    65     dw = rect->width;
    66     dh = rect->height;
    67     dx0 = rect->x;
    68     dy0 = rect->y;
    69 
    70     /* Crop x coords to target image width */
    71     if (dx0 < bl) {
    72         dw = dw - (bl - dx0);
    73         dx0 = bl;
    74     }
    75 
    76     /* check if destination rectangle is outside target image */
    77     if (dx0 >= br) {
    78         return OWF_FALSE;
    79     }
    80 
    81     /* Crop y coord to target image height */
    82     if (dy0 < bt) {
    83         dh = dh - (bt - dy0);
    84         dy0 = bt;
    85     }
    86 
    87     /* check if destination rectangle is outside target image */
    88     if (dy0 >= bb) {
    89         return OWF_FALSE;
    90     }
    91 
    92     /* clamp right edge */
    93     dx1 = dx0 + dw;
    94     if (dx1 >= br) {
    95         dx1 = br;
    96     } else if (dx1 < bl) {
    97         return OWF_FALSE;
    98     }
    99 
   100     /* clamp bottom edge */
   101     dy1 = dy0 + dh;
   102     if (dy1 >= bb) {
   103         dy1 = bb;
   104     } else if (dy1 < bt) {
   105         return OWF_FALSE;
   106     }
   107 
   108     clipped->x = dx0;
   109     clipped->y = dy0;
   110     clipped->width = dx1 - dx0;
   111     clipped->height = dy1 - dy0;
   112 
   113     return OWF_TRUE;
   114 }
   115 
   116 #ifdef __cplusplus
   117 }
   118 #endif