Skip to content

Implement Responsive Client-Side Autoscaling#85

Closed
Lightning11wins wants to merge 105 commits intomasterfrom
apos_autoscale9
Closed

Implement Responsive Client-Side Autoscaling#85
Lightning11wins wants to merge 105 commits intomasterfrom
apos_autoscale9

Conversation

@Lightning11wins
Copy link
Contributor

@Lightning11wins Lightning11wins commented Feb 26, 2026

After much struggle, I think I've fixed the line endings issue, so I'm ready to restart the review with Greptile. The below PR description is very similar to #84, is now closed.

GitHub Relationships:

This PR includes several TODOs:

  • 3 TODOs for Israel to handle after Update Duplicate Detection #77 is merged into master.
  • 4 TODOs for Greg (although other reviewers are welcome to handle these if they have the requisite knowledge), in the following files: ht_render.c, htdrv_page.c, htdrv_tab.c, and htdrv_table.c.

There are several known issues with this code:

  • Table row details sometimes don't appear.
    • e.g. Broken left menus on the Kardia home page.
  • Code that breaks responsive layout.
    • widget/pane: resize action (test apps/kardia/modules/payroll/pay_form.app)
    • widget/image: offset & scale actions (not used anywhere)
    • widget/objcanvas: add_osrc_object()
  • ht_get_parent_w/h__INTERNAL() & wgtrGetContainerWidth/Height() should be merged.
    • They appear to give almost identical results, except when checking a top-level widget. In this case, ht_get_parent_h__INTERNAL() (mine) gives a height 2px taller.
  • Flexibility calculations that depend on page size cause breakage since the client assumes widget flexibility scale is constant.
    • This would be very hard to fix! The best solution I can think of so far is to rewrite the entire layout system to convert px -> % on the server, then do all layout client-side. However, I'm not sure this system could handle flexibility values at all.

…yout, button, editbox, html, image, label, scrollpane, textbutton, & treeview.
Fixes components, dropdowns, and images.
Renames flex variables to be more clear.
Send parent_w and parent_h to client.
Add tab-height support to apos.c.
Add design support to apos.c.
Add IsDesign to the WgtrClientInfo struct.

Fix spelling mistakes.
Clean up.
Add an error message when cxsecVerifySymbol_n() fails.
Improve an existing error message when htr_internal_WriteWgtrProperty() fails to write a property of an unknown type.
Set Centrallix event listener to be explicitly non-passive, fixing a console error when later code assumes that calling preventDefault() is allowed.
Fix a bug in qprintf() that caused % and & characters inside conditional printing areas to always print, regardless of the condition.
Improve documentation for qpfPrintf_va_internal() and qpf_grow_fn_t().
Clean up.
Add shortcut functions: ht_flex_x(), ht_flex_y(), ht_flex_w(), ht_flex_h().
Rename fl_scale_x (was total_fl_x).
Rename fl_scale_y (was total_fl_y).
Rename fl_scale_w (was total_fl_w).
Rename fl_scale_h (was total_fl_h).
Rename fl_parent_w (was parent_w).
Rename fl_parent_h (was parent_h).
Remove ht_flex_format_all and ht_flex_all().
Improve usage of new feature in previously updated widgets.

Fix spelling mistakes.
Clean up.
Clean up some apps.
Add Math.clamp() and Math.isBetween().
Add getParentSize(), getParentW(), and getParentH().
Refactor getRelativeX/Y/W/H() to call the new getRelative().
Refactor setRelativeX/Y/W/H() to call the new setRelative().
Add fast_setRelativeX/Y().
Add setResponsiveX/Y/W/H() using a new shared setResponsive().
Add responsiveness to moveTo() with the new functions.

Fix style guide mistakes.
Clean up.
Add support for more edge cases with undefined values to wgtrGetServerProperty().
Add the Log action (and docs).
Add the ReloadPage action (and docs).
Improve documentation for the Alert widget.
Add htr_action_point() to ht_render.js to handle the point action responsively.
Refactor pane and window widgets to use the htr_action_point().
Improve documentation and code clarity for htutil_point().
Improve documentation for the point action.
Update al_reflow() to create responsive CSS using the setResponsive() functions.
Improve documentation for al_childresize().
Optimize and clean up inefficient code.
Rewrite C & JS code to use responsive styling.
Fix a bug that allowed multiple tabs to be selected at once.

Fix spelling errors.
Clean up.
Add tab_w and tab_h parameters to tab_features.app to fix broken left and right tab locations.
Remove unnecessary button widget from autoscale_test.app.
Add dragging cursor styles for window widgets.
Add cursor styles for the checkbox, radiobutton, scrollpane, treeview, and window widgets.
Update existing cursor styles for the button, datetime, dropdown, imagebutton, tab, and textbutton widgets.
Add the .dt_dropdown CSS class to make styling the datetime dropdown easier.
Update table columns to use col-resize instead of move.
Clean up cursor CSS styles to follow consistent code styling.
…atives.

Rewrite getters and setters in the ClipObject polyfill to replace __defineGetter__() and __defineSetter__().
Rewrite getters in the datetime, dropdown, and radiobutton widgets to replace __defineGetter__().
Rewrite pg_area() constructor to replace __defineGetter__().
Define a base when parsing relative properties to fix edge cases.
Remove unused debug setters in the table widget.
Remove unused debug code.
…aster.

Replace calls to fast_setRelativeX/Y() with calls to setRelativeX/Y().
Remove obsolete workaround code.
Remove a completed todo.
Improve a comment.
@Lightning11wins Lightning11wins self-assigned this Feb 26, 2026
@Lightning11wins Lightning11wins added enhancement ai-review Request AI review of this PR labels Feb 26, 2026
@greptile-apps
Copy link

greptile-apps bot commented Feb 26, 2026

Too many files changed for review. (107 files found, 100 file limit)

@Lightning11wins Lightning11wins changed the title Apos autoscale9 Implement Responsive Client-Side Autoscaling Feb 26, 2026
Fix windows failing to release when the mouseup event comes from outside the web page.
Update responsive event listener to use a pattern more similar to other resize code.
Add .titlebar to window object.
Add global wn_windows array that stores all windows.
@Lightning11wins
Copy link
Contributor Author

Replaced by #90.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ai-review Request AI review of this PR enhancement

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Autoscaling/responsive widgets using CSS calc()

1 participant