1 /*************************************************************************** 2 * Copyright (c) 2024 Microsoft Corporation 3 * 4 * This program and the accompanying materials are made available under the 5 * terms of the MIT License which is available at 6 * https://opensource.org/licenses/MIT. 7 * 8 * SPDX-License-Identifier: MIT 9 **************************************************************************/ 10 11 12 /**************************************************************************/ 13 /**************************************************************************/ 14 /** */ 15 /** GUIX Component */ 16 /** */ 17 /** Display Management (Display) */ 18 /** */ 19 /**************************************************************************/ 20 21 #define GX_SOURCE_CODE 22 23 24 /* Include necessary system files. */ 25 26 #include "gx_api.h" 27 #include "gx_display.h" 28 29 /**************************************************************************/ 30 /* */ 31 /* FUNCTION RELEASE */ 32 /* */ 33 /* _gx_display_driver_8bpp_ertical_pattern_line_draw PORTABLE C */ 34 /* 6.1 */ 35 /* AUTHOR */ 36 /* */ 37 /* Kenneth Maxwell, Microsoft Corporation */ 38 /* */ 39 /* DESCRIPTION */ 40 /* */ 41 /* Generic 8bpp color format vertical line draw function. */ 42 /* */ 43 /* INPUT */ 44 /* */ 45 /* context Drawing context */ 46 /* ystart y-coord of top endpoint */ 47 /* yend y-coord of bottom endpoint */ 48 /* xpos x-coord of left edge */ 49 /* */ 50 /* OUTPUT */ 51 /* */ 52 /* None */ 53 /* */ 54 /* CALLS */ 55 /* */ 56 /* None */ 57 /* */ 58 /* CALLED BY */ 59 /* */ 60 /* GUIX Internal Code */ 61 /* */ 62 /* RELEASE HISTORY */ 63 /* */ 64 /* DATE NAME DESCRIPTION */ 65 /* */ 66 /* 05-19-2020 Kenneth Maxwell Initial Version 6.0 */ 67 /* 09-30-2020 Kenneth Maxwell Modified comment(s), */ 68 /* resulting in version 6.1 */ 69 /* */ 70 /**************************************************************************/ _gx_display_driver_8bpp_vertical_pattern_line_draw(GX_DRAW_CONTEXT * context,INT ystart,INT yend,INT xpos)71VOID _gx_display_driver_8bpp_vertical_pattern_line_draw(GX_DRAW_CONTEXT *context, INT ystart, INT yend, INT xpos) 72 { 73 INT row; 74 GX_UBYTE *put; 75 GX_UBYTE *rowstart; 76 ULONG pattern; 77 ULONG mask; 78 GX_UBYTE on_color; 79 GX_UBYTE off_color; 80 81 INT len = yend - ystart + 1; 82 83 /* pick up starting address of canvas memory */ 84 rowstart = (GX_UBYTE *)context -> gx_draw_context_memory; 85 86 /* calculate start of scanline */ 87 rowstart += context -> gx_draw_context_pitch * ystart; 88 89 /* offset into starting pixel */ 90 rowstart += xpos; 91 92 /* pick up the requested pattern and mask */ 93 pattern = context -> gx_draw_context_brush.gx_brush_line_pattern; 94 mask = context -> gx_draw_context_brush.gx_brush_pattern_mask; 95 on_color = (GX_UBYTE)context -> gx_draw_context_brush.gx_brush_line_color; 96 off_color = (GX_UBYTE)context -> gx_draw_context_brush.gx_brush_fill_color; 97 98 /* draw line from top to bottom */ 99 for (row = 0; row < len; row++) 100 { 101 put = rowstart; 102 103 if (pattern & mask) 104 { 105 *put = on_color; 106 } 107 else 108 { 109 *put = off_color; 110 } 111 112 mask >>= 1; 113 if (!mask) 114 { 115 mask = 0x80000000; 116 } 117 118 /* advance to the next scaneline */ 119 rowstart += context -> gx_draw_context_pitch; 120 } 121 /* save current masks value back to brush */ 122 context -> gx_draw_context_brush.gx_brush_pattern_mask = mask; 123 } 124 125