1 /* 2 Widgets for the Midnight Commander 3 4 Copyright (C) 2020-2024 5 The Free Software Foundation, Inc. 6 7 Authors: 8 Andrew Borodin <aborodin@vmail.ru>, 2020-2022 9 10 This file is part of the Midnight Commander. 11 12 The Midnight Commander is free software: you can redistribute it 13 and/or modify it under the terms of the GNU General Public License as 14 published by the Free Software Foundation, either version 3 of the License, 15 or (at your option) any later version. 16 17 The Midnight Commander is distributed in the hope that it will be useful, 18 but WITHOUT ANY WARRANTY; without even the implied warranty of 19 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 20 GNU General Public License for more details. 21 22 You should have received a copy of the GNU General Public License 23 along with this program. If not, see <http://www.gnu.org/licenses/>. 24 */ 25 26 /** \file background.c 27 * \brief Source: WBackground widget (background area of dialog) 28 */ 29 30 #include <config.h> 31 32 #include <stdlib.h> 33 34 #include "lib/global.h" 35 #include "lib/tty/tty.h" 36 #include "lib/tty/color.h" 37 #include "lib/widget.h" 38 39 /*** global variables ****************************************************************************/ 40 41 /*** file scope macro definitions ****************************************************************/ 42 43 /*** file scope type declarations ****************************************************************/ 44 45 /*** forward declarations (file scope functions) *************************************************/ 46 47 /*** file scope variables ************************************************************************/ 48 49 /* --------------------------------------------------------------------------------------------- */ 50 /*** file scope functions ************************************************************************/ 51 /* --------------------------------------------------------------------------------------------- */ 52 53 static const int * 54 background_get_colors (const Widget *w) /* */ 55 { 56 return &(CONST_BACKGROUND (w)->color); 57 } 58 59 /* --------------------------------------------------------------------------------------------- */ 60 61 static void 62 background_adjust (WBackground *b) /* */ 63 { 64 Widget *w = WIDGET (b); 65 66 w->rect = WIDGET (w->owner)->rect; 67 w->pos_flags |= WPOS_KEEP_ALL; 68 } 69 70 /* --------------------------------------------------------------------------------------------- */ 71 72 static void 73 background_draw (const WBackground *b) /* */ 74 { 75 const Widget *w = CONST_WIDGET (b); 76 77 tty_setcolor (b->color); 78 tty_fill_region (w->rect.y, w->rect.x, w->rect.lines, w->rect.cols, b->pattern); 79 } 80 81 /* --------------------------------------------------------------------------------------------- */ 82 /*** public functions ****************************************************************************/ 83 /* --------------------------------------------------------------------------------------------- */ 84 85 cb_ret_t 86 background_callback (Widget *w, Widget *sender, widget_msg_t msg, int parm, void *data) /* */ 87 { 88 WBackground *b = BACKGROUND (w); 89 90 switch (msg) 91 { 92 case MSG_INIT: 93 background_adjust (b); 94 return MSG_HANDLED; 95 96 case MSG_DRAW: 97 background_draw (b); 98 return MSG_HANDLED; 99 100 default: 101 return widget_default_callback (w, sender, msg, parm, data); 102 } 103 } 104 105 /* --------------------------------------------------------------------------------------------- */ 106 107 WBackground * 108 background_new (int y, int x, int lines, int cols, int color, unsigned char pattern, /* */ 109 widget_cb_fn callback) 110 { 111 WRect r = { y, x, lines, cols }; 112 WBackground *b; 113 Widget *w; 114 115 b = g_new (WBackground, 1); 116 w = WIDGET (b); 117 widget_init (w, &r, callback != NULL ? callback : background_callback, NULL); 118 w->get_colors = background_get_colors; 119 120 b->color = color; 121 b->pattern = pattern; 122 123 return b; 124 } 125 126 /* --------------------------------------------------------------------------------------------- */