; *************************************************************************** ; copyright : (C) 2026 by Martin Preuss ; email : martin@libchipcard.de ; ; *************************************************************************** ; * This file is part of the project "AqHome". * ; * Please see toplevel file COPYING of that project for license details. * ; *************************************************************************** #ifndef AQH_AVR_GUI2_HLAYOUT2_ASM #define AQH_AVR_GUI2_HLAYOUT2_ASM ; *************************************************************************** ; defines .equ HLAYOUT2_OFFS_BEGIN = WIDGET_SIZE .equ HLAYOUT2_OFFS_MODE = HLAYOUT2_OFFS_BEGIN+0 .equ HLAYOUT2_SIZE = HLAYOUT2_OFFS_BEGIN+1 ; values for HLAYOUT_OFFS_MODE .equ HLAYOUT2_MODE_EXPAND = 0 .equ HLAYOUT2_MODE_SPREAD = 1 ; *************************************************************************** ; code .cseg ; --------------------------------------------------------------------------- ; @routine HLayout_new @global ; ; @return CFLAG set of okay, cleared otherwise ; @return Y address of newly created object ; @param X parent widget ; @param r16 value for OBJECT_OFFS_OPTS ; @param r17 value for WIDGET_OFFS_PACK ; @param r20 layout mode (HLAYOUT_MODE_EXPAND, HLAYOUT_MODE_SPREAD) ; @clobbers any HLayout2_new: push r20 ldi r24, LOW(HLAYOUT2_SIZE) ldi r25, HIGH(HLAYOUT2_SIZE) bigcall Object_Alloc ; (!r16, !r17, !X) pop r20 brcc HLayout2_new_ret rcall HLayout2_Init ; (r16, r17, X) sec HLayout2_new_ret: ret ; @end ; --------------------------------------------------------------------------- ; @routine HLayout2_Init @global ; ; @param Y address of widget ; @param X parent widget (if any) ; @param r16 value for OBJECT_OFFS_OPTS ; @param r17 value for WIDGET_OFFS_PACK ; @param r20 layout mode (HLAYOUT_MODE_EXPAND, HLAYOUT_MODE_SPREAD) ; @clobbers r16, r17, X HLayout2_Init: push r20 ; call base class bigcall Widget_Init ; (r16, r17, X) pop r20 ; set widget-specific data std Y+HLAYOUT2_OFFS_MODE, r20 ; set default signal map ldi r16, LOW(HLayout2_DefaultSignalmap*2) std Y+OBJECT_OFFS_SIGNALMAP_LO, r16 ldi r16, HIGH(HLayout2_DefaultSignalmap*2) std Y+OBJECT_OFFS_SIGNALMAP_HI, r16 ret ; @end ; --------------------------------------------------------------------------- ; @routine HLayout2_OnLayout ; ; @param Y pointer to widget ; @clobbers any, !Y HLayout2_OnLayout: ; create and preset context rcall LayoutCtx_CreateContextFor1D brcc HLayout2_OnLayout_ret ; do layout mov r25, r16 rcall hLayout2Horizontally rcall hLayout2Vertically ; release layout context bigcall LayoutCtx_free ; force re-drawing of this widget, clear layout bit ldd r16, Y+OBJECT_OFFS_FLAGS sbr r16, (1<