Compare commits

..

2 commits

Author SHA1 Message Date
d6b96d0f8c major surgery on dbus code 2026-04-17 10:12:00 +02:00
30c84a915a minor adjustments for compliance 2026-04-17 09:22:30 +02:00
168 changed files with 11541 additions and 16785 deletions

View file

@ -5,8 +5,6 @@ AlignConsecutiveAssignments:
Enabled: true
AlignConsecutiveDeclarations:
Enabled: true
AccessModifierOffset: -4
NamespaceIndentation: All
IndentWidth: 8
PointerAlignment: Left
ColumnLimit: 0
@ -14,9 +12,6 @@ AllowShortIfStatementsOnASingleLine: Always
AllowShortBlocksOnASingleLine: Never
AllowShortFunctionsOnASingleLine: Empty
AllowShortLoopsOnASingleLine: true
BreakBeforeBraces: Custom
BraceWrapping:
AfterCaseLabel: true
SpaceBeforeParens: Never
AlignEscapedNewlines: DontAlign
SortIncludes: false

5
.gitignore vendored
View file

@ -19,10 +19,6 @@ examples/*/*.exe
compile_flags.txt
.cache
.DS_Store
/vms
/BorMakefile
*.err
*.zip
*.pef
*.dsk
@ -30,4 +26,3 @@ compile_flags.txt
*.rsrc
*.finf
*.gdb

100
BorMakefile generated Normal file
View file

@ -0,0 +1,100 @@
CC = bcc32 -c
LD = bcc32
CFLAGS = -Iinclude -Iexternal\libz\include -D_MILSKO -DUSE_GDI -DUSE_STB_TRUETYPE -DUSE_STB_IMAGE -DSTBI_NO_SIMD
LDFLAGS = -tWD
.SUFFIXES: .obj .c
all: src\Mw.dll
clean:
del /f /q external\libz\src\adler32.obj
del /f /q external\libz\src\compress.obj
del /f /q external\libz\src\crc32.obj
del /f /q external\libz\src\deflate.obj
del /f /q external\libz\src\gzclose.obj
del /f /q external\libz\src\gzlib.obj
del /f /q external\libz\src\gzread.obj
del /f /q external\libz\src\gzwrite.obj
del /f /q external\libz\src\infback.obj
del /f /q external\libz\src\inffast.obj
del /f /q external\libz\src\inflate.obj
del /f /q external\libz\src\inftrees.obj
del /f /q external\libz\src\trees.obj
del /f /q external\libz\src\uncompr.obj
del /f /q external\libz\src\zutil.obj
del /f /q external\stb_ds.obj
del /f /q external\stb_image.obj
del /f /q external\stb_truetype.obj
del /f /q src\abstract\directory.obj
del /f /q src\abstract\dynamic.obj
del /f /q src\abstract\time.obj
del /f /q src\backend\gdi.obj
del /f /q src\color.obj
del /f /q src\core.obj
del /f /q src\cursor\arrow.obj
del /f /q src\cursor\cross.obj
del /f /q src\cursor\default.obj
del /f /q src\cursor\hidden.obj
del /f /q src\cursor\text.obj
del /f /q src\default.obj
del /f /q src\dialog\colorpicker.obj
del /f /q src\dialog\directorychooser.obj
del /f /q src\dialog\filechooser.obj
del /f /q src\dialog\messagebox.obj
del /f /q src\draw.obj
del /f /q src\icon\back.obj
del /f /q src\icon\clock.obj
del /f /q src\icon\computer.obj
del /f /q src\icon\directory.obj
del /f /q src\icon\down.obj
del /f /q src\icon\error.obj
del /f /q src\icon\file.obj
del /f /q src\icon\forward.obj
del /f /q src\icon\info.obj
del /f /q src\icon\left.obj
del /f /q src\icon\news.obj
del /f /q src\icon\note.obj
del /f /q src\icon\right.obj
del /f /q src\icon\search.obj
del /f /q src\icon\up.obj
del /f /q src\icon\warning.obj
del /f /q src\lowlevel.obj
del /f /q src\string.obj
del /f /q src\text\font\boldfont.obj
del /f /q src\text\font\boldmonottf.obj
del /f /q src\text\font\boldttf.obj
del /f /q src\text\font\font.obj
del /f /q src\text\font\monottf.obj
del /f /q src\text\font\ttf.obj
del /f /q src\text\ft2.obj
del /f /q src\text\stbtt.obj
del /f /q src\text\text.obj
del /f /q src\unicode.obj
del /f /q src\widget\box.obj
del /f /q src\widget\button.obj
del /f /q src\widget\checkbox.obj
del /f /q src\widget\combobox.obj
del /f /q src\widget\entry.obj
del /f /q src\widget\frame.obj
del /f /q src\widget\image.obj
del /f /q src\widget\label.obj
del /f /q src\widget\listbox.obj
del /f /q src\widget\menu.obj
del /f /q src\widget\numberentry.obj
del /f /q src\widget\opengl.obj
del /f /q src\widget\progressbar.obj
del /f /q src\widget\radiobox.obj
del /f /q src\widget\scrollbar.obj
del /f /q src\widget\separator.obj
del /f /q src\widget\submenu.obj
del /f /q src\widget\treeview.obj
del /f /q src\widget\viewport.obj
del /f /q src\widget\window.obj
del /f /q src\Mw.dll
del /f /q src\Mw.lib
src\Mw.dll: external\libz\src\adler32.obj external\libz\src\compress.obj external\libz\src\crc32.obj external\libz\src\deflate.obj external\libz\src\gzclose.obj external\libz\src\gzlib.obj external\libz\src\gzread.obj external\libz\src\gzwrite.obj external\libz\src\infback.obj external\libz\src\inffast.obj external\libz\src\inflate.obj external\libz\src\inftrees.obj external\libz\src\trees.obj external\libz\src\uncompr.obj external\libz\src\zutil.obj external\stb_ds.obj external\stb_image.obj external\stb_truetype.obj src\abstract\directory.obj src\abstract\dynamic.obj src\abstract\time.obj src\backend\gdi.obj src\color.obj src\core.obj src\cursor\arrow.obj src\cursor\cross.obj src\cursor\default.obj src\cursor\hidden.obj src\cursor\text.obj src\default.obj src\dialog\colorpicker.obj src\dialog\directorychooser.obj src\dialog\filechooser.obj src\dialog\messagebox.obj src\draw.obj src\icon\back.obj src\icon\clock.obj src\icon\computer.obj src\icon\directory.obj src\icon\down.obj src\icon\error.obj src\icon\file.obj src\icon\forward.obj src\icon\info.obj src\icon\left.obj src\icon\news.obj src\icon\note.obj src\icon\right.obj src\icon\search.obj src\icon\up.obj src\icon\warning.obj src\lowlevel.obj src\string.obj src\text\font\boldfont.obj src\text\font\boldmonottf.obj src\text\font\boldttf.obj src\text\font\font.obj src\text\font\monottf.obj src\text\font\ttf.obj src\text\ft2.obj src\text\stbtt.obj src\text\text.obj src\unicode.obj src\widget\box.obj src\widget\button.obj src\widget\checkbox.obj src\widget\combobox.obj src\widget\entry.obj src\widget\frame.obj src\widget\image.obj src\widget\label.obj src\widget\listbox.obj src\widget\menu.obj src\widget\numberentry.obj src\widget\opengl.obj src\widget\progressbar.obj src\widget\radiobox.obj src\widget\scrollbar.obj src\widget\separator.obj src\widget\submenu.obj src\widget\treeview.obj src\widget\viewport.obj src\widget\window.obj
$(LD) $(LDFLAGS) -e$@ external\libz\src\adler32.obj external\libz\src\compress.obj external\libz\src\crc32.obj external\libz\src\deflate.obj external\libz\src\gzclose.obj external\libz\src\gzlib.obj external\libz\src\gzread.obj external\libz\src\gzwrite.obj external\libz\src\infback.obj external\libz\src\inffast.obj external\libz\src\inflate.obj external\libz\src\inftrees.obj external\libz\src\trees.obj external\libz\src\uncompr.obj external\libz\src\zutil.obj external\stb_ds.obj external\stb_image.obj external\stb_truetype.obj src\abstract\directory.obj src\abstract\dynamic.obj src\abstract\time.obj src\backend\gdi.obj src\color.obj src\core.obj src\cursor\arrow.obj src\cursor\cross.obj src\cursor\default.obj src\cursor\hidden.obj src\cursor\text.obj src\default.obj src\dialog\colorpicker.obj src\dialog\directorychooser.obj src\dialog\filechooser.obj src\dialog\messagebox.obj src\draw.obj src\icon\back.obj src\icon\clock.obj src\icon\computer.obj src\icon\directory.obj src\icon\down.obj src\icon\error.obj src\icon\file.obj src\icon\forward.obj src\icon\info.obj src\icon\left.obj src\icon\news.obj src\icon\note.obj src\icon\right.obj src\icon\search.obj src\icon\up.obj src\icon\warning.obj src\lowlevel.obj src\string.obj src\text\font\boldfont.obj src\text\font\boldmonottf.obj src\text\font\boldttf.obj src\text\font\font.obj src\text\font\monottf.obj src\text\font\ttf.obj src\text\ft2.obj src\text\stbtt.obj src\text\text.obj src\unicode.obj src\widget\box.obj src\widget\button.obj src\widget\checkbox.obj src\widget\combobox.obj src\widget\entry.obj src\widget\frame.obj src\widget\image.obj src\widget\label.obj src\widget\listbox.obj src\widget\menu.obj src\widget\numberentry.obj src\widget\opengl.obj src\widget\progressbar.obj src\widget\radiobox.obj src\widget\scrollbar.obj src\widget\separator.obj src\widget\submenu.obj src\widget\treeview.obj src\widget\viewport.obj src\widget\window.obj -lopengl32.lib -lgdi32.lib -luser32.lib -ladvapi32.lib
implib src\Mw.lib src\Mw.dll
.c.obj:
$(CC) $(CFLAGS) -o$@ $<

View file

@ -1,17 +0,0 @@
========================= 1.4 =========================
- CMakeLists.txt downgraded to version 3.13 to allow compiling on Windows XP
- CMake build now generates a pkgconfig file.
- GDI backend now natively uses GDI for text rendering
- Widgets can now be disabled with MwNdisabled
- Added `MwTabFocus` for letting a tab widget steal focus.
- New table widget (`MwTableClass`).
- Added `MwWindowShouldClose` for letting custom loops know when a window should close.
- Remove VMS build files
- Entry widgets now have blinking cursor that appears only when you hover over the widget.
- Wayland backend:
- Can now create layer surfaces (Use `MwLLMakeToolWindow` on a parentless window)
- Now properly handles keys being held down
- has drastically improved CSD (functionality wise)
- Uses KMSDRM directly for the OpenGL widget instead of wl_egl for a smoother experience
- Various overall performance improvements putting it on the same level as the X11 backend finally
- Menu widget works better under compositors that use CSD.

View file

@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.13)
cmake_minimum_required(VERSION 3.25)
project(
milsko
)
@ -9,12 +9,6 @@ include(GNUInstallDirs)
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_FULL_LIBDIR}")
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
if(WIN32)
set(CMAKE_STATIC_LIBRARY_PREFIX "")
set(CMAKE_SHARED_LIBRARY_PREFIX "")
endif()
option(MW_CLASSIC_THEME "Use classic theme" OFF)
option(MW_BUILD_EXAMPLES "Build examples" OFF)
@ -35,19 +29,13 @@ endif()
option(MW_INSTALL_HEADERS "Install headers" ON)
if( ${CMAKE_SYSTEM_NAME} STREQUAL Darwin
OR ${CMAKE_SYSTEM_NAME} MATCHES Retro
OR ${CMAKE_SYSTEM_NAME} MATCHES Windows)
if(${CMAKE_SYSTEM_NAME} STREQUAL Darwin OR ${CMAKE_SYSTEM_NAME} MATCHES Retro)
option(MW_USE_FREETYPE2 "Use FreeType 2" OFF)
else()
option(MW_USE_FREETYPE2 "Use FreeType 2" ON)
endif()
if(${CMAKE_SYSTEM_NAME} STREQUAL Windows)
option(MW_USE_GDI_TEXT "Use GDI for text rendering" ON)
endif()
if(${CMAKE_SYSTEM_NAME} STREQUAL Linux OR ${CMAKE_SYSTEM_NAME} STREQUAL FreeBSD)
if(${CMAKE_SYSTEM_NAME} STREQUAL Linux)
option(MW_USE_WAYLAND "Enable Wayland backend" ON)
endif()
@ -72,8 +60,11 @@ endif()
if(MW_TRY_OPENGL)
find_package(OpenGL)
if(OpenGL_FOUND AND NOT APPLE)
if(OpenGL_FOUND)
set(MW_BUILD_OPENGL ON)
if(APPLE)
list(APPEND SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/src/widget/opengl_cocoa.m")
endif()
message(STATUS "OpenGL widget has been enabled")
else()
message(WARNING "OpenGL widget has been disabled")
@ -81,8 +72,8 @@ if(MW_TRY_OPENGL)
endif()
if(MW_TRY_VULKAN)
find_package(Vulkan)
if(${Vulkan_FOUND})
check_include_files(vulkan/vulkan.h HAVE_VULKAN_VULKAN_H)
if(HAVE_VULKAN_VULKAN_H)
set(MW_BUILD_VULKAN ON)
message(STATUS "Vulkan widget has been enabled")
else()
@ -140,35 +131,23 @@ if(MW_USE_STB_TRUETYPE)
endif()
if(MW_USE_FREETYPE2)
find_package(Freetype)
if(Freetype_FOUND)
message(STATUS "FreeType2 found")
target_compile_definitions(
Mw
PRIVATE
USE_FREETYPE2
)
list(APPEND INCLUDE_DIRS ${FREETYPE_INCLUDE_DIRS})
list(APPEND LIBRARY_DIRS ${FREETYPE_LIBRARY_DIRS})
else()
message(WARNING "FreeType2 not found")
endif()
endif()
if(MW_USE_GDI_TEXT)
target_compile_definitions(
Mw
PRIVATE
USE_GDI_TEXT
)
Mw
PRIVATE
USE_FREETYPE2
)
find_package(PkgConfig)
pkg_check_modules(FT2 REQUIRED freetype2)
list(APPEND INCLUDE_DIRS ${FT2_INCLUDE_DIRS})
list(APPEND LIBRARY_DIRS ${FT2_LIBRARY_DIRS})
list(APPEND LIBRARIES ${FT2_LIBRARIES})
endif()
if(MW_USE_WAYLAND)
function(scan_wayland_protocol_core)
execute_process(
COMMAND wayland-scanner private-code /usr/share/wayland/wayland.xml ${CMAKE_CURRENT_SOURCE_DIR}/src/backend/wayland/wayland-core-protocol.c
COMMAND wayland-scanner private-code /usr/share/wayland/wayland.xml ${CMAKE_CURRENT_SOURCE_DIR}/src/backend/wayland-core-protocol.c
OUTPUT_VARIABLE WAYLAND_SCANNER_OUTPUT
ERROR_VARIABLE WAYLAND_SCANNER_ERROR
ECHO_OUTPUT_VARIABLE
@ -178,7 +157,7 @@ if(MW_USE_WAYLAND)
target_sources(
Mw
PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/src/backend/wayland/wayland-core-protocol.c
${CMAKE_CURRENT_SOURCE_DIR}/src/backend/wayland-core-protocol.c
)
execute_process(
COMMAND wayland-scanner client-header /usr/share/wayland/wayland.xml ${CMAKE_CURRENT_SOURCE_DIR}/include/Mw/LowLevel/Wayland/wayland-core-protocol.h
@ -192,7 +171,7 @@ if(MW_USE_WAYLAND)
endfunction()
function(scan_wayland_protocol tier proto ver)
SET(proto_c ${CMAKE_CURRENT_SOURCE_DIR}/src/backend/wayland/wayland-${proto}-protocol.c)
SET(proto_c ${CMAKE_CURRENT_SOURCE_DIR}/src/backend/wayland-${proto}-protocol.c)
execute_process(
COMMAND wayland-scanner private-code /usr/share/wayland-protocols/${tier}/${proto}/${proto}${ver}.xml ${proto_c}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
@ -218,33 +197,6 @@ if(MW_USE_WAYLAND)
)
endfunction()
function(scan_wayland_protocol_from_file proto file)
SET(proto_c ${CMAKE_CURRENT_SOURCE_DIR}/src/backend/wayland/wayland-${proto}-protocol.c)
execute_process(
COMMAND wayland-scanner private-code ${CMAKE_CURRENT_SOURCE_DIR}/resource/wayland/${file} ${proto_c}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
OUTPUT_VARIABLE WAYLAND_SCANNER_OUTPUT
ERROR_VARIABLE WAYLAND_SCANNER_ERROR
ECHO_OUTPUT_VARIABLE
ECHO_ERROR_VARIABLE
COMMAND_ECHO STDOUT
)
target_sources(
Mw
PRIVATE
${proto_c}
)
execute_process(
COMMAND wayland-scanner client-header ${CMAKE_CURRENT_SOURCE_DIR}/resource/wayland/${file} ${CMAKE_CURRENT_SOURCE_DIR}/include/Mw/LowLevel/Wayland/${proto}-client-protocol.h
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
OUTPUT_VARIABLE WAYLAND_SCANNER_OUTPUT
ERROR_VARIABLE WAYLAND_SCANNER_ERROR
ECHO_OUTPUT_VARIABLE
ECHO_ERROR_VARIABLE
COMMAND_ECHO STDOUT
)
endfunction()
check_include_files(wayland-client.h HAVE_WL_H)
check_include_files(xkbcommon/xkbcommon.h HAVE_XKBCOMMON_H)
check_include_files(cairo/cairo.h HAVE_CAIRO_H)
@ -261,16 +213,11 @@ if(MW_USE_WAYLAND)
scan_wayland_protocol("unstable" "primary-selection" "-unstable-v1")
scan_wayland_protocol("unstable" "pointer-constraints" "-unstable-v1")
scan_wayland_protocol("unstable" "relative-pointer" "-unstable-v1")
scan_wayland_protocol_from_file("wlr-layer-shell" "wlr-layer-shell-unstable-v1.xml")
target_sources(
Mw
PRIVATE
src/backend/cairo.c
src/backend/wayland/wayland.c
src/backend/wayland/buffer.c
src/backend/wayland/interfaces.c
src/backend/wayland/region.c
src/backend/wayland.c
)
target_compile_definitions(
Mw
@ -317,8 +264,7 @@ if(MW_CLASSIC_THEME)
)
endif()
message("Building Milsko for ${CMAKE_SYSTEM_NAME}")
if(CMAKE_SYSTEM_NAME STREQUAL "Windows" OR CMAKE_SYSTEM_NAME STREQUAL "MSYS")
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
target_sources(
Mw
PRIVATE
@ -329,30 +275,23 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Windows" OR CMAKE_SYSTEM_NAME STREQUAL "MSYS")
PRIVATE
USE_GDI
)
list(APPEND LIBRARIES gdi32 ole32 uuid)
if(NOT MSVC)
list(APPEND LIBRARIES gdi32)
target_link_options(
Mw
PRIVATE
-static-libgcc
)
endif()
elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
# target_sources(
# Mw
# PRIVATE
# src/backend/cocoa.m
# )
target_sources(
Mw
PRIVATE
src/backend/nococoa.m
)
# target_compile_definitions(
# Mw
# PRIVATE
# USE_COCOA
# )
Mw
PRIVATE
src/backend/cocoa.m
)
target_compile_definitions(
Mw
PRIVATE
USE_COCOA
)
list(APPEND LIBRARIES objc)
target_link_options(
Mw
@ -360,7 +299,6 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
-framework Cocoa
)
elseif(CMAKE_SYSTEM_NAME MATCHES "Retro")
target_sources(
Mw
PRIVATE
@ -379,57 +317,26 @@ elseif(CMAKE_SYSTEM_NAME MATCHES "Retro")
CLASSIC_MAC_OS
)
else()
find_package(PkgConfig)
find_package(X11)
pkg_check_modules(DBUS dbus-1)
pkg_check_modules(X11 REQUIRED x11)
pkg_check_modules(XRENDER REQUIRED xrender)
target_sources(
Mw
PRIVATE
src/backend/x11.c
)
if(${X11_FOUND})
list(APPEND INCLUDE_DIRS ${X11_INCLUDE_DIRS})
list(APPEND LIBRARY_DIRS ${X11_LIBRARY_DIRS})
target_compile_definitions(
Mw
PRIVATE
USE_X11
)
endif()
if(${X11_Xrender_FOUND})
list(APPEND INCLUDE_DIRS ${XRENDER_INCLUDE_DIRS})
list(APPEND LIBRARY_DIRS ${XRENDER_LIBRARY_DIRS})
target_compile_definitions(
Mw
PRIVATE
USE_XRENDER
)
endif()
target_compile_definitions(
Mw
PRIVATE
USE_X11
)
list(APPEND INCLUDE_DIRS ${X11_INCLUDE_DIRS} ${XRENDER_INCLUDE_DIRS})
list(APPEND LIBRARY_DIRS ${X11_LIBRARY_DIRS} ${XRENDER_LIBRARY_DIRS})
list(APPEND LIBRARIES ${X11_LIBRARIES} ${XRENDER_LIBRARIES} m)
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
list(APPEND LIBRARIES dl)
endif()
find_package(DBus1)
if(${DBus1_FOUND})
list(APPEND INCLUDE_DIRS ${DBUS_INCLUDE_DIRS})
list(APPEND LIBRARY_DIRS ${DBUS_LIBRARY_DIRS})
target_compile_definitions(
Mw
PRIVATE
USE_DBUS
)
endif()
endif()
if(UNIX)
list(APPEND LIBRARIES m)
endif()
target_include_directories(
@ -466,20 +373,17 @@ if(MW_BUILD_VULKAN)
)
endif()
check_include_files(vulkan/VULKAN.h HAS_VK_HEADER)
if(HAS_VK_HEADER)
target_compile_definitions(
Mw
PRIVATE
MW_VULKAN
)
endif()
endif()
target_compile_definitions(
Mw
PRIVATE
_MILSKO _MILSKO_BUILD
_MILSKO
)
install(
@ -489,17 +393,6 @@ install(
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/resource/${PROJECT_NAME}.pc.in
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc
@ONLY
)
install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc
DESTINATION $ENV{MINGW_PREFIX}/${CMAKE_INSTALL_DATADIR}/pkgconfig
)
if(MW_INSTALL_HEADERS)
install(
DIRECTORY include/

39
Jenkinsfile vendored
View file

@ -29,11 +29,9 @@ pipeline {
label "built-in"
}
steps {
sh("git clean -dfx")
sh("./configure --enable-opengl --enable-vulkan --without-vulkan-string-helper")
sh("make clean")
sh("make -j4")
sh("mv src/libMw.so libMw64.so")
archiveArtifacts("libMw64.so")
}
}
stage("Build for Windows 32-bit") {
@ -41,12 +39,9 @@ pipeline {
label "built-in"
}
steps {
sh("git clean -dfx")
sh("./configure --enable-opengl --enable-stb-truetype --disable-freetype2 --cross --target=Windows --host=i686-w64-mingw32")
sh("make clean")
sh("make -j4")
sh("mv src/Mw.dll Mw32.dll")
sh("mv src/libMw.dll.a libMw32.dll.a")
archiveArtifacts("Mw32.dll,libMw32.dll.a")
}
}
stage("Build for Windows 64-bit") {
@ -54,12 +49,9 @@ pipeline {
label "built-in"
}
steps {
sh("git clean -dfx")
sh("./configure --enable-opengl --enable-stb-truetype --disable-freetype2 --cross --target=Windows --host=x86_64-w64-mingw32")
sh("make clean")
sh("make -j4")
sh("mv src/Mw.dll Mw64.dll")
sh("mv src/libMw.dll.a libMw64.dll.a")
archiveArtifacts("Mw64.dll,libMw64.dll.a")
}
}
stage("Build for Windows 32-bit (MSVC)") {
@ -67,31 +59,8 @@ pipeline {
label "2012r2"
}
steps {
bat("git clean -dfx")
bat("nmake -f NTMakefile clean")
bat("nmake -f NTMakefile")
bat("move /y src\\Mw.dll MwMSVC32.dll")
bat("move /y src\\Mw.lib MwMSVC32.lib")
archiveArtifacts("MwMSVC32.dll,MwMSVC32.lib")
}
}
stage("Build for Windows 32-bit (Watcom)") {
agent {
label "built-in"
}
environment {
WATCOM = "/usr/watcom"
INCLUDE = "/usr/watcom/h:/usr/watcom/h/nt"
PATH = "/usr/watcom/binl64:${env.PATH}"
}
steps {
sh("git clean -dfx")
sh("wmake -f WatMakefile")
sh("mv src/Mw.dll MwWat32.dll")
sh("mv src/Mw.lib MwWat32.lib")
archiveArtifacts("MwWat32.dll,MwWat32.lib")
sh("./tools/watcom-pack.sh")
sh("mv milsko-examples.zip milsko-examples-win32.zip")
archiveArtifacts("milsko-examples-win32.zip")
}
}
}

240
NTMakefile generated
View file

@ -1,14 +1,10 @@
CC = cl /TC /c /nologo
LD = link /nologo
MW_CFLAGS = /Iinclude /Iexternal\libz\include /D_MILSKO /D_MILSKO_BUILD /DUSE_GDI /DUSE_STB_IMAGE /DSTBI_NO_SIMD /DUSE_GDI_TEXT /DMW_OPENGL
MW_LDFLAGS = /DLL
EXE_CFLAGS = /Iinclude
EXE_LDFLAGS =
CFLAGS = /Iinclude /Iexternal\libz\include /D_MILSKO /DUSE_GDI /DUSE_STB_TRUETYPE /DUSE_STB_IMAGE /DSTBI_NO_SIMD
LDFLAGS = /DLL
.SUFFIXES: .obj .c
all: src\Mw.dll examples\basic\box.exe examples\basic\calculator.exe examples\basic\checkbox.exe examples\basic\clipboard.exe examples\basic\colorpicker.exe examples\basic\combobox.exe examples\basic\example.exe examples\basic\filechooser.exe examples\basic\image.exe examples\basic\listbox.exe examples\basic\messagebox.exe examples\basic\periodic.exe examples\basic\progressbar.exe examples\basic\radiobox.exe examples\basic\rotate.exe examples\basic\scrollbar.exe examples\basic\sevensegment.exe examples\basic\subwindow.exe examples\basic\tab.exe examples\basic\treeview.exe examples\basic\viewport.exe examples\gldemos\boing.exe examples\gldemos\clock.exe examples\gldemos\cube.exe examples\gldemos\gears.exe examples\gldemos\triangle.exe examples\gldemos\tripaint.exe
lib: src\Mw.dll
examples: examples\basic\box.exe examples\basic\calculator.exe examples\basic\checkbox.exe examples\basic\clipboard.exe examples\basic\colorpicker.exe examples\basic\combobox.exe examples\basic\example.exe examples\basic\filechooser.exe examples\basic\image.exe examples\basic\listbox.exe examples\basic\messagebox.exe examples\basic\periodic.exe examples\basic\progressbar.exe examples\basic\radiobox.exe examples\basic\rotate.exe examples\basic\scrollbar.exe examples\basic\sevensegment.exe examples\basic\subwindow.exe examples\basic\tab.exe examples\basic\treeview.exe examples\basic\viewport.exe examples\gldemos\boing.exe examples\gldemos\clock.exe examples\gldemos\cube.exe examples\gldemos\gears.exe examples\gldemos\triangle.exe examples\gldemos\tripaint.exe
all: src\Mw.dll
clean:
del /f /q external\libz\src\adler32.obj
del /f /q external\libz\src\compress.obj
@ -28,7 +24,6 @@ clean:
del /f /q external\stb_ds.obj
del /f /q external\stb_image.obj
del /f /q external\stb_truetype.obj
del /f /q src\abstract\charset.obj
del /f /q src\abstract\directory.obj
del /f /q src\abstract\dynamic.obj
del /f /q src\abstract\time.obj
@ -71,14 +66,11 @@ clean:
del /f /q src\text\font\monottf.obj
del /f /q src\text\font\ttf.obj
del /f /q src\text\ft2.obj
del /f /q src\text\gdi.obj
del /f /q src\text\stbtt.obj
del /f /q src\text\text.obj
del /f /q src\truetype.obj
del /f /q src\unicode.obj
del /f /q src\widget\box.obj
del /f /q src\widget\button.obj
del /f /q src\widget\calendar.obj
del /f /q src\widget\checkbox.obj
del /f /q src\widget\combobox.obj
del /f /q src\widget\entry.obj
@ -94,235 +86,15 @@ clean:
del /f /q src\widget\scrollbar.obj
del /f /q src\widget\separator.obj
del /f /q src\widget\submenu.obj
del /f /q src\widget\subwindow.obj
del /f /q src\widget\tab.obj
del /f /q src\widget\table.obj
del /f /q src\widget\treeview.obj
del /f /q src\widget\viewport.obj
del /f /q src\widget\window.obj
del /f /q src\Mw.dll
del /f /q src\Mw.lib
del /f /q examples\basic\box.obj
del /f /q examples\basic\calculator.obj
del /f /q examples\basic\checkbox.obj
del /f /q examples\basic\clipboard.obj
del /f /q examples\basic\colorpicker.obj
del /f /q examples\basic\combobox.obj
del /f /q examples\basic\example.obj
del /f /q examples\basic\filechooser.obj
del /f /q examples\basic\image.obj
del /f /q examples\basic\listbox.obj
del /f /q examples\basic\messagebox.obj
del /f /q examples\basic\periodic.obj
del /f /q examples\basic\progressbar.obj
del /f /q examples\basic\radiobox.obj
del /f /q examples\basic\rotate.obj
del /f /q examples\basic\scrollbar.obj
del /f /q examples\basic\sevensegment.obj
del /f /q examples\basic\subwindow.obj
del /f /q examples\basic\tab.obj
del /f /q examples\basic\treeview.obj
del /f /q examples\basic\viewport.obj
del /f /q examples\gldemos\boing.obj
del /f /q examples\gldemos\clock.obj
del /f /q examples\gldemos\cube.obj
del /f /q examples\gldemos\gears.obj
del /f /q examples\gldemos\triangle.obj
del /f /q examples\gldemos\tripaint.obj
del /f /q examples\basic\box.exe
del /f /q examples\basic\calculator.exe
del /f /q examples\basic\checkbox.exe
del /f /q examples\basic\clipboard.exe
del /f /q examples\basic\colorpicker.exe
del /f /q examples\basic\combobox.exe
del /f /q examples\basic\example.exe
del /f /q examples\basic\filechooser.exe
del /f /q examples\basic\image.exe
del /f /q examples\basic\listbox.exe
del /f /q examples\basic\messagebox.exe
del /f /q examples\basic\periodic.exe
del /f /q examples\basic\progressbar.exe
del /f /q examples\basic\radiobox.exe
del /f /q examples\basic\rotate.exe
del /f /q examples\basic\scrollbar.exe
del /f /q examples\basic\sevensegment.exe
del /f /q examples\basic\subwindow.exe
del /f /q examples\basic\tab.exe
del /f /q examples\basic\treeview.exe
del /f /q examples\basic\viewport.exe
del /f /q examples\gldemos\boing.exe
del /f /q examples\gldemos\clock.exe
del /f /q examples\gldemos\cube.exe
del /f /q examples\gldemos\gears.exe
del /f /q examples\gldemos\triangle.exe
del /f /q examples\gldemos\tripaint.exe
examples\basic\box.exe: examples\basic\box.obj src\Mw.dll
$(LD) $(EXE_LDFLAGS) /OUT:$@ examples\basic\box.obj src\Mw.lib
examples\basic\box.obj: examples/basic/box.c
$(CC) $(EXE_CFLAGS) /Fo$@ examples/basic/box.c
examples\basic\calculator.exe: examples\basic\calculator.obj src\Mw.dll
$(LD) $(EXE_LDFLAGS) /OUT:$@ examples\basic\calculator.obj src\Mw.lib
examples\basic\calculator.obj: examples/basic/calculator.c
$(CC) $(EXE_CFLAGS) /Fo$@ examples/basic/calculator.c
examples\basic\checkbox.exe: examples\basic\checkbox.obj src\Mw.dll
$(LD) $(EXE_LDFLAGS) /OUT:$@ examples\basic\checkbox.obj src\Mw.lib
examples\basic\checkbox.obj: examples/basic/checkbox.c
$(CC) $(EXE_CFLAGS) /Fo$@ examples/basic/checkbox.c
examples\basic\clipboard.exe: examples\basic\clipboard.obj src\Mw.dll
$(LD) $(EXE_LDFLAGS) /OUT:$@ examples\basic\clipboard.obj src\Mw.lib
examples\basic\clipboard.obj: examples/basic/clipboard.c
$(CC) $(EXE_CFLAGS) /Fo$@ examples/basic/clipboard.c
examples\basic\colorpicker.exe: examples\basic\colorpicker.obj src\Mw.dll
$(LD) $(EXE_LDFLAGS) /OUT:$@ examples\basic\colorpicker.obj src\Mw.lib
examples\basic\colorpicker.obj: examples/basic/colorpicker.c
$(CC) $(EXE_CFLAGS) /Fo$@ examples/basic/colorpicker.c
examples\basic\combobox.exe: examples\basic\combobox.obj src\Mw.dll
$(LD) $(EXE_LDFLAGS) /OUT:$@ examples\basic\combobox.obj src\Mw.lib
examples\basic\combobox.obj: examples/basic/combobox.c
$(CC) $(EXE_CFLAGS) /Fo$@ examples/basic/combobox.c
examples\basic\example.exe: examples\basic\example.obj src\Mw.dll
$(LD) $(EXE_LDFLAGS) /OUT:$@ examples\basic\example.obj src\Mw.lib
examples\basic\example.obj: examples/basic/example.c
$(CC) $(EXE_CFLAGS) /Fo$@ examples/basic/example.c
examples\basic\filechooser.exe: examples\basic\filechooser.obj src\Mw.dll
$(LD) $(EXE_LDFLAGS) /OUT:$@ examples\basic\filechooser.obj src\Mw.lib
examples\basic\filechooser.obj: examples/basic/filechooser.c
$(CC) $(EXE_CFLAGS) /Fo$@ examples/basic/filechooser.c
examples\basic\image.exe: examples\basic\image.obj src\Mw.dll
$(LD) $(EXE_LDFLAGS) /OUT:$@ examples\basic\image.obj src\Mw.lib
examples\basic\image.obj: examples/basic/image.c
$(CC) $(EXE_CFLAGS) /Fo$@ examples/basic/image.c
examples\basic\listbox.exe: examples\basic\listbox.obj src\Mw.dll
$(LD) $(EXE_LDFLAGS) /OUT:$@ examples\basic\listbox.obj src\Mw.lib
examples\basic\listbox.obj: examples/basic/listbox.c
$(CC) $(EXE_CFLAGS) /Fo$@ examples/basic/listbox.c
examples\basic\messagebox.exe: examples\basic\messagebox.obj src\Mw.dll
$(LD) $(EXE_LDFLAGS) /OUT:$@ examples\basic\messagebox.obj src\Mw.lib
examples\basic\messagebox.obj: examples/basic/messagebox.c
$(CC) $(EXE_CFLAGS) /Fo$@ examples/basic/messagebox.c
examples\basic\periodic.exe: examples\basic\periodic.obj src\Mw.dll
$(LD) $(EXE_LDFLAGS) /OUT:$@ examples\basic\periodic.obj src\Mw.lib
examples\basic\periodic.obj: examples/basic/periodic.c
$(CC) $(EXE_CFLAGS) /Fo$@ examples/basic/periodic.c
examples\basic\progressbar.exe: examples\basic\progressbar.obj src\Mw.dll
$(LD) $(EXE_LDFLAGS) /OUT:$@ examples\basic\progressbar.obj src\Mw.lib
examples\basic\progressbar.obj: examples/basic/progressbar.c
$(CC) $(EXE_CFLAGS) /Fo$@ examples/basic/progressbar.c
examples\basic\radiobox.exe: examples\basic\radiobox.obj src\Mw.dll
$(LD) $(EXE_LDFLAGS) /OUT:$@ examples\basic\radiobox.obj src\Mw.lib
examples\basic\radiobox.obj: examples/basic/radiobox.c
$(CC) $(EXE_CFLAGS) /Fo$@ examples/basic/radiobox.c
examples\basic\rotate.exe: examples\basic\rotate.obj src\Mw.dll
$(LD) $(EXE_LDFLAGS) /OUT:$@ examples\basic\rotate.obj src\Mw.lib
examples\basic\rotate.obj: examples/basic/rotate.c
$(CC) $(EXE_CFLAGS) /Fo$@ examples/basic/rotate.c
examples\basic\scrollbar.exe: examples\basic\scrollbar.obj src\Mw.dll
$(LD) $(EXE_LDFLAGS) /OUT:$@ examples\basic\scrollbar.obj src\Mw.lib
examples\basic\scrollbar.obj: examples/basic/scrollbar.c
$(CC) $(EXE_CFLAGS) /Fo$@ examples/basic/scrollbar.c
examples\basic\sevensegment.exe: examples\basic\sevensegment.obj src\Mw.dll
$(LD) $(EXE_LDFLAGS) /OUT:$@ examples\basic\sevensegment.obj src\Mw.lib
examples\basic\sevensegment.obj: examples/basic/sevensegment.c
$(CC) $(EXE_CFLAGS) /Fo$@ examples/basic/sevensegment.c
examples\basic\subwindow.exe: examples\basic\subwindow.obj src\Mw.dll
$(LD) $(EXE_LDFLAGS) /OUT:$@ examples\basic\subwindow.obj src\Mw.lib
examples\basic\subwindow.obj: examples/basic/subwindow.c
$(CC) $(EXE_CFLAGS) /Fo$@ examples/basic/subwindow.c
examples\basic\tab.exe: examples\basic\tab.obj src\Mw.dll
$(LD) $(EXE_LDFLAGS) /OUT:$@ examples\basic\tab.obj src\Mw.lib
examples\basic\tab.obj: examples/basic/tab.c
$(CC) $(EXE_CFLAGS) /Fo$@ examples/basic/tab.c
examples\basic\treeview.exe: examples\basic\treeview.obj src\Mw.dll
$(LD) $(EXE_LDFLAGS) /OUT:$@ examples\basic\treeview.obj src\Mw.lib
examples\basic\treeview.obj: examples/basic/treeview.c
$(CC) $(EXE_CFLAGS) /Fo$@ examples/basic/treeview.c
examples\basic\viewport.exe: examples\basic\viewport.obj src\Mw.dll
$(LD) $(EXE_LDFLAGS) /OUT:$@ examples\basic\viewport.obj src\Mw.lib
examples\basic\viewport.obj: examples/basic/viewport.c
$(CC) $(EXE_CFLAGS) /Fo$@ examples/basic/viewport.c
examples\gldemos\boing.exe: examples\gldemos\boing.obj src\Mw.dll
$(LD) $(EXE_LDFLAGS) /OUT:$@ examples\gldemos\boing.obj src\Mw.lib opengl32.lib glu32.lib
examples\gldemos\boing.obj: examples/gldemos/boing.c
$(CC) $(EXE_CFLAGS) /Fo$@ examples/gldemos/boing.c
examples\gldemos\clock.exe: examples\gldemos\clock.obj src\Mw.dll
$(LD) $(EXE_LDFLAGS) /OUT:$@ examples\gldemos\clock.obj src\Mw.lib opengl32.lib glu32.lib
examples\gldemos\clock.obj: examples/gldemos/clock.c
$(CC) $(EXE_CFLAGS) /Fo$@ examples/gldemos/clock.c
examples\gldemos\cube.exe: examples\gldemos\cube.obj src\Mw.dll
$(LD) $(EXE_LDFLAGS) /OUT:$@ examples\gldemos\cube.obj src\Mw.lib opengl32.lib glu32.lib
examples\gldemos\cube.obj: examples/gldemos/cube.c
$(CC) $(EXE_CFLAGS) /Fo$@ examples/gldemos/cube.c
examples\gldemos\gears.exe: examples\gldemos\gears.obj src\Mw.dll
$(LD) $(EXE_LDFLAGS) /OUT:$@ examples\gldemos\gears.obj src\Mw.lib opengl32.lib glu32.lib
examples\gldemos\gears.obj: examples/gldemos/gears.c
$(CC) $(EXE_CFLAGS) /Fo$@ examples/gldemos/gears.c
examples\gldemos\triangle.exe: examples\gldemos\triangle.obj src\Mw.dll
$(LD) $(EXE_LDFLAGS) /OUT:$@ examples\gldemos\triangle.obj src\Mw.lib opengl32.lib glu32.lib
examples\gldemos\triangle.obj: examples/gldemos/triangle.c
$(CC) $(EXE_CFLAGS) /Fo$@ examples/gldemos/triangle.c
examples\gldemos\tripaint.exe: examples\gldemos\tripaint.obj src\Mw.dll
$(LD) $(EXE_LDFLAGS) /OUT:$@ examples\gldemos\tripaint.obj src\Mw.lib opengl32.lib glu32.lib
examples\gldemos\tripaint.obj: examples/gldemos/tripaint.c
$(CC) $(EXE_CFLAGS) /Fo$@ examples/gldemos/tripaint.c
src\Mw.dll: external\libz\src\adler32.obj external\libz\src\compress.obj external\libz\src\crc32.obj external\libz\src\deflate.obj external\libz\src\gzclose.obj external\libz\src\gzlib.obj external\libz\src\gzread.obj external\libz\src\gzwrite.obj external\libz\src\infback.obj external\libz\src\inffast.obj external\libz\src\inflate.obj external\libz\src\inftrees.obj external\libz\src\trees.obj external\libz\src\uncompr.obj external\libz\src\zutil.obj external\stb_ds.obj external\stb_image.obj external\stb_truetype.obj src\abstract\charset.obj src\abstract\directory.obj src\abstract\dynamic.obj src\abstract\time.obj src\backend\gdi.obj src\color.obj src\core.obj src\cursor\arrow.obj src\cursor\cross.obj src\cursor\default.obj src\cursor\hidden.obj src\cursor\text.obj src\default.obj src\dialog\colorpicker.obj src\dialog\directorychooser.obj src\dialog\filechooser.obj src\dialog\messagebox.obj src\draw.obj src\icon\back.obj src\icon\clock.obj src\icon\computer.obj src\icon\directory.obj src\icon\down.obj src\icon\error.obj src\icon\file.obj src\icon\forward.obj src\icon\info.obj src\icon\left.obj src\icon\news.obj src\icon\note.obj src\icon\right.obj src\icon\search.obj src\icon\up.obj src\icon\warning.obj src\lowlevel.obj src\string.obj src\text\font\boldfont.obj src\text\font\boldmonottf.obj src\text\font\boldttf.obj src\text\font\font.obj src\text\font\monottf.obj src\text\font\ttf.obj src\text\ft2.obj src\text\gdi.obj src\text\stbtt.obj src\text\text.obj src\truetype.obj src\unicode.obj src\widget\box.obj src\widget\button.obj src\widget\calendar.obj src\widget\checkbox.obj src\widget\combobox.obj src\widget\entry.obj src\widget\frame.obj src\widget\image.obj src\widget\label.obj src\widget\listbox.obj src\widget\menu.obj src\widget\numberentry.obj src\widget\opengl.obj src\widget\progressbar.obj src\widget\radiobox.obj src\widget\scrollbar.obj src\widget\separator.obj src\widget\submenu.obj src\widget\subwindow.obj src\widget\tab.obj src\widget\table.obj src\widget\treeview.obj src\widget\viewport.obj src\widget\window.obj
$(LD) $(MW_LDFLAGS) /OUT:$@ external\libz\src\adler32.obj external\libz\src\compress.obj external\libz\src\crc32.obj external\libz\src\deflate.obj external\libz\src\gzclose.obj external\libz\src\gzlib.obj external\libz\src\gzread.obj external\libz\src\gzwrite.obj external\libz\src\infback.obj external\libz\src\inffast.obj external\libz\src\inflate.obj external\libz\src\inftrees.obj external\libz\src\trees.obj external\libz\src\uncompr.obj external\libz\src\zutil.obj external\stb_ds.obj external\stb_image.obj external\stb_truetype.obj src\abstract\charset.obj src\abstract\directory.obj src\abstract\dynamic.obj src\abstract\time.obj src\backend\gdi.obj src\color.obj src\core.obj src\cursor\arrow.obj src\cursor\cross.obj src\cursor\default.obj src\cursor\hidden.obj src\cursor\text.obj src\default.obj src\dialog\colorpicker.obj src\dialog\directorychooser.obj src\dialog\filechooser.obj src\dialog\messagebox.obj src\draw.obj src\icon\back.obj src\icon\clock.obj src\icon\computer.obj src\icon\directory.obj src\icon\down.obj src\icon\error.obj src\icon\file.obj src\icon\forward.obj src\icon\info.obj src\icon\left.obj src\icon\news.obj src\icon\note.obj src\icon\right.obj src\icon\search.obj src\icon\up.obj src\icon\warning.obj src\lowlevel.obj src\string.obj src\text\font\boldfont.obj src\text\font\boldmonottf.obj src\text\font\boldttf.obj src\text\font\font.obj src\text\font\monottf.obj src\text\font\ttf.obj src\text\ft2.obj src\text\gdi.obj src\text\stbtt.obj src\text\text.obj src\truetype.obj src\unicode.obj src\widget\box.obj src\widget\button.obj src\widget\calendar.obj src\widget\checkbox.obj src\widget\combobox.obj src\widget\entry.obj src\widget\frame.obj src\widget\image.obj src\widget\label.obj src\widget\listbox.obj src\widget\menu.obj src\widget\numberentry.obj src\widget\opengl.obj src\widget\progressbar.obj src\widget\radiobox.obj src\widget\scrollbar.obj src\widget\separator.obj src\widget\submenu.obj src\widget\subwindow.obj src\widget\tab.obj src\widget\table.obj src\widget\treeview.obj src\widget\viewport.obj src\widget\window.obj opengl32.lib gdi32.lib ole32.lib uuid.lib user32.lib advapi32.lib
src\Mw.dll: external\libz\src\adler32.obj external\libz\src\compress.obj external\libz\src\crc32.obj external\libz\src\deflate.obj external\libz\src\gzclose.obj external\libz\src\gzlib.obj external\libz\src\gzread.obj external\libz\src\gzwrite.obj external\libz\src\infback.obj external\libz\src\inffast.obj external\libz\src\inflate.obj external\libz\src\inftrees.obj external\libz\src\trees.obj external\libz\src\uncompr.obj external\libz\src\zutil.obj external\stb_ds.obj external\stb_image.obj external\stb_truetype.obj src\abstract\directory.obj src\abstract\dynamic.obj src\abstract\time.obj src\backend\gdi.obj src\color.obj src\core.obj src\cursor\arrow.obj src\cursor\cross.obj src\cursor\default.obj src\cursor\hidden.obj src\cursor\text.obj src\default.obj src\dialog\colorpicker.obj src\dialog\directorychooser.obj src\dialog\filechooser.obj src\dialog\messagebox.obj src\draw.obj src\icon\back.obj src\icon\clock.obj src\icon\computer.obj src\icon\directory.obj src\icon\down.obj src\icon\error.obj src\icon\file.obj src\icon\forward.obj src\icon\info.obj src\icon\left.obj src\icon\news.obj src\icon\note.obj src\icon\right.obj src\icon\search.obj src\icon\up.obj src\icon\warning.obj src\lowlevel.obj src\string.obj src\text\font\boldfont.obj src\text\font\boldmonottf.obj src\text\font\boldttf.obj src\text\font\font.obj src\text\font\monottf.obj src\text\font\ttf.obj src\text\ft2.obj src\text\stbtt.obj src\text\text.obj src\unicode.obj src\widget\box.obj src\widget\button.obj src\widget\checkbox.obj src\widget\combobox.obj src\widget\entry.obj src\widget\frame.obj src\widget\image.obj src\widget\label.obj src\widget\listbox.obj src\widget\menu.obj src\widget\numberentry.obj src\widget\opengl.obj src\widget\progressbar.obj src\widget\radiobox.obj src\widget\scrollbar.obj src\widget\separator.obj src\widget\submenu.obj src\widget\treeview.obj src\widget\viewport.obj src\widget\window.obj
$(LD) $(LDFLAGS) /OUT:$@ external\libz\src\adler32.obj external\libz\src\compress.obj external\libz\src\crc32.obj external\libz\src\deflate.obj external\libz\src\gzclose.obj external\libz\src\gzlib.obj external\libz\src\gzread.obj external\libz\src\gzwrite.obj external\libz\src\infback.obj external\libz\src\inffast.obj external\libz\src\inflate.obj external\libz\src\inftrees.obj external\libz\src\trees.obj external\libz\src\uncompr.obj external\libz\src\zutil.obj external\stb_ds.obj external\stb_image.obj external\stb_truetype.obj src\abstract\directory.obj src\abstract\dynamic.obj src\abstract\time.obj src\backend\gdi.obj src\color.obj src\core.obj src\cursor\arrow.obj src\cursor\cross.obj src\cursor\default.obj src\cursor\hidden.obj src\cursor\text.obj src\default.obj src\dialog\colorpicker.obj src\dialog\directorychooser.obj src\dialog\filechooser.obj src\dialog\messagebox.obj src\draw.obj src\icon\back.obj src\icon\clock.obj src\icon\computer.obj src\icon\directory.obj src\icon\down.obj src\icon\error.obj src\icon\file.obj src\icon\forward.obj src\icon\info.obj src\icon\left.obj src\icon\news.obj src\icon\note.obj src\icon\right.obj src\icon\search.obj src\icon\up.obj src\icon\warning.obj src\lowlevel.obj src\string.obj src\text\font\boldfont.obj src\text\font\boldmonottf.obj src\text\font\boldttf.obj src\text\font\font.obj src\text\font\monottf.obj src\text\font\ttf.obj src\text\ft2.obj src\text\stbtt.obj src\text\text.obj src\unicode.obj src\widget\box.obj src\widget\button.obj src\widget\checkbox.obj src\widget\combobox.obj src\widget\entry.obj src\widget\frame.obj src\widget\image.obj src\widget\label.obj src\widget\listbox.obj src\widget\menu.obj src\widget\numberentry.obj src\widget\opengl.obj src\widget\progressbar.obj src\widget\radiobox.obj src\widget\scrollbar.obj src\widget\separator.obj src\widget\submenu.obj src\widget\treeview.obj src\widget\viewport.obj src\widget\window.obj opengl32.lib gdi32.lib user32.lib advapi32.lib
.c.obj:
$(CC) $(MW_CFLAGS) /Fo$@ $<
$(CC) $(CFLAGS) /Fo$@ $<

View file

@ -1,5 +1,5 @@
Greetings - Welcome to the Milsko GUI Toolkit (Version 1.4)
Greetings - Welcome to the Milsko GUI Toolkit (Version pre-1.0)
This document contains a brief summary of the contents of this source
distributions and building instructions for Milsko GUI Toolkit.
@ -8,7 +8,8 @@ distributions and building instructions for Milsko GUI Toolkit.
Milsko requires either
* A Windows environment with GDI (so anything NT or 9x)
* A Unix-like environment with Wayland and/or X11 for runtime.
* A MacOS environment with Cocoa (10.4 or above supported)
* A Unix-like environment with X11 for runtime.
To build Milsko for Windows, you must have one of following compilers:
* Visual C++ 6.0 or newer
@ -62,10 +63,8 @@ D. MinGW-w64/GCC/Clang
1) Determine if you need Vulkan and/or OpenGL.
2) Either:
a.) Run `./configure'. For help, run `./configure --help'.
b.) Use CMake; i.e. `cmake -B build`. (if contributing, name the build
folder build as that's what's included in the .gitignore)
2) Run `./configure'.
For help, run `./configure --help'.
3) Run `make'.

420
WatMakefile generated
View file

@ -1,13 +1,9 @@
CC = wcc386 -bt=nt -q
CC = wcc386 -bt=nt -q -bd -d3
LD = wlink option quiet
MW_CFLAGS = -bd -i=include -i=external/libz/include -d_MILSKO -d_MILSKO_BUILD -dUSE_GDI -dUSE_STB_IMAGE -dSTBI_NO_SIMD -dUSE_GDI_TEXT -dMW_OPENGL
MW_LDFLAGS = system nt_dll
EXE_CFLAGS = -i=include
EXE_LDFLAGS = system nt
all: src/Mw.dll examples/basic/box.exe examples/basic/calculator.exe examples/basic/checkbox.exe examples/basic/clipboard.exe examples/basic/colorpicker.exe examples/basic/combobox.exe examples/basic/example.exe examples/basic/filechooser.exe examples/basic/image.exe examples/basic/listbox.exe examples/basic/messagebox.exe examples/basic/periodic.exe examples/basic/progressbar.exe examples/basic/radiobox.exe examples/basic/rotate.exe examples/basic/scrollbar.exe examples/basic/sevensegment.exe examples/basic/subwindow.exe examples/basic/tab.exe examples/basic/treeview.exe examples/basic/viewport.exe examples/gldemos/boing.exe examples/gldemos/clock.exe examples/gldemos/cube.exe examples/gldemos/gears.exe examples/gldemos/triangle.exe examples/gldemos/tripaint.exe
lib: src/Mw.dll
examples: examples/basic/box.exe examples/basic/calculator.exe examples/basic/checkbox.exe examples/basic/clipboard.exe examples/basic/colorpicker.exe examples/basic/combobox.exe examples/basic/example.exe examples/basic/filechooser.exe examples/basic/image.exe examples/basic/listbox.exe examples/basic/messagebox.exe examples/basic/periodic.exe examples/basic/progressbar.exe examples/basic/radiobox.exe examples/basic/rotate.exe examples/basic/scrollbar.exe examples/basic/sevensegment.exe examples/basic/subwindow.exe examples/basic/tab.exe examples/basic/treeview.exe examples/basic/viewport.exe examples/gldemos/boing.exe examples/gldemos/clock.exe examples/gldemos/cube.exe examples/gldemos/gears.exe examples/gldemos/triangle.exe examples/gldemos/tripaint.exe
CFLAGS = -i=include -i=external/libz/include -d_MILSKO -dUSE_GDI -dUSE_STB_TRUETYPE -dUSE_STB_IMAGE -dSTBI_NO_SIMD
LDFLAGS = system nt_dll
all: src/Mw.dll
clean: .SYMBOLIC
%erase external/libz/src/adler32.obj
%erase external/libz/src/compress.obj
@ -27,7 +23,6 @@ clean: .SYMBOLIC
%erase external/stb_ds.obj
%erase external/stb_image.obj
%erase external/stb_truetype.obj
%erase src/abstract/charset.obj
%erase src/abstract/directory.obj
%erase src/abstract/dynamic.obj
%erase src/abstract/time.obj
@ -70,14 +65,11 @@ clean: .SYMBOLIC
%erase src/text/font/monottf.obj
%erase src/text/font/ttf.obj
%erase src/text/ft2.obj
%erase src/text/gdi.obj
%erase src/text/stbtt.obj
%erase src/text/text.obj
%erase src/truetype.obj
%erase src/unicode.obj
%erase src/widget/box.obj
%erase src/widget/button.obj
%erase src/widget/calendar.obj
%erase src/widget/checkbox.obj
%erase src/widget/combobox.obj
%erase src/widget/entry.obj
@ -93,414 +85,180 @@ clean: .SYMBOLIC
%erase src/widget/scrollbar.obj
%erase src/widget/separator.obj
%erase src/widget/submenu.obj
%erase src/widget/subwindow.obj
%erase src/widget/tab.obj
%erase src/widget/table.obj
%erase src/widget/treeview.obj
%erase src/widget/viewport.obj
%erase src/widget/window.obj
%erase src/Mw.dll
%erase src/Mw.lib
%erase examples/basic/box.obj
%erase examples/basic/calculator.obj
%erase examples/basic/checkbox.obj
%erase examples/basic/clipboard.obj
%erase examples/basic/colorpicker.obj
%erase examples/basic/combobox.obj
%erase examples/basic/example.obj
%erase examples/basic/filechooser.obj
%erase examples/basic/image.obj
%erase examples/basic/listbox.obj
%erase examples/basic/messagebox.obj
%erase examples/basic/periodic.obj
%erase examples/basic/progressbar.obj
%erase examples/basic/radiobox.obj
%erase examples/basic/rotate.obj
%erase examples/basic/scrollbar.obj
%erase examples/basic/sevensegment.obj
%erase examples/basic/subwindow.obj
%erase examples/basic/tab.obj
%erase examples/basic/treeview.obj
%erase examples/basic/viewport.obj
%erase examples/gldemos/boing.obj
%erase examples/gldemos/clock.obj
%erase examples/gldemos/cube.obj
%erase examples/gldemos/gears.obj
%erase examples/gldemos/triangle.obj
%erase examples/gldemos/tripaint.obj
%erase examples/basic/box.exe
%erase examples/basic/calculator.exe
%erase examples/basic/checkbox.exe
%erase examples/basic/clipboard.exe
%erase examples/basic/colorpicker.exe
%erase examples/basic/combobox.exe
%erase examples/basic/example.exe
%erase examples/basic/filechooser.exe
%erase examples/basic/image.exe
%erase examples/basic/listbox.exe
%erase examples/basic/messagebox.exe
%erase examples/basic/periodic.exe
%erase examples/basic/progressbar.exe
%erase examples/basic/radiobox.exe
%erase examples/basic/rotate.exe
%erase examples/basic/scrollbar.exe
%erase examples/basic/sevensegment.exe
%erase examples/basic/subwindow.exe
%erase examples/basic/tab.exe
%erase examples/basic/treeview.exe
%erase examples/basic/viewport.exe
%erase examples/gldemos/boing.exe
%erase examples/gldemos/clock.exe
%erase examples/gldemos/cube.exe
%erase examples/gldemos/gears.exe
%erase examples/gldemos/triangle.exe
%erase examples/gldemos/tripaint.exe
examples/basic/box.exe: examples/basic/box.obj src/Mw.dll
$(LD) $(EXE_LDFLAGS) name $@ file examples/basic/box.obj library clib3r.lib library src/Mw.lib
examples/basic/box.obj: examples/basic/box.c
$(CC) $(EXE_CFLAGS) -fo=$@ examples/basic/box.c
examples/basic/calculator.exe: examples/basic/calculator.obj src/Mw.dll
$(LD) $(EXE_LDFLAGS) name $@ file examples/basic/calculator.obj library clib3r.lib library src/Mw.lib
examples/basic/calculator.obj: examples/basic/calculator.c
$(CC) $(EXE_CFLAGS) -fo=$@ examples/basic/calculator.c
examples/basic/checkbox.exe: examples/basic/checkbox.obj src/Mw.dll
$(LD) $(EXE_LDFLAGS) name $@ file examples/basic/checkbox.obj library clib3r.lib library src/Mw.lib
examples/basic/checkbox.obj: examples/basic/checkbox.c
$(CC) $(EXE_CFLAGS) -fo=$@ examples/basic/checkbox.c
examples/basic/clipboard.exe: examples/basic/clipboard.obj src/Mw.dll
$(LD) $(EXE_LDFLAGS) name $@ file examples/basic/clipboard.obj library clib3r.lib library src/Mw.lib
examples/basic/clipboard.obj: examples/basic/clipboard.c
$(CC) $(EXE_CFLAGS) -fo=$@ examples/basic/clipboard.c
examples/basic/colorpicker.exe: examples/basic/colorpicker.obj src/Mw.dll
$(LD) $(EXE_LDFLAGS) name $@ file examples/basic/colorpicker.obj library clib3r.lib library src/Mw.lib
examples/basic/colorpicker.obj: examples/basic/colorpicker.c
$(CC) $(EXE_CFLAGS) -fo=$@ examples/basic/colorpicker.c
examples/basic/combobox.exe: examples/basic/combobox.obj src/Mw.dll
$(LD) $(EXE_LDFLAGS) name $@ file examples/basic/combobox.obj library clib3r.lib library src/Mw.lib
examples/basic/combobox.obj: examples/basic/combobox.c
$(CC) $(EXE_CFLAGS) -fo=$@ examples/basic/combobox.c
examples/basic/example.exe: examples/basic/example.obj src/Mw.dll
$(LD) $(EXE_LDFLAGS) name $@ file examples/basic/example.obj library clib3r.lib library src/Mw.lib
examples/basic/example.obj: examples/basic/example.c
$(CC) $(EXE_CFLAGS) -fo=$@ examples/basic/example.c
examples/basic/filechooser.exe: examples/basic/filechooser.obj src/Mw.dll
$(LD) $(EXE_LDFLAGS) name $@ file examples/basic/filechooser.obj library clib3r.lib library src/Mw.lib
examples/basic/filechooser.obj: examples/basic/filechooser.c
$(CC) $(EXE_CFLAGS) -fo=$@ examples/basic/filechooser.c
examples/basic/image.exe: examples/basic/image.obj src/Mw.dll
$(LD) $(EXE_LDFLAGS) name $@ file examples/basic/image.obj library clib3r.lib library src/Mw.lib
examples/basic/image.obj: examples/basic/image.c
$(CC) $(EXE_CFLAGS) -fo=$@ examples/basic/image.c
examples/basic/listbox.exe: examples/basic/listbox.obj src/Mw.dll
$(LD) $(EXE_LDFLAGS) name $@ file examples/basic/listbox.obj library clib3r.lib library src/Mw.lib
examples/basic/listbox.obj: examples/basic/listbox.c
$(CC) $(EXE_CFLAGS) -fo=$@ examples/basic/listbox.c
examples/basic/messagebox.exe: examples/basic/messagebox.obj src/Mw.dll
$(LD) $(EXE_LDFLAGS) name $@ file examples/basic/messagebox.obj library clib3r.lib library src/Mw.lib
examples/basic/messagebox.obj: examples/basic/messagebox.c
$(CC) $(EXE_CFLAGS) -fo=$@ examples/basic/messagebox.c
examples/basic/periodic.exe: examples/basic/periodic.obj src/Mw.dll
$(LD) $(EXE_LDFLAGS) name $@ file examples/basic/periodic.obj library clib3r.lib library src/Mw.lib
examples/basic/periodic.obj: examples/basic/periodic.c
$(CC) $(EXE_CFLAGS) -fo=$@ examples/basic/periodic.c
examples/basic/progressbar.exe: examples/basic/progressbar.obj src/Mw.dll
$(LD) $(EXE_LDFLAGS) name $@ file examples/basic/progressbar.obj library clib3r.lib library src/Mw.lib
examples/basic/progressbar.obj: examples/basic/progressbar.c
$(CC) $(EXE_CFLAGS) -fo=$@ examples/basic/progressbar.c
examples/basic/radiobox.exe: examples/basic/radiobox.obj src/Mw.dll
$(LD) $(EXE_LDFLAGS) name $@ file examples/basic/radiobox.obj library clib3r.lib library src/Mw.lib
examples/basic/radiobox.obj: examples/basic/radiobox.c
$(CC) $(EXE_CFLAGS) -fo=$@ examples/basic/radiobox.c
examples/basic/rotate.exe: examples/basic/rotate.obj src/Mw.dll
$(LD) $(EXE_LDFLAGS) name $@ file examples/basic/rotate.obj library clib3r.lib library src/Mw.lib
examples/basic/rotate.obj: examples/basic/rotate.c
$(CC) $(EXE_CFLAGS) -fo=$@ examples/basic/rotate.c
examples/basic/scrollbar.exe: examples/basic/scrollbar.obj src/Mw.dll
$(LD) $(EXE_LDFLAGS) name $@ file examples/basic/scrollbar.obj library clib3r.lib library src/Mw.lib
examples/basic/scrollbar.obj: examples/basic/scrollbar.c
$(CC) $(EXE_CFLAGS) -fo=$@ examples/basic/scrollbar.c
examples/basic/sevensegment.exe: examples/basic/sevensegment.obj src/Mw.dll
$(LD) $(EXE_LDFLAGS) name $@ file examples/basic/sevensegment.obj library clib3r.lib library src/Mw.lib
examples/basic/sevensegment.obj: examples/basic/sevensegment.c
$(CC) $(EXE_CFLAGS) -fo=$@ examples/basic/sevensegment.c
examples/basic/subwindow.exe: examples/basic/subwindow.obj src/Mw.dll
$(LD) $(EXE_LDFLAGS) name $@ file examples/basic/subwindow.obj library clib3r.lib library src/Mw.lib
examples/basic/subwindow.obj: examples/basic/subwindow.c
$(CC) $(EXE_CFLAGS) -fo=$@ examples/basic/subwindow.c
examples/basic/tab.exe: examples/basic/tab.obj src/Mw.dll
$(LD) $(EXE_LDFLAGS) name $@ file examples/basic/tab.obj library clib3r.lib library src/Mw.lib
examples/basic/tab.obj: examples/basic/tab.c
$(CC) $(EXE_CFLAGS) -fo=$@ examples/basic/tab.c
examples/basic/treeview.exe: examples/basic/treeview.obj src/Mw.dll
$(LD) $(EXE_LDFLAGS) name $@ file examples/basic/treeview.obj library clib3r.lib library src/Mw.lib
examples/basic/treeview.obj: examples/basic/treeview.c
$(CC) $(EXE_CFLAGS) -fo=$@ examples/basic/treeview.c
examples/basic/viewport.exe: examples/basic/viewport.obj src/Mw.dll
$(LD) $(EXE_LDFLAGS) name $@ file examples/basic/viewport.obj library clib3r.lib library src/Mw.lib
examples/basic/viewport.obj: examples/basic/viewport.c
$(CC) $(EXE_CFLAGS) -fo=$@ examples/basic/viewport.c
examples/gldemos/boing.exe: examples/gldemos/boing.obj src/Mw.dll
$(LD) $(EXE_LDFLAGS) name $@ file examples/gldemos/boing.obj library clib3r.lib library src/Mw.lib library opengl32.lib library glu32.lib
examples/gldemos/boing.obj: examples/gldemos/boing.c
$(CC) $(EXE_CFLAGS) -fo=$@ examples/gldemos/boing.c
examples/gldemos/clock.exe: examples/gldemos/clock.obj src/Mw.dll
$(LD) $(EXE_LDFLAGS) name $@ file examples/gldemos/clock.obj library clib3r.lib library src/Mw.lib library opengl32.lib library glu32.lib
examples/gldemos/clock.obj: examples/gldemos/clock.c
$(CC) $(EXE_CFLAGS) -fo=$@ examples/gldemos/clock.c
examples/gldemos/cube.exe: examples/gldemos/cube.obj src/Mw.dll
$(LD) $(EXE_LDFLAGS) name $@ file examples/gldemos/cube.obj library clib3r.lib library src/Mw.lib library opengl32.lib library glu32.lib
examples/gldemos/cube.obj: examples/gldemos/cube.c
$(CC) $(EXE_CFLAGS) -fo=$@ examples/gldemos/cube.c
examples/gldemos/gears.exe: examples/gldemos/gears.obj src/Mw.dll
$(LD) $(EXE_LDFLAGS) name $@ file examples/gldemos/gears.obj library clib3r.lib library src/Mw.lib library opengl32.lib library glu32.lib
examples/gldemos/gears.obj: examples/gldemos/gears.c
$(CC) $(EXE_CFLAGS) -fo=$@ examples/gldemos/gears.c
examples/gldemos/triangle.exe: examples/gldemos/triangle.obj src/Mw.dll
$(LD) $(EXE_LDFLAGS) name $@ file examples/gldemos/triangle.obj library clib3r.lib library src/Mw.lib library opengl32.lib library glu32.lib
examples/gldemos/triangle.obj: examples/gldemos/triangle.c
$(CC) $(EXE_CFLAGS) -fo=$@ examples/gldemos/triangle.c
examples/gldemos/tripaint.exe: examples/gldemos/tripaint.obj src/Mw.dll
$(LD) $(EXE_LDFLAGS) name $@ file examples/gldemos/tripaint.obj library clib3r.lib library src/Mw.lib library opengl32.lib library glu32.lib
examples/gldemos/tripaint.obj: examples/gldemos/tripaint.c
$(CC) $(EXE_CFLAGS) -fo=$@ examples/gldemos/tripaint.c
src/Mw.dll: external/libz/src/adler32.obj external/libz/src/compress.obj external/libz/src/crc32.obj external/libz/src/deflate.obj external/libz/src/gzclose.obj external/libz/src/gzlib.obj external/libz/src/gzread.obj external/libz/src/gzwrite.obj external/libz/src/infback.obj external/libz/src/inffast.obj external/libz/src/inflate.obj external/libz/src/inftrees.obj external/libz/src/trees.obj external/libz/src/uncompr.obj external/libz/src/zutil.obj external/stb_ds.obj external/stb_image.obj external/stb_truetype.obj src/abstract/charset.obj src/abstract/directory.obj src/abstract/dynamic.obj src/abstract/time.obj src/backend/gdi.obj src/color.obj src/core.obj src/cursor/arrow.obj src/cursor/cross.obj src/cursor/default.obj src/cursor/hidden.obj src/cursor/text.obj src/default.obj src/dialog/colorpicker.obj src/dialog/directorychooser.obj src/dialog/filechooser.obj src/dialog/messagebox.obj src/draw.obj src/icon/back.obj src/icon/clock.obj src/icon/computer.obj src/icon/directory.obj src/icon/down.obj src/icon/error.obj src/icon/file.obj src/icon/forward.obj src/icon/info.obj src/icon/left.obj src/icon/news.obj src/icon/note.obj src/icon/right.obj src/icon/search.obj src/icon/up.obj src/icon/warning.obj src/lowlevel.obj src/string.obj src/text/font/boldfont.obj src/text/font/boldmonottf.obj src/text/font/boldttf.obj src/text/font/font.obj src/text/font/monottf.obj src/text/font/ttf.obj src/text/ft2.obj src/text/gdi.obj src/text/stbtt.obj src/text/text.obj src/truetype.obj src/unicode.obj src/widget/box.obj src/widget/button.obj src/widget/calendar.obj src/widget/checkbox.obj src/widget/combobox.obj src/widget/entry.obj src/widget/frame.obj src/widget/image.obj src/widget/label.obj src/widget/listbox.obj src/widget/menu.obj src/widget/numberentry.obj src/widget/opengl.obj src/widget/progressbar.obj src/widget/radiobox.obj src/widget/scrollbar.obj src/widget/separator.obj src/widget/submenu.obj src/widget/subwindow.obj src/widget/tab.obj src/widget/table.obj src/widget/treeview.obj src/widget/viewport.obj src/widget/window.obj
$(LD) $(MW_LDFLAGS) option implib=src/Mw.lib name $@ file external/libz/src/adler32.obj file external/libz/src/compress.obj file external/libz/src/crc32.obj file external/libz/src/deflate.obj file external/libz/src/gzclose.obj file external/libz/src/gzlib.obj file external/libz/src/gzread.obj file external/libz/src/gzwrite.obj file external/libz/src/infback.obj file external/libz/src/inffast.obj file external/libz/src/inflate.obj file external/libz/src/inftrees.obj file external/libz/src/trees.obj file external/libz/src/uncompr.obj file external/libz/src/zutil.obj file external/stb_ds.obj file external/stb_image.obj file external/stb_truetype.obj file src/abstract/charset.obj file src/abstract/directory.obj file src/abstract/dynamic.obj file src/abstract/time.obj file src/backend/gdi.obj file src/color.obj file src/core.obj file src/cursor/arrow.obj file src/cursor/cross.obj file src/cursor/default.obj file src/cursor/hidden.obj file src/cursor/text.obj file src/default.obj file src/dialog/colorpicker.obj file src/dialog/directorychooser.obj file src/dialog/filechooser.obj file src/dialog/messagebox.obj file src/draw.obj file src/icon/back.obj file src/icon/clock.obj file src/icon/computer.obj file src/icon/directory.obj file src/icon/down.obj file src/icon/error.obj file src/icon/file.obj file src/icon/forward.obj file src/icon/info.obj file src/icon/left.obj file src/icon/news.obj file src/icon/note.obj file src/icon/right.obj file src/icon/search.obj file src/icon/up.obj file src/icon/warning.obj file src/lowlevel.obj file src/string.obj file src/text/font/boldfont.obj file src/text/font/boldmonottf.obj file src/text/font/boldttf.obj file src/text/font/font.obj file src/text/font/monottf.obj file src/text/font/ttf.obj file src/text/ft2.obj file src/text/gdi.obj file src/text/stbtt.obj file src/text/text.obj file src/truetype.obj file src/unicode.obj file src/widget/box.obj file src/widget/button.obj file src/widget/calendar.obj file src/widget/checkbox.obj file src/widget/combobox.obj file src/widget/entry.obj file src/widget/frame.obj file src/widget/image.obj file src/widget/label.obj file src/widget/listbox.obj file src/widget/menu.obj file src/widget/numberentry.obj file src/widget/opengl.obj file src/widget/progressbar.obj file src/widget/radiobox.obj file src/widget/scrollbar.obj file src/widget/separator.obj file src/widget/submenu.obj file src/widget/subwindow.obj file src/widget/tab.obj file src/widget/table.obj file src/widget/treeview.obj file src/widget/viewport.obj file src/widget/window.obj library clib3r.lib library opengl32.lib library gdi32.lib library ole32.lib library uuid.lib library user32.lib library advapi32.lib
src/Mw.dll: external/libz/src/adler32.obj external/libz/src/compress.obj external/libz/src/crc32.obj external/libz/src/deflate.obj external/libz/src/gzclose.obj external/libz/src/gzlib.obj external/libz/src/gzread.obj external/libz/src/gzwrite.obj external/libz/src/infback.obj external/libz/src/inffast.obj external/libz/src/inflate.obj external/libz/src/inftrees.obj external/libz/src/trees.obj external/libz/src/uncompr.obj external/libz/src/zutil.obj external/stb_ds.obj external/stb_image.obj external/stb_truetype.obj src/abstract/directory.obj src/abstract/dynamic.obj src/abstract/time.obj src/backend/gdi.obj src/color.obj src/core.obj src/cursor/arrow.obj src/cursor/cross.obj src/cursor/default.obj src/cursor/hidden.obj src/cursor/text.obj src/default.obj src/dialog/colorpicker.obj src/dialog/directorychooser.obj src/dialog/filechooser.obj src/dialog/messagebox.obj src/draw.obj src/icon/back.obj src/icon/clock.obj src/icon/computer.obj src/icon/directory.obj src/icon/down.obj src/icon/error.obj src/icon/file.obj src/icon/forward.obj src/icon/info.obj src/icon/left.obj src/icon/news.obj src/icon/note.obj src/icon/right.obj src/icon/search.obj src/icon/up.obj src/icon/warning.obj src/lowlevel.obj src/string.obj src/text/font/boldfont.obj src/text/font/boldmonottf.obj src/text/font/boldttf.obj src/text/font/font.obj src/text/font/monottf.obj src/text/font/ttf.obj src/text/ft2.obj src/text/stbtt.obj src/text/text.obj src/unicode.obj src/widget/box.obj src/widget/button.obj src/widget/checkbox.obj src/widget/combobox.obj src/widget/entry.obj src/widget/frame.obj src/widget/image.obj src/widget/label.obj src/widget/listbox.obj src/widget/menu.obj src/widget/numberentry.obj src/widget/opengl.obj src/widget/progressbar.obj src/widget/radiobox.obj src/widget/scrollbar.obj src/widget/separator.obj src/widget/submenu.obj src/widget/treeview.obj src/widget/viewport.obj src/widget/window.obj
$(LD) $(LDFLAGS) option implib=src/Mw.lib name $@ file external/libz/src/adler32.obj file external/libz/src/compress.obj file external/libz/src/crc32.obj file external/libz/src/deflate.obj file external/libz/src/gzclose.obj file external/libz/src/gzlib.obj file external/libz/src/gzread.obj file external/libz/src/gzwrite.obj file external/libz/src/infback.obj file external/libz/src/inffast.obj file external/libz/src/inflate.obj file external/libz/src/inftrees.obj file external/libz/src/trees.obj file external/libz/src/uncompr.obj file external/libz/src/zutil.obj file external/stb_ds.obj file external/stb_image.obj file external/stb_truetype.obj file src/abstract/directory.obj file src/abstract/dynamic.obj file src/abstract/time.obj file src/backend/gdi.obj file src/color.obj file src/core.obj file src/cursor/arrow.obj file src/cursor/cross.obj file src/cursor/default.obj file src/cursor/hidden.obj file src/cursor/text.obj file src/default.obj file src/dialog/colorpicker.obj file src/dialog/directorychooser.obj file src/dialog/filechooser.obj file src/dialog/messagebox.obj file src/draw.obj file src/icon/back.obj file src/icon/clock.obj file src/icon/computer.obj file src/icon/directory.obj file src/icon/down.obj file src/icon/error.obj file src/icon/file.obj file src/icon/forward.obj file src/icon/info.obj file src/icon/left.obj file src/icon/news.obj file src/icon/note.obj file src/icon/right.obj file src/icon/search.obj file src/icon/up.obj file src/icon/warning.obj file src/lowlevel.obj file src/string.obj file src/text/font/boldfont.obj file src/text/font/boldmonottf.obj file src/text/font/boldttf.obj file src/text/font/font.obj file src/text/font/monottf.obj file src/text/font/ttf.obj file src/text/ft2.obj file src/text/stbtt.obj file src/text/text.obj file src/unicode.obj file src/widget/box.obj file src/widget/button.obj file src/widget/checkbox.obj file src/widget/combobox.obj file src/widget/entry.obj file src/widget/frame.obj file src/widget/image.obj file src/widget/label.obj file src/widget/listbox.obj file src/widget/menu.obj file src/widget/numberentry.obj file src/widget/opengl.obj file src/widget/progressbar.obj file src/widget/radiobox.obj file src/widget/scrollbar.obj file src/widget/separator.obj file src/widget/submenu.obj file src/widget/treeview.obj file src/widget/viewport.obj file src/widget/window.obj library clib3r.lib library opengl32.lib library gdi32.lib library user32.lib library advapi32.lib
external/libz/src/adler32.obj: external/libz/src/adler32.c
$(CC) $(MW_CFLAGS) -fo=$@ external/libz/src/adler32.c
$(CC) $(CFLAGS) -fo=$@ $<
external/libz/src/compress.obj: external/libz/src/compress.c
$(CC) $(MW_CFLAGS) -fo=$@ external/libz/src/compress.c
$(CC) $(CFLAGS) -fo=$@ $<
external/libz/src/crc32.obj: external/libz/src/crc32.c
$(CC) $(MW_CFLAGS) -fo=$@ external/libz/src/crc32.c
$(CC) $(CFLAGS) -fo=$@ $<
external/libz/src/deflate.obj: external/libz/src/deflate.c
$(CC) $(MW_CFLAGS) -fo=$@ external/libz/src/deflate.c
$(CC) $(CFLAGS) -fo=$@ $<
external/libz/src/gzclose.obj: external/libz/src/gzclose.c
$(CC) $(MW_CFLAGS) -fo=$@ external/libz/src/gzclose.c
$(CC) $(CFLAGS) -fo=$@ $<
external/libz/src/gzlib.obj: external/libz/src/gzlib.c
$(CC) $(MW_CFLAGS) -fo=$@ external/libz/src/gzlib.c
$(CC) $(CFLAGS) -fo=$@ $<
external/libz/src/gzread.obj: external/libz/src/gzread.c
$(CC) $(MW_CFLAGS) -fo=$@ external/libz/src/gzread.c
$(CC) $(CFLAGS) -fo=$@ $<
external/libz/src/gzwrite.obj: external/libz/src/gzwrite.c
$(CC) $(MW_CFLAGS) -fo=$@ external/libz/src/gzwrite.c
$(CC) $(CFLAGS) -fo=$@ $<
external/libz/src/infback.obj: external/libz/src/infback.c
$(CC) $(MW_CFLAGS) -fo=$@ external/libz/src/infback.c
$(CC) $(CFLAGS) -fo=$@ $<
external/libz/src/inffast.obj: external/libz/src/inffast.c
$(CC) $(MW_CFLAGS) -fo=$@ external/libz/src/inffast.c
$(CC) $(CFLAGS) -fo=$@ $<
external/libz/src/inflate.obj: external/libz/src/inflate.c
$(CC) $(MW_CFLAGS) -fo=$@ external/libz/src/inflate.c
$(CC) $(CFLAGS) -fo=$@ $<
external/libz/src/inftrees.obj: external/libz/src/inftrees.c
$(CC) $(MW_CFLAGS) -fo=$@ external/libz/src/inftrees.c
$(CC) $(CFLAGS) -fo=$@ $<
external/libz/src/trees.obj: external/libz/src/trees.c
$(CC) $(MW_CFLAGS) -fo=$@ external/libz/src/trees.c
$(CC) $(CFLAGS) -fo=$@ $<
external/libz/src/uncompr.obj: external/libz/src/uncompr.c
$(CC) $(MW_CFLAGS) -fo=$@ external/libz/src/uncompr.c
$(CC) $(CFLAGS) -fo=$@ $<
external/libz/src/zutil.obj: external/libz/src/zutil.c
$(CC) $(MW_CFLAGS) -fo=$@ external/libz/src/zutil.c
$(CC) $(CFLAGS) -fo=$@ $<
external/stb_ds.obj: external/stb_ds.c
$(CC) $(MW_CFLAGS) -fo=$@ external/stb_ds.c
$(CC) $(CFLAGS) -fo=$@ $<
external/stb_image.obj: external/stb_image.c
$(CC) $(MW_CFLAGS) -fo=$@ external/stb_image.c
$(CC) $(CFLAGS) -fo=$@ $<
external/stb_truetype.obj: external/stb_truetype.c
$(CC) $(MW_CFLAGS) -fo=$@ external/stb_truetype.c
src/abstract/charset.obj: src/abstract/charset.c
$(CC) $(MW_CFLAGS) -fo=$@ src/abstract/charset.c
$(CC) $(CFLAGS) -fo=$@ $<
src/abstract/directory.obj: src/abstract/directory.c
$(CC) $(MW_CFLAGS) -fo=$@ src/abstract/directory.c
$(CC) $(CFLAGS) -fo=$@ $<
src/abstract/dynamic.obj: src/abstract/dynamic.c
$(CC) $(MW_CFLAGS) -fo=$@ src/abstract/dynamic.c
$(CC) $(CFLAGS) -fo=$@ $<
src/abstract/time.obj: src/abstract/time.c
$(CC) $(MW_CFLAGS) -fo=$@ src/abstract/time.c
$(CC) $(CFLAGS) -fo=$@ $<
src/backend/gdi.obj: src/backend/gdi.c
$(CC) $(MW_CFLAGS) -fo=$@ src/backend/gdi.c
$(CC) $(CFLAGS) -fo=$@ $<
src/color.obj: src/color.c
$(CC) $(MW_CFLAGS) -fo=$@ src/color.c
$(CC) $(CFLAGS) -fo=$@ $<
src/core.obj: src/core.c
$(CC) $(MW_CFLAGS) -fo=$@ src/core.c
$(CC) $(CFLAGS) -fo=$@ $<
src/cursor/arrow.obj: src/cursor/arrow.c
$(CC) $(MW_CFLAGS) -fo=$@ src/cursor/arrow.c
$(CC) $(CFLAGS) -fo=$@ $<
src/cursor/cross.obj: src/cursor/cross.c
$(CC) $(MW_CFLAGS) -fo=$@ src/cursor/cross.c
$(CC) $(CFLAGS) -fo=$@ $<
src/cursor/default.obj: src/cursor/default.c
$(CC) $(MW_CFLAGS) -fo=$@ src/cursor/default.c
$(CC) $(CFLAGS) -fo=$@ $<
src/cursor/hidden.obj: src/cursor/hidden.c
$(CC) $(MW_CFLAGS) -fo=$@ src/cursor/hidden.c
$(CC) $(CFLAGS) -fo=$@ $<
src/cursor/text.obj: src/cursor/text.c
$(CC) $(MW_CFLAGS) -fo=$@ src/cursor/text.c
$(CC) $(CFLAGS) -fo=$@ $<
src/default.obj: src/default.c
$(CC) $(MW_CFLAGS) -fo=$@ src/default.c
$(CC) $(CFLAGS) -fo=$@ $<
src/dialog/colorpicker.obj: src/dialog/colorpicker.c
$(CC) $(MW_CFLAGS) -fo=$@ src/dialog/colorpicker.c
$(CC) $(CFLAGS) -fo=$@ $<
src/dialog/directorychooser.obj: src/dialog/directorychooser.c
$(CC) $(MW_CFLAGS) -fo=$@ src/dialog/directorychooser.c
$(CC) $(CFLAGS) -fo=$@ $<
src/dialog/filechooser.obj: src/dialog/filechooser.c
$(CC) $(MW_CFLAGS) -fo=$@ src/dialog/filechooser.c
$(CC) $(CFLAGS) -fo=$@ $<
src/dialog/messagebox.obj: src/dialog/messagebox.c
$(CC) $(MW_CFLAGS) -fo=$@ src/dialog/messagebox.c
$(CC) $(CFLAGS) -fo=$@ $<
src/draw.obj: src/draw.c
$(CC) $(MW_CFLAGS) -fo=$@ src/draw.c
$(CC) $(CFLAGS) -fo=$@ $<
src/icon/back.obj: src/icon/back.c
$(CC) $(MW_CFLAGS) -fo=$@ src/icon/back.c
$(CC) $(CFLAGS) -fo=$@ $<
src/icon/clock.obj: src/icon/clock.c
$(CC) $(MW_CFLAGS) -fo=$@ src/icon/clock.c
$(CC) $(CFLAGS) -fo=$@ $<
src/icon/computer.obj: src/icon/computer.c
$(CC) $(MW_CFLAGS) -fo=$@ src/icon/computer.c
$(CC) $(CFLAGS) -fo=$@ $<
src/icon/directory.obj: src/icon/directory.c
$(CC) $(MW_CFLAGS) -fo=$@ src/icon/directory.c
$(CC) $(CFLAGS) -fo=$@ $<
src/icon/down.obj: src/icon/down.c
$(CC) $(MW_CFLAGS) -fo=$@ src/icon/down.c
$(CC) $(CFLAGS) -fo=$@ $<
src/icon/error.obj: src/icon/error.c
$(CC) $(MW_CFLAGS) -fo=$@ src/icon/error.c
$(CC) $(CFLAGS) -fo=$@ $<
src/icon/file.obj: src/icon/file.c
$(CC) $(MW_CFLAGS) -fo=$@ src/icon/file.c
$(CC) $(CFLAGS) -fo=$@ $<
src/icon/forward.obj: src/icon/forward.c
$(CC) $(MW_CFLAGS) -fo=$@ src/icon/forward.c
$(CC) $(CFLAGS) -fo=$@ $<
src/icon/info.obj: src/icon/info.c
$(CC) $(MW_CFLAGS) -fo=$@ src/icon/info.c
$(CC) $(CFLAGS) -fo=$@ $<
src/icon/left.obj: src/icon/left.c
$(CC) $(MW_CFLAGS) -fo=$@ src/icon/left.c
$(CC) $(CFLAGS) -fo=$@ $<
src/icon/news.obj: src/icon/news.c
$(CC) $(MW_CFLAGS) -fo=$@ src/icon/news.c
$(CC) $(CFLAGS) -fo=$@ $<
src/icon/note.obj: src/icon/note.c
$(CC) $(MW_CFLAGS) -fo=$@ src/icon/note.c
$(CC) $(CFLAGS) -fo=$@ $<
src/icon/right.obj: src/icon/right.c
$(CC) $(MW_CFLAGS) -fo=$@ src/icon/right.c
$(CC) $(CFLAGS) -fo=$@ $<
src/icon/search.obj: src/icon/search.c
$(CC) $(MW_CFLAGS) -fo=$@ src/icon/search.c
$(CC) $(CFLAGS) -fo=$@ $<
src/icon/up.obj: src/icon/up.c
$(CC) $(MW_CFLAGS) -fo=$@ src/icon/up.c
$(CC) $(CFLAGS) -fo=$@ $<
src/icon/warning.obj: src/icon/warning.c
$(CC) $(MW_CFLAGS) -fo=$@ src/icon/warning.c
$(CC) $(CFLAGS) -fo=$@ $<
src/lowlevel.obj: src/lowlevel.c
$(CC) $(MW_CFLAGS) -fo=$@ src/lowlevel.c
$(CC) $(CFLAGS) -fo=$@ $<
src/string.obj: src/string.c
$(CC) $(MW_CFLAGS) -fo=$@ src/string.c
$(CC) $(CFLAGS) -fo=$@ $<
src/text/font/boldfont.obj: src/text/font/boldfont.c
$(CC) $(MW_CFLAGS) -fo=$@ src/text/font/boldfont.c
$(CC) $(CFLAGS) -fo=$@ $<
src/text/font/boldmonottf.obj: src/text/font/boldmonottf.c
$(CC) $(MW_CFLAGS) -fo=$@ src/text/font/boldmonottf.c
$(CC) $(CFLAGS) -fo=$@ $<
src/text/font/boldttf.obj: src/text/font/boldttf.c
$(CC) $(MW_CFLAGS) -fo=$@ src/text/font/boldttf.c
$(CC) $(CFLAGS) -fo=$@ $<
src/text/font/font.obj: src/text/font/font.c
$(CC) $(MW_CFLAGS) -fo=$@ src/text/font/font.c
$(CC) $(CFLAGS) -fo=$@ $<
src/text/font/monottf.obj: src/text/font/monottf.c
$(CC) $(MW_CFLAGS) -fo=$@ src/text/font/monottf.c
$(CC) $(CFLAGS) -fo=$@ $<
src/text/font/ttf.obj: src/text/font/ttf.c
$(CC) $(MW_CFLAGS) -fo=$@ src/text/font/ttf.c
$(CC) $(CFLAGS) -fo=$@ $<
src/text/ft2.obj: src/text/ft2.c
$(CC) $(MW_CFLAGS) -fo=$@ src/text/ft2.c
src/text/gdi.obj: src/text/gdi.c
$(CC) $(MW_CFLAGS) -fo=$@ src/text/gdi.c
$(CC) $(CFLAGS) -fo=$@ $<
src/text/stbtt.obj: src/text/stbtt.c
$(CC) $(MW_CFLAGS) -fo=$@ src/text/stbtt.c
$(CC) $(CFLAGS) -fo=$@ $<
src/text/text.obj: src/text/text.c
$(CC) $(MW_CFLAGS) -fo=$@ src/text/text.c
src/truetype.obj: src/truetype.c
$(CC) $(MW_CFLAGS) -fo=$@ src/truetype.c
$(CC) $(CFLAGS) -fo=$@ $<
src/unicode.obj: src/unicode.c
$(CC) $(MW_CFLAGS) -fo=$@ src/unicode.c
$(CC) $(CFLAGS) -fo=$@ $<
src/widget/box.obj: src/widget/box.c
$(CC) $(MW_CFLAGS) -fo=$@ src/widget/box.c
$(CC) $(CFLAGS) -fo=$@ $<
src/widget/button.obj: src/widget/button.c
$(CC) $(MW_CFLAGS) -fo=$@ src/widget/button.c
src/widget/calendar.obj: src/widget/calendar.c
$(CC) $(MW_CFLAGS) -fo=$@ src/widget/calendar.c
$(CC) $(CFLAGS) -fo=$@ $<
src/widget/checkbox.obj: src/widget/checkbox.c
$(CC) $(MW_CFLAGS) -fo=$@ src/widget/checkbox.c
$(CC) $(CFLAGS) -fo=$@ $<
src/widget/combobox.obj: src/widget/combobox.c
$(CC) $(MW_CFLAGS) -fo=$@ src/widget/combobox.c
$(CC) $(CFLAGS) -fo=$@ $<
src/widget/entry.obj: src/widget/entry.c
$(CC) $(MW_CFLAGS) -fo=$@ src/widget/entry.c
$(CC) $(CFLAGS) -fo=$@ $<
src/widget/frame.obj: src/widget/frame.c
$(CC) $(MW_CFLAGS) -fo=$@ src/widget/frame.c
$(CC) $(CFLAGS) -fo=$@ $<
src/widget/image.obj: src/widget/image.c
$(CC) $(MW_CFLAGS) -fo=$@ src/widget/image.c
$(CC) $(CFLAGS) -fo=$@ $<
src/widget/label.obj: src/widget/label.c
$(CC) $(MW_CFLAGS) -fo=$@ src/widget/label.c
$(CC) $(CFLAGS) -fo=$@ $<
src/widget/listbox.obj: src/widget/listbox.c
$(CC) $(MW_CFLAGS) -fo=$@ src/widget/listbox.c
$(CC) $(CFLAGS) -fo=$@ $<
src/widget/menu.obj: src/widget/menu.c
$(CC) $(MW_CFLAGS) -fo=$@ src/widget/menu.c
$(CC) $(CFLAGS) -fo=$@ $<
src/widget/numberentry.obj: src/widget/numberentry.c
$(CC) $(MW_CFLAGS) -fo=$@ src/widget/numberentry.c
$(CC) $(CFLAGS) -fo=$@ $<
src/widget/opengl.obj: src/widget/opengl.c
$(CC) $(MW_CFLAGS) -fo=$@ src/widget/opengl.c
$(CC) $(CFLAGS) -fo=$@ $<
src/widget/progressbar.obj: src/widget/progressbar.c
$(CC) $(MW_CFLAGS) -fo=$@ src/widget/progressbar.c
$(CC) $(CFLAGS) -fo=$@ $<
src/widget/radiobox.obj: src/widget/radiobox.c
$(CC) $(MW_CFLAGS) -fo=$@ src/widget/radiobox.c
$(CC) $(CFLAGS) -fo=$@ $<
src/widget/scrollbar.obj: src/widget/scrollbar.c
$(CC) $(MW_CFLAGS) -fo=$@ src/widget/scrollbar.c
$(CC) $(CFLAGS) -fo=$@ $<
src/widget/separator.obj: src/widget/separator.c
$(CC) $(MW_CFLAGS) -fo=$@ src/widget/separator.c
$(CC) $(CFLAGS) -fo=$@ $<
src/widget/submenu.obj: src/widget/submenu.c
$(CC) $(MW_CFLAGS) -fo=$@ src/widget/submenu.c
src/widget/subwindow.obj: src/widget/subwindow.c
$(CC) $(MW_CFLAGS) -fo=$@ src/widget/subwindow.c
src/widget/tab.obj: src/widget/tab.c
$(CC) $(MW_CFLAGS) -fo=$@ src/widget/tab.c
src/widget/table.obj: src/widget/table.c
$(CC) $(MW_CFLAGS) -fo=$@ src/widget/table.c
$(CC) $(CFLAGS) -fo=$@ $<
src/widget/treeview.obj: src/widget/treeview.c
$(CC) $(MW_CFLAGS) -fo=$@ src/widget/treeview.c
$(CC) $(CFLAGS) -fo=$@ $<
src/widget/viewport.obj: src/widget/viewport.c
$(CC) $(MW_CFLAGS) -fo=$@ src/widget/viewport.c
$(CC) $(CFLAGS) -fo=$@ $<
src/widget/window.obj: src/widget/window.c
$(CC) $(MW_CFLAGS) -fo=$@ src/widget/window.c
$(CC) $(CFLAGS) -fo=$@ $<

92
configure vendored
View file

@ -2,11 +2,6 @@
our $target = `uname -s`;
$target =~ s/\r?\n$//;
# MSYS with MinGW gives us some other shit idk
if (index($target, "MINGW") != -1) {
$target = "Windows";
}
foreach my $l (@ARGV) {
if ($l =~ /^--.+$/) {
}
@ -17,11 +12,10 @@ foreach my $l (@ARGV) {
our $prefix = "/usr/local";
our $cc = defined($ENV{CC}) ? $ENV{CC} : "*host*gcc";
our $cxx = defined($ENV{CXX}) ? $ENV{CXX} : "*host*g++";
our $ar = defined($ENV{AR}) ? $ENV{AR} : "*host*ar";
our $incdir = "-I include";
our $incdir2 = "";
our $cflags = "-fPIC -D_MILSKO -D_MILSKO_BUILD -fvisibility=hidden";
our $cflags = "-fPIC -D_MILSKO -fvisibility=hidden";
our $libdir = "";
our $ldflags = "";
our $math = "-lm";
@ -44,6 +38,7 @@ require("./pl/utils.pl");
param_set("classic-theme", 0);
param_set("stb-image", 1);
param_set("xrender", 1);
param_set("opengl", 0);
param_set("vulkan", 0);
param_set("vulkan-string-helper", 1);
@ -51,16 +46,13 @@ param_set("shared", 1);
param_set("static", 1);
param_set("examples", 1);
# (option that only makes sense on x11)
param_set("allow-sloppy-focus", 0);
my %features = (
"classic-theme" => "use classic theme",
"stb-image" => "use stb_image, instead use libjpeg/libpng",
"stb-truetype" => "use stb_truetype",
"freetype2" => "use FreeType2",
"gdi-text" => "(Windows only) use GDI Text",
"xrender" => "(X11 only) use XRender",
"xrender" => "use XRender",
"opengl" => "build OpenGL widget",
"vulkan" => "build Vulkan widget",
"vulkan-string-helper" => "use Vulkan string helper",
@ -68,57 +60,16 @@ my %features = (
"static" => "build static library",
"wayland" => "enable wayland backend",
"gnustep" => "use gnustep",
"dbus" => "use DBus on supported platform",
"allow-sloppy-focus" => "prevent the x11 backend from using XSetInputFocus to enforce click-to-focus"
);
my @features_keys = (
"1classic-theme", "1stb-image",
"1stb-truetype", "1freetype2", "1gdi-text",
"1stb-truetype", "1freetype2",
"1opengl", "2xrender",
"1vulkan", "2vulkan-string-helper",
"1shared", "1static",
"1wayland", "1gnustep",
"1dbus"
);
sub def_platform {
if($target eq "Windows") {
param_set("freetype2", 0);
param_set("stb-truetype", 0);
} elsif($target ne "Darwin" and $target ne "ClassicMacOS" and $target ne "Haiku") {
param_set("freetype2", 1);
param_set("stb-truetype", 0);
} else {
param_set("freetype2", 0);
param_set("stb-truetype", 1);
}
if($target eq "Linux" || $target eq "FreeBSD") {
param_set("x11", 1);
param_set("xrender", 1);
if(!param_get("tiny")){
param_set("wayland", 1);
}
param_set("dbus", 1);
}
if($target eq "NetBSD" || $target eq "OpenBSD") {
param_set("x11", 1);
}
if($target eq "Windows") {
param_set("gdi-text", 1);
} else {
param_set("gdi-text", 0);
}
}
foreach my $l (@ARGV) {
if ($l =~ /^--target=(.+)$/) {
$target = $1;
}
}
def_platform();
foreach my $l (@ARGV) {
if ($l =~ /^--with-([^=]+)=(.+)$/) {
param_set($1, $2);
@ -129,6 +80,9 @@ foreach my $l (@ARGV) {
elsif ($l =~ /^--(?:without|disable)-(.+)$/) {
param_set($1, 0);
}
elsif ($l =~ /^--target=(.+)$/) {
$target = $1;
}
elsif ($l =~ /^--host=(.+)$/) {
$host = $1 . "-";
}
@ -178,6 +132,21 @@ foreach my $l (@ARGV) {
}
}
if($target ne "Darwin" and $target ne "ClassicMacOS" and $target ne "Windows") {
param_set("freetype2", 1);
param_set("stb-truetype", 0);
} else {
param_set("freetype2", 0);
param_set("stb-truetype", 0);
}
if($target eq "Linux") {
param_set("x11", 1);
if(!param_get("tiny")){
param_set("wayland", 1);
}
}
if (-f "./pl/ostype/${target}.pl") {
require("./pl/ostype/${target}.pl");
}
@ -210,14 +179,12 @@ foreach my $e (param_list()) {
print("Enabled: " . join(" ", @l) . "\n");
$cc =~ s/\*host\*/$host/;
$cxx =~ s/\*host\*/$host/;
$ar =~ s/\*host\*/$host/;
open(OUT, ">", "Makefile");
print(OUT "PREFIX = ${prefix}\n");
print(OUT "AR = ${ar}\n");
print(OUT "CC = ${cc}\n");
print(OUT "CXX = ${cxx}\n");
print(OUT "INCDIR = ${incdir} ${incdir2}\n");
print(OUT "CFLAGS = ${cflags}\n");
print(OUT "LIBDIR = ${libdir}\n");
@ -241,7 +208,7 @@ print(OUT " cp -rf include \$(DESTDIR)\$(PREFIX)/\n");
print(OUT "\n");
print(OUT "format:\n");
print(OUT
" clang-format --verbose -i `find tools src include examples \"(\" -name \"*.c\" -or -name \"*.cc\" -or -name \"*.h\" -or -name \"*.m\" \")\" -and -not -name \"*ttf.c\"`\n"
" clang-format --verbose -i `find src include examples \"(\" -name \"*.c\" -or -name \"*.h\" -or -name \"*.m\" \")\" -and -not -name \"*ttf.c\"`\n"
);
print(OUT
" perltidy -b -bext=\"/\" --paren-tightness=2 `find tools pl configure -name \"*.pl\"`\n"
@ -258,15 +225,11 @@ if (param_get("static")) {
print(OUT "\n");
print(OUT "\n");
if (param_get("shared")) {
my $linker = "CC";
if (grep(/^haiku$/, @backends)) {
$linker = "CXX";
}
print( OUT "src/${library_prefix}Mw${library_suffix}: "
. join(" ", @library_targets)
. "\n");
print(OUT
" \$($linker) \$(SHARED) \$(LDFLAGS\) \$(LIBDIR) -o src/${library_prefix}Mw${library_suffix} "
" \$(CC) \$(SHARED) \$(LDFLAGS\) \$(LIBDIR) -o src/${library_prefix}Mw${library_suffix} "
. join(" ", @library_targets)
. " \$(LIBS)\n");
print(OUT "\n");
@ -279,17 +242,12 @@ if (param_get("static")) {
foreach my $l (@library_targets) {
my $warn = "-Wall -Wextra -Wno-sign-compare -Wno-unused-value";
my $s = $l;
my $compiler = "CC";
my $o = $object_suffix;
$o =~ s/\./\\\./g;
if ($l =~ /cocoa/) {
$s =~ s/$o$/.m/;
}
elsif ($l =~ /haiku/) {
$s =~ s/$o$/.cc/;
$compiler = "CXX";
}
else {
$s =~ s/$o$/.c/;
}
@ -299,7 +257,7 @@ foreach my $l (@library_targets) {
}
print(OUT "${l}: ${s}\n");
print(OUT " \$($compiler) $warn \$\(INCDIR) \$(CFLAGS\) -c -o ${l} ${s}\n");
print(OUT " \$(CC) $warn \$\(INCDIR) \$(CFLAGS\) -c -o ${l} ${s}\n");
}
print(OUT "\n");
print(OUT "\n");

View file

@ -1,25 +0,0 @@
# Backend dev
The basic process of creating a new Milsko backend is
- Adding a new include header into `include/Mw/LowLevel`. It must include;
- `struct _MwLLBackendName`: Any details about a window or a subwidget
- `struct _MwLLBackendNameColor`: An 8-bit RGB Color. You'll probably never impl this, this is for platforms like X11/GDI where they have a secondary color representation that can be stored.
- `struct _MwLLBackendNamePixmap`: Self-explanatory. This is also used for the soft gradients in the modern theme.
- `MwLLBackendNameCallInitImpl(void)` called by `MwLibraryInit` to address and platform globals.
- Note that all of those structs are actually unions. They should all start with their `MwLLCommon...` equivalants.
- Fill out `Mw/LowLevel.h` appopriately, adding an include to your new file and the structs in the appropriate unions. These need to be guarded by a `USE_BACKENDNAME` macro which you'll define later when you modify the build system.
- Creating a new impl file in `src/backend`
- Backends actually return a table of function pointers that you have to implement with static functions. Your file should end with `#include "call.c"` and then `CALL(BackendName);`, and somewhere you should have the impl for `MwLLBackendNameCallInitImpl(void)`.
- Prefer to keep the backend file to one file if you can, though obviously exceptions like the Wayland backend exist because it's simply too complex to sanely stuff into one file.
- Add `MwLLBackendNameCallInitImpl` to the `MwLibraryInit` impl in `src/core.c`.
- Add a new enum variation to `MwLLBackends` in `Mw/Include/LowLevel.h`; your impl of `MwLLCreateImpl` will set `common.type` to this so the user can check which backend they're on (important for platforms with multiple supported backends).
- Either
- a.) Modify `CMakeLists.txt` for your platform.
- b.) Add a new perl file in `pl/ostype` that `./configure` can reference, and modify `pl/rules.pl`; If you don't know how to use perl it's fine, just copy a file like the `Linux.pl` or `Windows.pl`, the functions you'll have to change for your platform are self explanatory. Ensure it ends with `1;`.
- c.) Both.
- Both are recommended, but some platforms like Classic Mac OS can't be used with the `./configure` script, and that's fine.
The functions you'll have to impl are too many to list here so you should start by just copying `x11.c` and then replacing all the function impls with your own.
\*\*Pay attention to some of these functions' comments in LowLevel.h as they might not be as you expect; for example, `MwLLSetDarkThemeImpl` is for setting the accent color to dark theme on platforms like modern Windows (dark theme itself is set with `MwSetInteger(handle, MwNdarktheme, 1)`).

5
doc/LOWLEVEL.md Normal file
View file

@ -0,0 +1,5 @@
# LowLevel.h function tips
@warning This is mainly for developers
1. `MwLLSetSizeHints`, `MwLLMakeBorderless`, `MwLLMakeToolWindow`, `MwLLMakePopup` have to be called between `MwLLBeginStateChange` and `MwLLEndStateChange`

View file

@ -1,20 +0,0 @@
# Tiers
Ports of Milsko are grouped into three "tiers" in terms of their support.
- **Tier 1**: Before every new release of Milsko, these platforms will be tested to make sure they have full support, and the CI will test them.
- **Tier 2**: These might be outdated or not updated in awhile, they might only compile under a specific version/commit of Milsko. Authors of these backends will be made aware of these updates.
- **Tier 3**: These are outright unfinished. Only use these if you're a developer.
Currently, the Tier 1 backends are:
- Windows 9x+/NT 4.0+
- Any Unix/Linux system that supports X11 or Wayland.
There are currently no Tier 2 backends.
Tier 3 backends are:
- Mac OS X 10.4+ with Cocoa
- Mac OS 7-9, PowerPC (68k support not planned).
- Haiku

View file

@ -5,5 +5,4 @@ Milsko's configure script supports the `--tiny` option for building the tiniest
- Add `-Oz` to the cflags
- (clang only) add `-flto=thin` to the cflags and linker flags
- Build stb-image with `STB_IMAGE_STATIC` (this is why you get warnings with stb_image when you use it)
- (Linux) Disable the Wayland backend
- (Linux) Disable dbus integration
- Disable the Wayland backend

View file

@ -2,7 +2,7 @@
MwWidget window, box;
void MWAPI resize(MwWidget handle, void* user, void* client) {
void resize(MwWidget handle, void* user, void* client) {
int ww = MwGetInteger(handle, MwNwidth);
int wh = MwGetInteger(handle, MwNheight);

View file

@ -7,7 +7,7 @@ MwWidget inp;
double stack[512];
int sp = 0;
static void MWAPI resize(MwWidget handle, void* client, void* user) {
static void resize(MwWidget handle, void* client, void* user) {
int ww = MwGetInteger(handle, MwNwidth);
int wh = MwGetInteger(handle, MwNheight) - MwGetInteger(inp, MwNheight);
int i;
@ -30,7 +30,7 @@ static void MWAPI resize(MwWidget handle, void* client, void* user) {
}
}
static void MWAPI activate(MwWidget handle, void* client, void* user) {
static void activate(MwWidget handle, void* client, void* user) {
const char* n = MwGetText(handle, MwNtext);
if(('0' <= n[0] && n[0] <= '9') || n[0] == '.') {

View file

@ -2,7 +2,7 @@
MwWidget window, instructions, text1, text2, cur_text;
static void MWAPI resize(MwWidget handle, void* user_data, void* call_data) {
static void resize(MwWidget handle, void* user_data, void* call_data) {
unsigned int w, h;
(void)user_data;
@ -28,7 +28,7 @@ static void MWAPI resize(MwWidget handle, void* user_data, void* call_data) {
MwNheight, h - 125 - 50 * 3,
NULL);
}
static void MWAPI clipboard(MwWidget handle, void* user_data, void* call_data) {
static void clipboard(MwWidget handle, void* user_data, void* call_data) {
char* clipboard = call_data;
(void)handle;
@ -40,7 +40,7 @@ static void MWAPI clipboard(MwWidget handle, void* user_data, void* call_data) {
}
}
static void MWAPI tick(MwWidget handle, void* user_data, void* call_data) {
static void tick(MwWidget handle, void* user_data, void* call_data) {
cur_text = text1;
MwGetClipboard(handle, MwCLIPBOARD_MAIN);
cur_text = text2;

View file

@ -1,10 +1,10 @@
#include <Mw/Milsko.h>
MwWidget fpicker;
MwWidget cpicker;
MwWidget window;
MwWidget button;
void MWAPI file_callback(MwWidget handle, void* user_data, void* call_data) {
void color_callback(MwWidget handle, void* user_data, void* call_data) {
char hexColor[8];
MwRGB* rgb = call_data;
@ -18,14 +18,14 @@ void MWAPI file_callback(MwWidget handle, void* user_data, void* call_data) {
MwSetText(window, MwNbackground, hexColor);
}
void MWAPI file_picker(MwWidget handle, void* user_data, void* call_data) {
void color_picker(MwWidget handle, void* user_data, void* call_data) {
MwWidget cpicker = MwColorPicker(window, "cpicker");
(void)handle;
(void)user_data;
(void)call_data;
MwAddUserHandler(cpicker, MwNcolorChosenHandler, file_callback, NULL);
MwAddUserHandler(cpicker, MwNcolorChosenHandler, color_callback, NULL);
MwSetText(cpicker, MwNbackground, MwGetInteger(cpicker, MwNdarkTheme) ? MwDefaultDarkBackground : MwDefaultBackground);
}
@ -42,7 +42,7 @@ int main() {
NULL);
MwSetText(button, MwNbackground, MwGetInteger(window, MwNdarkTheme) ? MwDefaultBackground : MwDefaultDarkBackground);
MwAddUserHandler(button, MwNactivateHandler, file_picker, NULL);
MwAddUserHandler(button, MwNactivateHandler, color_picker, NULL);
MwLoop(window);
}

View file

@ -1,8 +1,8 @@
#include <Mw/Milsko.h>
MwWidget window, menu, button, button2, button3, button4, button5, button6, button7;
MwWidget window, menu, button, button2, button3, button4, button5, button6;
void MWAPI handler(MwWidget handle, void* user_data, void* call_data) {
void handler(MwWidget handle, void* user_data, void* call_data) {
(void)handle;
(void)user_data;
(void)call_data;
@ -10,7 +10,7 @@ void MWAPI handler(MwWidget handle, void* user_data, void* call_data) {
printf("hello world!\n");
}
void MWAPI handler_theme(MwWidget handle, void* user_data, void* call_data) {
void handler_theme(MwWidget handle, void* user_data, void* call_data) {
(void)handle;
(void)user_data;
(void)call_data;
@ -20,7 +20,7 @@ void MWAPI handler_theme(MwWidget handle, void* user_data, void* call_data) {
NULL);
}
void MWAPI handler_look(MwWidget handle, void* user_data, void* call_data) {
void handler_look(MwWidget handle, void* user_data, void* call_data) {
(void)handle;
(void)user_data;
(void)call_data;
@ -30,7 +30,7 @@ void MWAPI handler_look(MwWidget handle, void* user_data, void* call_data) {
NULL);
}
void MWAPI handler_font(MwWidget handle, void* user_data, void* call_data) {
void handler_font(MwWidget handle, void* user_data, void* call_data) {
(void)handle;
(void)user_data;
(void)call_data;
@ -40,7 +40,7 @@ void MWAPI handler_font(MwWidget handle, void* user_data, void* call_data) {
NULL);
}
void MWAPI resize(MwWidget handle, void* user_data, void* call_data) {
void resize(MwWidget handle, void* user_data, void* call_data) {
unsigned int w, h, mh;
(void)user_data;
@ -51,29 +51,24 @@ void MWAPI resize(MwWidget handle, void* user_data, void* call_data) {
MwVaApply(button,
MwNy, 50 + mh,
MwNwidth, (w - 50 * 2) / 4,
MwNwidth, (w - 50 * 2) / 3,
MwNheight, h - 125 - 50 * 3,
NULL);
MwVaApply(button2,
MwNx, 50 + (w - 50 * 2) / 4,
MwNx, 50 + (w - 50 * 2) / 3,
MwNy, 50 + mh,
MwNwidth, (w - 50 * 2) / 4,
MwNwidth, (w - 50 * 2) / 3,
MwNheight, h - 125 - 50 * 3,
NULL);
MwVaApply(button3,
MwNx, 50 + (w - 50 * 2) / 4 * 2,
MwNx, 50 + (w - 50 * 2) / 3 * 2,
MwNy, 50 + mh,
MwNwidth, (w - 50 * 2) / 4,
MwNheight, h - 125 - 50 * 3,
NULL);
MwVaApply(button7,
MwNx, 50 + (w - 50 * 2) / 4 * 3,
MwNy, 50 + mh,
MwNwidth, (w - 50 * 2) / 4,
MwNwidth, (w - 50 * 2) / 3,
MwNheight, h - 125 - 50 * 3,
NULL);
MwVaApply(button4,
MwNx, 50 + (w - 50 * 2) / 3 * 0,
MwNy, h - 50 - 125 + mh,
@ -126,10 +121,6 @@ int main() {
MwNbackground, "#66f",
MwNforeground, "#000",
NULL);
button7 = MwVaCreateWidget(MwButtonClass, "button", window, 250, 50, 100, 125,
MwNtext, "disabled",
MwNdisabled, 1,
NULL);
MwAddUserHandler(window, MwNresizeHandler, resize, NULL);
MwAddUserHandler(button, MwNactivateHandler, handler_theme, NULL);

View file

@ -1,70 +0,0 @@
#include <Mw/Milsko.h>
MwWidget fpicker;
MwWidget window;
MwWidget button;
MwWidget mb;
MwBool fpicker_wait = MwFALSE;
MwBool msgbox_wait = MwFALSE;
void MWAPI ok(MwWidget handle, void* user, void* call) {
(void)handle;
(void)call;
msgbox_wait = MwFALSE;
}
void MWAPI file_callback(MwWidget handle, void* user_data, void* call_data) {
mb = MwMessageBox(handle, call_data, "File chosen", MwMB_ICONERROR | MwMB_BUTTONOK);
(void)user_data;
MwAddUserHandler(MwMessageBoxGetChild(mb, MwMB_BUTTONOK), MwNactivateHandler, ok, mb);
MwAddUserHandler(mb, MwNcloseHandler, ok, mb);
msgbox_wait = MwTRUE;
while(msgbox_wait) {
MwStep(mb);
}
fpicker_wait = MwFALSE;
}
void MWAPI file_picker(MwWidget handle, void* user_data, void* call_data) {
fpicker = MwFileChooserEx(handle, "file chooser", 0);
(void)handle;
(void)user_data;
(void)call_data;
MwAddUserHandler(fpicker, MwNfileChosenHandler, file_callback, NULL);
MwSetText(fpicker, MwNbackground, MwGetInteger(fpicker, MwNdarkTheme) ? MwDefaultDarkBackground : MwDefaultBackground);
fpicker_wait = MwTRUE;
while(fpicker_wait) {
MwStep(fpicker);
}
MwDestroyWidget(fpicker);
MwDestroyWidget(mb);
}
int main() {
MwLibraryInit();
window = MwVaCreateWidget(MwWindowClass, "main", NULL, MwDEFAULT,
MwDEFAULT, 640, 480, MwNtitle, "color picker", NULL);
MwSetText(window, MwNbackground, MwGetInteger(window, MwNdarkTheme) ? MwDefaultBackground : MwDefaultDarkBackground);
button = MwVaCreateWidget(MwButtonClass, "button", window, 160, 180, 320, 120,
MwNtext, "select file",
NULL);
MwSetText(button, MwNbackground, MwGetInteger(window, MwNdarkTheme) ? MwDefaultBackground : MwDefaultDarkBackground);
MwAddUserHandler(button, MwNactivateHandler, file_picker, NULL);
MwLoop(window);
}

View file

@ -2,15 +2,15 @@
#include "../harvard.c"
MwWidget w_main;
MwWidget wmain;
void MWAPI destroy(MwWidget handle, void* user, void* call) {
void destroy(MwWidget handle, void* user, void* call) {
(void)handle;
(void)call;
MwDestroyWidget(user);
MwMessageBoxDestroy(user);
}
void MWAPI activate(MwWidget handle, void* user, void* call) {
void activate(MwWidget handle, void* user, void* call) {
char msg[256];
MwWidget msgbox;
@ -18,44 +18,51 @@ void MWAPI activate(MwWidget handle, void* user, void* call) {
MwStringPrintIntoBuffer(msg, 256, "You pressed: %s", MwListBoxGet(handle, *(int*)call));
msgbox = MwMessageBox(w_main, msg, "wow", MwMB_ICONINFO | MwMB_BUTTONOK);
msgbox = MwMessageBox(wmain, msg, "wow", MwMB_ICONINFO | MwMB_BUTTONOK);
MwAddUserHandler(MwMessageBoxGetChild(msgbox, MwMB_BUTTONOK), MwNactivateHandler, destroy, msgbox);
}
int main() {
MwWidget lb;
int len = sizeof(harvard) / sizeof(harvard[0]) - 1;
int i;
int index;
MwLLPixmap px;
MwWidget lb;
int len = sizeof(harvard) / sizeof(harvard[0]) - 1;
int i;
MwListBoxPacket* packet;
int index;
MwLLPixmap px;
MwLibraryInit();
w_main = MwVaCreateWidget(MwWindowClass, "main", NULL, MwDEFAULT, MwDEFAULT, 640, 480,
MwNtitle, "listbox",
NULL);
lb = MwCreateWidget(MwListBoxClass, "listbox", w_main, 5, 5, 630, 470);
wmain = MwVaCreateWidget(MwWindowClass, "main", NULL, MwDEFAULT, MwDEFAULT, 640, 480,
MwNtitle, "listbox",
NULL);
lb = MwCreateWidget(MwListBoxClass, "listbox", wmain, 5, 5, 630, 470);
px = MwLoadIcon(lb, MwIconInfo);
MwSetInteger(lb, MwNleftPadding, 20);
index = MwListBoxSet(lb, -1, 0, "Harvard sentence");
MwListBoxSet(lb, index, -1, "Length");
packet = MwListBoxCreatePacket();
index = MwListBoxPacketInsert(packet, -1);
MwListBoxPacketSet(packet, index, 0, "Harvard sentence");
MwListBoxPacketSet(packet, index, 1, "Length");
for(i = 0; i < len; i++) {
char sz[16];
MwStringPrintIntoBuffer(sz, 16, "%d", (int)strlen(harvard[i]));
index = MwListBoxSet(lb, -1, 0, harvard[i]);
MwListBoxSet(lb, index, -1, sz);
MwListBoxSetIcon(lb, index, px);
index = MwListBoxPacketInsert(packet, -1);
MwListBoxPacketSetIcon(packet, index, px);
MwListBoxPacketSet(packet, index, 0, harvard[i]);
MwListBoxPacketSet(packet, index, 1, sz);
}
MwAddUserHandler(lb, MwNlistBoxActivateHandler, activate, NULL);
MwAddUserHandler(lb, MwNactivateHandler, activate, NULL);
MwVaApply(lb,
MwNhasHeading, 1,
NULL);
MwListBoxSetWidth(lb, 0, -128);
MwListBoxInsert(lb, -1, packet);
MwLoop(w_main);
MwListBoxDestroyPacket(packet);
MwLoop(wmain);
}

View file

@ -1,32 +1,30 @@
#include <Mw/Milsko.h>
void MWAPI ok(MwWidget handle, void* user, void* call) {
void ok(MwWidget handle, void* user, void* call) {
(void)handle;
(void)call;
MwDestroyWidget(user);
MwMessageBoxDestroy(user);
}
void MWAPI spawn(MwWidget handle, void* user, void* call) {
void spawn(MwWidget handle, void* user, void* call) {
MwWidget mb = MwMessageBox(user, "news has arrived!", "title", MwMB_ICONNEWS | MwMB_BUTTONOK);
(void)handle;
(void)call;
MwAddUserHandler(MwMessageBoxGetChild(mb, MwMB_BUTTONOK), MwNactivateHandler, ok, mb);
MwAddUserHandler(mb, MwNcloseHandler, ok, mb);
}
void MWAPI spawn2(MwWidget handle, void* user, void* call) {
void spawn2(MwWidget handle, void* user, void* call) {
MwWidget mb = MwMessageBox(user, "something went wrong!", "title", MwMB_ICONERROR | MwMB_BUTTONOK);
(void)handle;
(void)call;
MwAddUserHandler(MwMessageBoxGetChild(mb, MwMB_BUTTONOK), MwNactivateHandler, ok, mb);
MwAddUserHandler(mb, MwNcloseHandler, ok, mb);
}
void MWAPI spawn3(MwWidget handle, void* user, void* call) {
void spawn3(MwWidget handle, void* user, void* call) {
int i;
(void)handle;
@ -35,7 +33,6 @@ void MWAPI spawn3(MwWidget handle, void* user, void* call) {
for(i = 0; i <= MwMB_ICONCLOCK; i++) {
MwWidget mb = MwMessageBox(user, "messagebox test", "title", i | MwMB_BUTTONOK);
MwAddUserHandler(MwMessageBoxGetChild(mb, MwMB_BUTTONOK), MwNactivateHandler, ok, mb);
MwAddUserHandler(mb, MwNcloseHandler, ok, mb);
}
}

View file

@ -6,14 +6,16 @@
#define Padding 20
#define PaddingContent 2
MwWidget window, menu, table;
MwWidget window, menu, box;
MwWidget boxes[32];
int n = 0, row = -1;
MwMenu e;
static void MWAPI resize(MwWidget handle, void* user, void* call) {
static void resize(MwWidget handle, void* user, void* call) {
int w = MwGetInteger(window, MwNwidth);
int h = MwGetInteger(window, MwNheight);
MwVaApply(table,
MwVaApply(box,
MwNx, Padding,
MwNy, MwGetInteger(menu, MwNheight) + Padding,
MwNwidth, w - Padding * 2,
@ -21,7 +23,31 @@ static void MWAPI resize(MwWidget handle, void* user, void* call) {
NULL);
}
static void MWAPI resize_content(MwWidget handle, void* user, void* call) {
static void newrow(void) {
if(row >= 0) {
int i;
for(i = n; i < Columns; i++) MwCreateWidget(MwFrameClass, "frame", boxes[row], 0, 0, 0, 0);
}
boxes[++row] = MwCreateWidget(MwBoxClass, "box", box, 0, 0, 0, 0);
n = 0;
}
static void add(MwWidget w) {
int r = MwGetInteger(w, MwNratio);
if(r == MwDEFAULT) r = 1;
n += r;
if(n == Columns) {
newrow();
}
}
static void resize_content(MwWidget handle, void* user, void* call) {
MwWidget* ws = MwGetChildren(handle);
if(ws != NULL) {
int pw = MwGetInteger(ws[0], "IpWidth");
@ -50,7 +76,7 @@ static void MWAPI resize_content(MwWidget handle, void* user, void* call) {
}
}
static void MWAPI resize_frame(MwWidget handle, void* user, void* call) {
static void resize_frame(MwWidget handle, void* user, void* call) {
MwWidget* ws = MwGetChildren(handle);
if(ws != NULL) {
int w = MwGetInteger(handle, MwNwidth);
@ -69,14 +95,14 @@ static void MWAPI resize_frame(MwWidget handle, void* user, void* call) {
}
static MwWidget frame(const char* name, int width, int height, MwClass cl, ...) {
MwWidget f = MwVaCreateWidget(MwFrameClass, "frame", table, 0, 0, 0, 0,
MwWidget f = MwVaCreateWidget(MwFrameClass, "frame", boxes[row], 0, 0, 0, 0,
MwNhasBorder, 1,
MwNinverted, 1,
NULL);
MwWidget table = MwVaCreateWidget(MwBoxClass, "table", f, 0, 0, 0, 0,
MwWidget box = MwVaCreateWidget(MwBoxClass, "box", f, 0, 0, 0, 0,
MwNorientation, MwVERTICAL,
NULL);
MwWidget label = MwVaCreateWidget(MwLabelClass, "label", table, 0, 0, 0, 0,
MwWidget label = MwVaCreateWidget(MwLabelClass, "label", box, 0, 0, 0, 0,
MwNtext, name,
MwNalignment, MwALIGNMENT_BEGINNING,
MwNfixedSize, 20,
@ -84,7 +110,7 @@ static MwWidget frame(const char* name, int width, int height, MwClass cl, ...)
va_list va;
if(cl != NULL) {
MwWidget frame = MwCreateWidget(MwFrameClass, "frame", table, 0, 0, 0, 0);
MwWidget frame = MwCreateWidget(MwFrameClass, "frame", box, 0, 0, 0, 0);
MwWidget w;
va_start(va, cl);
@ -100,8 +126,6 @@ static MwWidget frame(const char* name, int width, int height, MwClass cl, ...)
MwVaApply(f,
"VhandledWidget", w,
MwNcolumnSpan, MwGetInteger(w, MwNcolumnSpan),
MwNrowSpan, MwGetInteger(w, MwNrowSpan),
NULL);
}
@ -116,18 +140,17 @@ static MwWidget child(MwWidget w) {
return MwGetVoid(w, "VhandledWidget");
}
static void MWAPI menu_handler(MwWidget handle, void* user, void* call) {
static void menu_handler(MwWidget handle, void* user, void* call) {
if(call == e) MwDestroyWidget(window);
}
int main() {
int i, j;
MwWidget f, w, b;
MwLLPixmap px;
int index;
MwMenu m, m2;
void* v;
MwRect rc;
int i;
MwWidget f, w;
MwListBoxPacket* pkt;
int index;
MwMenu m, m2;
void* v;
MwLibraryInit();
@ -135,18 +158,6 @@ int main() {
MwNtitle, "Milsko Periodic Table",
NULL);
MwGetScreenSize(window, &rc);
if(rc.height < 800) {
MwVaApply(window,
MwNx, (rc.width - (rc.height - 64)) / 2,
MwNy, (rc.height - (rc.height - 64)) / 2,
MwNwidth, rc.height - 64,
MwNheight, rc.height - 64,
NULL);
}
px = MwLoadIcon(window, MwIconError);
menu = MwCreateWidget(MwMenuClass, "menu", window, 0, 0, 0, 0);
m = MwMenuAdd(menu, NULL, "File");
@ -197,130 +208,78 @@ int main() {
MwAddUserHandler(menu, MwNmenuHandler, menu_handler, NULL);
table = MwVaCreateWidget(MwTableClass, "table", window, 0, 0, 0, 0,
MwNwaitLayout, 1,
MwNcolumns, 5,
NULL);
box = MwVaCreateWidget(MwBoxClass, "box", window, 0, 0, 0, 0,
MwNorientation, MwVERTICAL,
NULL);
f = frame("Button", -PaddingContent, -PaddingContent, MwBoxClass,
MwNorientation, MwVERTICAL,
newrow();
f = frame("Button", -PaddingContent, -PaddingContent, MwButtonClass,
MwNtext, "Press me",
NULL);
b = MwVaCreateWidget(MwButtonClass, "btn", child(f), 0, 0, 0, 0,
MwNtext, "Press me",
NULL);
b = MwVaCreateWidget(MwButtonClass, "btn_disabled", child(f), 0, 0, 0, 0,
MwNtext, "Cannot press me",
MwNdisabled, 1,
NULL);
add(f);
MwVaCreateWidget(MwLabelClass, "label", table, 0, 0, 0, 0,
MwNbold, 1,
MwNtext, "The Periodic Table of Milsko Widgets",
MwNcolumnSpan, Columns - 2,
NULL);
for(i = 0; i < 2; i++) {
f = frame(i == 0 ? "CheckBox" : "RadioBox", -PaddingContent, -PaddingContent, MwBoxClass,
MwNmargin, PaddingContent,
NULL);
w = child(f);
b = MwVaCreateWidget(MwBoxClass, "table1", w, 0, 0, 0, 0,
MwNorientation, MwVERTICAL,
MwNfixedSize, 16,
NULL);
for(j = 0; j < 6; j++) MwVaCreateWidget(i == 0 ? MwCheckBoxClass : MwRadioBoxClass, i == 0 ? "cb" : "rb", b, 0, 0, 0, 0, MwNdisabled, (j == 5) ? 1 : 0, NULL);
b = MwVaCreateWidget(MwBoxClass, "table1", w, 0, 0, 0, 0,
MwNorientation, MwVERTICAL,
NULL);
for(j = 0; j < 6; j++) {
char buf[32];
sprintf(buf, "%sBox %d", i == 0 ? "Check" : "Radio", j + 1);
MwVaCreateWidget(MwLabelClass, "label", b, 0, 0, 0, 0,
MwNtext, buf,
MwNalignment, MwALIGNMENT_BEGINNING,
NULL);
}
}
f = frame("Calendar", -PaddingContent, -PaddingContent, MwCalendarClass,
MwNscale, 1,
NULL);
add(MwVaCreateWidget(MwLabelClass, "label", boxes[row], 0, 0, 0, 0,
MwNbold, 1,
MwNtext, "The Periodic Table of Milsko Widgets",
MwNratio, Columns - 2,
NULL));
f = frame("ComboBox", -PaddingContent, 24, MwComboBoxClass, NULL);
w = child(f);
MwComboBoxAdd(w, -1, "Hello!");
add(f);
f = frame("Entry", -PaddingContent, 24, MwEntryClass, NULL);
f = frame("Image", -PaddingContent, -PaddingContent, MwImageClass,
MwNpixmap, px,
NULL);
add(f);
f = frame("Label", -PaddingContent, -PaddingContent, MwLabelClass,
MwNtext, "Epic text\nNewline can be used too!",
MwNtext, "Epic text",
NULL);
add(f);
f = frame("ListBox", -PaddingContent, -PaddingContent, MwListBoxClass,
MwNhasHeading, 1,
NULL);
w = child(f);
index = MwListBoxSet(w, -1, 0, "Epic title...");
index = MwListBoxSet(w, -1, 0, "Hello");
pkt = MwListBoxCreatePacket();
index = MwListBoxPacketInsert(pkt, -1);
MwListBoxPacketSet(pkt, index, 0, "Epic title...");
index = MwListBoxPacketInsert(pkt, -1);
MwListBoxPacketSet(pkt, index, 0, "Hello");
MwListBoxInsert(w, -1, pkt);
MwListBoxDestroyPacket(pkt);
add(f);
f = frame("NumberEntry", -PaddingContent, 24, MwNumberEntryClass, NULL);
add(f);
f = frame("ProgressBar", -PaddingContent, 24, MwProgressBarClass,
MwNvalue, 25,
NULL);
add(f);
f = frame("ScrollBar", -PaddingContent, 16, MwScrollBarClass,
MwNorientation, MwHORIZONTAL,
NULL);
add(f);
f = frame("Separator", -PaddingContent, -PaddingContent, MwSeparatorClass, NULL);
f = frame("SubWindow", -PaddingContent, -PaddingContent, MwViewportClass,
MwNcolumnSpan, 2,
NULL);
w = child(f);
MwViewportSetSize(w, 512, 512);
MwVaCreateWidget(MwSubWindowClass, "swnd", MwViewportGetViewport(w), 32, 32, 256, 128,
MwNtitle, "Sub window",
NULL);
MwVaCreateWidget(MwSubWindowClass, "swnd", MwViewportGetViewport(w), 64, 64, 256, 128,
MwNtitle, "Sub window 2",
NULL);
f = frame("Tab", -PaddingContent, -PaddingContent, MwTabClass,
MwNcolumnSpan, 2,
NULL);
w = child(f);
MwSetText(MwTabAdd(w, "ABC"), MwNbackground, "#f00");
MwSetText(MwTabAdd(w, "DEF"), MwNbackground, "#0f0");
MwSetText(MwTabAdd(w, "GHI"), MwNbackground, "#00f");
add(f);
f = frame("TreeView", -PaddingContent, -PaddingContent, MwTreeViewClass, NULL);
w = child(f);
v = MwTreeViewAdd(w, NULL, NULL, "abc");
v = MwTreeViewAdd(w, v, NULL, "def");
v = MwTreeViewAdd(w, v, NULL, "ghi");
add(f);
f = frame("Viewport", -PaddingContent, -PaddingContent, MwViewportClass, NULL);
w = child(f);
MwViewportSetSize(w, 256, 256);
MwVaCreateWidget(MwButtonClass, "btn", MwViewportGetViewport(w), 64, 64, 128, 128,
MwNtext, "Thing",
NULL);
if(n != 0) newrow();
if(n == 0) MwDestroyWidget(boxes[row]);
MwAddUserHandler(window, MwNresizeHandler, resize, NULL);
resize(window, NULL, NULL);
MwVaApply(table,
MwNwaitLayout, 0,
NULL);
MwLoop(window);
MwLLDestroyPixmap(px);
}

View file

@ -14,7 +14,7 @@ double deg = 0;
int ww, wh;
void MWAPI handler(MwWidget w, void* user, void* client) {
void handler(MwWidget w, void* user, void* client) {
int i;
double cdeg = deg;
@ -44,7 +44,7 @@ void MWAPI handler(MwWidget w, void* user, void* client) {
deg += 120.0 / (1000.0 / MwWaitMS);
}
void MWAPI resize(MwWidget w, void* user, void* client) {
void resize(MwWidget w, void* user, void* client) {
(void)w;
(void)user;
(void)client;

View file

@ -1,3 +1,4 @@
#include <Mw/Milsko.h>
int main() {

View file

@ -1,52 +0,0 @@
#include <Mw/Milsko.h>
#define Shift 16
static void MWAPI resize(MwWidget handle, void* user, void* client) {
MwWidget f = MwSubWindowGetFrame(handle);
MwVaApply(user,
MwNwidth, MwGetInteger(f, MwNwidth),
MwNheight, MwGetInteger(f, MwNheight),
NULL);
}
int main() {
MwWidget w;
int i;
MwLLPixmap px[6];
MwLibraryInit();
w = MwVaCreateWidget(MwWindowClass, "main", NULL, MwDEFAULT, MwDEFAULT, 800, 600,
MwNtitle, "subwindow",
NULL);
px[0] = MwLoadIcon(w, MwIconClock);
px[1] = MwLoadIcon(w, MwIconError);
px[2] = MwLoadIcon(w, MwIconInfo);
px[3] = MwLoadIcon(w, MwIconNews);
px[4] = MwLoadIcon(w, MwIconNote);
px[5] = MwLoadIcon(w, MwIconWarning);
for(i = 0; i < 16; i++) {
char buf[32];
MwWidget sw, f, img;
sprintf(buf, "Sub window %d", i);
sw = MwVaCreateWidget(MwSubWindowClass, "swnd", w, i * Shift, i * Shift, 128, 128,
MwNtitle, buf,
MwNiconPixmap, px[rand() % 6],
NULL);
f = MwSubWindowGetFrame(sw);
img = MwVaCreateWidget(MwImageClass, "img", f, 0, 0, MwGetInteger(f, MwNwidth), MwGetInteger(f, MwNheight),
MwNpixmap, px[rand() % 6],
NULL);
MwAddUserHandler(sw, MwNresizeHandler, resize, img);
}
MwLoop(w);
}

View file

@ -1,43 +0,0 @@
#include <Mw/Milsko.h>
MwWidget tab;
static void MWAPI resize(MwWidget handle, void* user, void* client) {
MwVaApply(tab,
MwNwidth, MwGetInteger(handle, MwNwidth),
MwNheight, MwGetInteger(handle, MwNheight),
NULL);
}
int main() {
MwWidget w;
int i;
MwLLPixmap px[6];
MwLibraryInit();
w = MwVaCreateWidget(MwWindowClass, "main", NULL, MwDEFAULT, MwDEFAULT, 800, 600,
MwNtitle, "subwindow",
NULL);
tab = MwCreateWidget(MwTabClass, "tab", w, 0, 0, 800, 600);
for(i = 0; i < 16; i++) {
char buf[32];
MwWidget sw, f, img;
sprintf(buf, "Tab %d", i);
MwTabAdd(tab, buf);
}
MwVaApply(MwTabGetFrame(tab, "Tab 1"),
MwNiconPixmap, MwLoadIcon(tab, MwIconWarning),
NULL);
MwAddUserHandler(w, MwNresizeHandler, resize, NULL);
resize(w, NULL, NULL);
MwLoop(w);
}

View file

@ -2,13 +2,13 @@
MwWidget wmain;
void MWAPI destroy(MwWidget handle, void* user, void* call) {
void destroy(MwWidget handle, void* user, void* call) {
(void)handle;
(void)call;
MwDestroyWidget(user);
MwMessageBoxDestroy(user);
}
void MWAPI activate(MwWidget handle, void* user, void* call) {
void activate(MwWidget handle, void* user, void* call) {
char msg[256];
MwWidget msgbox;

View file

@ -2,7 +2,7 @@
MwWidget vp;
static void MWAPI resize(MwWidget handle, void* user, void* call) {
static void resize(MwWidget handle, void* user, void* call) {
int w = MwGetInteger(handle, MwNwidth);
int h = MwGetInteger(handle, MwNheight);
@ -10,8 +10,8 @@ static void MWAPI resize(MwWidget handle, void* user, void* call) {
(void)call;
MwVaApply(vp,
MwNwidth, w - 10 - 100,
MwNheight, h - 10 - 100,
MwNwidth, w - 10,
MwNheight, h - 10,
NULL);
}
@ -23,7 +23,7 @@ int main() {
w = MwVaCreateWidget(MwWindowClass, "main", NULL, MwDEFAULT, MwDEFAULT, 640, 480, MwNtitle, "test", NULL);
vp = MwCreateWidget(MwViewportClass, "vp", w, 5 + 50, 5 + 50, 640 - 10 - 100, 480 - 10 - 100);
vp = MwCreateWidget(MwViewportClass, "vp", w, 5, 5, 630, 470);
px = MwLoadImage(vp, "examples/picture.png");

View file

@ -13,7 +13,7 @@ double deg2rad(double deg) {
return (360.0 - deg) / 180.0 * M_PI;
}
void MWAPI tick(MwWidget handle, void* user, void* call) {
void tick(MwWidget handle, void* user, void* call) {
time_t t = time(NULL);
int i;
double rad;
@ -104,7 +104,7 @@ void MWAPI tick(MwWidget handle, void* user, void* call) {
MwOpenGLSwapBuffer(opengl);
}
void MWAPI resize(MwWidget handle, void* user, void* call) {
void resize(MwWidget handle, void* user, void* call) {
int w = MwGetInteger(handle, MwNwidth);
int h = MwGetInteger(handle, MwNheight);

View file

@ -231,13 +231,13 @@ static void init(void) {
static void key(int k) {
(void)k;
if(k == MwKEY_LEFT) {
if(k == MwLLKeyLeft) {
view_roty += 5.0;
} else if(k == MwKEY_RIGHT) {
} else if(k == MwLLKeyRight) {
view_roty -= 5.0;
} else if(k == MwKEY_UP) {
} else if(k == MwLLKeyUp) {
view_rotx += 5.0;
} else if(k == MwKEY_DOWN) {
} else if(k == MwLLKeyDown) {
view_rotx -= 5.0;
}
}

View file

@ -9,7 +9,7 @@ static void reshape(int width, int height);
static void init(void);
static void key(int k);
static void MWAPI tick(MwWidget handle, void* user, void* client) {
static void tick(MwWidget handle, void* user, void* client) {
(void)handle;
(void)user;
(void)client;
@ -20,7 +20,7 @@ static void MWAPI tick(MwWidget handle, void* user, void* client) {
MwOpenGLSwapBuffer(opengl);
}
static void MWAPI resize(MwWidget handle, void* user, void* client) {
static void resize(MwWidget handle, void* user, void* client) {
int ww, wh;
(void)user;
@ -37,7 +37,7 @@ static void MWAPI resize(MwWidget handle, void* user, void* client) {
reshape(ww, wh);
}
static void MWAPI key_pressed(MwWidget handle, void* user, void* client) {
static void key_pressed(MwWidget handle, void* user, void* client) {
(void)handle;
(void)user;
@ -53,21 +53,18 @@ int main() {
MwNtitle, TITLE,
NULL);
opengl = MwCreateWidget(MwOpenGLClass, "opengl", window, 50, 50, 400, 400);
if(!opengl) {
MwMessageBox(NULL, "Unable to create OpenGL window.", "Error", MwMB_ICONERROR);
} else {
MwOpenGLMakeCurrent(opengl);
init();
reshape(400, 400);
MwOpenGLMakeCurrent(opengl);
MwAddUserHandler(window, MwNresizeHandler, resize, NULL);
MwAddUserHandler(opengl, MwNtickHandler, tick, NULL);
init();
reshape(400, 400);
MwAddTickList(opengl);
MwAddUserHandler(window, MwNresizeHandler, resize, NULL);
MwAddUserHandler(opengl, MwNtickHandler, tick, NULL);
MwAddUserHandler(opengl, MwNkeyHandler, key_pressed, NULL);
}
MwAddTickList(opengl);
MwAddUserHandler(opengl, MwNkeyHandler, key_pressed, NULL);
MwLoop(window);
}

View file

@ -6,7 +6,7 @@ int ow, oh;
double deg = 0;
double dir = 1;
void MWAPI resize(MwWidget handle, void* user_data, void* call_data) {
void resize(MwWidget handle, void* user_data, void* call_data) {
unsigned int w, h;
(void)user_data;
@ -27,7 +27,7 @@ void MWAPI resize(MwWidget handle, void* user_data, void* call_data) {
NULL);
}
void MWAPI tick(MwWidget handle, void* user_data, void* call_data) {
void tick(MwWidget handle, void* user_data, void* call_data) {
(void)handle;
(void)user_data;
(void)call_data;
@ -61,7 +61,7 @@ void MWAPI tick(MwWidget handle, void* user_data, void* call_data) {
deg += 120.0 / (1000.0 / MwWaitMS) * dir;
}
void MWAPI activate(MwWidget handle, void* user_data, void* call_data) {
void activate(MwWidget handle, void* user_data, void* call_data) {
(void)handle;
(void)user_data;
(void)call_data;

View file

@ -17,7 +17,7 @@ int ct = 0;
int click = 0;
int mx, my;
static void MWAPI tick(MwWidget handle, void* user, void* call) {
static void tick(MwWidget handle, void* user, void* call) {
int i;
int w = MwGetInteger(opengl, MwNwidth);
int h = MwGetInteger(opengl, MwNheight);
@ -50,7 +50,7 @@ static void MWAPI tick(MwWidget handle, void* user, void* call) {
MwOpenGLSwapBuffer(opengl);
}
static void MWAPI mouse(MwWidget handle, void* user, void* call) {
static void mouse(MwWidget handle, void* user, void* call) {
MwMouse* mouse = call;
(void)handle;
@ -91,7 +91,7 @@ static void MWAPI mouse(MwWidget handle, void* user, void* call) {
}
}
static void MWAPI mouse_move(MwWidget handle, void* user, void* call) {
static void mouse_move(MwWidget handle, void* user, void* call) {
MwPoint* point = call;
(void)handle;
@ -125,12 +125,13 @@ int main() {
MwNtext, "Press left click to draw triangle, right click to undo",
NULL);
MwViewportSetSize(viewport, 1024, 768);
t = malloc(sizeof(*t));
opengl = MwCreateWidget(MwOpenGLClass, "opengl", viewport, 0, 0, 1024, 768);
opengl = MwCreateWidget(MwOpenGLClass, "opengl", MwViewportGetViewport(viewport), 0, 0, 1024, 768);
MwAddUserHandler(window, MwNtickHandler, tick, NULL);
MwAddUserHandler(opengl, MwNtickHandler, tick, NULL);
MwAddUserHandler(opengl, MwNmouseDownHandler, mouse, NULL);
MwAddUserHandler(opengl, MwNmouseMoveHandler, mouse_move, NULL);

View file

@ -1,30 +1,28 @@
file(
GLOB
EXAMPLES_VULKAN_SOURCES
*.c
GLOB
EXAMPLES_VULKAN_SOURCES
*.c
)
find_package(Vulkan)
if(${Vulkan_FOUND})
foreach(PATH IN LISTS EXAMPLES_VULKAN_SOURCES)
get_filename_component(TARGET ${PATH} NAME_WE)
add_executable(${TARGET} MACOSX_BUNDLE ${PATH})
target_include_directories(
${TARGET}
PRIVATE
${Vulkan_INCLUDE_DIR}
)
target_link_libraries(
${TARGET}
PRIVATE
Mw
)
if(NOT CMAKE_SYSTEM_NAME STREQUAL "Windows")
target_link_libraries(
${TARGET}
PRIVATE
m
)
endif()
endforeach()
endif()
foreach(PATH IN LISTS EXAMPLES_VULKAN_SOURCES)
get_filename_component(TARGET ${PATH} NAME_WE)
add_executable(${TARGET} MACOSX_BUNDLE ${PATH})
target_include_directories(
${TARGET}
PRIVATE
${Vulkan_INCLUDE_DIR}
)
target_link_libraries(
${TARGET}
PRIVATE
Mw
)
if(NOT CMAKE_SYSTEM_NAME STREQUAL "Windows")
target_link_libraries(
${TARGET}
PRIVATE
m
)
endif()
endforeach()

View file

@ -1,3 +1,10 @@
/**
* this example is quite minimal, you may need to modify it if your graphics card is more esoteric
*
* ioixd maintains this file. nishi doesn't know vulkan at all
*/
#include <Mw/Milsko.h>
#include <Mw/Widget/Vulkan.h>
@ -59,7 +66,7 @@ VkSwapchainCreateInfoKHR swapchainCreateInfo = {};
PFN_##name _##name = (PFN_##name)_vkGetInstanceProcAddr(instance, #name); \
assert(_##name);
void MWAPI tick(MwWidget handle, void* user_data, void* call_data) {
void tick(MwWidget handle, void* user_data, void* call_data) {
(void)handle;
(void)user_data;
(void)call_data;
@ -617,9 +624,9 @@ int main() {
MwNtitle, "hello world",
NULL);
vulkan = MwVaCreateWidget(MwVulkanClass, "vulkan", window, 50, 50, ow, oh,
MwNvulkanExtension, VK_KHR_SWAPCHAIN_EXTENSION_NAME,
NULL);
MwVulkanEnableExtension(VK_KHR_SWAPCHAIN_EXTENSION_NAME);
vulkan = MwCreateWidget(MwVulkanClass, "vulkan", window, 50, 50, ow, oh);
MwAddUserHandler(window, MwNtickHandler, tick, NULL);

View file

@ -1,22 +0,0 @@
/*!
* @file Mw/Abstract/CharSet.h
* @brief CharSet
*/
#ifndef __MW_ABSTRACT_CHARSET_H__
#define __MW_ABSTRACT_CHARSET_H__
#include <Mw/MachDep.h>
#ifdef __cplusplus
extern "C" {
#endif
MWDECL char* MWAPI MwACPToUTF8(const char* input);
MWDECL char* MWAPI MwUTF8ToACP(const char* input);
#ifdef __cplusplus
}
#endif
#endif

View file

@ -17,32 +17,32 @@ extern "C" {
* @param path Path
* @return Handle
*/
MWDECL void* MWAPI MwDirectoryOpen(const char* path);
MWDECL void* MwDirectoryOpen(const char* path);
/*!
* @brief Closes a directory
* @param handle Handle
*/
MWDECL void MWAPI MwDirectoryClose(void* handle);
MWDECL void MwDirectoryClose(void* handle);
/*!
* @brief Reads a directory
* @param handle Handle
* @return Directory entry
*/
MWDECL MwDirectoryEntry* MWAPI MwDirectoryRead(void* handle);
MWDECL MwDirectoryEntry* MwDirectoryRead(void* handle);
/*!
* @brief Frees a directory entry
* @param entry Entry
*/
MWDECL void MWAPI MwDirectoryFreeEntry(MwDirectoryEntry* entry);
MWDECL void MwDirectoryFreeEntry(MwDirectoryEntry* entry);
/*!
* @brief Gets a current directory
* @param Directory
*/
MWDECL char* MWAPI MwDirectoryCurrent(void);
MWDECL char* MwDirectoryCurrent(void);
/*!
* @brief Joins 2 paths
@ -50,7 +50,7 @@ MWDECL char* MWAPI MwDirectoryCurrent(void);
* @param b Path
* @return Path
*/
MWDECL char* MWAPI MwDirectoryJoin(char* a, char* b);
MWDECL char* MwDirectoryJoin(char* a, char* b);
#ifdef __cplusplus
}

View file

@ -16,20 +16,20 @@ extern "C" {
* @param path Path
* @return Handle
*/
MWDECL void* MWAPI MwDynamicOpen(const char* path);
MWDECL void* MwDynamicOpen(const char* path);
/*!
* @brief Gets a symbol from the dynamic library
* @param handle Handle
* @param symbol Symbol
*/
MWDECL void* MWAPI MwDynamicSymbol(void* handle, const char* symbol);
MWDECL void* MwDynamicSymbol(void* handle, const char* symbol);
/*!
* @brief Closes a dynamic library
* @param handle Handle
*/
MWDECL void MWAPI MwDynamicClose(void* handle);
MWDECL void MwDynamicClose(void* handle);
#ifdef __cplusplus
}

View file

@ -15,13 +15,13 @@ extern "C" {
* @brief Sleeps for milliseconds
* @param ms Milliseconds
*/
MWDECL void MWAPI MwTimeSleep(int ms);
MWDECL void MwTimeSleep(int ms);
/*!
* @brief Gets a monotonic time
* @return Monotonic time
*/
MWDECL long MWAPI MwTimeGetTick(void);
MWDECL long MwTimeGetTick(void);
#ifdef __cplusplus
}

View file

@ -121,22 +121,4 @@ enum MwMOUSE {
MwMOUSE_WHEELDOWN
};
#define MwKEY_FLAG 0x80000000
#define MwKEY_CONTROL_FLAG MwKEY_FLAG | 0x40000000
#define MwKEY_ALT_FLAG MwKEY_FLAG | 0x20000000
enum MwKEY {
MwKEY_BACKSPACE = MwKEY_FLAG | 1,
MwKEY_LEFT,
MwKEY_RIGHT,
MwKEY_UP,
MwKEY_DOWN,
MwKEY_ENTER,
MwKEY_ESCAPE,
MwKEY_LEFTSHIFT,
MwKEY_RIGHTSHIFT,
MwKEY_ALT,
MwKEY_CONTROL
};
#endif

View file

@ -60,7 +60,7 @@ extern "C" {
* @brief Initializes the Milsko Toolkit
* @return `0` if successful
*/
MWDECL int MWAPI MwLibraryInit(void);
MWDECL int MwLibraryInit(void);
/*!
* @brief Creates a widget
@ -73,7 +73,7 @@ MWDECL int MWAPI MwLibraryInit(void);
* @param height Height
* @return Widget
*/
MWDECL MwWidget MWAPI MwCreateWidget(MwClass widget_class, const char* name, MwWidget parent, int x, int y, unsigned int width, unsigned int height);
MWDECL MwWidget MwCreateWidget(MwClass widget_class, const char* name, MwWidget parent, int x, int y, unsigned int width, unsigned int height);
/*!
* @brief Creates a widget
@ -87,7 +87,7 @@ MWDECL MwWidget MWAPI MwCreateWidget(MwClass widget_class, const char* name, MwW
* @param ... Same with MwVaApply
* @return Widget
*/
MWDECL MwWidget MWAPI MwVaCreateWidget(MwClass widget_class, const char* name, MwWidget parent, int x, int y, unsigned int width, unsigned int height, ...);
MWDECL MwWidget MwVaCreateWidget(MwClass widget_class, const char* name, MwWidget parent, int x, int y, unsigned int width, unsigned int height, ...);
/*!
* @brief Creates a widget
@ -101,13 +101,13 @@ MWDECL MwWidget MWAPI MwVaCreateWidget(MwClass widget_class, const char* name, M
* @param va Same with MwVaListApply
* @return Widget
*/
MWDECL MwWidget MWAPI MwVaListCreateWidget(MwClass widget_class, const char* name, MwWidget parent, int x, int y, unsigned int width, unsigned int height, va_list va);
MWDECL MwWidget MwVaListCreateWidget(MwClass widget_class, const char* name, MwWidget parent, int x, int y, unsigned int width, unsigned int height, va_list va);
/*!
* @brief Destroys the widget and its child widgets
* @param handle Widget
*/
MWDECL void MWAPI MwDestroyWidget(MwWidget handle);
MWDECL void MwDestroyWidget(MwWidget handle);
/*!
* @brief Executes a method specific to the widget (varadic version).
@ -115,7 +115,7 @@ MWDECL void MWAPI MwDestroyWidget(MwWidget handle);
* @param handle Widget
* @param ... Widget function arguments.
*/
MWDECL void MWAPI MwVaWidgetExecute(MwWidget handle, const char* func_name, void* out, ...);
MWDECL void MwVaWidgetExecute(MwWidget handle, const char* func_name, void* out, ...);
/*!
* @brief Executes a method specific to the widget (va_list version).
@ -123,27 +123,27 @@ MWDECL void MWAPI MwVaWidgetExecute(MwWidget handle, const char* func_name, void
* @param handle Widget
* @param va Widget function arguments.
*/
MWDECL void MWAPI MwVaListWidgetExecute(MwWidget handle, const char* func_name, void* out, va_list va);
MWDECL void MwVaListWidgetExecute(MwWidget handle, const char* func_name, void* out, va_list va);
/*!
* @brief Runs the main loop
* @param handle Widget
*/
MWDECL void MWAPI MwLoop(MwWidget handle);
MWDECL void MwLoop(MwWidget handle);
/*!
* @brief Runs the single step
* @param handle Widget
* @return `0` if successful
*/
MWDECL int MWAPI MwStep(MwWidget handle);
MWDECL int MwStep(MwWidget handle);
/*!
* @brief Check if any event is pending
* @param handle Widget
* @return `1` if any event is pending
*/
MWDECL int MWAPI MwPending(MwWidget handle);
MWDECL int MwPending(MwWidget handle);
/*!
* @brief Sets an integer property
@ -151,7 +151,7 @@ MWDECL int MWAPI MwPending(MwWidget handle);
* @param key Key
* @param n Value
*/
MWDECL void MWAPI MwSetInteger(MwWidget handle, const char* key, int n);
MWDECL void MwSetInteger(MwWidget handle, const char* key, int n);
/*!
* @brief Sets a text property
@ -159,7 +159,7 @@ MWDECL void MWAPI MwSetInteger(MwWidget handle, const char* key, int n);
* @param key Key
* @param value Value
*/
MWDECL void MWAPI MwSetText(MwWidget handle, const char* key, const char* value);
MWDECL void MwSetText(MwWidget handle, const char* key, const char* value);
/*!
* @brief Sets a void pointer property
@ -167,7 +167,7 @@ MWDECL void MWAPI MwSetText(MwWidget handle, const char* key, const char* value)
* @param key Key
* @param value Value
*/
MWDECL void MWAPI MwSetVoid(MwWidget handle, const char* key, void* value);
MWDECL void MwSetVoid(MwWidget handle, const char* key, void* value);
/*!
* @brief Gets the integer property
@ -175,7 +175,7 @@ MWDECL void MWAPI MwSetVoid(MwWidget handle, const char* key, void* value);
* @param key Key
* @return Value
*/
MWDECL int MWAPI MwGetInteger(MwWidget handle, const char* key);
MWDECL int MwGetInteger(MwWidget handle, const char* key);
/*!
* @brief Gets the text property
@ -183,7 +183,7 @@ MWDECL int MWAPI MwGetInteger(MwWidget handle, const char* key);
* @param key Key
* @return Value
*/
MWDECL const char* MWAPI MwGetText(MwWidget handle, const char* key);
MWDECL const char* MwGetText(MwWidget handle, const char* key);
/*!
* @brief Gets the void pointer property
@ -191,28 +191,28 @@ MWDECL const char* MWAPI MwGetText(MwWidget handle, const char* key);
* @param key Key
* @return Value
*/
MWDECL void* MWAPI MwGetVoid(MwWidget handle, const char* key);
MWDECL void* MwGetVoid(MwWidget handle, const char* key);
/*!
* @brief Sets the default property
* @param handle Widget
* @warning This is called when widget is created
*/
MWDECL void MWAPI MwSetDefault(MwWidget handle);
MWDECL void MwSetDefault(MwWidget handle);
/*!
* @brief Sets the properties
* @param handle Widget
* @param ... Properties
*/
MWDECL void MWAPI MwVaApply(MwWidget handle, ...);
MWDECL void MwVaApply(MwWidget handle, ...);
/*!
* @brief Sets properties
* @param handle Widget
* @param va Properties
*/
MWDECL void MWAPI MwVaListApply(MwWidget handle, va_list va);
MWDECL void MwVaListApply(MwWidget handle, va_list va);
/*!
* @brief Sets a user handler
@ -221,7 +221,7 @@ MWDECL void MWAPI MwVaListApply(MwWidget handle, va_list va);
* @param handler Handler
* @param user_data User data passed to handler
*/
MWDECL void MWAPI MwAddUserHandler(MwWidget handle, const char* key, MwUserHandler handler, void* user_data);
MWDECL void MwAddUserHandler(MwWidget handle, const char* key, MwUserHandler handler, void* user_data);
/*!
* @brief Dispatches the user handler
@ -229,7 +229,7 @@ MWDECL void MWAPI MwAddUserHandler(MwWidget handle, const char* key, MwUserHandl
* @param key Key
* @param handler_data Handler data passed to handler
*/
MWDECL void MWAPI MwDispatchUserHandler(MwWidget handle, const char* key, void* handler_data);
MWDECL void MwDispatchUserHandler(MwWidget handle, const char* key, void* handler_data);
/*!
* @brief Sets an error handler
@ -237,52 +237,59 @@ MWDECL void MWAPI MwDispatchUserHandler(MwWidget handle, const char* key, void*
* @param handler Handler
* @param user_data User data passed to handler
*/
MWDECL void MWAPI MwSetErrorHandler(MwErrorHandler handler, void* user_data);
MWDECL void MwSetErrorHandler(MwErrorHandler handler, void* user_data);
/*!
* @brief Dispatches the error handler
* @param code Error code
* @param message Error message
*/
MWDECL void MWAPI MwDispatchError(int code, const char* message);
MWDECL void MwDispatchError(int code, const char* message);
/*!
* @brief Gets the before_step of widget
* @param handle Widget
* @param jmpbuf jmp_buf
*/
MWDECL void MwGetBeforeStep(MwWidget handle, jmp_buf* jmpbuf);
/*!
* @brief Forcefully makes widget render
* @param handle Widget
*/
MWDECL void MWAPI MwForceRender(MwWidget handle);
MWDECL void MwForceRender(MwWidget handle);
/*!
* @brief Forcefully makes widget render
* @param handle Widget
* @param ptr Ignored
*/
MWDECL void MWAPI MwForceRender2(MwWidget handle, void* ptr);
MWDECL void MwForceRender2(MwWidget handle, void* ptr);
/*!
* @brief Adds an widget to tick handler list
* @param handle Widget
*/
MWDECL void MWAPI MwAddTickList(MwWidget handle);
MWDECL void MwAddTickList(MwWidget handle);
/*!
* @brief Focus the widget
* @param handle Widget
*/
MWDECL void MWAPI MwFocus(MwWidget handle);
MWDECL void MwFocus(MwWidget handle);
/*!
* @brief Grabs the pointer
* @param handle Widget
* @param toggle Toggle
*/
MWDECL void MWAPI MwGrabPointer(MwWidget handle, int toggle);
MWDECL void MwGrabPointer(MwWidget handle, int toggle);
/*!
* @brief Hides the cursor
* @param handle Widget
*/
MWDECL void MWAPI MwHideCursor(MwWidget handle);
MWDECL void MwHideCursor(MwWidget handle);
/*!
* @brief Toggles the dark theme
@ -290,113 +297,76 @@ MWDECL void MWAPI MwHideCursor(MwWidget handle);
* @param toggle Toggle
* @deprecated Use MwNdarkTheme instead
*/
MWDECL void MWAPI MwSetDarkTheme(MwWidget handle, int toggle);
MWDECL void MwSetDarkTheme(MwWidget handle, int toggle);
/*!
* @brief Gets the parent widget
* @param handle Widget
* @return Parent widget
*/
MWDECL MwWidget MWAPI MwGetParent(MwWidget handle);
MWDECL MwWidget MwGetParent(MwWidget handle);
/*!
* @brief Show widget
* @param handle Widget
* @param toggle Toggle
*/
MWDECL void MWAPI MwShow(MwWidget handle, int toggle);
MWDECL void MwShow(MwWidget handle, int toggle);
/*!
* @brief Reparents widget
* @param handle Widget
* @param new_parent New parent
*/
MWDECL void MWAPI MwReparent(MwWidget handle, MwWidget new_parent);
MWDECL void MwReparent(MwWidget handle, MwWidget new_parent);
/*!
* @brief Gets class of widget
* @param handle Widget
* @return Class
*/
MWDECL MwClass MWAPI MwGetClass(MwWidget handle);
MWDECL MwClass MwGetClass(MwWidget handle);
/*!
* @brief Gets name of widget
* @param handle Widget
* @return Name
*/
MWDECL const char* MWAPI MwGetName(MwWidget handle);
MWDECL const char* MwGetName(MwWidget handle);
/*!
* @brief Gets children of widget
* @param handle Widget
* @return Children (NULL-terminated array)
*/
MWDECL MwWidget* MWAPI MwGetChildren(MwWidget handle);
MWDECL MwWidget* MwGetChildren(MwWidget handle);
/*!
* @brief Gets the cursor coordinate
* @param handle Widget
* @param point Point
*/
MWDECL void MWAPI MwGetCursorCoord(MwWidget handle, MwPoint* point);
MWDECL void MwGetCursorCoord(MwWidget handle, MwPoint* point);
/*!
* @brief Gets the screen size
* @param handle Widget
* @param rect Rectangle
*/
MWDECL void MWAPI MwGetScreenSize(MwWidget handle, MwRect* rect);
MWDECL void MwGetScreenSize(MwWidget handle, MwRect* rect);
/*!
* @brief Reports whether a widget reports global or local coordinates upon GetXY/SetXY. Anything with a parent reports local, and most backends report global coordinates being supported for top level windows, but some (Wayland) do not.
* @param handle Widget
*/
MWDECL int MWAPI MwGetCoordinateType(MwWidget handle);
MWDECL int MwGetCoordinateType(MwWidget handle);
/*!
* @brief Queue to get clipboard content
* @brief Queue to get clipboard content.
* @param handle Widget
* @param clipboard_type The Clipboard Type to get. See MwClipboardType. This is ignored on backends that aren't X11/Wayland, so if you're unsure, just use MwClipboardMain
*/
MWDECL void MWAPI MwGetClipboard(MwWidget handle, int clipboard_type);
/*!
* @brief Set user pointer
* @param handle Widget
* @param user User pointer
*/
MWDECL void MWAPI MwSetUser(MwWidget handle, void* user);
/*!
* @brief Get user pointer
* @param handle Widget
* @return User pointer
*/
MWDECL void* MWAPI MwGetUser(MwWidget handle);
/*!
* @brief Free the widget
* @param handle Widget
* @warning This is used internally!
* @note You can call this on toplevel widget safely if you're sure no event loops will be ran, e.g. after `MwLoop`.
*/
MWDECL void MWAPI MwFreeWidget(MwWidget handle);
/*!
* @brief Gets the frame of the widget
* @param handle Widget
* @param rect Frame
*/
MWDECL void MWAPI MwGetFrame(MwWidget handle, MwRect* rect);
#ifdef _MILSKO
MWDECL void MwForceRender_Internal(MwWidget handle);
MWDECL void MwForceRender2_Internal(MwWidget handle, void* ptr);
#define MwForceRender MwForceRender_Internal
#define MwForceRender2 MwForceRender2_Internal
#endif
MWDECL void MwGetClipboard(MwWidget handle, int clipboard_type);
#ifdef __cplusplus
}

View file

@ -32,16 +32,6 @@ MWDECL const char* MwDefaultSubBackground;
*/
MWDECL const char* MwDefaultSubForeground;
/*!
* @brief Default title background color
*/
MWDECL const char* MwDefaultTitleBackground;
/*!
* @brief Default title foreground color
*/
MWDECL const char* MwDefaultTitleForeground;
/*!
* @brief Default dark theme background color
*/
@ -62,16 +52,6 @@ MWDECL const char* MwDefaultDarkSubBackground;
*/
MWDECL const char* MwDefaultDarkSubForeground;
/*!
* @brief Default dark theme title background color
*/
MWDECL const char* MwDefaultDarkTitleBackground;
/*!
* @brief Default dark theme title foreground color
*/
MWDECL const char* MwDefaultDarkTitleForeground;
/*!
* @brief Default shadow difference
*/
@ -81,13 +61,7 @@ MWDECL const int MwDefaultShadow;
* @brief Gets default border width
* @param handle Widget
*/
MWDECL int MWAPI MwDefaultBorderWidth(MwWidget handle);
/*!
* @brief Gets default thin border width
* @param handle Widget
*/
MWDECL int MwDefaultThinBorderWidth(MwWidget handle);
MWDECL int MwDefaultBorderWidth(MwWidget handle);
#ifdef __cplusplus
}

View file

@ -18,7 +18,7 @@ extern "C" {
* @param title Title text
* @return Widget
*/
MWDECL MwWidget MWAPI MwColorPicker(MwWidget handle, const char* title);
MWDECL MwWidget MwColorPicker(MwWidget handle, const char* title);
#ifdef __cplusplus
}

View file

@ -18,7 +18,7 @@ extern "C" {
* @param title Title text
* @return Widget
*/
MWDECL MwWidget MWAPI MwDirectoryChooser(MwWidget handle, const char* title);
MWDECL MwWidget MwDirectoryChooser(MwWidget handle, const char* title);
#ifdef __cplusplus
}

View file

@ -18,7 +18,7 @@ extern "C" {
* @param title Title text
* @return Widget
*/
MWDECL MwWidget MWAPI MwFileChooser(MwWidget handle, const char* title);
MWDECL MwWidget MwFileChooser(MwWidget handle, const char* title);
/*!
* @brief Creates a file chooser
@ -27,7 +27,7 @@ MWDECL MwWidget MWAPI MwFileChooser(MwWidget handle, const char* title);
* @param dir Show directory only or not
* @return Widget
*/
MWDECL MwWidget MWAPI MwFileChooserEx(MwWidget handle, const char* title, int dir);
MwWidget MwFileChooserEx(MwWidget handle, const char* title, int dir);
#ifdef __cplusplus
}

View file

@ -20,14 +20,20 @@ extern "C" {
* @param flag Flag
* @return Widget
*/
MWDECL MwWidget MWAPI MwMessageBox(MwWidget handle, const char* text, const char* title, unsigned int flag);
MWDECL MwWidget MwMessageBox(MwWidget handle, const char* text, const char* title, unsigned int flag);
/*!
* @brief Gets a child of the message box
* @param handle Widget
* @param child Child
*/
MWDECL MwWidget MWAPI MwMessageBoxGetChild(MwWidget handle, int child);
MWDECL MwWidget MwMessageBoxGetChild(MwWidget handle, int child);
/*!
* @brief Destroys the message box
* @param handle Widget
*/
MWDECL void MwMessageBoxDestroy(MwWidget handle);
#ifdef __cplusplus
}

View file

@ -19,20 +19,14 @@ extern "C" {
* @param text Color text
* @return Color
*/
MWDECL MwLLColor MWAPI MwParseColor(MwWidget handle, const char* text);
MWDECL MwLLColor MwParseColor(MwWidget handle, const char* text);
/*!
* @brief Parses a color text
* @param text Color text
* @param rgb RGB
*/
MWDECL void MWAPI MwParseColorNoAllocate(const char* text, MwRGB* rgb);
/*!
* @brief Initialize color table
* @warning This is called in MwLibraryInit - you do not have to call this
*/
MWDECL void MWAPI MwColorTableInit(void);
MWDECL void MwParseColorNoAllocate(const char* text, MwRGB* rgb);
/*!
* @brief Lighten a color
@ -43,7 +37,7 @@ MWDECL void MWAPI MwColorTableInit(void);
* @param b Blue
* @return Color
*/
MWDECL MwLLColor MWAPI MwLightenColor(MwWidget handle, MwLLColor color, int r, int g, int b);
MWDECL MwLLColor MwLightenColor(MwWidget handle, MwLLColor color, int r, int g, int b);
/*!
* @brief Draws a filled rectangle
@ -51,7 +45,7 @@ MWDECL MwLLColor MWAPI MwLightenColor(MwWidget handle, MwLLColor color, int r, i
* @param rect Rectangle area
* @param color Color
*/
MWDECL void MWAPI MwDrawRect(MwWidget handle, MwRect* rect, MwLLColor color);
MWDECL void MwDrawRect(MwWidget handle, MwRect* rect, MwLLColor color);
/*!
* @brief Draws a filled rectangle that fades to a darker color
@ -59,7 +53,7 @@ MWDECL void MWAPI MwDrawRect(MwWidget handle, MwRect* rect, MwLLColor color);
* @param rect Rectangle area
* @param color Color
*/
MWDECL void MWAPI MwDrawRectFading(MwWidget handle, MwRect* rect, MwLLColor color);
MWDECL void MwDrawRectFading(MwWidget handle, MwRect* rect, MwLLColor color);
/*!
* @brief Draws a frame
@ -69,18 +63,7 @@ MWDECL void MWAPI MwDrawRectFading(MwWidget handle, MwRect* rect, MwLLColor colo
* @param invert Invert the 3D border color or not
* @warning `rect` gets changed to the area of rectangle inside
*/
MWDECL void MWAPI MwDrawFrame(MwWidget handle, MwRect* rect, MwLLColor color, int invert);
/*!
* @brief Draws a frame
* @param handle Widget
* @param rect Rectangle area
* @param color Color
* @param invert Invert the 3D border color or not
* @param border Border
* @warning `rect` gets changed to the area of rectangle inside
*/
MWDECL void MWAPI MwDrawFrameWithBorder(MwWidget handle, MwRect* rect, MwLLColor color, int invert, int border);
MWDECL void MwDrawFrame(MwWidget handle, MwRect* rect, MwLLColor color, int invert);
/*!
* @brief Does the DrawFrame/DrawRect combo used for drawing widget.
@ -90,7 +73,7 @@ MWDECL void MWAPI MwDrawFrameWithBorder(MwWidget handle, MwRect* rect, MwLLColor
* @param invert Invert the 3D border color or not
* @warning `rect` gets changed to the area of rectangle inside
*/
MWDECL void MWAPI MwDrawWidgetBack(MwWidget handle, MwRect* rect, MwLLColor color, int invert, int border);
MWDECL void MwDrawWidgetBack(MwWidget handle, MwRect* rect, MwLLColor color, int invert, int border);
/*!
* @brief Draws a triangle
@ -99,7 +82,7 @@ MWDECL void MWAPI MwDrawWidgetBack(MwWidget handle, MwRect* rect, MwLLColor colo
* @param color Color
* @param invert Invert the 3D border color or not
*/
MWDECL void MWAPI MwDrawTriangle(MwWidget handle, MwRect* rect, MwLLColor color, int invert, int direction);
MWDECL void MwDrawTriangle(MwWidget handle, MwRect* rect, MwLLColor color, int invert, int direction);
/*!
* @brief Draws a frame with specified border width
@ -110,9 +93,10 @@ MWDECL void MWAPI MwDrawTriangle(MwWidget handle, MwRect* rect, MwLLColor color,
* @param border Border width
* @param diff Difference (set this to 0 if you don't know what this does)
* @param same Same as dark color
* @param rounded Rounded or not
* @warning `rect` gets changed to the area of rectangle inside
*/
MWDECL void MWAPI MwDrawFrameEx(MwWidget handle, MwRect* rect, MwLLColor color, int invert, int border, int diff, int same);
MWDECL void MwDrawFrameEx(MwWidget handle, MwRect* rect, MwLLColor color, int invert, int border, int diff, int same);
/*!
* @brief Creates a pixmap from image
@ -120,7 +104,7 @@ MWDECL void MWAPI MwDrawFrameEx(MwWidget handle, MwRect* rect, MwLLColor color,
* @param path Path
* @return Pixmap
*/
MWDECL MwLLPixmap MWAPI MwLoadImage(MwWidget handle, const char* path);
MWDECL MwLLPixmap MwLoadImage(MwWidget handle, const char* path);
/*!
* @brief Get color components
@ -129,7 +113,7 @@ MWDECL MwLLPixmap MWAPI MwLoadImage(MwWidget handle, const char* path);
* @param green Pointer to green color
* @param blue Pointer to blue color
*/
MWDECL void MWAPI MwColorGet(MwLLColor color, int* red, int* green, int* blue);
MWDECL void MwColorGet(MwLLColor color, int* red, int* green, int* blue);
/*!
* @brief Creates a pixmap from raw data
@ -139,28 +123,28 @@ MWDECL void MWAPI MwColorGet(MwLLColor color, int* red, int* green, int* blue);
* @param height Height
* @return Pixmap
*/
MWDECL MwLLPixmap MWAPI MwLoadRaw(MwWidget handle, unsigned char* rgb, int width, int height);
MWDECL MwLLPixmap MwLoadRaw(MwWidget handle, unsigned char* rgb, int width, int height);
/*!
* @brief Updates a pixmap using raw data
* @param pixmap Pixmap to update
* @param rgb RGBA data
*/
MWDECL void MWAPI MwPixmapReloadRaw(MwLLPixmap pixmap, unsigned char* rgb);
MWDECL void MwPixmapReloadRaw(MwLLPixmap pixmap, unsigned char* rgb);
/*!
* @brief Gets the raw data of pixmap
* @param pixmap Pixmap
* @return RGBA data
* @return RFBA data
*/
MWDECL unsigned char* MWAPI MwPixmapGetRaw(MwLLPixmap pixmap);
MWDECL unsigned char* MwPixmapGetRaw(MwLLPixmap pixmap);
/*!
* @brief Gets the size of pixmap
* @param pixmap Pixmap
* @param rect Size
*/
MWDECL void MWAPI MwPixmapGetSize(MwLLPixmap pixmap, MwRect* rect);
MWDECL void MwPixmapGetSize(MwLLPixmap pixmap, MwRect* rect);
/*!
* @brief Creates a pixmap from XPM data
@ -168,7 +152,7 @@ MWDECL void MWAPI MwPixmapGetSize(MwLLPixmap pixmap, MwRect* rect);
* @param data Data
* @return Pixmap
*/
MWDECL MwLLPixmap MWAPI MwLoadXPM(MwWidget handle, char** data);
MWDECL MwLLPixmap MwLoadXPM(MwWidget handle, char** data);
/*!
* @brief Creates a pixmap from icon data
@ -176,7 +160,7 @@ MWDECL MwLLPixmap MWAPI MwLoadXPM(MwWidget handle, char** data);
* @param data Data
* @return Pixmap
*/
MWDECL MwLLPixmap MWAPI MwLoadIcon(MwWidget handle, MwU32* data);
MWDECL MwLLPixmap MwLoadIcon(MwWidget handle, MwU32* data);
/*!
* @brief Draws a diamond
@ -185,7 +169,7 @@ MWDECL MwLLPixmap MWAPI MwLoadIcon(MwWidget handle, MwU32* data);
* @param color Color
* @param invert Invert the 3D border color or not
*/
MWDECL void MWAPI MwDrawDiamond(MwWidget handle, MwRect* rect, MwLLColor color, int invert);
MWDECL void MwDrawDiamond(MwWidget handle, MwRect* rect, MwLLColor color, int invert);
/* text.c */
@ -198,7 +182,7 @@ MWDECL void MWAPI MwDrawDiamond(MwWidget handle, MwRect* rect, MwLLColor color,
* @param align Align
* @param color Color
*/
MWDECL void MWAPI MwDrawText(MwWidget handle, MwFLFont ttf, MwPoint* point, const char* text, int align, MwLLColor color);
MWDECL void MwDrawText(MwWidget handle, MwFLFont ttf, MwPoint* point, const char* text, int align, MwLLColor color);
/*!
* @brief Calculates a text width
@ -207,7 +191,7 @@ MWDECL void MWAPI MwDrawText(MwWidget handle, MwFLFont ttf, MwPoint* point, cons
* @param font Font, NULLable
* @return Text width
*/
MWDECL int MWAPI MwTextWidth(MwWidget handle, MwFLFont font, const char* text);
MWDECL int MwTextWidth(MwWidget handle, MwFLFont font, const char* text);
/*!
* @brief Calculates a text height
@ -216,7 +200,7 @@ MWDECL int MWAPI MwTextWidth(MwWidget handle, MwFLFont font, const char* text);
* @param font Font, NULLable
* @return Text height
*/
MWDECL int MWAPI MwTextHeight(MwWidget handle, MwFLFont font, const char* text);
MWDECL int MwTextHeight(MwWidget handle, MwFLFont font, const char* text);
/* color.c */
@ -226,14 +210,14 @@ MWDECL int MWAPI MwTextHeight(MwWidget handle, MwFLFont font, const char* text);
* @param color Color name
* @return Color
*/
MWDECL MwLLColor MWAPI MwParseColorName(MwWidget handle, const char* color);
MWDECL MwLLColor MwParseColorName(MwWidget handle, const char* color);
/*!
* @brief Parses a color name
* @param color Color name
* @param rgb RGB
*/
MWDECL void MWAPI MwParseColorNameNoAllocate(const char* color, MwRGB* rgb);
MWDECL void MwParseColorNameNoAllocate(const char* color, MwRGB* rgb);
#ifdef __cplusplus
}

View file

@ -18,13 +18,13 @@ extern "C" {
* @param size Data size
* @return Font handle
*/
MWDECL void* MWAPI MwFontLoad(unsigned char* data, unsigned int size);
MWDECL void* MwFontLoad(unsigned char* data, unsigned int size);
/*!
* @brief Frees a font handle
* @param handle Handle
*/
MWDECL void MWAPI MwFontFree(void* handle);
MWDECL void MwFontFree(void* handle);
#ifdef __cplusplus
}

View file

@ -30,7 +30,6 @@ enum MwLLBackends {
MwLLBackendGDI,
MwLLBackendWayland,
MwLLBackendCocoa,
MwLLBackendHaiku
};
struct _MwLLCommon {
@ -118,9 +117,6 @@ MWDECL void MwLLDBusFreeContext(MwLLDBusFuncTable* tbl, MwLLDBusContext* ctx);
#ifdef CLASSIC_MAC_OS
#include <Mw/LowLevel/ClassicMacOS.h>
#endif
#ifdef USE_HAIKU
#include <Mw/LowLevel/Haiku.h>
#endif
union _MwLL {
struct _MwLLCommon common;
@ -132,7 +128,6 @@ union _MwLL {
#endif
#ifdef USE_WAYLAND
struct _MwLLWayland wayland;
struct _MwLLCairo cairo;
#endif
#ifdef USE_COCOA
struct _MwLLCocoa cocoa;
@ -140,9 +135,6 @@ union _MwLL {
#ifdef CLASSIC_MAC_OS
struct _MwLLClassicMacOS cmacos;
#endif
#ifdef USE_HAIKU
struct _MwLLHaiku haiku;
#endif
};
union _MwLLColor {
@ -154,14 +146,11 @@ union _MwLLColor {
struct _MwLLGDIColor gdi;
#endif
#ifdef USE_WAYLAND
struct _MwLLCairoColor wayland;
struct _MwLLWaylandColor wayland;
#endif
#ifdef USE_COCOA
struct _MwLLCocoaColor cocoa;
#endif
#ifdef USE_HAIKU
struct _MwLLHaikuColor haiku;
#endif
};
union _MwLLPixmap {
@ -174,7 +163,6 @@ union _MwLLPixmap {
#endif
#ifdef USE_WAYLAND
struct _MwLLWaylandPixmap wayland;
struct _MwLLCairoPixmap cairo; /* same structure but we do this for code clarity */
#endif
#ifdef USE_COCOA
struct _MwLLCocoaPixmap cocoa;
@ -182,9 +170,6 @@ union _MwLLPixmap {
#ifdef CLASSIC_MAC_OS
struct _MwLLClassicMacOSPixmap cmacos;
#endif
#ifdef USE_HAIKU
struct _MwLLHaikuPixmap haiku;
#endif
};
#endif
#include <Mw/TypeDefs.h>
@ -192,6 +177,24 @@ union _MwLLPixmap {
#define MwLLDispatch(x, y, z) \
if(x->common.handler != NULL && x->common.handler->y != NULL) x->common.handler->y(x, z)
#define MwLLKeyMask (1 << 31)
enum MwLLKeyEnum {
MwLLKeyBackSpace = MwLLKeyMask | 1,
MwLLKeyLeft,
MwLLKeyRight,
MwLLKeyUp,
MwLLKeyDown,
MwLLKeyEnter,
MwLLKeyEscape,
MwLLKeyLeftShift,
MwLLKeyRightShift,
MwLLKeyAlt,
MwLLKeyControl
};
#define MwLLControlMask MwLLKeyMask | (1 << 30)
#define MwLLAltMask MwLLKeyMask | (1 << 29)
struct _MwLLHandler {
void (*draw)(MwLL handle, void* data);
void (*up)(MwLL handle, void* data);
@ -205,7 +208,6 @@ struct _MwLLHandler {
void (*focus_out)(MwLL handle, void* data);
void (*clipboard)(MwLL handle, void* data);
void (*dark_theme)(MwLL handle, void* data);
void (*drag_and_drop)(MwLL handle, void* data);
};
struct _MwLLTextDispatchTable {
@ -218,7 +220,6 @@ struct _MwLLTextDispatchTable {
#define MwFLFlagMonospace (1 << 0)
#define MwFLFlagBold (1 << 1)
#define MwFLFlagBitmap (1 << 2)
#define MwFLBuildFont(x) ((MwFLFont)(void*)(size_t)(x))
#ifdef __cplusplus
@ -235,17 +236,7 @@ MWDECL void (*MwLLDestroy)(MwLL handle);
MWDECL void (*MwLLPolygon)(MwLL handle, MwPoint* points, int points_count, MwLLColor color);
MWDECL void (*MwLLLine)(MwLL handle, MwPoint* points, MwLLColor color);
/*!
* @brief Begin drawing sequence
* @param handle Handle
*/
MWDECL void (*MwLLBeginDraw)(MwLL handle);
/*!
* @brief End drawing sequence
* @param handle Handle
*/
MWDECL void (*MwLLEndDraw)(MwLL handle);
MWDECL MwLLColor (*MwLLAllocColor)(MwLL handle, int r, int g, int b);
@ -270,44 +261,18 @@ MWDECL void (*MwLLSetIcon)(MwLL handle, MwLLPixmap pixmap);
MWDECL void (*MwLLForceRender)(MwLL handle);
MWDECL void (*MwLLSetCursor)(MwLL handle, MwCursor* image, MwCursor* mask);
/*!
* @brief Detach handle and make it toplevel window
* @param handle Handle
* @param point Point to be detached at, relative from the parent handle
*/
MWDECL void (*MwLLDetach)(MwLL handle, MwPoint* point);
MWDECL void (*MwLLShow)(MwLL handle, int show);
MWDECL void (*MwLLSetSizeHints)(MwLL handle, int minx, int miny, int maxx, int maxy);
MWDECL void (*MwLLMakeBorderless)(MwLL handle, int toggle);
/*!
* @brief Make handle "tool" window, e.g. Submenu, combobox menu, and etc.
* @param handle Handle
*/
MWDECL void (*MwLLMakeToolWindow)(MwLL handle);
MWDECL void (*MwLLMakePopup)(MwLL handle, MwLL parent);
/*!
* @brief Begin changing state (has to be called before `MwLLSetSizeHints`, `MwLLMakeBorderless`, `MwLLMakeToolWindow`, and `MwLLMakePopup`)
* @param handle Handle
*/
MWDECL void (*MwLLBeginStateChange)(MwLL handle);
/*!
* @brief End changing state
* @param handle Handle
*/
MWDECL void (*MwLLEndStateChange)(MwLL handle);
MWDECL void (*MwLLFocus)(MwLL handle);
/*!
* @brief Grab pointer, and keep moving pointer to center of handle
* @param handle Handle
* @param toggle Toggle
*/
MWDECL void (*MwLLGrabPointer)(MwLL handle, int toggle);
MWDECL void (*MwLLSetClipboard)(MwLL handle, const char* text, int clipboard_type);
@ -316,59 +281,24 @@ MWDECL void (*MwLLGetClipboard)(MwLL handle, int clipboard_type);
MWDECL void (*MwLLGetCursorCoord)(MwLL handle, MwPoint* point);
MWDECL void (*MwLLGetScreenSize)(MwLL handle, MwRect* rect);
/*!
* @brief Setup drag and drop capabilities, should the user request it with MwNacceptsDnD
* @param handle Handle
*/
MWDECL void (*MwLLSetupDragAndDrop)(MwLL handle);
/*!
* @brief Set any extra parameters for dark theme
* @param handle Handle
* @param toggle Toggle
* @warning Do not run `handle->common.handler->dark_theme` when this function gets called
* @warning This is for stuff like, i.e. setting the accent color on modern Windows. The user themselves sets dark theme with MwNdarkTheme.
*/
MWDECL void (*MwLLSetDarkTheme)(MwLL handle, int toggle);
/*!
* @brief Whether or not the platform should default to modern theme.
* @param handle Handle
* @return whether to default.
*/
MWDECL MwBool (*MwLLDoModern)(MwLL handle);
MWDECL void (*MwLLRaise)(MwLL handle);
MWDECL void (*MwLLClip)(MwLL handle, MwRect* rect);
/* font renderer */
MWDECL void MwFLSetup(void);
#ifdef USE_FREETYPE2
MWDECL int MwFL_FT2Setup(void);
MWDECL int MWFL_FT2Setup(void);
#endif
#ifdef USE_STB_TRUETYPE
MWDECL int MwFL_STBTTSetup(void);
#endif
#ifdef USE_GDI_TEXT
MWDECL int MwFL_GDISetup(void);
#endif
MWDECL int (*MwFLDrawText)(MwWidget handle, MwFLFont ttf, MwPoint* point, const char* text, MwLLColor color);
MWDECL int (*MwFLTextWidth)(MwFLFont ttf, const char* text);
MWDECL int (*MwFLTextHeight)(MwFLFont ttf, int count);
MWDECL int (*MwFLTextHeightWithText)(MwFLFont ttf, const char* text);
MWDECL void* (*MwFLFontLoad)(unsigned char* data, unsigned int size, int px);
MWDECL void (*MwFLFontFree)(void* handle);
#ifdef _WIN32
MWDECL void *MwLL_winmmLib;
MWDECL long (__stdcall* MwLL_PFN_timeGetTime)(void);
MWDECL unsigned int (__stdcall* MwLL_PFN_timeBeginPeriod)(unsigned int period);
#endif
#ifdef __cplusplus
}
#endif

View file

@ -1,229 +0,0 @@
/*!
* @file Mw/LowLevel/Cairo.h
* @brief Cairo Backend
* @warning This is used MEGA internally.
*/
#ifndef __MW_LOWLEVEL_CAIRO_H__
#define __MW_LOWLEVEL_CAIRO_H__
#include <Mw/MachDep.h>
#include <Mw/TypeDefs.h>
#include <Mw/LowLevel.h>
#include <Mw/Abstract/Dynamic.h>
#include <cairo/cairo.h>
#ifdef __cplusplus
extern "C" {
#endif
MWDECL int MwLLCairoCallInit(void);
#ifdef __cplusplus
}
#endif
#define CSD_BORDER_FRAME_LEFT 5
#define CSD_BORDER_FRAME_RIGHT 5
#define CSD_BORDER_FRAME_TOP 23
#define CSD_BORDER_FRAME_BOTTOM 4
typedef struct cairo_call_table {
void* cairo_lib;
void (*cairo_set_line_width)(cairo_t* cr,
double width);
void (*cairo_scale)(cairo_t* cr,
double sx,
double sy);
cairo_t* (*cairo_create)(cairo_surface_t* target);
void (*cairo_move_to)(cairo_t* cr,
double x,
double y);
void (*cairo_rectangle)(cairo_t* cr,
double x,
double y,
double width,
double height);
void (*cairo_new_path)(cairo_t* cr);
void (*cairo_set_line_cap)(cairo_t* cr,
cairo_line_cap_t line_cap);
void (*cairo_set_source_rgba)(cairo_t* cr,
double red,
double green,
double blue,
double alpha);
void (*cairo_set_source_rgb)(cairo_t* cr,
double red,
double green,
double blue);
void (*cairo_reset_clip)(cairo_t* cr);
unsigned char* (*cairo_image_surface_get_data)(cairo_surface_t* surface);
void (*cairo_line_to)(cairo_t* cr,
double x,
double y);
cairo_status_t (*cairo_surface_write_to_png)(cairo_surface_t* surface, const char* filename);
void (*cairo_surface_destroy)(cairo_surface_t* surface);
cairo_surface_t* (*cairo_image_surface_create_for_data)(unsigned char* data,
cairo_format_t format,
int width,
int height,
int stride);
cairo_surface_t* (*cairo_image_surface_create)(cairo_format_t format,
int width,
int height);
void (*cairo_destroy)(cairo_t* cr);
cairo_pattern_t* (*cairo_get_source)(cairo_t* cr);
void (*cairo_close_path)(cairo_t* cr);
void (*cairo_paint)(cairo_t* cr);
void (*cairo_surface_flush)(cairo_surface_t* surface);
void (*cairo_clip)(cairo_t* cr);
void (*cairo_save)(cairo_t* cr);
void (*cairo_restore)(cairo_t* cr);
void (*cairo_surface_mark_dirty)(cairo_surface_t* surface);
void (*cairo_stroke)(cairo_t* cr);
void (*cairo_set_source_surface)(cairo_t* cr,
cairo_surface_t* surface,
double x,
double y);
void (*cairo_fill)(cairo_t* cr);
void (*cairo_pattern_set_filter)(cairo_pattern_t* pattern,
cairo_filter_t filter);
void (*cairo_set_antialias)(cairo_t*, cairo_antialias_t);
void (*cairo_set_operator)(cairo_t* cr, cairo_operator_t op);
} cairo_call_table_t;
extern cairo_call_table_t cairo_call_tbl;
/* defined inline right here so that it doesn't conflict with the other macros */
MwInline int cairo_load_funcs() {
#ifdef __APPLE__
cairo_call_tbl.cairo_lib = MwDynamicOpen("libcairo.dylib");
#else
cairo_call_tbl.cairo_lib = MwDynamicOpen("libcairo.so");
#endif
if(!cairo_call_tbl.cairo_lib) {
printf("(libcairo not found, cannot use Wayland or Cairo backend.)\n");
return 1;
}
#define CAIRO_FUNC(x) \
cairo_call_tbl.x = MwDynamicSymbol(cairo_call_tbl.cairo_lib, #x); \
if(!cairo_call_tbl.x) { \
printf("WARNING: Could use Wayland/Cairo backend if " #x " was not found. Do you have libcairo?\n"); \
return 1; \
};
CAIRO_FUNC(cairo_set_line_width);
CAIRO_FUNC(cairo_scale);
CAIRO_FUNC(cairo_create);
CAIRO_FUNC(cairo_move_to);
CAIRO_FUNC(cairo_rectangle);
CAIRO_FUNC(cairo_new_path);
CAIRO_FUNC(cairo_set_line_cap);
CAIRO_FUNC(cairo_set_antialias);
CAIRO_FUNC(cairo_set_source_rgba);
CAIRO_FUNC(cairo_set_source_rgb);
CAIRO_FUNC(cairo_reset_clip);
CAIRO_FUNC(cairo_image_surface_get_data);
CAIRO_FUNC(cairo_line_to);
CAIRO_FUNC(cairo_surface_write_to_png);
CAIRO_FUNC(cairo_surface_destroy);
CAIRO_FUNC(cairo_image_surface_create_for_data);
CAIRO_FUNC(cairo_image_surface_create);
CAIRO_FUNC(cairo_destroy);
CAIRO_FUNC(cairo_get_source);
CAIRO_FUNC(cairo_close_path);
CAIRO_FUNC(cairo_paint);
CAIRO_FUNC(cairo_surface_flush);
CAIRO_FUNC(cairo_clip);
CAIRO_FUNC(cairo_save);
CAIRO_FUNC(cairo_restore);
CAIRO_FUNC(cairo_surface_mark_dirty);
CAIRO_FUNC(cairo_stroke);
CAIRO_FUNC(cairo_set_source_surface);
CAIRO_FUNC(cairo_fill);
CAIRO_FUNC(cairo_set_operator);
CAIRO_FUNC(cairo_pattern_set_filter);
#undef CAIRO_FUNC
return 0;
}
#define cairo_set_line_width cairo_call_tbl.cairo_set_line_width
#define cairo_scale cairo_call_tbl.cairo_scale
#define cairo_create cairo_call_tbl.cairo_create
#define cairo_move_to cairo_call_tbl.cairo_move_to
#define cairo_rectangle cairo_call_tbl.cairo_rectangle
#define cairo_new_path cairo_call_tbl.cairo_new_path
#define cairo_set_line_cap cairo_call_tbl.cairo_set_line_cap
#define cairo_set_antialias cairo_call_tbl.cairo_set_antialias
#define cairo_set_source_rgba cairo_call_tbl.cairo_set_source_rgba
#define cairo_set_source_rgb cairo_call_tbl.cairo_set_source_rgb
#define cairo_reset_clip cairo_call_tbl.cairo_reset_clip
#define cairo_image_surface_get_data cairo_call_tbl.cairo_image_surface_get_data
#define cairo_line_to cairo_call_tbl.cairo_line_to
#define cairo_surface_write_to_png cairo_call_tbl.cairo_surface_write_to_png
#define cairo_surface_destroy cairo_call_tbl.cairo_surface_destroy
#define cairo_image_surface_create_for_data cairo_call_tbl.cairo_image_surface_create_for_data
#define cairo_image_surface_create cairo_call_tbl.cairo_image_surface_create
#define cairo_destroy cairo_call_tbl.cairo_destroy
#define cairo_get_source cairo_call_tbl.cairo_get_source
#define cairo_close_path cairo_call_tbl.cairo_close_path
#define cairo_paint cairo_call_tbl.cairo_paint
#define cairo_surface_flush cairo_call_tbl.cairo_surface_flush
#define cairo_clip cairo_call_tbl.cairo_clip
#define cairo_save cairo_call_tbl.cairo_save
#define cairo_restore cairo_call_tbl.cairo_restore
#define cairo_surface_mark_dirty cairo_call_tbl.cairo_surface_mark_dirty
#define cairo_stroke cairo_call_tbl.cairo_stroke
#define cairo_set_source_surface cairo_call_tbl.cairo_set_source_surface
#define cairo_fill cairo_call_tbl.cairo_fill
#define cairo_set_operator cairo_call_tbl.cairo_set_operator
#define cairo_pattern_set_filter cairo_call_tbl.cairo_pattern_set_filter
struct _MwLLCairo {
struct _MwLLCommon common;
cairo_surface_t* front_cs;
cairo_surface_t* back_cs;
cairo_t* front_cairo;
cairo_t* back_cairo;
/* The cairo to actually use for draw operations. Typically is front_cairo, but wayland's MwLLBeginDraw can change this to the back_cairo so it can be used to draw window decorations. */
cairo_t* selected_cairo;
int x;
int y;
int width;
int height;
MwBool toplevel;
MwLL parent;
};
struct _MwLLCairoColor {
struct _MwLLCommonColor common;
};
struct _MwLLCairoPixmap {
struct _MwLLCommonPixmap common;
cairo_surface_t* cs;
};
void MwLLCairoFrontSetup(struct _MwLLCairo* cairo, MwU8* data, MwU32 width, MwU32 height);
void MwLLCairoBackSetup(struct _MwLLCairo* cairo, MwU8* data, MwU32 width, MwU32 height);
void MwLLCairoFrontDestroy(struct _MwLLCairo* cairo);
void MwLLCairoBackDestroy(struct _MwLLCairo* cairo);
void MwLLCairoPolygon(struct _MwLLCairo handle, MwPoint* points, int points_count, MwLLColor color);
void MwLLCairoLine(struct _MwLLCairo handle, MwPoint* points, MwLLColor color);
MwLLPixmap MwLLCairoCreatePixmap(struct _MwLLCairo handle, unsigned char* data, int width, int height);
void MwLLCairoPixmapUpdate(MwLLPixmap handle);
void MwLLCairoDestroyPixmap(MwLLPixmap pixmap);
void MwLLCairoDrawPixmap(struct _MwLLCairo handle, MwRect* rect, MwLLPixmap pixmap);
void MwLLCairoDestroy(struct _MwLLCairo handle);
#endif

View file

@ -10,10 +10,6 @@
#include <Mw/TypeDefs.h>
#include <Mw/LowLevel.h>
#ifdef __cplusplus
extern "C" {
#endif
struct _MwLLClassicMacOS {
struct _MwLLCommon common;
@ -36,8 +32,4 @@ struct _MwLLClassicMacOSPixmap {
MWDECL int MwLLClassicMacOSCallInit(void);
#ifdef __cplusplus
}
#endif
#endif

View file

@ -84,7 +84,7 @@ typedef struct {
@end
@interface MilskoCocoaPixmap : NSObject {
@public
@public
MwBool valid;
int width;
int height;
@ -106,7 +106,7 @@ typedef struct {
@interface MilskoCocoaView : NSView {
MwBool _child;
@public
@public
draw_command* commands;
}
@ -119,11 +119,10 @@ typedef struct {
@end
@interface MilskoCocoa : NSObject {
@public
@public
MilskoCocoaApplication* application;
MwBool _forceRender;
MwBool _eventsPending;
MwBool isClosing;
NSWindow* window;
NSRect rect;
MilskoCocoaView* view;
@ -160,9 +159,7 @@ typedef struct {
#define OBJC(x) void*
#endif
#ifdef __cplusplus
extern "C" {
#endif
MWDECL int MwLLCocoaCallInit(void);
struct _MwLLCocoa {
struct _MwLLCommon common;
@ -180,10 +177,4 @@ struct _MwLLCocoaPixmap {
real;
};
MWDECL int MwLLCocoaCallInit(void);
#ifdef __cplusplus
}
#endif
#endif

View file

@ -10,10 +10,6 @@
#include <Mw/TypeDefs.h>
#include <Mw/LowLevel.h>
#ifdef __cplusplus
extern "C" {
#endif
struct _MwLLGDI {
struct _MwLLCommon common;
@ -23,8 +19,6 @@ struct _MwLLGDI {
HCURSOR cursor;
HICON icon;
HRGN clip;
int grabbed;
int force_render;
int get_clipboard;
@ -49,8 +43,4 @@ struct _MwLLGDIPixmap {
MWDECL int MwLLGDICallInit(void);
MWDECL HCURSOR MwLLGDICreateCursor(MwCursor* image, MwCursor* mask);
#ifdef __cplusplus
}
#endif
#endif

View file

@ -1,173 +0,0 @@
/*!
* @file Mw/LowLevel/Haiku.h
* @brief Haiku Backend
* @warning This is used internally
*/
#ifndef __MW_LOWLEVEL_HAIKU_H__
#define __MW_LOWLEVEL_HAIKU_H__
#include <Mw/MachDep.h>
#include <Mw/TypeDefs.h>
#include <Mw/LowLevel.h>
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
class MwApplication;
class MwView;
class MwWindow;
class MwApplication : public BApplication {
public:
MwApplication(MwRect rc, MwLL handle);
~MwApplication();
void MessageReceived(BMessage* message);
};
class MwView : public BView {
public:
MwLL handle;
BLocker* locker;
uint32 buttons;
BBitmap* bitmap;
MwView(MwLL handle, BRect rc, uint32 resizingMode, uint32 flags);
~MwView();
void MessageReceived(BMessage* message);
void PostMessage(BMessage* message);
void PostMessage(uint32 command);
status_t SendMessage(BMessage* message);
status_t SendMessage(uint32 command);
void Invalidate();
void AttachedToWindow();
void Draw(BRect updateRect);
void FrameResized(float width, float height);
void MouseDown(BPoint point);
void MouseUp(BPoint point);
void MouseMoved(BPoint point, uint32 transit, const BMessage* message);
void SetColor(MwLLColor color);
};
class MwWindow : public BWindow {
public:
MwWindow(BRect rc, window_type type, uint32 flags);
void MessageReceived(BMessage* message);
void FrameMoved(BPoint newLocation);
bool QuitRequested();
};
typedef BBitmap MwBBitmap;
#else
typedef void MwApplication;
typedef void MwView;
typedef void MwWindow;
typedef void MwBBitmap;
#endif
typedef union _MwLLHaikuEvent MwLLHaikuEvent;
enum BAPP_MW_WHAT {
BAPP_MW_DESTROY = 0
};
enum BVIEW_MW_WHAT {
BVIEW_MW_DESTROY = 0,
BVIEW_MW_DETACH,
BVIEW_MW_RESIZE,
BVIEW_MW_MOVE,
BVIEW_MW_SHOW,
BVIEW_MW_HIDE,
BVIEW_MW_SET_COLOR,
BVIEW_MW_POLYGON,
BVIEW_MW_LINE,
BVIEW_MW_BITMAP,
BVIEW_MW_RENDER,
BVIEW_MW_RAISE,
BVIEW_MW_GET_MOUSE
};
enum BWIN_MW_WHAT {
BWIN_MW_DESTROY = 0,
BWIN_MW_SET_TITLE,
BWIN_MW_SET_TYPE
};
enum MwLLHAIKU_EVENT {
MwLLHAIKU_EVENT_DRAW = 0,
MwLLHAIKU_EVENT_CLOSE,
MwLLHAIKU_EVENT_FRAMERESIZED,
MwLLHAIKU_EVENT_FRAMEMOVED,
MwLLHAIKU_EVENT_MOUSEDOWN,
MwLLHAIKU_EVENT_MOUSEUP,
MwLLHAIKU_EVENT_MOUSEMOVED
};
struct _MwLLHaikuEventMouse {
int type;
MwPoint point;
int button;
};
struct _MwLLHaikuEventFrameResized {
int type;
float width;
float height;
};
struct _MwLLHaikuEventFrameMoved {
int type;
MwPoint point;
};
union _MwLLHaikuEvent {
int type;
struct _MwLLHaikuEventMouse mouse;
struct _MwLLHaikuEventFrameResized frame_resized;
struct _MwLLHaikuEventFrameMoved frame_moved;
};
struct _MwLLHaiku {
struct _MwLLCommon common;
int type;
int x;
int y;
int width;
int height;
MwLL parent;
MwApplication* app;
MwWindow* window;
MwView* view;
thread_id app_thread;
int force_render;
MwLLHaikuEvent* events;
};
struct _MwLLHaikuColor {
struct _MwLLCommonColor common;
};
struct _MwLLHaikuPixmap {
struct _MwLLCommonPixmap common;
MwBBitmap* bitmap;
};
MWDECL int MwLLHaikuCallInit(void);
#ifdef __cplusplus
}
#endif
#endif

View file

@ -11,25 +11,17 @@
#include <Mw/LowLevel.h>
#include <Mw/Abstract/Dynamic.h>
#include <Mw/LowLevel/Cairo.h>
#include <xkbcommon/xkbcommon.h>
#include <cairo/cairo.h>
#include <pthread.h>
#ifdef __cplusplus
extern "C" {
#endif
#include <dbus/dbus.h>
MWDECL int MwLLWaylandCallInit(void);
#ifdef __cplusplus
}
#endif
#define CSD_BORDER_FRAME_LEFT 5
#define CSD_BORDER_FRAME_RIGHT 5
#define CSD_BORDER_FRAME_TOP 23
#define CSD_BORDER_FRAME_BOTTOM 4
#define CSD_BORDER_FRAME_TOP 24
#define CSD_BORDER_FRAME_BOTTOM 5
struct _MwLLWayland;
@ -43,6 +35,7 @@ struct _MwLLWayland;
typedef struct wayland_call_table {
void* lib;
void* xkb_lib;
void* cairo_lib;
#ifdef USE_DBUS
MwLLDBusFuncTable dbus;
MwBool has_dbus;
@ -67,7 +60,6 @@ typedef struct wayland_call_table {
struct wl_display* (*wl_display_connect)(const char* name);
uint32_t (*wl_proxy_get_version)(struct wl_proxy* proxy);
struct wl_display* (*wl_display_connect_to_fd)(int fd);
int (*wl_display_get_error)(struct wl_display* display);
struct xkb_context* (*xkb_context_new)(enum xkb_context_flags flags);
void (*xkb_context_unref)(struct xkb_context* context);
@ -79,38 +71,86 @@ typedef struct wayland_call_table {
xkb_layout_index_t (*xkb_state_key_get_layout)(struct xkb_state* state, xkb_keycode_t key);
void (*xkb_keymap_unref)(struct xkb_keymap* keymap);
void (*cairo_set_line_width)(cairo_t* cr,
double width);
void (*cairo_scale)(cairo_t* cr,
double sx,
double sy);
cairo_t* (*cairo_create)(cairo_surface_t* target);
void (*cairo_move_to)(cairo_t* cr,
double x,
double y);
void (*cairo_rectangle)(cairo_t* cr,
double x,
double y,
double width,
double height);
void (*cairo_new_path)(cairo_t* cr);
void (*cairo_set_line_cap)(cairo_t* cr,
cairo_line_cap_t line_cap);
void (*cairo_set_source_rgba)(cairo_t* cr,
double red,
double green,
double blue,
double alpha);
void (*cairo_set_source_rgb)(cairo_t* cr,
double red,
double green,
double blue);
void (*cairo_reset_clip)(cairo_t* cr);
unsigned char* (*cairo_image_surface_get_data)(cairo_surface_t* surface);
void (*cairo_line_to)(cairo_t* cr,
double x,
double y);
void (*cairo_surface_destroy)(cairo_surface_t* surface);
cairo_surface_t* (*cairo_image_surface_create_for_data)(unsigned char* data,
cairo_format_t format,
int width,
int height,
int stride);
cairo_surface_t* (*cairo_image_surface_create)(cairo_format_t format,
int width,
int height);
void (*cairo_destroy)(cairo_t* cr);
cairo_pattern_t* (*cairo_get_source)(cairo_t* cr);
void (*cairo_close_path)(cairo_t* cr);
void (*cairo_paint)(cairo_t* cr);
void (*cairo_surface_flush)(cairo_surface_t* surface);
void (*cairo_clip)(cairo_t* cr);
void (*cairo_surface_mark_dirty)(cairo_surface_t* surface);
void (*cairo_stroke)(cairo_t* cr);
void (*cairo_set_source_surface)(cairo_t* cr,
cairo_surface_t* surface,
double x,
double y);
void (*cairo_fill)(cairo_t* cr);
void (*cairo_pattern_set_filter)(cairo_pattern_t* pattern,
cairo_filter_t filter);
void (*cairo_set_antialias)(cairo_t*, cairo_antialias_t);
void (*cairo_set_operator)(cairo_t* cr, cairo_operator_t op);
} wayland_call_table_t;
extern wayland_call_table_t wl_call_tbl;
#ifdef MW_VULKAN
extern MwBool MwWaylandVulkan;
#else
#define MwWaylandVulkan 0
#endif
MWDECL MwBool MwWaylandCairoOnly;
extern MwBool MwWaylandAlwaysRender;
/* defined inline right here so that it doesn't conflict with the other macros */
MwInline int wayland_load_funcs() {
#ifdef __APPLE__
wl_call_tbl.lib = MwDynamicOpen("libwayland-client.dylib");
#else
wl_call_tbl.lib = MwDynamicOpen("libwayland-client.so");
#endif
if(!wl_call_tbl.lib) {
printf("(libwayland-client not found, falling back to X11)\n");
printf("(libwayland-client.so not found, falling back to X11)\n");
return 1;
}
#ifdef __APPLE__
wl_call_tbl.xkb_lib = MwDynamicOpen("libxkbcommon.dylib");
#else
wl_call_tbl.xkb_lib = MwDynamicOpen("libxkbcommon.so");
#endif
if(!wl_call_tbl.xkb_lib) {
printf("(libxkbcommon not found, cannot use Wayland backend.)\n");
printf("(libxkbcommon.so not found, cannot use Wayland backend.)\n");
return 1;
}
wl_call_tbl.cairo_lib = MwDynamicOpen("libcairo.so");
if(!wl_call_tbl.cairo_lib) {
printf("(libcairo.so not found, cannot use Wayland backend.)\n");
return 1;
}
#define WAYLAND_FUNC(x) \
wl_call_tbl.x = MwDynamicSymbol(wl_call_tbl.lib, #x); \
if(!wl_call_tbl.x) { \
@ -134,7 +174,6 @@ MwInline int wayland_load_funcs() {
WAYLAND_FUNC(wl_display_connect)
WAYLAND_FUNC(wl_proxy_get_version)
WAYLAND_FUNC(wl_display_connect_to_fd)
WAYLAND_FUNC(wl_display_get_error)
#undef WAYLAND_FUNC
@ -156,9 +195,42 @@ MwInline int wayland_load_funcs() {
XKB_FUNC(xkb_state_key_get_layout)
#undef XKB_FUNC
if(cairo_load_funcs() != 0) {
return 1;
}
#define CAIRO_FUNC(x) \
wl_call_tbl.x = MwDynamicSymbol(wl_call_tbl.cairo_lib, #x); \
if(!wl_call_tbl.x) { \
printf("WARNING: Could use Wayland backend if " #x " was found. Do you have libcairo?\n"); \
return 1; \
};
CAIRO_FUNC(cairo_set_line_width);
CAIRO_FUNC(cairo_scale);
CAIRO_FUNC(cairo_create);
CAIRO_FUNC(cairo_move_to);
CAIRO_FUNC(cairo_rectangle);
CAIRO_FUNC(cairo_new_path);
CAIRO_FUNC(cairo_set_line_cap);
CAIRO_FUNC(cairo_set_antialias);
CAIRO_FUNC(cairo_set_source_rgba);
CAIRO_FUNC(cairo_set_source_rgb);
CAIRO_FUNC(cairo_reset_clip);
CAIRO_FUNC(cairo_image_surface_get_data);
CAIRO_FUNC(cairo_line_to);
CAIRO_FUNC(cairo_surface_destroy);
CAIRO_FUNC(cairo_image_surface_create_for_data);
CAIRO_FUNC(cairo_image_surface_create);
CAIRO_FUNC(cairo_destroy);
CAIRO_FUNC(cairo_get_source);
CAIRO_FUNC(cairo_close_path);
CAIRO_FUNC(cairo_paint);
CAIRO_FUNC(cairo_surface_flush);
CAIRO_FUNC(cairo_clip);
CAIRO_FUNC(cairo_surface_mark_dirty);
CAIRO_FUNC(cairo_stroke);
CAIRO_FUNC(cairo_set_source_surface);
CAIRO_FUNC(cairo_fill);
CAIRO_FUNC(cairo_set_operator);
CAIRO_FUNC(cairo_pattern_set_filter);
#undef CAIRO_FUNC
#ifdef USE_DBUS
wl_call_tbl.has_dbus = MwLLDBusFuncSetup(&wl_call_tbl.dbus);
@ -183,7 +255,6 @@ MwInline int wayland_load_funcs() {
#define wl_display_connect wl_call_tbl.wl_display_connect
#define wl_proxy_get_version wl_call_tbl.wl_proxy_get_version
#define wl_display_connect_to_fd wl_call_tbl.wl_display_connect_to_fd
#define wl_display_get_error wl_call_tbl.wl_display_get_error
#define xkb_state_unref wl_call_tbl.xkb_state_unref
#define xkb_context_new wl_call_tbl.xkb_context_new
@ -195,6 +266,35 @@ MwInline int wayland_load_funcs() {
#define xkb_keymap_key_get_syms_by_level wl_call_tbl.xkb_keymap_key_get_syms_by_level
#define xkb_state_key_get_layout wl_call_tbl.xkb_state_key_get_layout
#define cairo_set_line_width wl_call_tbl.cairo_set_line_width
#define cairo_scale wl_call_tbl.cairo_scale
#define cairo_create wl_call_tbl.cairo_create
#define cairo_move_to wl_call_tbl.cairo_move_to
#define cairo_rectangle wl_call_tbl.cairo_rectangle
#define cairo_new_path wl_call_tbl.cairo_new_path
#define cairo_set_line_cap wl_call_tbl.cairo_set_line_cap
#define cairo_set_antialias wl_call_tbl.cairo_set_antialias
#define cairo_set_source_rgba wl_call_tbl.cairo_set_source_rgba
#define cairo_set_source_rgb wl_call_tbl.cairo_set_source_rgb
#define cairo_reset_clip wl_call_tbl.cairo_reset_clip
#define cairo_image_surface_get_data wl_call_tbl.cairo_image_surface_get_data
#define cairo_line_to wl_call_tbl.cairo_line_to
#define cairo_surface_destroy wl_call_tbl.cairo_surface_destroy
#define cairo_image_surface_create_for_data wl_call_tbl.cairo_image_surface_create_for_data
#define cairo_image_surface_create wl_call_tbl.cairo_image_surface_create
#define cairo_destroy wl_call_tbl.cairo_destroy
#define cairo_get_source wl_call_tbl.cairo_get_source
#define cairo_close_path wl_call_tbl.cairo_close_path
#define cairo_paint wl_call_tbl.cairo_paint
#define cairo_surface_flush wl_call_tbl.cairo_surface_flush
#define cairo_clip wl_call_tbl.cairo_clip
#define cairo_surface_mark_dirty wl_call_tbl.cairo_surface_mark_dirty
#define cairo_stroke wl_call_tbl.cairo_stroke
#define cairo_set_source_surface wl_call_tbl.cairo_set_source_surface
#define cairo_fill wl_call_tbl.cairo_fill
#define cairo_set_operator wl_call_tbl.cairo_set_operator
#define cairo_pattern_set_filter wl_call_tbl.cairo_pattern_set_filter
#ifndef WL_PROTOCOLS_DEFINED
#define WL_PROTOCOLS_DEFINED
#include "Wayland/wayland-core-protocol.h"
@ -206,7 +306,6 @@ MwInline int wayland_load_funcs() {
#include "Wayland/pointer-constraints-client-protocol.h"
#include "Wayland/relative-pointer-client-protocol.h"
#include "Wayland/xdg-toplevel-icon-client-protocol.h"
#include "Wayland/wlr-layer-shell-client-protocol.h"
#endif
typedef struct wayland_protocol {
@ -214,7 +313,7 @@ typedef struct wayland_protocol {
void* context;
} wayland_protocol_t;
typedef wayland_protocol_t*(wl_setup_func)(MwU32, struct _MwLLWayland*, MwU32 version);
typedef wayland_protocol_t*(wl_setup_func)(MwU32, struct _MwLLWayland*);
typedef void(wl_destroy_func)(struct _MwLLWayland* wayland, wayland_protocol_t* data);
typedef struct wayland_protocol_callback_table {
@ -227,7 +326,6 @@ struct _MwLLWaylandTopLevel {
struct xdg_toplevel* xdg_top_level;
struct xdg_toplevel_listener xdg_toplevel_listener;
struct xdg_surface_listener xdg_surface_listener;
MwBool maxim_state;
MwBool compositor_created;
MwBool xdg_wm_base_created;
@ -255,10 +353,6 @@ struct _MwLLWaylandPopup {
MwLL topmost_parent;
};
struct _MwLLWaylandLayerSurface {
struct zwlr_layer_surface_v1* surface;
};
/* Shared set of anything needed for a shm buffer. */
struct _MwLLWaylandShmBuffer {
struct wl_shm* shm;
@ -278,11 +372,10 @@ struct _MwLLWaylandShmBuffer {
};
enum _MwLLWaylandType {
MwLL_WAYLAND_UNKNOWN = 0,
MwLL_WAYLAND_TOPLEVEL,
MwLL_WAYLAND_SUBLEVEL,
MwLL_WAYLAND_POPUP,
MwLL_WAYLAND_LAYER_SURFACE,
MWLL_WAYLAND_UNKNOWN = 0,
MWLL_WAYLAND_TOPLEVEL,
MWLL_WAYLAND_SUBLEVEL,
MWLL_WAYLAND_POPUP,
};
typedef struct wl_clipboard_device_context {
@ -295,13 +388,13 @@ typedef struct wl_clipboard_device_context {
struct zwp_primary_selection_offer_v1* zwp;
} offer;
MwLL ll;
// struct wl_seat* seat;
MwLL ll;
struct wl_seat* seat;
MwU32 capabilities;
} wl_clipboard_device_context_t;
struct _MwLLWayland {
struct _MwLLCommon common;
struct _MwLLCairo cairo;
union {
/* Pointer for data that's only loaded if the widget is a toplevel */
@ -310,42 +403,30 @@ struct _MwLLWayland {
struct _MwLLWaylandSublevel* sublevel;
/* Pointer for data that's only loaded if the widget is a popup */
struct _MwLLWaylandPopup* popup;
/* Pointer for data that's only loaded if the widget is a layer surface */
struct _MwLLWaylandLayerSurface* layer_surface;
};
enum _MwLLWaylandType type;
enum _MwLLWaylandType type_to_be;
MwRect clipping_rect;
MwBool no;
MwBool changing;
MwBool detatching;
MwPoint detach_point;
MwBool did_initial_resize;
MwBool is_toplevel;
MwBool is_clipping;
MwRect clip;
/* Map of Wayland interfaces to their relevant setup functions. */
struct {
char* key;
char key[255];
wayland_protocol_callback_table_t* value;
}* wl_protocol_setup_map;
/* Map of Wayland interfaces to any information we keep about them once we've registered them. */
struct {
char* key;
char key[255];
wayland_protocol_t* value;
}* wl_protocol_map;
MwBool do_csd;
MwBool has_decorations;
char title[256];
char title[255];
struct xkb_context* xkb_context;
struct xkb_keymap* xkb_keymap;
@ -367,14 +448,13 @@ struct _MwLLWayland {
struct zwp_relative_pointer_v1* relative_pointer;
struct zwp_locked_pointer_v1* locked_pointer;
MwBool pointer_constrained;
MwBool valid;
#ifdef USE_DBUS
MwLLDBusContext dbus;
#endif
MwBool dark_theme_detection;
MwU32 dark_theme;
MwU32 dark_theme;
/* clipboard related stuff.
* Note that unlike most interfaces, we don't keep zwp_primary_selection stuff in a wayland_protocol_t because we use wl_data_device as a fallback and want to have it share memory space.*/
@ -389,7 +469,6 @@ struct _MwLLWayland {
} clipboard_source;
char* clipboard_buffer;
MwBool supports_zwp;
MwBool zwp_setup;
uint32_t clipboard_serial;
wl_clipboard_device_context_t** clipboard_devices_wl;
@ -414,11 +493,6 @@ struct _MwLLWayland {
MwI32 ox, oy;
MwU32 ww, wh; /* Window position */
MwPoint cur_mouse_pos; /* Currently known mouse position */
MwLL currentlyHeldWidget;
MwLL focusedWidget;
int resizing;
int setting_wh;
MwU32 mw, mh; /* Monitor width and height as advertised by wl_output.mode */
@ -429,89 +503,37 @@ struct _MwLLWayland {
MwBool dispatching_resize;
MwBool is_toplevel_menu;
struct _MwLLWaylandShmBuffer framebuffer;
struct _MwLLWaylandShmBuffer backbuffer;
struct _MwLLWaylandShmBuffer cursor;
struct _MwLLWaylandShmBuffer* icon;
MwLLPixmap icon_pixmap;
/*
Events mutex. Any time a keyboard/mouse event happens, we try to lock this for 100 milliseconds, then give up if we can't do it. This is used in conjunction with some code in the MwLLDestroyImpl to make sure that destroy is NEVER interferes with an ongoing event.
IOI_XD: This sounds like a hilariously rare edge case, so it's almost funnier that this happened with 100% certainty for me and I spent day(s) trying to figure out what was happening. */
pthread_mutex_t eventsMutex;
int cancelEvent;
int numCallbacksRunning;
uint32_t last_time;
MwBool moving;
MwI64 keyboard_rate;
MwI32 keyboard_delay;
int last_pressed_key;
MwBool holding_key;
MwU64 next_elapsed;
long start_time;
long end_time;
cairo_surface_t* front_cs;
cairo_surface_t* back_cs;
cairo_t* front_cairo;
cairo_t* back_cairo;
/* The cairo to actually use for draw operations. Typically is front_cairo, but MwLLBeginDraw can change this to the back_cairo so it can be used to draw window decorations. */
cairo_t* selected_cairo;
};
struct _MwLLWaylandColor {
struct _MwLLCommonColor common;
};
#define _MwLLWaylandPixmap _MwLLCairoPixmap
struct _MwLLWaylandPixmap {
struct _MwLLCommonPixmap common;
/* Setup the framebuffer with the saved width/height */
void MwLLWaylandFramebufferSetup(struct _MwLLWayland* wayland);
/* Destroy the framebuffer */
void MwLLWaylandFramebufferDestroy(struct _MwLLWayland* handle);
/* Setup the framebuffer with the saved width/height */
void MwLLWaylandBackbufferSetup(struct _MwLLWayland* wayland);
/* Destroy the backbuffer */
void MwLLWaylandBackbufferDestroy(struct _MwLLWayland* handle);
void MwLLWaylandBufferSetup(struct _MwLLWaylandShmBuffer* buffer, MwU32 width, MwU32 height);
void MwLLWaylandBufferUpdate(MwLL self, struct _MwLLWaylandShmBuffer* buffer);
void MwLLWaylandBufferDestroy(struct _MwLLWaylandShmBuffer* buffer);
void MwLLWaylandRegionSetup(MwLL handle);
void MwLLWaylandRegionInvalidate(MwLL handle);
void MwLLWaylandHangUntilConfigured(MwLL handle);
MwBool MwLLWaylandWidgetIsDestroyed(MwLL self);
void MwLLWaylandWidgetUndestroy(MwLL self);
/* Function for setting up the callbacks/structs that will be registered upon the relevant interfaces being found. */
void MwLLWaylandSetupCallbacks(struct _MwLLWayland* wayland);
void MwLLWaylandClipboardRead(wl_clipboard_device_context_t* ctx, int clipboard_type);
/* Flush Wayland events */
void MwLLWaylandFlush(MwLL handle);
/* Standard procedure before event callbacks in Wayland */
#define WAYLAND_EVENT_OP_START(self) \
if(MwLLWaylandWidgetIsDestroyed(self)) { \
return; \
}
/* Footer for WAYLAND_EVENT_OP_START */
#define WAYLAND_EVENT_OP_END(self)
#define WIDGET_CHECK(handle) \
if(!handle->wayland.valid) { \
return; \
}
/* the two decoration manager constructs */
typedef struct zxdg_decoration_manager_v1_context {
struct zxdg_decoration_manager_v1* manager;
struct zxdg_toplevel_decoration_v1* decoration;
} zxdg_decoration_manager_v1_context_t;
extern struct zwp_relative_pointer_v1_listener MwLLWaylandRelativePointerListener;
cairo_surface_t* cs;
};
#endif

View file

@ -17,10 +17,6 @@
#include <X11/extensions/Xrender.h>
#endif
#ifdef __cplusplus
extern "C" {
#endif
struct _MwLLX11 {
struct _MwLLCommon common;
@ -43,7 +39,7 @@ struct _MwLLX11 {
XIC xic;
long clipboard_time;
int clipboard_pending; /* 1 if UTF8_STRING, 2 if COMPOUND_TEXT, 3 if TEXT, 4 if STRING, otherwise 0 */
int clipboard_pending; /* 1 if UTF8_STRING, 2 if COMPOUNd_TEXT, 3 if TEXT, 4 if STRING, otherwise 0 */
int top;
int toplevel;
@ -90,8 +86,4 @@ struct _MwLLX11Pixmap {
MWDECL int MwLLX11CallInit(void);
MWDECL Cursor MwLLX11CreateCursor(Display* display, MwCursor* image, MwCursor* mask);
#ifdef __cplusplus
}
#endif
#endif

View file

@ -9,6 +9,7 @@
#include <string.h>
#include <stdio.h>
#include <stdarg.h>
#include <setjmp.h>
#include <sys/types.h>
#include <assert.h>
#include <math.h>
@ -16,16 +17,11 @@
#include <ctype.h>
#include <time.h>
#include <sys/stat.h>
#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199409L
#include <wchar.h>
#define MW_HAS_WCHAR
#endif
#ifdef _WIN32
#include <direct.h>
#ifdef _MILSKO
#include <windows.h>
#include <mmsystem.h>
#ifndef GWLP_USERDATA
#define GWLP_USERDATA GWL_USERDATA
#define GWLP_WNDPROC GWL_WNDPROC
@ -58,24 +54,11 @@
#include <limits.h>
#endif
#if defined(__unix__) || defined(__APPLE__) || defined(__HAIKU__)
#ifdef __unix__
#include <dirent.h>
#include <dlfcn.h>
#endif
#ifdef __HAIKU__
#ifdef __cplusplus
#include <Window.h>
#include <View.h>
#include <Screen.h>
#include <Application.h>
#include <Locker.h>
#include <Picture.h>
#include <Bitmap.h>
#endif
#include <OS.h>
#endif
#ifdef __APPLE__
#include <mach/clock.h>
#include <mach/mach.h>
@ -90,7 +73,7 @@
#endif
/* Windows */
#if defined(_MILSKO) && defined(_MILSKO_BUILD) && defined(_WIN32)
#if defined(_MILSKO) && defined(_WIN32)
#define MWDECL extern __declspec(dllexport)
#elif defined(_WIN32)
#define MWDECL extern __declspec(dllimport)
@ -112,12 +95,6 @@
#define MWDECL extern
#endif
#if defined(_WIN32)
#define MWAPI __cdecl
#else
#define MWAPI
#endif
#define MwInline static __inline
#endif

View file

@ -17,12 +17,10 @@
#include <Mw/String.h>
#include <Mw/Draw.h>
#include <Mw/Version.h>
#include <Mw/TrueType.h>
#include <Mw/Abstract/Dynamic.h>
#include <Mw/Abstract/Directory.h>
#include <Mw/Abstract/Time.h>
#include <Mw/Abstract/CharSet.h>
#include <Mw/Resource/Icon.h>
#include <Mw/Resource/Cursor.h>
@ -33,28 +31,24 @@
#include <Mw/Dialog/DirectoryChooser.h>
#include <Mw/Dialog/ColorPicker.h>
#include <Mw/Widget/Box.h>
#include <Mw/Widget/Window.h>
#include <Mw/Widget/Menu.h>
#include <Mw/Widget/SubMenu.h>
#include <Mw/Widget/Button.h>
#include <Mw/Widget/Calendar.h>
#include <Mw/Widget/Label.h>
#include <Mw/Widget/CheckBox.h>
#include <Mw/Widget/ComboBox.h>
#include <Mw/Widget/Entry.h>
#include <Mw/Widget/Frame.h>
#include <Mw/Widget/Image.h>
#include <Mw/Widget/Label.h>
#include <Mw/Widget/ListBox.h>
#include <Mw/Widget/Menu.h>
#include <Mw/Widget/Entry.h>
#include <Mw/Widget/ScrollBar.h>
#include <Mw/Widget/NumberEntry.h>
#include <Mw/Widget/Viewport.h>
#include <Mw/Widget/ListBox.h>
#include <Mw/Widget/ProgressBar.h>
#include <Mw/Widget/RadioBox.h>
#include <Mw/Widget/ScrollBar.h>
#include <Mw/Widget/Separator.h>
#include <Mw/Widget/SubMenu.h>
#include <Mw/Widget/SubWindow.h>
#include <Mw/Widget/Tab.h>
#include <Mw/Widget/Table.h>
#include <Mw/Widget/ComboBox.h>
#include <Mw/Widget/TreeView.h>
#include <Mw/Widget/Viewport.h>
#include <Mw/Widget/Window.h>
#include <Mw/Widget/Box.h>
#endif

View file

@ -17,7 +17,7 @@ extern "C" {
* @param str String
* @return String
*/
MWDECL char* MWAPI MwStringDuplicate(const char* str);
MWDECL char* MwStringDuplicate(const char* str);
/*!
* @brief Concatenates 2 strings
@ -25,21 +25,21 @@ MWDECL char* MWAPI MwStringDuplicate(const char* str);
* @param str2 String
* @return String
*/
MWDECL char* MWAPI MwStringConcat(const char* str1, const char* str2);
MWDECL char* MwStringConcat(const char* str1, const char* str2);
/*!
* @brief Converts size to string
* @param out Output
* @param size Size
*/
MWDECL void MWAPI MwStringSize(char* out, MwOffset size);
MWDECL void MwStringSize(char* out, MwOffset size);
/*!
* @brief Converts time to string
* @param out Output
* @param t Time
*/
MWDECL void MWAPI MwStringTime(char* out, time_t t);
MWDECL void MwStringTime(char* out, time_t t);
/*!
* @brief Prints up to n characters into a bufferMwStringPrintIntoBuffer.
@ -47,14 +47,14 @@ MWDECL void MWAPI MwStringTime(char* out, time_t t);
* @param out Buffer
* @param size Max size
*/
MWDECL void MWAPI MwStringPrintIntoBuffer(char* out, MwU32 size, const char* fmt, ...);
MWDECL void MwStringPrintIntoBuffer(char* out, MwU32 size, const char* fmt, ...);
/*!
* @brief Check if the given key is UTF8
* @param key Input
* @return whether its utf8
*/
MWDECL MwBool MWAPI MwStringIsKeyUTF8(MwU32 key);
MWDECL MwBool MwStringIsKeyUTF8(MwU32 key);
#ifdef __cplusplus
}

View file

@ -39,34 +39,17 @@
#define MwNsevenSegment "IsevenSegment"
#define MwNlength "Ilength"
#define MwNforceInverted "IforceInverted"
#define MwNroundness "Iroundness"
#define MwNisRounded "IisRounded"
#define MwNdarkTheme "IdarkTheme"
#define MwNuseMonospace "IuseMonospace"
#define MwNdarkThemeAutomatic "IdarkThemeAutomatic"
#define MwNyear "Iyear"
#define MwNmonth "Imonth"
#define MwNdate "Idate"
#define MwNday "Iday"
#define MwNwaitLayout "IwaitLayout"
#define MwNscale "Iscale"
#define MwNcolumns "Icolumns"
#define MwNcolumnSpan "IcolumnSpan"
#define MwNrowSpan "IrowSpan"
#define MwNdisabled "Idisabled"
#define MwNacceptsDnD "IacceptsDnD"
#define MwNtitle "Stitle"
#define MwNtext "Stext"
#define MwNbackground "Sbackground"
#define MwNsubBackground "SsubBackground"
#define MwNtitleBackground "StitleBackground"
#define MwNforeground "Sforeground"
#define MwNsubForeground "SsubForeground"
#define MwNtitleForeground "StitleForeground"
#define MwNvulkanExtension "SEvulkanExtension"
#define MwNvulkanLayer "SEvulkanLayer"
#define MwNvulkanConfig "VEvulkanConfig"
#define MwNpixmap "Vpixmap"
#define MwNiconPixmap "ViconPixmap"
@ -77,28 +60,27 @@
#define MwNmonospaceFont "VmonospaceFont"
#define MwNboldMonospaceFont "VboldMonospaceFont"
#define MwNactivateHandler "Cactivate"
#define MwNlistBoxActivateHandler "ClistBoxActivate"
#define MwNtreeViewActivateHandler "CtreeViewActivate"
#define MwNresizeHandler "Cresize"
#define MwNtickHandler "Ctick"
#define MwNmenuHandler "Cmenu"
#define MwNmouseDownHandler "CmouseDown"
#define MwNmouseUpHandler "CmouseUp"
#define MwNmouseMoveHandler "CmouseMove"
#define MwNchangedHandler "Cchanged"
#define MwNcomboBoxChangedHandler "CcomboBoxChanged"
#define MwNkeyHandler "Ckey"
#define MwNkeyReleaseHandler "CkeyRelease"
#define MwNcloseHandler "Cclose"
#define MwNfocusInHandler "CfocusIn"
#define MwNfocusOutHandler "CfocusOut"
#define MwNfileChosenHandler "CfileChosen"
#define MwNdirectoryChosenHandler "CdirectoryChosen"
#define MwNcolorChosenHandler "CcolorChosen"
#define MwNdrawHandler "Cdraw"
#define MwNclipboardHandler "Cclipboard"
#define MwNdarkThemeHandler "CdarkTheme"
#define MwNdragAndDropHandler "CdragAndDrop"
#define MwNactivateHandler "Cactivate" /* NULL */
#define MwNlistBoxActivateHandler "ClistBoxActivate" /* int* */
#define MwNtreeViewActivateHandler "CtreeViewActivate" /* void* */
#define MwNresizeHandler "Cresize" /* NULL */
#define MwNtickHandler "Ctick" /* NULL */
#define MwNmenuHandler "Cmenu" /* MwMenu */
#define MwNmouseDownHandler "CmouseDown" /* MwMouse* */
#define MwNmouseUpHandler "CmouseUp" /* same as MwNmouseDownHandler */
#define MwNmouseMoveHandler "CmouseMove" /* MwPoint* */
#define MwNchangedHandler "Cchanged" /* NULL */
#define MwNcomboBoxChangedHandler "CcomboBoxChanged" /* int* */
#define MwNkeyHandler "Ckey" /* int* (MwLLKeyEnum or character code) */
#define MwNkeyReleaseHandler "CkeyRelease" /* same as MwNkeyHandler */
#define MwNcloseHandler "Cclose" /* NULL */
#define MwNfocusInHandler "CfocusIn" /* NULL */
#define MwNfocusOutHandler "CfocusOut" /* NULL */
#define MwNfileChosenHandler "CfileChosen" /* char* */
#define MwNdirectoryChosenHandler "CdirectoryChosen" /* char* */
#define MwNcolorChosenHandler "CcolorChosen" /* MwRGB* */
#define MwNdrawHandler "Cdraw" /* NULL */
#define MwNclipboardHandler "Cclipboard" /* char* */
#define MwNdarkThemeHandler "CdarkTheme" /* int* */
#endif

View file

@ -1,33 +0,0 @@
/*!
* @file Mw/TrueType.h
* @brief TrueType utilities
*/
#ifndef __MW_TRUETYPE_H__
#define __MW_TRUETYPE_H__
#include <Mw/MachDep.h>
#include <Mw/TypeDefs.h>
#ifdef __cplusplus
extern "C" {
#endif
/*!
* @brief Get the TrueType font information
* @param data Font data
* @param size Font size
* @return Information
*/
MWDECL MwTTFInfo MwTTFGetInfo(unsigned char* data, int size);
/*!
* @brief Free the TrueType font information
* @param info Information
*/
MWDECL void MwTTFFreeInfo(MwTTFInfo info);
#ifdef __cplusplus
}
#endif
#endif

View file

@ -26,12 +26,9 @@ typedef struct _MwLabelSegment MwLabelSegment;
typedef struct _MwListBoxEntry MwListBoxEntry;
typedef struct _MwTreeViewEntry MwTreeViewEntry;
typedef struct _MwDirectoryEntry MwDirectoryEntry;
typedef struct _MwListBoxPacket MwListBoxPacket;
typedef struct _MwBox* MwBox;
typedef struct _MwSubWindow* MwSubWindow;
typedef struct _MwTab* MwTab;
typedef struct _MwTable* MwTable;
typedef struct _MwMouse MwMouse;
typedef struct _MwTTFInfo* MwTTFInfo;
#ifdef _MILSKO
typedef struct _MwWidget* MwWidget;
#else
@ -39,17 +36,15 @@ typedef void* MwWidget;
#endif
typedef void (*MwHandler)(MwWidget handle);
typedef int (*MwHandlerWithStatus)(MwWidget handle);
typedef void (*MwHandlerProps)(MwWidget handle, char** key);
typedef void (*MwHandlerProp)(MwWidget handle, const char* key);
typedef void (*MwHandlerChildrenUpdate)(MwWidget handle, MwWidget child, int new_child);
typedef void (*MwHandlerChildrenProp)(MwWidget handle, MwWidget child, const char* key);
typedef void (*MwHandlerKey)(MwWidget handle, int key);
typedef void (*MwHandlerMouse)(MwWidget handle, void* ptr);
typedef void (*MwHandlerExecute)(MwWidget handle, const char* name, void* out, va_list args);
typedef void (*MwHandlerClipboardReceived)(MwWidget handle, const char* data);
typedef void(MWAPI* MwUserHandler)(MwWidget handle, void* user_data, void* call_data);
typedef void(MWAPI* MwErrorHandler)(int code, const char* message, void* user_data);
typedef void (*MwUserHandler)(MwWidget handle, void* user_data, void* call_data);
typedef void (*MwErrorHandler)(int code, const char* message, void* user_data);
struct _MwTextKeyValue {
char* key;
@ -91,13 +86,12 @@ struct _MwWidget {
int pressed;
MwPoint mouse_point;
int close;
jmp_buf before_step;
int prop_event;
void* internal;
void* opaque;
void* user;
void (*draw_inject)(MwWidget handle);
void (*destroy_inject)(MwWidget handle);
MwIntegerKeyValue* integer;
MwTextKeyValue* text;
@ -116,13 +110,8 @@ struct _MwWidget {
int top_step;
MwWidget* draw_queue;
MwWidget* resize_queue;
MwWidget* monitored_entries;
int berserk;
long last_tick;
MwBool is_menu;
int berserk;
};
#endif
@ -132,15 +121,12 @@ struct _MwMenu {
MwWidget wsub;
MwMenu* sub;
void* opaque;
int cleaned;
};
struct _MwEntry {
int cursor;
int right;
int length;
int active;
int cursor_blink_timer;
MwPoint mouse;
};
@ -202,7 +188,6 @@ struct _MwScrollBar {
struct _MwLabel {
MwLabelSegment* segment;
MwHandler draw;
};
struct _MwLabelSegment {
@ -217,45 +202,20 @@ struct _MwDirectoryEntry {
time_t mtime;
};
struct _MwListBoxPacket {
MwLLPixmap* pixmaps;
char*** names;
};
struct _MwBox {
int layout;
};
struct _MwTable {
int layout;
MwWidget* widgets;
};
struct _MwSubWindow {
MwWidget frame;
MwWidget minimize;
MwWidget maximize;
MwWidget close;
int maximized;
int minimized;
int x;
int y;
int width;
int height;
MwPoint cursor_start;
MwPoint base;
};
struct _MwTab {
MwWidget* frames;
char** names;
};
struct _MwMouse {
MwPoint point;
int button;
};
struct _MwTTFInfo {
char* family;
int weight;
};
struct _MwClass {
MwHandlerWithStatus create;
MwHandler destroy;
@ -270,13 +230,13 @@ struct _MwClass {
MwHandlerExecute execute;
MwHandler tick;
MwHandler resize;
MwHandlerChildrenUpdate children_update;
MwHandler children_update;
MwHandlerChildrenProp children_prop_change;
MwHandlerClipboardReceived clipboard;
MwHandlerProps props_change;
MwHandler drag_and_drop;
void* reserved1;
void* reserved2;
void* reserved3;
void* reserved4;
};
#endif

View file

@ -18,14 +18,14 @@ extern "C" {
* @brief output Output
* @return Bytes this multibyte takes
*/
MWDECL int MWAPI MwUTF8ToUTF32(const char* input, int* output);
MWDECL int MwUTF8ToUTF32(const char* input, int* output);
/*!
* @brief Calculates UTF-8 string length
* @brief input Input
* @return Length
*/
MWDECL int MWAPI MwUTF8Length(const char* input);
MWDECL int MwUTF8Length(const char* input);
/*!
* @brief Copies UTF-8 string to other string
@ -36,7 +36,7 @@ MWDECL int MWAPI MwUTF8Length(const char* input);
* @brief len Length
* @return Copied length in bytes
*/
MWDECL int MWAPI MwUTF8Copy(const char* src, int srcskip, char* dst, int dstskip, int len);
MWDECL int MwUTF8Copy(const char* src, int srcskip, char* dst, int dstskip, int len);
/*!
* @brief Converts UTF-32 to UTF-8
@ -44,7 +44,7 @@ MWDECL int MWAPI MwUTF8Copy(const char* src, int srcskip, char* dst, int dstskip
* @brief output Output
* @return Bytes this wide byte takes
*/
MWDECL int MWAPI MwUTF32ToUTF8(int input, char* output);
MWDECL int MwUTF32ToUTF8(int input, char* output);
#ifdef __cplusplus
}

View file

@ -8,26 +8,16 @@
/*!
* @brief Major version
*/
#define MwMAJOR 1
#define MwMAJOR 0
/*!
* @brief Minor version
*/
#define MwMINOR 3
/*!
* @brief Patchlevel of version, if patchlevel_alphabet is a or bigger, this value is calculated by `patchlevel_alphabet - 'a' + 1`. Otherwise 0
*/
#define MwPATCH 0
#define MwMINOR 0
/*!
* @brief Version in string
*/
#define MwVERSION "1.4"
/*!
* @brief Version in string
*/
MWDECL const char* MwVersionString;
#define MwVERSION "pre-1.0"
#endif

View file

@ -1,24 +0,0 @@
/*!
* @file Mw/Widget/Calendar.h
* @brief Calendar widget
*/
#ifndef __MW_WIDGET_CALENDAR_H__
#define __MW_WIDGET_CALENDAR_H__
#include <Mw/MachDep.h>
#include <Mw/TypeDefs.h>
#ifdef __cplusplus
extern "C" {
#endif
/*!
* @brief Calendar widget class
*/
MWDECL MwClass MwCalendarClass;
#ifdef __cplusplus
}
#endif
#endif

View file

@ -7,7 +7,6 @@
#include <Mw/MachDep.h>
#include <Mw/TypeDefs.h>
#include <Mw/Core.h>
#ifdef __cplusplus
extern "C" {

View file

@ -7,7 +7,6 @@
#include <Mw/MachDep.h>
#include <Mw/TypeDefs.h>
#include <Mw/Core.h>
#ifdef __cplusplus
extern "C" {

View file

@ -19,29 +19,50 @@ extern "C" {
MWDECL MwClass MwListBoxClass;
/*!
* @brief Sets item on the listbox
* @param handle Widget
* @param row Row
* @param col Column
* @param text Text
* @return Index
* @brief Creates a listbox packet
* @return Packet
*/
MwInline int MwListBoxSet(MwWidget handle, int row, int col, const char* text) {
int out;
MwVaWidgetExecute(handle, "mwListBoxSet", (void*)&out, row, col, text);
return out;
}
MWDECL MwListBoxPacket* MwListBoxCreatePacket(void);
/*!
* @brief Sets the icon of the row
* @param handle Widget
* @brief Destroys a listbox packet
* @param packet Packet
*/
MWDECL void MwListBoxDestroyPacket(MwListBoxPacket* packet);
/*!
* @brief Inserts a new item to a packet
* @param packet Packet
* @param index Index
* @return Index
*/
MWDECL int MwListBoxPacketInsert(MwListBoxPacket* packet, int index);
/*!
* @brief Sets a column of item in a packet
* @param packet Packet
* @param index Index
* @param col Column
* @param text Text
*/
MWDECL void MwListBoxPacketSet(MwListBoxPacket* packet, int index, int col, const char* text);
/*!
* @brief Sets an icon of item in a packet
* @param packet Packet
* @param index Index
* @param icon Icon
*/
MwInline void MwListBoxSetIcon(MwWidget handle, int index, MwLLPixmap icon) {
MwVaWidgetExecute(handle, "mwListBoxSetIcon", NULL, index, icon);
MWDECL void MwListBoxPacketSetIcon(MwListBoxPacket* packet, int index, MwLLPixmap icon);
/*!
* @brief Inserts item on the listbox
* @param handle Widget
* @param index Index
* @param packet Packet
*/
MwInline void MwListBoxInsert(MwWidget handle, int index, void* packet) {
MwVaWidgetExecute(handle, "mwListBoxInsert", NULL, index, packet);
}
/*!

View file

@ -1,36 +0,0 @@
/*!
* @file Mw/Widget/SubWindow.h
* @brief SubWindow widget
*/
#ifndef __MW_WIDGET_SUBWINDOW_H__
#define __MW_WIDGET_SUBWINDOW_H__
#include <Mw/MachDep.h>
#include <Mw/TypeDefs.h>
#include <Mw/Core.h>
#ifdef __cplusplus
extern "C" {
#endif
/*!
* @brief SubWindow widget class
*/
MWDECL MwClass MwSubWindowClass;
/*!
* @brief Get parent widget where widgets should be placed
* @param handle Widget
* @return Widget
*/
MwInline MwWidget MwSubWindowGetFrame(MwWidget handle) {
MwWidget out;
MwVaWidgetExecute(handle, "mwSubWindowGetFrame", &out);
return out;
}
#ifdef __cplusplus
}
#endif
#endif

View file

@ -1,59 +0,0 @@
/*!
* @file Mw/Widget/Tab.h
* @brief Tab widget
*/
#ifndef __MW_WIDGET_TAB_H__
#define __MW_WIDGET_TAB_H__
#include <Mw/MachDep.h>
#include <Mw/TypeDefs.h>
#include <Mw/Core.h>
#ifdef __cplusplus
extern "C" {
#endif
/*!
* @brief Tab widget class
*/
MWDECL MwClass MwTabClass;
/*!
* @brief Adds a tab
* @param handle Widget
* @param name Tab name
* @return Frame
*/
MwInline MwWidget MwTabAdd(MwWidget handle, const char* name) {
MwWidget out;
MwVaWidgetExecute(handle, "mwTabAdd", &out, name);
return out;
}
/*!
* @brief Gets a tab frame
* @param handle Widget
* @param name Tab name
* @return Frame
*/
MwInline MwWidget MwTabGetFrame(MwWidget handle, const char* name) {
MwWidget out;
MwVaWidgetExecute(handle, "mwTabGetFrame", &out, name);
return out;
}
/*!
* @brief Focus on a tab frame
* @param handle Widget
* @param name Tab name
* @return Frame
*/
MwInline void MwTabFocus(MwWidget handle, const char* name) {
MwVaWidgetExecute(handle, "mwTabFocus", NULL, name);
}
#ifdef __cplusplus
}
#endif
#endif

View file

@ -1,24 +0,0 @@
/*!
* @file Mw/Widget/Table.h
* @brief Table widget
*/
#ifndef __MW_WIDGET_TABLE_H__
#define __MW_WIDGET_TABLE_H__
#include <Mw/MachDep.h>
#include <Mw/TypeDefs.h>
#ifdef __cplusplus
extern "C" {
#endif
/*!
* @brief Table widget class
*/
MWDECL MwClass MwTableClass;
#ifdef __cplusplus
}
#endif
#endif

View file

@ -90,19 +90,6 @@ MwInline void MwTreeViewSetOpened(MwWidget handle, void* item, int opened) {
MwVaWidgetExecute(handle, "mwTreeViewSetOpened", NULL, item, opened);
}
/*!
* @brief Gets the opened state of ithe item
* @param handle Widget
* @param item Item
* @return Opened or not
*/
MwInline int MwTreeViewGetOpened(MwWidget handle, void* item) {
int out;
MwVaWidgetExecute(handle, "mwTreeViewGetOpened", (void*)&out, item);
return out;
}
#ifdef __cplusplus
}
#endif

View file

@ -34,7 +34,19 @@ extern "C" {
MWDECL MwClass MwVulkanClass;
/*!
* @brief Configuration options that can be passed to setup parts of the Vulkan widget.
* @brief Add an extension to the list of extensions to enable prior to initialization.
* @warning This must be called before MwCreateWidget.
*/
MWDECL void MwVulkanEnableExtension(const char* ext_name);
/*!
* @brief Add an layer to the list of layers to enable prior to initialization.
* @warning This must be called before MwCreateWidget.
*/
MWDECL void MwVulkanEnableLayer(const char* ext_name);
/*!
* @brief Configuration options that can be passed to setup Vulkan before a widget is created.
*/
typedef struct _MwVulkanConfig {
/*!
@ -51,6 +63,13 @@ typedef struct _MwVulkanConfig {
int validation_layers;
} MwVulkanConfig;
/*!
* @brief Configure Vulkan prior to initializing the widget.
* @warning This must be called before MwCreateWidget.
* @warning The configuration provided will be used for future initializations of the Vulkan widget (unless it's changed)
*/
MWDECL void MwVulkanConfigure(MwVulkanConfig* cfg);
/*!
* @brief Field that can be gotten from Vulkan.
*/
@ -103,7 +122,7 @@ MwInline void* MwVulkanGetField(MwWidget handle, int field, int* err) {
/*!
* @brief Return whether Vulkan is installed on the target platform.
*/
MWDECL int MWAPI MwVulkanSupported(void);
MWDECL int MwVulkanSupported(void);
#ifdef __cplusplus
}

View file

@ -27,17 +27,6 @@ MwInline void MwWindowMakeBorderless(MwWidget handle, int toggle) {
MwVaWidgetExecute(handle, "mwWindowMakeBorderless", NULL, toggle);
}
/*!
* @brief Whether the window should close
* @param handle Widget
* @return bool
*/
MwInline MwBool MwWindowShouldClose(MwWidget handle) {
MwBool res = MwFALSE;
MwVaWidgetExecute(handle, "mwWindowShouldClose", NULL, &res);
return res;
}
#ifdef __cplusplus
}
#endif

View file

@ -55,9 +55,6 @@
String properties must be prefixed with S.
Handler properties must be prefixed with C.
Other properties must be prefixed with V.
"Early" properties must have letter "E" as 2nd letter.
e.g. vulkanExtension would be SEvulkanExtension
-->
<properties>
<integer name="x" common="yes" />
@ -70,42 +67,31 @@
<integer name="value" />
<integer name="changedBy" />
<integer name="areaShown" />
<integer name="checked" boolean="yes" />
<integer name="checked" />
<integer name="alignment" />
<integer name="bold" boolean="yes" />
<integer name="main" boolean="yes" />
<integer name="bold" />
<integer name="main" />
<integer name="leftPadding" />
<integer name="hasHeading" boolean="yes" />
<integer name="hasBorder" boolean="yes" />
<integer name="inverted" boolean="yes" />
<integer name="modernLook" common="yes" boolean="yes" />
<integer name="hideInput" boolean="yes" />
<integer name="singleClickSelectable" boolean="yes" />
<integer name="flat" boolean="yes" />
<integer name="showArrows" boolean="yes" />
<integer name="hasHeading" />
<integer name="hasBorder" />
<integer name="inverted" />
<integer name="modernLook" common="yes" />
<integer name="hideInput" />
<integer name="singleClickSelectable" />
<integer name="flat" />
<integer name="showArrows" />
<integer name="padding" />
<integer name="borderWidth" common="yes" />
<integer name="ratio" common="yes" />
<integer name="fixedSize" common="yes" />
<integer name="margin" />
<integer name="bitmapFont" common="yes" boolean="yes" />
<integer name="sevenSegment" boolean="yes" />
<integer name="bitmapFont" common="yes" />
<integer name="sevenSegment" />
<integer name="length" />
<integer name="forceInverted" common="yes" boolean="yes" />
<integer name="isRounded" common="yes" boolean="yes" />
<integer name="darkTheme" common="yes" boolean="yes" />
<integer name="useMonospace" common="yes" boolean="yes" />
<integer name="fillArea" />
<integer name="darkThemeAutomatic" common="yes" boolean="yes" />
<integer name="year" />
<integer name="month" />
<integer name="date" />
<integer name="day" />
<integer name="waitLayout" />
<integer name="scale" />
<integer name="columns" />
<integer name="columnSpan" column="yes" />
<integer name="rowSpan" column="yes" />
<integer name="forceInverted" common="yes" />
<integer name="isRounded" common="yes" />
<integer name="darkTheme" common="yes" />
<integer name="useMonospace" common="yes" />
<!-- waitMS is a special property, only applies to toplevel widget -->
<integer name="waitMS" common="yes" />
@ -114,14 +100,8 @@
<string name="text" />
<string name="background" common="yes" />
<string name="subBackground" common="yes" />
<string name="titleBackground" common="yes" />
<string name="foreground" common="yes" />
<string name="subForeground" common="yes" />
<string name="titleForeground" common="yes" />
<!-- Early string properties -->
<string name="vulkanExtension" early="yes" />
<string name="vulkanLayer" early="yes" />
<pixmap name="pixmap" />
<pixmap name="iconPixmap" />
@ -132,15 +112,6 @@
<pointer name="monospaceFont" />
<pointer name="boldMonospaceFont" />
<!-- Early void properties -->
<struct
defname="MwVulkanConfig"
early="yes"
pointer="yes"
name="vulkanConfig"
/>
</properties>
<handlers>
<handler name="activate" />
<handler name="listBoxActivate">
<integer pointer="yes" />
@ -148,33 +119,33 @@
<handler name="treeViewActivate">
<pointer />
</handler>
<handler name="resize" common="yes" />
<handler name="tick" common="yes" />
<handler name="resize" />
<handler name="tick" />
<handler name="menu">
<pointer />
</handler>
<handler name="mouseDown" common="yes">
<handler name="mouseDown">
<struct defname="MwMouse" pointer="yes" />
</handler>
<handler name="mouseUp" common="yes">
<handler name="mouseUp">
<struct defname="MwMouse" pointer="yes" />
</handler>
<handler name="mouseMove" common="yes">
<handler name="mouseMove">
<struct defname="MwPoint" pointer="yes" />
</handler>
<handler name="changed" />
<handler name="comboBoxChanged">
<integer pointer="yes" />
</handler>
<handler name="key" common="yes">
<handler name="key">
<integer pointer="yes" />
</handler>
<handler name="keyRelease" common="yes">
<handler name="keyRelease">
<integer pointer="yes" />
</handler>
<handler name="close" />
<handler name="focusIn" common="yes" />
<handler name="focusOut" common="yes" />
<handler name="focusIn" />
<handler name="focusOut" />
<handler name="fileChosen">
<string />
</handler>
@ -185,13 +156,13 @@
<struct defname="MwRGB" pointer="yes" />
</handler>
<handler name="draw" />
<handler name="clipboard" common="yes">
<handler name="clipboard">
<string />
</handler>
<handler name="darkTheme" common="yes">
<handler name="darkTheme">
<integer pointer="yes" />
</handler>
</handlers>
</properties>
<enumerations>
<enumeration name="MwDIRECTION">
<integer name="MwNORTH">0</integer>
@ -232,19 +203,6 @@
<integer name="MwMOUSE_WHEELUP" />
<integer name="MwMOUSE_WHEELDOWN" />
</enumeration>
<enumeration name="MwKEY">
<integer name="MwKEY_BACKSPACE">0x80000001</integer>
<integer name="MwKEY_LEFT" />
<integer name="MwKEY_RIGHT" />
<integer name="MwKEY_UP" />
<integer name="MwKEY_DOWN" />
<integer name="MwKEY_ENTER" />
<integer name="MwKEY_ESCAPE" />
<integer name="MwKEY_LEFTSHIFT" />
<integer name="MwKEY_RIGHTSHIFT" />
<integer name="MwKEY_ALT" />
<integer name="MwKEY_CONTROL" />
</enumeration>
<enumeration name="MwVULKANFIELD">
<integer name="MwVULKANFIELD_GETINSTANCEPROCADDR">0</integer>
<integer name="MwVULKANFIELD_INSTANCE" />
@ -257,27 +215,21 @@
<integer name="MwVULKANFIELD_PRESENTQUEUE" />
</enumeration>
</enumerations>
<!-- You can assume all constants are unsigned -->
<constants>
<integer name="MwDEFAULT">0x0fffffff</integer>
<integer name="MwMB_ICONMASK">0xf</integer>
<integer name="MwMB_BUTTONMASK">0xf0</integer>
<integer name="MwMB_BUTTONOK">0x10</integer>
<integer name="MwMB_BUTTONCANCEL">0x20</integer>
<integer name="MwMB_BUTTONYES">0x40</integer>
<integer name="MwMB_BUTTONNO">0x80</integer>
<integer name="MwKEY_FLAG">0x80000000</integer>
<integer name="MwKEY_CONTROL_FLAG">0xc0000000</integer>
<integer name="MwKEY_ALT_FLAG">0xa0000000</integer>
</constants>
<headers>
<header name="Dialog/ColorPicker">
<header name="ColorChooser">
<functions>
<function name="MwColorPicker">
<function name="MwColorChooser">
<return>
<widget type="Window" />
<widget />
</return>
<arguments>
<widget name="handle" />
@ -521,63 +473,20 @@
<integer enumname="MwClipboardType" name="clipboard_type" />
</arguments>
</function>
<function name="MwGetClass">
<return>
<class />
</return>
<arguments>
<widget name="handle" />
</arguments>
</function>
<function name="MwSetUser">
<arguments>
<widget name="handle" />
<pointer name="user" />
</arguments>
</function>
<function name="MwGetUser">
<return>
<pointer />
</return>
<arguments>
<widget name="handle" />
</arguments>
</function>
<function name="MwFreeWidget">
<function name="MwSetClipboard">
<arguments>
<widget name="handle" />
<string name="text" />
<integer enumname="MwClipboardType" name="clipboard_type" />
</arguments>
</function>
</functions>
</header>
<header name="Dialog/FileChooser">
<header name="FileChooser">
<functions>
<function name="MwFileChooser">
<return>
<widget type="Window" />
</return>
<arguments>
<widget name="handle" />
<string name="title" />
</arguments>
</function>
<function name="MwFileChooserEx">
<return>
<widget type="Window" />
</return>
<arguments>
<widget name="handle" />
<string name="title" />
<integer name="dir" />
</arguments>
</function>
</functions>
</header>
<header name="Dialog/DirectoryChooser">
<functions>
<function name="MwDirectoryChooser">
<return>
<widget type="Window" />
<widget />
</return>
<arguments>
<widget name="handle" />
@ -586,11 +495,11 @@
</function>
</functions>
</header>
<header name="Dialog/MessageBox">
<header name="MessageBox">
<functions>
<function name="MwMessageBox">
<return>
<widget type="Window" />
<widget />
</return>
<arguments>
<widget name="handle" />
@ -601,13 +510,70 @@
</function>
<function name="MwMessageBoxGetChild">
<return>
<widget type="Button" />
<widget />
</return>
<arguments>
<widget name="handle" type="Window" />
<widget name="handle" />
<integer name="child" />
</arguments>
</function>
<function name="MwMessageBoxDestroy">
<arguments>
<widget name="handle" />
</arguments>
</function>
</functions>
</header>
<header name="Widget/ListBox.h">
<functions>
<function name="MwListBoxCreatePacket">
<return>
<pointer />
</return>
</function>
<function name="MwListBoxDestroyPacket">
<arguments>
<pointer name="packet" />
</arguments>
</function>
<function name="MwListBoxPacketInsert">
<return>
<integer />
</return>
<arguments>
<pointer name="packet" />
<integer name="index" />
</arguments>
</function>
<function name="MwListBoxPacketSet">
<arguments>
<pointer name="packet" />
<integer name="index" />
<integer name="col" />
<string name="text" />
</arguments>
</function>
<function name="MwListBoxPacketSetIcon">
<arguments>
<pointer name="packet" />
<integer name="index" />
<pixmap name="icon" />
</arguments>
</function>
</functions>
</header>
<!-- They are not alphabetically sorted for reasons -->
<header name="Widget/Vulkan.h">
<functions>
<function name="MwVulkanConfigure">
<return>
<pointer />
</return>
<arguments>
<struct defname="MwVulkanConfig" name="cfg" pointer="yes" />
</arguments>
</function>
</functions>
</header>
</headers>
@ -621,7 +587,6 @@
<property name="padding" />
<property name="hasBorder" />
<property name="inverted" />
<property name="waitLayout" />
</properties>
</widget>
<widget name="Button">
@ -632,43 +597,22 @@
<property name="padding" />
<property name="fillArea" />
</properties>
<handlers>
<handler name="activate" />
<handler name="changed" />
</handlers>
</widget>
<widget name="Calendar">
<properties>
<property name="year" />
<property name="month" />
<property name="date" />
<property name="day" />
<property name="scale" />
</properties>
</widget>
<widget name="CheckBox">
<properties>
<property name="checked" />
</properties>
<handlers>
<handler name="changed" />
</handlers>
</widget>
<widget name="Entry">
<properties>
<property name="text" />
<property name="hideInput" />
</properties>
<handlers>
<handler name="activate" />
<handler name="changed" />
</handlers>
</widget>
<widget name="Frame">
<properties>
<property name="hasBorder" />
<property name="inverted" />
<property name="iconPixmap" />
</properties>
</widget>
<widget name="Image">
@ -703,24 +647,11 @@
<property name="hasHeading" />
<property name="singleClickSelectable" />
</properties>
<handlers>
<handler name="listBoxActivate" />
</handlers>
<functions>
<function name="Set">
<return>
<integer />
</return>
<arguments>
<integer name="row" />
<integer name="col" />
<string name="text" />
</arguments>
</function>
<function name="SetIcon">
<function name="Insert">
<arguments>
<integer name="index" />
<pixmap name="icon" />
<pointer name="packet" />
</arguments>
</function>
<function name="Delete">
@ -746,9 +677,6 @@
</functions>
</widget>
<widget name="Menu">
<handlers>
<handler name="menu" />
</handlers>
<functions>
<function name="Add">
<return>
@ -765,10 +693,6 @@
<properties>
<property name="text" />
</properties>
<handlers>
<handler name="activate" />
<handler name="changed" />
</handlers>
</widget>
<widget name="ScrollBar">
<properties>
@ -778,10 +702,8 @@
<property name="minValue" />
<property name="maxValue" />
<property name="orientation" />
<property name="showArrows" />
</properties>
<handlers>
<handler name="changed" />
</handlers>
<functions>
<function name="GetVisibleLength">
<return>
@ -799,13 +721,6 @@
<arguments>
<pointer name="menu" />
<struct defname="MwPoint" pointer="yes" name="point" />
<integer name="diff_calc" />
</arguments>
</function>
<function name="GetSize">
<arguments>
<pointer name="menu" />
<struct defname="MwRect" pointer="yes" name="rect" />
</arguments>
</function>
</functions>
@ -834,12 +749,6 @@
<property name="hasBorder" />
<property name="inverted" />
</properties>
<handlers>
<handler name="colorChosen" />
<handler name="fileChosen" />
<handler name="directoryChosen" />
<handler name="close" />
</handlers>
<functions>
<function name="MakeBorderless" />
</functions>
@ -855,18 +764,12 @@
<properties>
<property name="checked" />
</properties>
<handlers>
<handler name="changed" />
</handlers>
</widget>
<widget name="ComboBox">
<properties>
<property name="areaShown" />
<property name="value" />
</properties>
<handlers>
<handler name="comboBoxChanged" />
</handlers>
<functions>
<function name="Add">
<integer name="index" />
@ -879,9 +782,6 @@
<property name="leftPadding" />
<property name="singleClickSelectable" />
</properties>
<handlers>
<handler name="treeViewActivate" />
</handlers>
<functions>
<function name="Add">
<arguments>
@ -895,80 +795,9 @@
<pointer name="item" />
</arguments>
</function>
<function name="SetOpened">
<arguments>
<pointer name="item" />
<integer name="opened" />
</arguments>
</function>
<function name="GetOpened">
<return>
<integer />
</return>
<arguments>
<pointer name="item" />
</arguments>
</function>
<function name="Reset" />
</functions>
</widget>
<widget name="SubWindow">
<properties>
<property name="iconPixmap" />
<property name="title" />
</properties>
<handlers>
<handler name="close" />
</handlers>
<functions>
<function name="GetFrame">
<return>
<widget />
</return>
</function>
</functions>
</widget>
<widget name="Table">
<properties>
<property name="columns" />
<property name="margin" />
<property name="padding" />
<property name="hasBorder" />
<property name="inverted" />
<property name="waitLayout" />
</properties>
</widget>
<widget name="Tab">
<properties>
<property name="value" />
</properties>
<handlers>
<handler name="changed" />
</handlers>
<functions>
<function name="Add">
<return>
<widget />
</return>
<arguments>
<string name="name" />
</arguments>
</function>
<function name="GetFrame">
<return>
<widget />
</return>
<arguments>
<string name="name" />
</arguments>
</function>
<function name="Focus">
<arguments>
<string name="name" />
</arguments>
</function>
</functions>
</widget>
<!-- They are not alphabetically sorted for reasons -->
<widget name="OpenGL">

View file

@ -1,8 +1,7 @@
$library_suffix = ".dylib";
set_shared_flag("-dynamiclib");
#use_backend("cocoa");
new_object("src/backend/nococoa.m");
use_backend("cocoa");
add_cflags("-DSTBI_NO_THREAD_LOCALS");
add_ldflags("-framework Cocoa -lobjc");

View file

@ -1,19 +0,0 @@
my @enabled_backends = ();
add_incdir2("-I/usr/local/include");
add_libdir("-L/usr/local/lib -Wl,-R/usr/local/lib");
if (param_get("wayland") && not(param_get("tiny"))) {
push(@enabled_backends, "wayland");
}
if (param_get("x11")) {
push(@enabled_backends, "x11");
}
use_backend(@enabled_backends);
add_libs("-lpthread");
add_cflags("-DUSE_DBUS");
1;

View file

@ -1,3 +0,0 @@
use_backend("haiku");
1;

View file

@ -1,6 +1,6 @@
my @enabled_backends = ();
if (param_get("wayland") && not(param_get("tiny"))) {
if (param_get("wayland")) {
push(@enabled_backends, "wayland");
}
if (param_get("x11")) {

View file

@ -1,8 +0,0 @@
add_incdir2("-I/usr/local/include");
add_libdir("-L/usr/local/lib -Wl,-R/usr/local/lib");
use_backend("x11");
add_libs("-lpthread");
add_cflags("-DUSE_DBUS");
1;

View file

@ -4,7 +4,5 @@ $executable_suffix = ".exe";
$math = "";
add_ldflags("-Wl,--out-implib,src/libMw.dll.a -static-libgcc");
use_backend("gdi");
add_libs("-lole32");
add_libs("-luuid");
1;

View file

@ -4,15 +4,9 @@ my $gl_libs = "";
if (param_get("tiny")) {
add_cflags("-Oz");
if (defined($ENV{CC}) && grep(/^clang$/, $ENV{CC})) {
add_libs("-flto=full");
add_cflags("-flto=full");
add_libs("-flto=thin");
add_cflags("-flto=thin");
}
add_cflags("-fdata-sections -ffunction-sections");
add_libs("-Wl,--gc-sections");
# these don't actually disable either, they're here for the final output.
param_set("wayland", 0);
param_set("dbus", 0);
}
if (param_get("classic-theme")) {
add_cflags("-DUSE_CLASSIC_THEME");
@ -46,11 +40,7 @@ if (grep(/^classicmacos$/, @backends)) {
if (grep(/^wayland$/, @backends)) {
add_cflags("-DUSE_WAYLAND");
new_object("src/backend/cairo.c");
new_object("src/backend/wayland/wayland.c");
new_object("src/backend/wayland/buffer.c");
new_object("src/backend/wayland/interfaces.c");
new_object("src/backend/wayland/region.c");
new_object("src/backend/wayland.c");
if (param_get("opengl")) {
add_cflags("-DWAYLAND_LOAD_OPENGL");
@ -66,16 +56,10 @@ if (grep(/^wayland$/, @backends)) {
scan_wayland_protocol("unstable", "primary-selection", "-unstable-v1");
scan_wayland_protocol("unstable", "pointer-constraints", "-unstable-v1");
scan_wayland_protocol("unstable", "relative-pointer", "-unstable-v1");
scan_wayland_protocol_from_file("wlr-layer-shell",
"wlr-layer-shell-unstable-v1.xml");
$gl_libs = "-lGL -lGLU";
}
if (not(param_get("dbus")) && not(param_get("tiny"))) {
$cflags =~ s/( |^)-DUSE_DBUS( |$)/ /;
}
if (grep(/( |^)-DUSE_DBUS( |$)/, $cflags)) {
add_cflags(`pkg-config --cflags dbus-1`);
}
@ -95,18 +79,12 @@ if (grep(/^cocoa$/, @backends) || param_get("gnustep")) {
new_object("src/widget/opengl_cocoa.m");
}
# John Apple my man literally everybody and their mother who knows what opengl is knows its deprecated on macos and i'm not having you spam the console with this
# tim cook my man literally everybody and their mother who knows what opengl is knows its deprecated on macos and i'm not having you spam the console with this
add_cflags("-DGL_SILENCE_DEPRECATION");
$gl_libs = "-framework OpenGL";
}
if (grep(/^haiku$/, @backends)) {
add_cflags("-DUSE_HAIKU");
new_object("src/backend/haiku.cc");
add_libs("-lbe");
}
if (param_get("stb-image")) {
add_cflags("-DUSE_STB_IMAGE");
if (param_get("tiny")) {
@ -122,9 +100,6 @@ else {
if (param_get("stb-truetype")) {
add_cflags("-DUSE_STB_TRUETYPE");
}
if (param_get("allow-sloppy-focus")) {
add_cflags("-DALLOW_SLOPPY_FOCUS");
}
add_incdir("-Iexternal/libz/include");
@ -135,10 +110,6 @@ if (param_get("freetype2")) {
}
}
if (param_get("gdi-text")) {
add_cflags("-DUSE_GDI_TEXT");
}
if (param_get("vulkan") && param_get("vulkan-string-helper")) {
add_cflags("-DHAS_VK_ENUM_STRING_HELPER");
}
@ -150,7 +121,6 @@ new_object("src/text/font/*.c");
new_object("src/widget/box.c");
new_object("src/widget/button.c");
new_object("src/widget/calendar.c");
new_object("src/widget/checkbox.c");
new_object("src/widget/combobox.c");
new_object("src/widget/entry.c");
@ -165,9 +135,6 @@ new_object("src/widget/radiobox.c");
new_object("src/widget/scrollbar.c");
new_object("src/widget/separator.c");
new_object("src/widget/submenu.c");
new_object("src/widget/subwindow.c");
new_object("src/widget/tab.c");
new_object("src/widget/table.c");
new_object("src/widget/treeview.c");
new_object("src/widget/viewport.c");
new_object("src/widget/window.c");
@ -206,10 +173,7 @@ new_example("examples/basic/box");
new_example("examples/basic/clipboard");
new_example("examples/basic/sevensegment");
new_example("examples/basic/calculator");
new_example("examples/basic/filechooser");
new_example("examples/basic/periodic");
new_example("examples/basic/subwindow");
new_example("examples/basic/tab");
if (param_get("opengl")) {
new_example("examples/gldemos/boing", $gl_libs);

View file

@ -54,7 +54,7 @@ sub set_shared_flag {
sub new_object {
my @l = glob($_[0]);
foreach my $e (@l) {
$e =~ s/\.(cc|c|m)$/$object_suffix/;
$e =~ s/\.(c|m)$/$object_suffix/;
push(@library_targets, $e);
}
}
@ -66,7 +66,7 @@ sub use_backend {
}
sub scan_wayland_protocol_core {
my $proto_c = "src/backend/wayland/wayland-core-protocol.c";
my $proto_c = "src/backend/wayland-core-protocol.c";
if (
system(
@ -98,7 +98,7 @@ sub scan_wayland_protocol {
my $proto = $_[1];
my $ver = $_[2];
my $proto_c = "src/backend/wayland/wayland-${proto}-protocol.c";
my $proto_c = "src/backend/wayland-${proto}-protocol.c";
if (
system(
@ -125,35 +125,6 @@ sub scan_wayland_protocol {
}
}
sub scan_wayland_protocol_from_file {
my $proto = $_[0];
my $file = $_[1];
my $proto_c = "src/backend/wayland/wayland-${proto}-protocol.c";
if (
system(
"wayland-scanner private-code ./resource/wayland/${file} ${proto_c}"
) != 0
)
{
print(
"^ Error on getting private code for ./resource/wayland/${file}\n");
}
else {
new_object($proto_c);
}
if (
system(
"wayland-scanner client-header ./resource/wayland/${file} include/Mw/LowLevel/Wayland/${proto}-client-protocol.h"
)
)
{
print(
"^ Error on getting client header for ./resource/wayland/${file}\n"
);
}
}
our %params = ();
sub param_set {

File diff suppressed because it is too large Load diff

1256
resource/font/deccurs.bdf Normal file

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 5.6 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 365 KiB

View file

@ -1,41 +1,14 @@
#declare BASE = 1;
#include "resource/logo/logo.pov"
#ifdef(VERSION)
object {
text {
ttf "resource/font/IBMPlexSerif.ttf",
VERSION,
1, 0
}
scale 5
translate <7.5, 0, 1>
pigment {
color Red
}
finish {
phong 1
reflection 0.3
}
}
#end
object {
text {
ttf "resource/font/IBMPlexSerif.ttf",
#ifdef(NODEJS)
"for Node.JS",
#else
"Milsko Toolkit",
#end
1, 0
}
scale 2
#ifdef(NODEJS)
translate <5, -1, -1>
#else
translate <2.5, -1, -1>
#end
pigment {
color White
}

View file

@ -1,2 +0,0 @@
#declare VERSION="1.0";
#include "resource/logo/banner.pov"

View file

@ -17,7 +17,6 @@ sky_sphere {
}
}
union {
object {
Cube
translate <-1, 0, 1>
@ -58,9 +57,6 @@ object {
}
}
rotate <0, clock * 360, 0>
}
plane {
y, -1
pigment {

BIN
resource/logo/logo64.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

View file

@ -1,10 +0,0 @@
prefix="@CMAKE_INSTALL_PREFIX@"
includedir="@CMAKE_INSTALL_PREFIX@/include"
libdir="@CMAKE_INSTALL_PREFIX@/bin"
Name: @PROJECT_NAME@
Description: @PROJECT_DESCRIPTION@
URL: @PROJECT_HOMEPAGE_URL@
Version: @PROJECT_VERSION@
Cflags: -I"${includedir}"/
Libs: -L"${libdir}" -lMw

View file

@ -1,451 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<protocol name="wlr_layer_shell_unstable_v1">
<copyright>
Copyright © 2017 Drew DeVault
Permission to use, copy, modify, distribute, and sell this
software and its documentation for any purpose is hereby granted
without fee, provided that the above copyright notice appear in
all copies and that both that copyright notice and this permission
notice appear in supporting documentation, and that the name of
the copyright holders not be used in advertising or publicity
pertaining to distribution of the software without specific,
written prior permission. The copyright holders make no
representations about the suitability of this software for any
purpose. It is provided "as is" without express or implied
warranty.
THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
THIS SOFTWARE.
</copyright>
<interface name="zwlr_layer_shell_v1" version="4">
<description summary="create surfaces that are layers of the desktop">
Clients can use this interface to assign the surface_layer role to
wl_surfaces. Such surfaces are assigned to a "layer" of the output and
rendered with a defined z-depth respective to each other. They may also be
anchored to the edges and corners of a screen and specify input handling
semantics. This interface should be suitable for the implementation of
many desktop shell components, and a broad number of other applications
that interact with the desktop.
</description>
<request name="get_layer_surface">
<description summary="create a layer_surface from a surface">
Create a layer surface for an existing surface. This assigns the role of
layer_surface, or raises a protocol error if another role is already
assigned.
Creating a layer surface from a wl_surface which has a buffer attached
or committed is a client error, and any attempts by a client to attach
or manipulate a buffer prior to the first layer_surface.configure call
must also be treated as errors.
After creating a layer_surface object and setting it up, the client
must perform an initial commit without any buffer attached.
The compositor will reply with a layer_surface.configure event.
The client must acknowledge it and is then allowed to attach a buffer
to map the surface.
You may pass NULL for output to allow the compositor to decide which
output to use. Generally this will be the one that the user most
recently interacted with.
Clients can specify a namespace that defines the purpose of the layer
surface.
</description>
<arg name="id" type="new_id" interface="zwlr_layer_surface_v1" />
<arg name="surface" type="object" interface="wl_surface" />
<arg
name="output"
type="object"
interface="wl_output"
allow-null="true"
/>
<arg
name="layer"
type="uint"
enum="layer"
summary="layer to add this surface to"
/>
<arg
name="namespace"
type="string"
summary="namespace for the layer surface"
/>
</request>
<enum name="error">
<entry name="role" value="0" summary="wl_surface has another role" />
<entry name="invalid_layer" value="1" summary="layer value is invalid" />
<entry
name="already_constructed"
value="2"
summary="wl_surface has a buffer attached or committed"
/>
</enum>
<enum name="layer">
<description summary="available layers for surfaces">
These values indicate which layers a surface can be rendered in. They
are ordered by z depth, bottom-most first. Traditional shell surfaces
will typically be rendered between the bottom and top layers.
Fullscreen shell surfaces are typically rendered at the top layer.
Multiple surfaces can share a single layer, and ordering within a
single layer is undefined.
</description>
<entry name="background" value="0" />
<entry name="bottom" value="1" />
<entry name="top" value="2" />
<entry name="overlay" value="3" />
</enum>
<!-- Version 3 additions -->
<request name="destroy" type="destructor" since="3">
<description summary="destroy the layer_shell object">
This request indicates that the client will not use the layer_shell
object any more. Objects that have been created through this instance
are not affected.
</description>
</request>
</interface>
<interface name="zwlr_layer_surface_v1" version="4">
<description summary="layer metadata interface">
An interface that may be implemented by a wl_surface, for surfaces that
are designed to be rendered as a layer of a stacked desktop-like
environment.
Layer surface state (layer, size, anchor, exclusive zone,
margin, interactivity) is double-buffered, and will be applied at the
time wl_surface.commit of the corresponding wl_surface is called.
Attaching a null buffer to a layer surface unmaps it.
Unmapping a layer_surface means that the surface cannot be shown by the
compositor until it is explicitly mapped again. The layer_surface
returns to the state it had right after layer_shell.get_layer_surface.
The client can re-map the surface by performing a commit without any
buffer attached, waiting for a configure event and handling it as usual.
</description>
<request name="set_size">
<description summary="sets the size of the surface">
Sets the size of the surface in surface-local coordinates. The
compositor will display the surface centered with respect to its
anchors.
If you pass 0 for either value, the compositor will assign it and
inform you of the assignment in the configure event. You must set your
anchor to opposite edges in the dimensions you omit; not doing so is a
protocol error. Both values are 0 by default.
Size is double-buffered, see wl_surface.commit.
</description>
<arg name="width" type="uint" />
<arg name="height" type="uint" />
</request>
<request name="set_anchor">
<description summary="configures the anchor point of the surface">
Requests that the compositor anchor the surface to the specified edges
and corners. If two orthogonal edges are specified (e.g. 'top' and
'left'), then the anchor point will be the intersection of the edges
(e.g. the top left corner of the output); otherwise the anchor point
will be centered on that edge, or in the center if none is specified.
Anchor is double-buffered, see wl_surface.commit.
</description>
<arg name="anchor" type="uint" enum="anchor" />
</request>
<request name="set_exclusive_zone">
<description summary="configures the exclusive geometry of this surface">
Requests that the compositor avoids occluding an area with other
surfaces. The compositor's use of this information is
implementation-dependent - do not assume that this region will not
actually be occluded.
A positive value is only meaningful if the surface is anchored to one
edge or an edge and both perpendicular edges. If the surface is not
anchored, anchored to only two perpendicular edges (a corner), anchored
to only two parallel edges or anchored to all edges, a positive value
will be treated the same as zero.
A positive zone is the distance from the edge in surface-local
coordinates to consider exclusive.
Surfaces that do not wish to have an exclusive zone may instead specify
how they should interact with surfaces that do. If set to zero, the
surface indicates that it would like to be moved to avoid occluding
surfaces with a positive exclusive zone. If set to -1, the surface
indicates that it would not like to be moved to accommodate for other
surfaces, and the compositor should extend it all the way to the edges
it is anchored to.
For example, a panel might set its exclusive zone to 10, so that
maximized shell surfaces are not shown on top of it. A notification
might set its exclusive zone to 0, so that it is moved to avoid
occluding the panel, but shell surfaces are shown underneath it. A
wallpaper or lock screen might set their exclusive zone to -1, so that
they stretch below or over the panel.
The default value is 0.
Exclusive zone is double-buffered, see wl_surface.commit.
</description>
<arg name="zone" type="int" />
</request>
<request name="set_margin">
<description summary="sets a margin from the anchor point">
Requests that the surface be placed some distance away from the anchor
point on the output, in surface-local coordinates. Setting this value
for edges you are not anchored to has no effect.
The exclusive zone includes the margin.
Margin is double-buffered, see wl_surface.commit.
</description>
<arg name="top" type="int" />
<arg name="right" type="int" />
<arg name="bottom" type="int" />
<arg name="left" type="int" />
</request>
<enum name="keyboard_interactivity">
<description
summary="types of keyboard interaction possible for a layer shell surface"
>
Types of keyboard interaction possible for layer shell surfaces. The
rationale for this is twofold: (1) some applications are not interested
in keyboard events and not allowing them to be focused can improve the
desktop experience; (2) some applications will want to take exclusive
keyboard focus.
</description>
<entry name="none" value="0">
<description summary="no keyboard focus is possible">
This value indicates that this surface is not interested in keyboard
events and the compositor should never assign it the keyboard focus.
This is the default value, set for newly created layer shell surfaces.
This is useful for e.g. desktop widgets that display information or
only have interaction with non-keyboard input devices.
</description>
</entry>
<entry name="exclusive" value="1">
<description summary="request exclusive keyboard focus">
Request exclusive keyboard focus if this surface is above the shell surface layer.
For the top and overlay layers, the seat will always give
exclusive keyboard focus to the top-most layer which has keyboard
interactivity set to exclusive. If this layer contains multiple
surfaces with keyboard interactivity set to exclusive, the compositor
determines the one receiving keyboard events in an implementation-
defined manner. In this case, no guarantee is made when this surface
will receive keyboard focus (if ever).
For the bottom and background layers, the compositor is allowed to use
normal focus semantics.
This setting is mainly intended for applications that need to ensure
they receive all keyboard events, such as a lock screen or a password
prompt.
</description>
</entry>
<entry name="on_demand" value="2" since="4">
<description summary="request regular keyboard focus semantics">
This requests the compositor to allow this surface to be focused and
unfocused by the user in an implementation-defined manner. The user
should be able to unfocus this surface even regardless of the layer
it is on.
Typically, the compositor will want to use its normal mechanism to
manage keyboard focus between layer shell surfaces with this setting
and regular toplevels on the desktop layer (e.g. click to focus).
Nevertheless, it is possible for a compositor to require a special
interaction to focus or unfocus layer shell surfaces (e.g. requiring
a click even if focus follows the mouse normally, or providing a
keybinding to switch focus between layers).
This setting is mainly intended for desktop shell components (e.g.
panels) that allow keyboard interaction. Using this option can allow
implementing a desktop shell that can be fully usable without the
mouse.
</description>
</entry>
</enum>
<request name="set_keyboard_interactivity">
<description summary="requests keyboard events">
Set how keyboard events are delivered to this surface. By default,
layer shell surfaces do not receive keyboard events; this request can
be used to change this.
This setting is inherited by child surfaces set by the get_popup
request.
Layer surfaces receive pointer, touch, and tablet events normally. If
you do not want to receive them, set the input region on your surface
to an empty region.
Keyboard interactivity is double-buffered, see wl_surface.commit.
</description>
<arg
name="keyboard_interactivity"
type="uint"
enum="keyboard_interactivity"
/>
</request>
<request name="get_popup">
<description summary="assign this layer_surface as an xdg_popup parent">
This assigns an xdg_popup's parent to this layer_surface. This popup
should have been created via xdg_surface::get_popup with the parent set
to NULL, and this request must be invoked before committing the popup's
initial state.
See the documentation of xdg_popup for more details about what an
xdg_popup is and how it is used.
</description>
<arg name="popup" type="object" interface="xdg_popup" />
</request>
<request name="ack_configure">
<description summary="ack a configure event">
When a configure event is received, if a client commits the
surface in response to the configure event, then the client
must make an ack_configure request sometime before the commit
request, passing along the serial of the configure event.
If the client receives multiple configure events before it
can respond to one, it only has to ack the last configure event.
A client is not required to commit immediately after sending
an ack_configure request - it may even ack_configure several times
before its next surface commit.
A client may send multiple ack_configure requests before committing, but
only the last request sent before a commit indicates which configure
event the client really is responding to.
</description>
<arg
name="serial"
type="uint"
summary="the serial from the configure event"
/>
</request>
<request name="destroy" type="destructor">
<description summary="destroy the layer_surface">
This request destroys the layer surface.
</description>
</request>
<event name="configure">
<description summary="suggest a surface change">
The configure event asks the client to resize its surface.
Clients should arrange their surface for the new states, and then send
an ack_configure request with the serial sent in this configure event at
some point before committing the new surface.
The client is free to dismiss all but the last configure event it
received.
The width and height arguments specify the size of the window in
surface-local coordinates.
The size is a hint, in the sense that the client is free to ignore it if
it doesn't resize, pick a smaller size (to satisfy aspect ratio or
resize in steps of NxM pixels). If the client picks a smaller size and
is anchored to two opposite anchors (e.g. 'top' and 'bottom'), the
surface will be centered on this axis.
If the width or height arguments are zero, it means the client should
decide its own window dimension.
</description>
<arg name="serial" type="uint" />
<arg name="width" type="uint" />
<arg name="height" type="uint" />
</event>
<event name="closed">
<description summary="surface should be closed">
The closed event is sent by the compositor when the surface will no
longer be shown. The output may have been destroyed or the user may
have asked for it to be removed. Further changes to the surface will be
ignored. The client should destroy the resource after receiving this
event, and create a new surface if they so choose.
</description>
</event>
<enum name="error">
<entry
name="invalid_surface_state"
value="0"
summary="provided surface state is invalid"
/>
<entry name="invalid_size" value="1" summary="size is invalid" />
<entry
name="invalid_anchor"
value="2"
summary="anchor bitfield is invalid"
/>
<entry
name="invalid_keyboard_interactivity"
value="3"
summary="keyboard interactivity is invalid"
/>
</enum>
<enum name="anchor" bitfield="true">
<entry
name="top"
value="1"
summary="the top edge of the anchor rectangle"
/>
<entry
name="bottom"
value="2"
summary="the bottom edge of the anchor rectangle"
/>
<entry
name="left"
value="4"
summary="the left edge of the anchor rectangle"
/>
<entry
name="right"
value="8"
summary="the right edge of the anchor rectangle"
/>
</enum>
<!-- Version 2 additions -->
<request name="set_layer" since="2">
<description summary="change the layer of the surface">
Change the layer that the surface is rendered on.
Layer is double-buffered, see wl_surface.commit.
</description>
<arg
name="layer"
type="uint"
enum="zwlr_layer_shell_v1.layer"
summary="layer to move this surface to"
/>
</request>
</interface>
</protocol>

View file

@ -1,95 +0,0 @@
#include <Mw/Milsko.h>
#ifndef CP_UTF8
#define CP_UTF8 65001
#endif
char* MwACPToUTF8(const char* input) {
#if defined(_WIN32) && defined(MW_HAS_WCHAR)
int mbbytes = (strlen(input) + 1) * 4;
int wbytes = 0;
int len;
wchar_t* wout;
char* mbout = malloc(mbbytes);
wbytes = MultiByteToWideChar(CP_ACP, 0, input, strlen(input), NULL, 0) * sizeof(wchar_t);
if(wbytes == 0) {
free(mbout);
return MwStringDuplicate(input);
}
wout = malloc(wbytes + sizeof(wchar_t));
len = wbytes / sizeof(wchar_t);
memset(wout, 0, wbytes);
memset(mbout, 0, mbbytes);
len = MultiByteToWideChar(CP_ACP, 0, input, strlen(input), wout, len);
if(len == 0) {
free(mbout);
free(wout);
return MwStringDuplicate(input);
}
wout[len] = 0;
len = WideCharToMultiByte(CP_UTF8, 0, wout, len, mbout, mbbytes, 0, 0);
if(len == 0) {
free(mbout);
free(wout);
return MwStringDuplicate(input);
}
mbout[len] = 0;
free(wout);
return mbout;
#else
return MwStringDuplicate(input);
#endif
}
char* MwUTF8ToACP(const char* input) {
#if defined(_WIN32) && defined(MW_HAS_WCHAR)
int mbbytes = (strlen(input) + 1) * 4;
int wbytes = 0;
int len;
wchar_t* wout;
char* mbout = malloc(mbbytes);
wbytes = MultiByteToWideChar(CP_UTF8, 0, input, strlen(input), NULL, 0) * sizeof(wchar_t);
if(wbytes == 0) {
free(mbout);
return MwStringDuplicate(input);
}
wout = malloc(wbytes + sizeof(wchar_t));
len = wbytes / sizeof(wchar_t);
memset(wout, 0, wbytes);
memset(mbout, 0, mbbytes);
len = MultiByteToWideChar(CP_UTF8, 0, input, strlen(input), wout, len);
if(len == 0) {
free(mbout);
free(wout);
return MwStringDuplicate(input);
}
wout[len] = 0;
len = WideCharToMultiByte(CP_ACP, 0, wout, len, mbout, mbbytes, 0, 0);
if(len == 0) {
free(mbout);
free(wout);
return MwStringDuplicate(input);
}
mbout[len] = 0;
free(wout);
return mbout;
#else
return MwStringDuplicate(input);
#endif
}

View file

@ -19,19 +19,15 @@ typedef struct dir {
void* MwDirectoryOpen(const char* path) {
dir_t* dir = malloc(sizeof(*dir));
char * p;
if(!dir) {
printf("Out Of Memory\n");
return NULL;
}
#ifdef _WIN32
p = MwStringDuplicate(path);
char* p = malloc(strlen(path) + 2 + 1);
strcpy(p, path);
if(strchr(path, '/') != NULL) {
MwStringConcat(p, "/");
strcat(p, "/");
} else {
MwStringConcat(p, "\\");
strcat(p, "\\");
}
MwStringConcat(p, "*");
strcat(p, "*");
if((dir->hFind = FindFirstFile(p, &dir->ffd)) == INVALID_HANDLE_VALUE) {
free(p);
free(dir);
@ -70,19 +66,8 @@ MwDirectoryEntry* MwDirectoryRead(void* handle) {
dir_t* dir = handle;
MwDirectoryEntry* entry = malloc(sizeof(*entry));
#ifdef _WIN32
ULARGE_INTEGER* l;
#elif defined(CLASSIC_MAC_OS)
#else
struct dirent* d;
struct stat s;
char* p;
#endif
if(!entry) {
printf("Out Of Memory\n");
return NULL;
}
#ifdef _WIN32
ULARGE_INTEGER* l;
if(!dir->next) return NULL;
entry->name = MwStringDuplicate(dir->ffd.cFileName);
@ -106,6 +91,9 @@ MwDirectoryEntry* MwDirectoryRead(void* handle) {
#elif defined(CLASSIC_MAC_OS)
/* todo */
#else
struct dirent* d;
struct stat s;
char* p;
if((d = readdir(dir->dir)) == NULL) {
free(entry);
return NULL;
@ -182,8 +170,8 @@ static void MwDirectoryJoinSingle(char* target, char* p) {
b[0] = DIRSEP;
b[1] = 0;
MwStringConcat(target, b);
MwStringConcat(target, p);
strcat(target, b);
strcat(target, p);
}
for(i = strlen(target) - 1; i >= 0; i--) {
@ -199,16 +187,17 @@ static void MwDirectoryJoinSingle(char* target, char* p) {
b[0] = DIRSEP;
b[1] = 0;
MwStringConcat(target, b);
strcat(target, b);
}
}
char* MwDirectoryJoin(char* a, char* b) {
char* p = MwStringDuplicate(a);
char* p = malloc(strlen(a) + 1 + strlen(b) + 1);
char* bdup = MwStringDuplicate(b);
char* b2 = bdup;
int i;
strcpy(p, a);
for(i = strlen(p) - 1; i >= 0; i--) {
if(p[i] == DIRSEP) {
p[i] = 0;

View file

@ -48,7 +48,7 @@ void MwDynamicClose(void* handle) {
// CFragConnectionID connID = (CFragConnectionID)handle;
// CloseConnection(&connID);
}
#elif defined(__unix__) || defined(__APPLE__) || defined(__HAIKU__)
#elif defined(__unix__) || defined(__APPLE__)
void* MwDynamicOpen(const char* path) {
return dlopen(path, RTLD_LOCAL | RTLD_LAZY);
}

View file

@ -2,7 +2,7 @@
#if defined(_WIN32)
long MwTimeGetTick(void) {
return MwLL_PFN_timeGetTime();
return GetTickCount();
}
void MwTimeSleep(int ms) {
@ -55,7 +55,7 @@ void MwTimeSleep(int ms) {
// DisposeTimerUPP(tm.tmAddr);
}
#elif defined(__unix__) || defined(__HAIKU__)
#elif defined(__unix__)
long MwTimeGetTick(void) {
struct timespec ts;
long n = 0;

View file

@ -1,266 +0,0 @@
#include <Mw/Milsko.h>
#include "../../external/stb_ds.h"
cairo_call_table_t cairo_call_tbl;
void MwLLCairoPolygon(struct _MwLLCairo handle, MwPoint* points, int points_count, MwLLColor color) {
int i;
cairo_set_source_rgba(handle.front_cairo, color->common.red / 255.0, color->common.green / 255.0, color->common.blue / 255.0, 1.0);
cairo_new_path(handle.front_cairo);
for(i = 0; i < points_count; i++) {
if(i == 0) {
cairo_move_to(handle.front_cairo, points[i].x, points[i].y);
} else {
cairo_line_to(handle.front_cairo, points[i].x, points[i].y);
}
}
cairo_close_path(handle.front_cairo);
cairo_set_operator(handle.front_cairo, CAIRO_OPERATOR_SOURCE);
cairo_fill(handle.front_cairo);
cairo_set_operator(handle.front_cairo, CAIRO_OPERATOR_OVER);
};
void MwLLCairoLine(struct _MwLLCairo handle, MwPoint* points, MwLLColor color) {
int i;
cairo_set_antialias(handle.front_cairo, CAIRO_ANTIALIAS_NONE);
cairo_set_line_cap(handle.front_cairo, CAIRO_LINE_CAP_SQUARE);
cairo_set_source_rgba(handle.front_cairo, color->common.red / 255.0, color->common.green / 255.0, color->common.blue / 255.0, 1.0);
cairo_new_path(handle.front_cairo);
for(i = 0; i < 2; i++) {
if(i == 0) {
cairo_move_to(handle.front_cairo, points[i].x, points[i].y);
} else {
cairo_line_to(handle.front_cairo, points[i].x, points[i].y);
}
}
cairo_close_path(handle.front_cairo);
cairo_stroke(handle.front_cairo);
};
MwLLPixmap MwLLCairoCreatePixmap(struct _MwLLCairo handle, unsigned char* data, int width, int height) {
MwLLPixmap r = malloc(sizeof(*r));
(void)handle;
if(width >= INT16_MAX) width = INT16_MAX;
if(height >= INT16_MAX) height = INT16_MAX;
r->common.width = width;
r->common.height = height;
r->common.raw = malloc(4 * width * height);
memcpy(r->common.raw, data, 4 * width * height);
r->wayland.cs = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, width, height);
MwLLPixmapUpdate(r);
return r;
}
void MwLLCairoPixmapUpdate(MwLLPixmap r) {
int i;
unsigned char* d;
cairo_surface_flush(r->wayland.cs);
d = cairo_image_surface_get_data(r->wayland.cs);
for(i = 0; i < r->common.width * r->common.height * 4; i += 4) {
MwU32* p = (MwU32*)&d[i];
*p <<= 8;
*p |= r->common.raw[i + 3];
*p <<= 8;
*p |= r->common.raw[i + 0];
*p <<= 8;
*p |= r->common.raw[i + 1];
*p <<= 8;
*p |= r->common.raw[i + 2];
}
cairo_surface_mark_dirty(r->wayland.cs);
}
void MwLLCairoDestroyPixmap(MwLLPixmap pixmap) {
cairo_surface_destroy(pixmap->wayland.cs);
free(pixmap->common.raw);
free(pixmap);
}
void MwLLCairoDrawPixmap(struct _MwLLCairo handle, MwRect* rect, MwLLPixmap pixmap) {
cairo_t* c;
cairo_surface_t* cs;
cairo_t* selected_cairo = handle.selected_cairo ? handle.selected_cairo : handle.front_cairo;
cs = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, rect->width, rect->height);
c = cairo_create(cs);
if(rect->width <= 0 || rect->height <= 0 || pixmap->common.width <= 0 || pixmap->common.height <= 0) return;
if(rect->width >= INT16_MAX) rect->width = INT16_MAX;
if(rect->height >= INT16_MAX) rect->height = INT16_MAX;
cairo_scale(c, (double)rect->width / pixmap->common.width, (double)rect->height / pixmap->common.height);
cairo_set_source_surface(c, pixmap->cairo.cs, 0, 0);
cairo_pattern_set_filter(cairo_get_source(c), CAIRO_FILTER_NEAREST);
cairo_set_operator(handle.front_cairo, CAIRO_OPERATOR_OVER);
cairo_paint(c);
cairo_set_source_surface(selected_cairo, cs, rect->x, rect->y);
cairo_paint(selected_cairo);
cairo_destroy(c);
cairo_surface_destroy(cs);
};
void MwLLCairoFrontSetup(struct _MwLLCairo* cairo, MwU8* data, MwU32 width, MwU32 height) {
if(data) {
cairo->front_cs = cairo_image_surface_create_for_data(data, CAIRO_FORMAT_ARGB32, width, height, width * 4);
} else {
cairo->front_cs = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, width, height);
}
cairo->front_cairo = cairo_create(cairo->front_cs);
}
void MwLLCairoBackSetup(struct _MwLLCairo* cairo, MwU8* data, MwU32 width, MwU32 height) {
if(data) {
cairo->back_cs = cairo_image_surface_create_for_data(data, CAIRO_FORMAT_ARGB32, width, height, width * 4);
} else {
cairo->back_cs = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, width, height);
}
cairo->back_cairo = cairo_create(cairo->back_cs);
}
void MwLLCairoFrontDestroy(struct _MwLLCairo* cairo) {
cairo_destroy(cairo->front_cairo);
cairo_surface_destroy(cairo->front_cs);
};
void MwLLCairoBackDestroy(struct _MwLLCairo* cairo) {
cairo_destroy(cairo->back_cairo);
cairo_surface_destroy(cairo->back_cs);
};
void MwLLCairoDestroy(struct _MwLLCairo handle) {
// MwLLCairoFrontDestroy(&handle);
// MwLLCairoBackDestroy(&handle);
}
static MwLL MwLLCreateImpl(MwLL parent, int x, int y, int width, int height) {
MwLL r;
r = malloc(sizeof(*r));
memset(r, 0, sizeof(*r));
MwLLCreateCommon(r);
r->cairo.width = width;
r->cairo.height = height;
r->cairo.x = x;
r->cairo.y = x;
r->cairo.toplevel = !parent;
r->cairo.parent = parent;
MwLLCairoFrontSetup(&r->cairo, NULL, r->cairo.width, r->cairo.height);
MwLLCairoBackSetup(&r->cairo, NULL, r->cairo.width, r->cairo.height);
return r;
}
static void MwLLDestroyImpl(MwLL handle) {
MwLLCairoDestroy(handle->cairo);
free(handle);
}
static void MwLLBeginDrawImpl(MwLL handle) {
handle->cairo.selected_cairo = handle->cairo.front_cairo;
}
static void MwLLEndDrawImpl(MwLL handle) {
}
static void MwLLPolygonImpl(MwLL handle, MwPoint* points, int points_count, MwLLColor color) {
MwLLCairoPolygon(handle->cairo, points, points_count, color);
}
static void MwLLLineImpl(MwLL handle, MwPoint* points, MwLLColor color) {
MwLLCairoLine(handle->cairo, points, color);
}
static MwLLColor MwLLAllocColorImpl(MwLL handle, int r, int g, int b) {
MwLLColor c = malloc(sizeof(*c));
MwLLColorUpdate(handle, c, r, g, b);
return c;
}
static void MwLLColorUpdateImpl(MwLL handle, MwLLColor c, int r, int g, int b) {
(void)handle;
c->common.red = r;
c->common.green = g;
c->common.blue = b;
}
static void MwLLGetXYWHImpl(MwLL handle, int* x, int* y, unsigned int* w, unsigned int* h) {
(void)handle;
*x = handle->cairo.x;
*y = handle->cairo.y;
*w = handle->cairo.width;
*h = handle->cairo.height;
}
static void MwLLSetXYImpl(MwLL handle, int x, int y) {
handle->cairo.x = x;
handle->cairo.y = y;
}
static void MwLLSetWHImpl(MwLL handle, int w, int h) {
handle->cairo.width = w;
handle->cairo.height = h;
}
static void MwLLFreeColorImpl(MwLLColor color) {}
static MwBool lmao = MwFALSE;
static int MwLLPendingImpl(MwLL handle) {
lmao = !lmao;
return lmao;
}
static void MwLLNextEventImpl(MwLL handle) {
MwLLDispatch(handle, draw, NULL);
}
static void MwLLSetTitleImpl(MwLL handle, const char* title) {}
static MwLLPixmap MwLLCreatePixmapImpl(MwLL handle, unsigned char* data, int width, int height) {
return MwLLCairoCreatePixmap(handle->cairo, data, width, height);
}
static void MwLLPixmapUpdateImpl(MwLLPixmap r) {
MwLLCairoPixmapUpdate(r);
}
static void MwLLDestroyPixmapImpl(MwLLPixmap pixmap) {
MwLLCairoPixmapUpdate(pixmap);
}
static void MwLLDrawPixmapImpl(MwLL handle, MwRect* rect, MwLLPixmap pixmap) {
MwLLCairoDrawPixmap(handle->cairo, rect, pixmap);
}
static void MwLLSetIconImpl(MwLL handle, MwLLPixmap pixmap) {}
static void MwLLForceRenderImpl(MwLL handle) {}
static void MwLLSetCursorImpl(MwLL handle, MwCursor* image, MwCursor* mask) {}
static void MwLLDetachImpl(MwLL handle, MwPoint* point) {}
static void MwLLShowImpl(MwLL handle, int show) {}
static void MwLLMakePopupImpl(MwLL handle, MwLL parent) {}
static void MwLLSetSizeHintsImpl(MwLL handle, int minx, int miny, int maxx, int maxy) {}
static void MwLLMakeBorderlessImpl(MwLL handle, int toggle) {}
static void MwLLFocusImpl(MwLL handle) {}
static void MwLLGrabPointerImpl(MwLL handle, int toggle) {}
static void MwLLSetClipboardImpl(MwLL handle, const char* text, int clipboard_type) {}
static void MwLLGetClipboardImpl(MwLL handle, int clipboard_type) {}
static void MwLLMakeToolWindowImpl(MwLL handle) {}
static void MwLLGetCursorCoordImpl(MwLL handle, MwPoint* point) {}
static void MwLLGetScreenSizeImpl(MwLL handle, MwRect* rect) {}
static void MwLLBeginStateChangeImpl(MwLL handle) {}
static void MwLLEndStateChangeImpl(MwLL handle) {}
static void MwLLSetDarkThemeImpl(MwLL handle, int toggle) {}
static MwBool MwLLDoModernImpl(MwLL handle) {
return MwFALSE;
}
static void MwLLRaiseImpl(MwLL handle) {}
static void MwLLClipImpl(MwLL handle, MwRect* rect) {}
static void MwLLSetupDragAndDropImpl(MwLL handle) {}
static int MwLLCairoCallInitImpl(void) {
if(cairo_load_funcs() != 0) {
return 1;
}
return 0;
}
#include "call.c"
CALL(Cairo);

View file

@ -52,15 +52,10 @@
MwLLSetClipboard = MwLLSetClipboardImpl; \
MwLLGetClipboard = MwLLGetClipboardImpl; \
\
MwLLGetCursorCoord = MwLLGetCursorCoordImpl; \
MwLLGetScreenSize = MwLLGetScreenSizeImpl; \
MwLLSetupDragAndDrop = MwLLSetupDragAndDropImpl; \
MwLLGetCursorCoord = MwLLGetCursorCoordImpl; \
MwLLGetScreenSize = MwLLGetScreenSizeImpl; \
\
MwLLSetDarkTheme = MwLLSetDarkThemeImpl; \
MwLLDoModern = MwLLDoModernImpl; \
\
MwLLRaise = MwLLRaiseImpl; \
\
MwLLClip = MwLLClipImpl; \
return 0; \
}

Some files were not shown because too many files have changed in this diff Show more